From: Vivek Goyal o struct genapic contains pointer to probe() function which is of type __init. Hence MODPOST generates warning if kernel is compiled with CONFIG_RELOCATABLE=y for i386. WARNING: vmlinux - Section mismatch: reference to .init.text: from .data between 'apic_summit' (at offset 0xc058b504) and 'apic_bigsmp' WARNING: vmlinux - Section mismatch: reference to .init.text: from .data between 'apic_bigsmp' (at offset 0xc058b5a4) and 'cpu.4471' WARNING: vmlinux - Section mismatch: reference to .init.text: from .data between 'apic_es7000' (at offset 0xc058b644) and 'apic_default' WARNING: vmlinux - Section mismatch: reference to .init.text: from .data between 'apic_default' (at offset 0xc058b6e4) and 'interrupt' o One of the possible options is to put special case check in MODPOST to not emit warnings for this case but I think it is not a very good option in terms of maintenance. o Another option is to make probe() function non __init. Anyway this function is really small so not freeing this memory after init is not a big deal. Secondly, from a programming perspective, probably genapic should not provide pointers to functions which have been freed as genapic is non __init and is used even after initialization is complete. Signed-off-by: Vivek Goyal Cc: "Eric W. Biederman" Cc: Andi Kleen Signed-off-by: Andrew Morton --- arch/i386/mach-generic/bigsmp.c | 2 +- arch/i386/mach-generic/default.c | 2 +- arch/i386/mach-generic/es7000.c | 2 +- arch/i386/mach-generic/summit.c | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff -puN arch/i386/mach-generic/bigsmp.c~i386-make-apic-probe-function-non-init arch/i386/mach-generic/bigsmp.c --- a/arch/i386/mach-generic/bigsmp.c~i386-make-apic-probe-function-non-init +++ a/arch/i386/mach-generic/bigsmp.c @@ -45,7 +45,7 @@ static struct dmi_system_id __initdata b }; -static __init int probe_bigsmp(void) +static int probe_bigsmp(void) { if (def_to_bigsmp) dmi_bigsmp = 1; diff -puN arch/i386/mach-generic/default.c~i386-make-apic-probe-function-non-init arch/i386/mach-generic/default.c --- a/arch/i386/mach-generic/default.c~i386-make-apic-probe-function-non-init +++ a/arch/i386/mach-generic/default.c @@ -18,7 +18,7 @@ #include /* should be called last. */ -static __init int probe_default(void) +static int probe_default(void) { return 1; } diff -puN arch/i386/mach-generic/es7000.c~i386-make-apic-probe-function-non-init arch/i386/mach-generic/es7000.c --- a/arch/i386/mach-generic/es7000.c~i386-make-apic-probe-function-non-init +++ a/arch/i386/mach-generic/es7000.c @@ -19,7 +19,7 @@ #include #include -static __init int probe_es7000(void) +static int probe_es7000(void) { /* probed later in mptable/ACPI hooks */ return 0; diff -puN arch/i386/mach-generic/summit.c~i386-make-apic-probe-function-non-init arch/i386/mach-generic/summit.c --- a/arch/i386/mach-generic/summit.c~i386-make-apic-probe-function-non-init +++ a/arch/i386/mach-generic/summit.c @@ -18,7 +18,7 @@ #include #include -static __init int probe_summit(void) +static int probe_summit(void) { /* probed later in mptable/ACPI hooks */ return 0; _