From c5c405ffe7a4ec24d2ff703adfb4294413f7f1d5 Mon Sep 17 00:00:00 2001 From: Sepherosa Ziehau Date: Wed, 9 Mar 2011 21:07:28 +0800 Subject: [PATCH] lapic: Record the max LAPIC APIC ID --- sys/platform/pc32/apic/mpapic.c | 1 + sys/platform/pc32/i386/mp_machdep.c | 3 +++ sys/platform/pc32/include/smp.h | 1 + sys/platform/pc64/apic/mpapic.c | 1 + sys/platform/pc64/include/smp.h | 1 + sys/platform/pc64/x86_64/mp_machdep.c | 3 +++ 6 files changed, 10 insertions(+) diff --git a/sys/platform/pc32/apic/mpapic.c b/sys/platform/pc32/apic/mpapic.c index 136556dad1..57fce94e51 100644 --- a/sys/platform/pc32/apic/mpapic.c +++ b/sys/platform/pc32/apic/mpapic.c @@ -90,6 +90,7 @@ static const uint32_t lapic_timer_divisors[] = { }; #define APIC_TIMER_NDIVISORS (int)(NELEM(lapic_timer_divisors)) +int lapic_id_max; /* * Enable LAPIC, configure interrupts. diff --git a/sys/platform/pc32/i386/mp_machdep.c b/sys/platform/pc32/i386/mp_machdep.c index ae87735a56..be83a34390 100644 --- a/sys/platform/pc32/i386/mp_machdep.c +++ b/sys/platform/pc32/i386/mp_machdep.c @@ -1542,6 +1542,9 @@ mp_set_cpuids(int cpu_id, int apic_id) { CPU_TO_ID(cpu_id) = apic_id; ID_TO_CPU(apic_id) = cpu_id; + + if (apic_id > lapic_id_max) + lapic_id_max = apic_id; } static int diff --git a/sys/platform/pc32/include/smp.h b/sys/platform/pc32/include/smp.h index acf5ee7be2..41deb994cd 100644 --- a/sys/platform/pc32/include/smp.h +++ b/sys/platform/pc32/include/smp.h @@ -140,6 +140,7 @@ struct ioapic_enumerator { /* global data in mpapic.c */ extern volatile lapic_t lapic; extern volatile ioapic_t **ioapic; +extern int lapic_id_max; /* functions in mpapic.c */ void apic_dump (char*); diff --git a/sys/platform/pc64/apic/mpapic.c b/sys/platform/pc64/apic/mpapic.c index f11fd1d9f4..a32b987fe5 100644 --- a/sys/platform/pc64/apic/mpapic.c +++ b/sys/platform/pc64/apic/mpapic.c @@ -91,6 +91,7 @@ static const uint32_t lapic_timer_divisors[] = { }; #define APIC_TIMER_NDIVISORS (int)(NELEM(lapic_timer_divisors)) +int lapic_id_max; void lapic_eoi(void) diff --git a/sys/platform/pc64/include/smp.h b/sys/platform/pc64/include/smp.h index de432e7d9a..ad2d2e5ec6 100644 --- a/sys/platform/pc64/include/smp.h +++ b/sys/platform/pc64/include/smp.h @@ -150,6 +150,7 @@ struct ioapic_enumerator { /* global data in mpapic.c */ extern volatile lapic_t *lapic; extern volatile ioapic_t **ioapic; +extern int lapic_id_max; /* functions in mpapic.c */ void apic_dump (char*); diff --git a/sys/platform/pc64/x86_64/mp_machdep.c b/sys/platform/pc64/x86_64/mp_machdep.c index 161995b465..e0fa588285 100644 --- a/sys/platform/pc64/x86_64/mp_machdep.c +++ b/sys/platform/pc64/x86_64/mp_machdep.c @@ -1567,6 +1567,9 @@ mp_set_cpuids(int cpu_id, int apic_id) { CPU_TO_ID(cpu_id) = apic_id; ID_TO_CPU(apic_id) = cpu_id; + + if (apic_id > lapic_id_max) + lapic_id_max = apic_id; } static int -- 2.41.0