* Re: CONFIG_X86_ES7000=y, CONFIG_X86_GENERICARCH=n, CONFIG_ACPI=y build broken [not found] <19D0D50E9B1D0A40A9F0323DBFA04ACC023B0EB9@USRV-EXCH4.na.uis.unisys.com> @ 2007-06-13 22:22 ` Natalie Protasevich 2007-06-15 15:29 ` Vivek Goyal 0 siblings, 1 reply; 9+ messages in thread From: Natalie Protasevich @ 2007-06-13 22:22 UTC (permalink / raw) To: linux-kernel, rdreier, akpm, vgoyal > > 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 actually don't have anything remotely like ES7000 iether. I just > found the problem while tracking down another randconfig failure. > > > Subarch build procedure is not straightforward and this patch adds to > the > > misery. Please suggest if there is a better way of handling things. > > > +/* > > + * 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 > > Seems it would be cleaner to figure out some way to build es7000.c for > if CONFIG_X86_ES7000 is set? Or just move them here all the time? > > > --- > linux-2.6.22-rc4-git4/include/asm-i386/mach-es7000/mach_mpparse.h~i386-e > s7000-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 > > It seems that this #ifndef is not needed -- even if there is another > declaration of these functions that is visible, the signatures should > match so it should be OK. I just finished my test builds with and without GENERIC, so I can suggest just move all functions to arch/i386/mach-es7000/es7000plat.c - es7000_sw_apic() ,es7000_enable_apic_mode(),acpi_madt_oem_check(), mps_oem_check() and make them non-static - from arch/i386/mach-generic/es7000.c and I think I externed couple things in asm/mach-es7000/mach_apic.h. So the file arch/i386/mach-generic/es7000.c looks very simple: /* * APIC driver for the Unisys ES7000 chipset. */ #define APIC_DEFINITION 1 #include <linux/threads.h> #include <linux/cpumask.h> #include <asm/smp.h> #include <asm/mpspec.h> #include <asm/genapic.h> #include <asm/fixmap.h> #include <asm/apicdef.h> #include <linux/kernel.h> #include <linux/string.h> #include <linux/smp.h> #include <linux/init.h> #include <asm/mach-es7000/mach_apicdef.h> #include <asm/mach-es7000/mach_apic.h> #include <asm/mach-es7000/mach_ipi.h> #include <asm/mach-es7000/mach_mpparse.h> #include <asm/mach-es7000/mach_wakecpu.h> static int probe_es7000(void) { /* probed later in mptable/ACPI hooks */ return 0; } struct genapic apic_es7000 = APIC_INIT("es7000", probe_es7000); and no ifdefs. Sorry for this skimpy description without actual patch... I can send a patch later on, or you guys can try it yourselves :) sorry have such a tight time this afternoon, only can back to my computer after 7-8 pm... Regards, --Natalie ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: CONFIG_X86_ES7000=y, CONFIG_X86_GENERICARCH=n, CONFIG_ACPI=y build broken 2007-06-13 22:22 ` CONFIG_X86_ES7000=y, CONFIG_X86_GENERICARCH=n, CONFIG_ACPI=y build broken Natalie Protasevich @ 2007-06-15 15:29 ` Vivek Goyal 2007-06-15 17:27 ` Natalie Protasevich 0 siblings, 1 reply; 9+ messages in thread From: Vivek Goyal @ 2007-06-15 15:29 UTC (permalink / raw) To: Natalie Protasevich; +Cc: linux-kernel, rdreier, akpm On Wed, Jun 13, 2007 at 03:22:55PM -0700, Natalie Protasevich wrote: [..] > >Seems it would be cleaner to figure out some way to build es7000.c for > >if CONFIG_X86_ES7000 is set? Or just move them here all the time? > > > > > --- > >linux-2.6.22-rc4-git4/include/asm-i386/mach-es7000/mach_mpparse.h~i386-e > >s7000-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 > > > >It seems that this #ifndef is not needed -- even if there is another > >declaration of these functions that is visible, the signatures should > >match so it should be OK. > > I just finished my test builds with and without GENERIC, so I can > suggest just move all functions to arch/i386/mach-es7000/es7000plat.c > - es7000_sw_apic() ,es7000_enable_apic_mode(),acpi_madt_oem_check(), > mps_oem_check() and make them non-static - from > arch/i386/mach-generic/es7000.c I think this will also break with CONFIG_X86_GENERIC=y. The moment you make es7000 specific acpi_madt_oem_check() non static, It will conflict with generic definition present in mach-generic/probe.c. That function is a generic function designed to probe for underlying subarch. Thanks Vivek ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: CONFIG_X86_ES7000=y, CONFIG_X86_GENERICARCH=n, CONFIG_ACPI=y build broken 2007-06-15 15:29 ` Vivek Goyal @ 2007-06-15 17:27 ` Natalie Protasevich 0 siblings, 0 replies; 9+ messages in thread From: Natalie Protasevich @ 2007-06-15 17:27 UTC (permalink / raw) To: vgoyal; +Cc: linux-kernel, rdreier, akpm On 6/15/07, Vivek Goyal <vgoyal@in.ibm.com> wrote: > On Wed, Jun 13, 2007 at 03:22:55PM -0700, Natalie Protasevich wrote: > [..] > > >Seems it would be cleaner to figure out some way to build es7000.c for > > >if CONFIG_X86_ES7000 is set? Or just move them here all the time? > > > > > > > --- > > >linux-2.6.22-rc4-git4/include/asm-i386/mach-es7000/mach_mpparse.h~i386-e > > >s7000-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 > > > > > >It seems that this #ifndef is not needed -- even if there is another > > >declaration of these functions that is visible, the signatures should > > >match so it should be OK. > > > > I just finished my test builds with and without GENERIC, so I can > > suggest just move all functions to arch/i386/mach-es7000/es7000plat.c > > - es7000_sw_apic() ,es7000_enable_apic_mode(),acpi_madt_oem_check(), > > mps_oem_check() and make them non-static - from > > arch/i386/mach-generic/es7000.c > > I think this will also break with CONFIG_X86_GENERIC=y. The moment you > make es7000 specific acpi_madt_oem_check() non static, It will conflict > with generic definition present in mach-generic/probe.c. That function is > a generic function designed to probe for underlying subarch. I am not sure why it needs to be static, since the genapic structure in include/asm-i386/ just being a switch table for the corresponding functions of the right type. It compiles for me, and i just need to extern those in include/asm/mach-es7000/mach_apic.h: ... extern void es7000_sw_apic(void); extern void __init enable_apic_mode(void); extern __init int mps_oem_check(struct mp_config_table *mpc, char *oem, char *productid); extern int __init acpi_madt_oem_check(char *oem_id, char *oem_table_id); ... or do this in mach_mpparse.h - wherever I removed them from. I apologize again, will make a descent patch shortly just so we can look closer and evaluate possible approach. Regards, --Natalie ^ permalink raw reply [flat|nested] 9+ messages in thread
[parent not found: <19D0D50E9B1D0A40A9F0323DBFA04ACC023B0EBD@USRV-EXCH4.na.uis.unisys.com>]
* RE: CONFIG_X86_ES7000=y, CONFIG_X86_GENERICARCH=n, CONFIG_ACPI=y build broken [not found] <19D0D50E9B1D0A40A9F0323DBFA04ACC023B0EBD@USRV-EXCH4.na.uis.unisys.com> @ 2007-06-17 14:34 ` Natalie Protasevich 0 siblings, 0 replies; 9+ messages in thread From: Natalie Protasevich @ 2007-06-17 14:34 UTC (permalink / raw) To: vgoyal, linux-kernel, rdreier, akpm > On Wed, Jun 13, 2007 at 01:39:29PM -0700, Roland Dreier wrote: > > > 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 actually don't have anything remotely like ES7000 iether. I just > > found the problem while tracking down another randconfig failure. > > > > > Subarch build procedure is not straightforward and this patch adds > to the > > > misery. Please suggest if there is a better way of handling things. > > > > > +/* > > > + * 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 > > > > Seems it would be cleaner to figure out some way to build es7000.c for > > if CONFIG_X86_ES7000 is set? Or just move them here all the time? > > > > > --- > linux-2.6.22-rc4-git4/include/asm-i386/mach-es7000/mach_mpparse.h~i386-e > s7000-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 > > > > It seems that this #ifndef is not needed -- even if there is another > > declaration of these functions that is visible, the signatures should > > match so it should be OK. > > > > Compiler does throw warning as one set of functions is static and > other is not. > > arch/i386/mach-generic/es7000.c:37: warning: static declaration of > 'mps_oem_check' follows non-static declaration > include/asm/mach-es7000/mach_mpparse.h:23: warning: previous declaration > of 'mps_oem_check' was here > arch/i386/mach-generic/es7000.c:50: warning: static declaration of > 'acpi_madt_oem_check' follows non-static declaration > include/asm/mach-es7000/mach_mpparse.h:21: warning: previous declaration > of 'acpi_madt_oem_check' was here Here is the patch that does work - but... I do have warnings that I haven't noticed initially when compile for ES7000 case: ... CC arch/i386/kernel/acpi/boot.o include/asm-i386/mach-es7000/mach_mpparse.h:56: warning: 'mps_oem_check' defined but not used CC arch/i386/kernel/mpparse.o ... include/asm-i386/mach-es7000/mach_mpparse.h:35: warning: 'acpi_madt_oem_check' defined but not used CC arch/i386/kernel/apic.o ... CC arch/i386/kernel/nmi.o I'm afraid I will have to do something ugly or ifdef to get rid of this warning, so I guess I'd rather take yours, Vivec :) since it compiles and runs cleanly. Thanks! --Natalie --------------------------------------------------------------------------------- diff -Naur linux-2.6/arch/i386/mach-es7000/es7000plat.c linux-2.6-mod/arch/i386/mach-es7000/es7000plat.c--- linux-2.6/arch/i386/mach-es7000/es7000plat.c 2007-06-12 21:16:15.000000000 -0700 +++ linux-2.6-mod/arch/i386/mach-es7000/es7000plat.c 2007-06-17 06:56:49.000000000 -0700 @@ -277,3 +277,11 @@ return; } } + +void __init +enable_apic_mode(void) +{ + es7000_sw_apic(); + return; +} + diff -Naur linux-2.6/arch/i386/mach-generic/es7000.c linux-2.6-mod/arch/i386/mach-generic/es7000.c --- linux-2.6/arch/i386/mach-generic/es7000.c 2007-06-12 21:16:15.000000000 -0700 +++ linux-2.6-mod/arch/i386/mach-generic/es7000.c 2007-06-17 06:57:20.000000000 -0700 @@ -26,44 +26,6 @@ } extern void es7000_sw_apic(void); -static void __init enable_apic_mode(void) -{ - es7000_sw_apic(); - return; -} - -static __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 */ -static 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 -static int __init acpi_madt_oem_check(char *oem_id, char *oem_table_id) -{ - return 0; -} -#endif +extern void enable_apic_mode(void); struct genapic apic_es7000 = APIC_INIT("es7000", probe_es7000); diff -Naur linux-2.6/include/asm-i386/mach-es7000/mach_apic.h linux-2.6-mod/include/asm-i386/mach-es7000/mach_apic.h --- linux-2.6/include/asm-i386/mach-es7000/mach_apic.h 2007-06-12 21:16:18.000000000 -0700 +++ linux-2.6-mod/include/asm-i386/mach-es7000/mach_apic.h 2007-06-17 06:51:48.000000000 -0700 @@ -199,4 +199,6 @@ return cpuid_apic >> index_msb; } +extern void enable_apic_mode(void); + #endif /* __ASM_MACH_APIC_H */ diff -Naur linux-2.6/include/asm-i386/mach-es7000/mach_mpparse.h linux-2.6-mod/include/asm-i386/mach-es7000/mach_mpparse.h --- linux-2.6/include/asm-i386/mach-es7000/mach_mpparse.h 2007-06-12 21:16:18.000000000 -0700 +++ linux-2.6-mod/include/asm-i386/mach-es7000/mach_mpparse.h 2007-06-17 06:54:54.000000000 -0700 @@ -29,6 +29,38 @@ return 1; return 0; } + +/* Hook from generic ACPI tables.c */ +static 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; + } + } #endif +static __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; +} + #endif /* __ASM_MACH_MPPARSE_H */ ^ permalink raw reply [flat|nested] 9+ messages in thread
[parent not found: <19D0D50E9B1D0A40A9F0323DBFA04ACC023B0EB8@USRV-EXCH4.na.uis.unisys.com>]
[parent not found: <32209efe0706131107w157fd59bk22f1fe62e4d1c733@mail.gmail.com>]
* RE: CONFIG_X86_ES7000=y, CONFIG_X86_GENERICARCH=n, CONFIG_ACPI=y build broken [not found] ` <32209efe0706131107w157fd59bk22f1fe62e4d1c733@mail.gmail.com> @ 2007-06-13 18:53 ` Natalie Protasevich 0 siblings, 0 replies; 9+ messages in thread From: Natalie Protasevich @ 2007-06-13 18:53 UTC (permalink / raw) To: linux-kernel > From: Vivek Goyal [mailto:vgoyal@in.ibm.com] > Sent: Wednesday, June 13, 2007 11:38 AM > To: Roland Dreier > Cc: linux-kernel@vger.kernel.org; Protasevich, Natalie; > akpm@linux-foundation.org > Subject: Re: CONFIG_X86_ES7000=y, CONFIG_X86_GENERICARCH=n, > CONFIG_ACPI=y build broken > > 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. > > > Vivek, I also have a patch that seems to work... I did remove the functions from mach-generic/es7000.c and added them same place you did, so the code is not duplicated and I didn't have to make any ifdefs. As soon as your patch works though I think it's fine. Thanks, --Natalie > 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 <vgoyal@in.ibm.com> > --- > > 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-bui > ld-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-es70 > 00-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-f > ix include/asm-i386/mach-es7000/mach_mpparse.h > --- > linux-2.6.22-rc4-git4/include/asm-i386/mach-es7000/mach_mpparse.h~i386-e > s7000-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) > _ > ^ permalink raw reply [flat|nested] 9+ messages in thread
* CONFIG_X86_ES7000=y, CONFIG_X86_GENERICARCH=n, CONFIG_ACPI=y build broken @ 2007-06-12 19:13 Roland Dreier 2007-06-13 17:37 ` Vivek Goyal 0 siblings, 1 reply; 9+ messages in thread From: Roland Dreier @ 2007-06-12 19:13 UTC (permalink / raw) To: linux-kernel, Natalie.Protasevich, Vivek Goyal; +Cc: akpm (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. No patch because I don't understand how this subarch stuff is supposed to build :( - R. ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: CONFIG_X86_ES7000=y, CONFIG_X86_GENERICARCH=n, CONFIG_ACPI=y build broken 2007-06-12 19:13 Roland Dreier @ 2007-06-13 17:37 ` Vivek Goyal 2007-06-13 20:39 ` Roland Dreier 0 siblings, 1 reply; 9+ messages in thread From: Vivek Goyal @ 2007-06-13 17:37 UTC (permalink / raw) To: Roland Dreier; +Cc: linux-kernel, Natalie.Protasevich, akpm 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 <vgoyal@in.ibm.com> --- 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) _ ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: CONFIG_X86_ES7000=y, CONFIG_X86_GENERICARCH=n, CONFIG_ACPI=y build broken 2007-06-13 17:37 ` Vivek Goyal @ 2007-06-13 20:39 ` Roland Dreier 2007-06-15 15:57 ` Vivek Goyal 0 siblings, 1 reply; 9+ messages in thread From: Roland Dreier @ 2007-06-13 20:39 UTC (permalink / raw) To: vgoyal; +Cc: linux-kernel, Natalie.Protasevich, akpm > 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 actually don't have anything remotely like ES7000 iether. I just found the problem while tracking down another randconfig failure. > Subarch build procedure is not straightforward and this patch adds to the > misery. Please suggest if there is a better way of handling things. > +/* > + * 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 Seems it would be cleaner to figure out some way to build es7000.c for if CONFIG_X86_ES7000 is set? Or just move them here all the time? > --- 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 It seems that this #ifndef is not needed -- even if there is another declaration of these functions that is visible, the signatures should match so it should be OK. - R. ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: CONFIG_X86_ES7000=y, CONFIG_X86_GENERICARCH=n, CONFIG_ACPI=y build broken 2007-06-13 20:39 ` Roland Dreier @ 2007-06-15 15:57 ` Vivek Goyal 0 siblings, 0 replies; 9+ messages in thread From: Vivek Goyal @ 2007-06-15 15:57 UTC (permalink / raw) To: Roland Dreier; +Cc: linux-kernel, Natalie.Protasevich, akpm On Wed, Jun 13, 2007 at 01:39:29PM -0700, Roland Dreier wrote: > > 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 actually don't have anything remotely like ES7000 iether. I just > found the problem while tracking down another randconfig failure. > > > Subarch build procedure is not straightforward and this patch adds to the > > misery. Please suggest if there is a better way of handling things. > > > +/* > > + * 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 > > Seems it would be cleaner to figure out some way to build es7000.c for > if CONFIG_X86_ES7000 is set? Or just move them here all the time? > > > --- 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 > > It seems that this #ifndef is not needed -- even if there is another > declaration of these functions that is visible, the signatures should > match so it should be OK. > Compiler does throw warning as one set of functions is static and other is not. arch/i386/mach-generic/es7000.c:37: warning: static declaration of 'mps_oem_check' follows non-static declaration include/asm/mach-es7000/mach_mpparse.h:23: warning: previous declaration of 'mps_oem_check' was here arch/i386/mach-generic/es7000.c:50: warning: static declaration of 'acpi_madt_oem_check' follows non-static declaration include/asm/mach-es7000/mach_mpparse.h:21: warning: previous declaration of 'acpi_madt_oem_check' was here Thanks Vivek ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2007-06-17 14:35 UTC | newest] Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- [not found] <19D0D50E9B1D0A40A9F0323DBFA04ACC023B0EB9@USRV-EXCH4.na.uis.unisys.com> 2007-06-13 22:22 ` CONFIG_X86_ES7000=y, CONFIG_X86_GENERICARCH=n, CONFIG_ACPI=y build broken Natalie Protasevich 2007-06-15 15:29 ` Vivek Goyal 2007-06-15 17:27 ` Natalie Protasevich [not found] <19D0D50E9B1D0A40A9F0323DBFA04ACC023B0EBD@USRV-EXCH4.na.uis.unisys.com> 2007-06-17 14:34 ` Natalie Protasevich [not found] <19D0D50E9B1D0A40A9F0323DBFA04ACC023B0EB8@USRV-EXCH4.na.uis.unisys.com> [not found] ` <32209efe0706131107w157fd59bk22f1fe62e4d1c733@mail.gmail.com> 2007-06-13 18:53 ` Natalie Protasevich 2007-06-12 19:13 Roland Dreier 2007-06-13 17:37 ` Vivek Goyal 2007-06-13 20:39 ` Roland Dreier 2007-06-15 15:57 ` Vivek Goyal
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).