From: john stultz This patch fixes a circular dependency (a function in mach_apic.h requires hard_smp_processor_id() and hard_smp_processor_id() requires macros from mach_apic.h) that has been in the subarch code for a bit, but was hacked around with some #ifdefs. With the inclusion of the generic-subarch the hack was dropped and bigsmp and summit promptly broke. So this makes things compile again. include/asm-i386/mach-bigsmp/mach_apic.h | 17 +++++++++-------- include/asm-i386/mach-summit/mach_apic.h | 17 +++++++++-------- 2 files changed, 18 insertions(+), 16 deletions(-) diff -puN include/asm-i386/mach-bigsmp/mach_apic.h~subarch-circular-dependency-fix include/asm-i386/mach-bigsmp/mach_apic.h --- 25/include/asm-i386/mach-bigsmp/mach_apic.h~subarch-circular-dependency-fix 2003-05-17 14:09:28.000000000 -0700 +++ 25-akpm/include/asm-i386/mach-bigsmp/mach_apic.h 2003-05-17 14:09:28.000000000 -0700 @@ -40,10 +40,18 @@ static inline unsigned long check_apicid #define apicid_cluster(apicid) (apicid & 0xF0) +static inline unsigned get_apic_id(unsigned long x) +{ + return (((x)>>24)&0x0F); +} + +#define GET_APIC_ID(x) get_apic_id(x) + static inline unsigned long calculate_ldr(unsigned long old) { unsigned long id; - id = xapic_phys_to_log_apicid(hard_smp_processor_id()); + id = xapic_phys_to_log_apicid( + GET_APIC_LOGICAL_ID(*(unsigned long *)(APIC_BASE+APIC_LDR))); return ((old & ~APIC_LDR_MASK) | SET_APIC_LOGICAL_ID(id)); } @@ -129,13 +137,6 @@ static inline int check_phys_apicid_pres #define APIC_ID_MASK (0x0F<<24) -static inline unsigned get_apic_id(unsigned long x) -{ - return (((x)>>24)&0x0F); -} - -#define GET_APIC_ID(x) get_apic_id(x) - static inline unsigned int cpu_mask_to_apicid (unsigned long cpumask) { int num_bits_set; diff -puN include/asm-i386/mach-summit/mach_apic.h~subarch-circular-dependency-fix include/asm-i386/mach-summit/mach_apic.h --- 25/include/asm-i386/mach-summit/mach_apic.h~subarch-circular-dependency-fix 2003-05-17 14:09:28.000000000 -0700 +++ 25-akpm/include/asm-i386/mach-summit/mach_apic.h 2003-05-17 14:09:28.000000000 -0700 @@ -48,12 +48,20 @@ static inline unsigned long check_apicid extern u8 bios_cpu_apicid[]; +static inline unsigned get_apic_id(unsigned long x) +{ + return (((x)>>24)&0xFF); +} + +#define GET_APIC_ID(x) get_apic_id(x) + static inline void init_apic_ldr(void) { unsigned long val, id; if (x86_summit) - id = xapic_phys_to_log_apicid(hard_smp_processor_id()); + id = xapic_phys_to_log_apicid( + GET_APIC_ID(*(unsigned long *)(APIC_BASE+APIC_ID))); else id = 1UL << smp_processor_id(); apic_write_around(APIC_DFR, APIC_DFR_VALUE); @@ -137,13 +145,6 @@ static inline int check_phys_apicid_pres #define APIC_ID_MASK (0xFF<<24) -static inline unsigned get_apic_id(unsigned long x) -{ - return (((x)>>24)&0xFF); -} - -#define GET_APIC_ID(x) get_apic_id(x) - static inline unsigned int cpu_mask_to_apicid (unsigned long cpumask) { int num_bits_set; _