On Tue, Jun 12, 2007 at 12:13:50PM -0700, Roland Dreier wrote: > (sending to Vivek since he seems to be one of the last people to touch > this code) > > For some strange reason I found myself compiling a kernel with > CONFIG_X86_ES7000 and CONFIG_ACPI set and CONFIG_X86_GENERICARCH not > set. It died with > > arch/i386/kernel/built-in.o: In function `acpi_parse_madt': > boot.c:(.init.text+0x68b7): undefined reference to `acpi_madt_oem_check' > arch/i386/kernel/built-in.o: In function `get_smp_config': > (.init.text+0x9f98): undefined reference to `mps_oem_check' > arch/i386/kernel/built-in.o: In function `connect_bsp_APIC': > (.init.text+0xa340): undefined reference to `enable_apic_mode' > arch/i386/kernel/built-in.o: In function `connect_bsp_APIC': > (.init.text+0xa370): undefined reference to `enable_apic_mode' > > this seems to be because eg acpi_madt_oem_check() and mps_oem_check() > are defined in arch/i386/mach-generic/es7000.c, but arch/i386/Makefile > only goes into mach-generic if CONFIG_X86_GENERICARCH is set. > I didn't track down why enable_apic_mode is broken yet. >
Hi Roland, Can you please try the attached patch? I have compiled it with CONFIG_ES7000=y and CONFIG_X86_GENERICARCH=n. But don't have any ES7000 machine to test it. I have compiled and booted the kernel on my machine with CONFIG_X86_GENERICARCH=y. Subarch build procedure is not straightforward and this patch adds to the misery. Please suggest if there is a better way of handling things. o Commit 1833d6bc72893265f22addd79cf52e6987496e0f broke the build if compiled with CONFIG_ES7000=y and CONFIG_X86_GENERICARCH=n o Fix the build issue. Provided the definitions of missing functions. Signed-off-by: Vivek Goyal <[EMAIL PROTECTED]> --- linux-2.6.22-rc4-git4-vivek/arch/i386/mach-es7000/es7000plat.c | 48 ++++++++++ linux-2.6.22-rc4-git4-vivek/include/asm-i386/mach-es7000/mach_apic.h | 4 linux-2.6.22-rc4-git4-vivek/include/asm-i386/mach-es7000/mach_mpparse.h | 6 + 3 files changed, 58 insertions(+) diff -puN arch/i386/mach-es7000/es7000plat.c~i386-es7000-build-breakage-fix arch/i386/mach-es7000/es7000plat.c --- linux-2.6.22-rc4-git4/arch/i386/mach-es7000/es7000plat.c~i386-es7000-build-breakage-fix 2007-06-13 22:52:14.000000000 +0530 +++ linux-2.6.22-rc4-git4-vivek/arch/i386/mach-es7000/es7000plat.c 2007-06-13 22:53:03.000000000 +0530 @@ -40,6 +40,7 @@ #include <asm/smp.h> #include <asm/apicdef.h> #include "es7000.h" +#include <mach_mpparse.h> /* * ES7000 Globals @@ -174,6 +175,53 @@ find_unisys_acpi_oem_table(unsigned long } #endif +/* + * This file also gets compiled if CONFIG_X86_GENERICARCH is set. Generic + * arch already has got following function definitions (asm-generic/es7000.c) + * hence no need to define these for that case. + */ +#ifndef CONFIG_X86_GENERICARCH +void es7000_sw_apic(void); +void __init enable_apic_mode(void) +{ + es7000_sw_apic(); + return; +} + +__init int mps_oem_check(struct mp_config_table *mpc, char *oem, + char *productid) +{ + if (mpc->mpc_oemptr) { + struct mp_config_oemtable *oem_table = + (struct mp_config_oemtable *)mpc->mpc_oemptr; + if (!strncmp(oem, "UNISYS", 6)) + return parse_unisys_oem((char *)oem_table); + } + return 0; +} +#ifdef CONFIG_ACPI +/* Hook from generic ACPI tables.c */ +int __init acpi_madt_oem_check(char *oem_id, char *oem_table_id) +{ + unsigned long oem_addr; + if (!find_unisys_acpi_oem_table(&oem_addr)) { + if (es7000_check_dsdt()) + return parse_unisys_oem((char *)oem_addr); + else { + setup_unisys(); + return 1; + } + } + return 0; +} +#else +int __init acpi_madt_oem_check(char *oem_id, char *oem_table_id) +{ + return 0; +} +#endif +#endif /* COFIG_X86_GENERICARCH */ + static void es7000_spin(int n) { diff -puN include/asm-i386/mach-es7000/mach_apic.h~i386-es7000-build-breakage-fix include/asm-i386/mach-es7000/mach_apic.h --- linux-2.6.22-rc4-git4/include/asm-i386/mach-es7000/mach_apic.h~i386-es7000-build-breakage-fix 2007-06-13 22:52:14.000000000 +0530 +++ linux-2.6.22-rc4-git4-vivek/include/asm-i386/mach-es7000/mach_apic.h 2007-06-13 22:52:14.000000000 +0530 @@ -73,6 +73,10 @@ static inline void init_apic_ldr(void) apic_write_around(APIC_LDR, val); } +#ifndef CONFIG_X86_GENERICARCH +extern void enable_apic_mode(void); +#endif + extern int apic_version [MAX_APICS]; static inline void setup_apic_routing(void) { diff -puN include/asm-i386/mach-es7000/mach_mpparse.h~i386-es7000-build-breakage-fix include/asm-i386/mach-es7000/mach_mpparse.h --- linux-2.6.22-rc4-git4/include/asm-i386/mach-es7000/mach_mpparse.h~i386-es7000-build-breakage-fix 2007-06-13 22:52:14.000000000 +0530 +++ linux-2.6.22-rc4-git4-vivek/include/asm-i386/mach-es7000/mach_mpparse.h 2007-06-13 22:52:14.000000000 +0530 @@ -18,6 +18,12 @@ extern int parse_unisys_oem (char *oempt extern int find_unisys_acpi_oem_table(unsigned long *oem_addr); extern void setup_unisys(void); +#ifndef CONFIG_X86_GENERICARCH +extern int acpi_madt_oem_check(char *oem_id, char *oem_table_id); +extern int mps_oem_check(struct mp_config_table *mpc, char *oem, + char *productid); +#endif + #ifdef CONFIG_ACPI static inline int es7000_check_dsdt(void) _ - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/