Commit 1833d6bc72893265f22addd79cf52e6987496e0f
Committed by
Andi Kleen
1 parent
e073ae1b34
Exists in
master
and in
7 other branches
[PATCH] i386: modpost apic related warning fixes
o Modpost generates warnings for i386 if compiled with CONFIG_RELOCATABLE=y WARNING: vmlinux - Section mismatch: reference to .init.text:find_unisys_acpi_oem_table from .text between 'acpi_madt_oem_check' (at offset 0xc0101eda) and 'enable_apic_mode' WARNING: vmlinux - Section mismatch: reference to .init.text:acpi_get_table_header_early from .text between 'acpi_madt_oem_check' (at offset 0xc0101ef0) and 'enable_apic_mode' WARNING: vmlinux - Section mismatch: reference to .init.text:parse_unisys_oem from .text between 'acpi_madt_oem_check' (at offset 0xc0101f2e) and 'enable_apic_mode' WARNING: vmlinux - Section mismatch: reference to .init.text:setup_unisys from .text between 'acpi_madt_oem_check' (at offset 0xc0101f37) and 'enable_apic_mode'WARNING: vmlinux - Section mismatch: reference to .init.text:parse_unisys_oem from .text between 'mps_oem_check' (at offset 0xc0101ec7) and 'acpi_madt_oem_check' WARNING: vmlinux - Section mismatch: reference to .init.text:es7000_sw_apic from .text between 'enable_apic_mode' (at offset 0xc0101f48) and 'check_apicid_present' o Some functions which are inline (acpi_madt_oem_check) are not inlined by compiler as these functions are accessed using function pointer. These functions are put in .text section and they in-turn access __init type functions hence modpost generates warnings. o Do not iniline acpi_madt_oem_check, instead make it __init. Signed-off-by: Vivek Goyal <vgoyal@in.ibm.com> Signed-off-by: Andi Kleen <ak@suse.de> Cc: Andi Kleen <ak@suse.de> Cc: Len Brown <lenb@kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Showing 4 changed files with 42 additions and 39 deletions Side-by-side Diff
arch/i386/mach-generic/es7000.c
... | ... | @@ -25,5 +25,46 @@ |
25 | 25 | return 0; |
26 | 26 | } |
27 | 27 | |
28 | +extern void es7000_sw_apic(void); | |
29 | +static void __init enable_apic_mode(void) | |
30 | +{ | |
31 | + es7000_sw_apic(); | |
32 | + return; | |
33 | +} | |
34 | + | |
35 | +static __init int mps_oem_check(struct mp_config_table *mpc, char *oem, | |
36 | + char *productid) | |
37 | +{ | |
38 | + if (mpc->mpc_oemptr) { | |
39 | + struct mp_config_oemtable *oem_table = | |
40 | + (struct mp_config_oemtable *)mpc->mpc_oemptr; | |
41 | + if (!strncmp(oem, "UNISYS", 6)) | |
42 | + return parse_unisys_oem((char *)oem_table); | |
43 | + } | |
44 | + return 0; | |
45 | +} | |
46 | + | |
47 | +#ifdef CONFIG_ACPI | |
48 | +/* Hook from generic ACPI tables.c */ | |
49 | +static int __init acpi_madt_oem_check(char *oem_id, char *oem_table_id) | |
50 | +{ | |
51 | + unsigned long oem_addr; | |
52 | + if (!find_unisys_acpi_oem_table(&oem_addr)) { | |
53 | + if (es7000_check_dsdt()) | |
54 | + return parse_unisys_oem((char *)oem_addr); | |
55 | + else { | |
56 | + setup_unisys(); | |
57 | + return 1; | |
58 | + } | |
59 | + } | |
60 | + return 0; | |
61 | +} | |
62 | +#else | |
63 | +static int __init acpi_madt_oem_check(char *oem_id, char *oem_table_id) | |
64 | +{ | |
65 | + return 0; | |
66 | +} | |
67 | +#endif | |
68 | + | |
28 | 69 | struct genapic apic_es7000 = APIC_INIT("es7000", probe_es7000); |
include/asm-i386/mach-es7000/mach_apic.h
... | ... | @@ -73,13 +73,6 @@ |
73 | 73 | apic_write_around(APIC_LDR, val); |
74 | 74 | } |
75 | 75 | |
76 | -extern void es7000_sw_apic(void); | |
77 | -static inline void enable_apic_mode(void) | |
78 | -{ | |
79 | - es7000_sw_apic(); | |
80 | - return; | |
81 | -} | |
82 | - | |
83 | 76 | extern int apic_version [MAX_APICS]; |
84 | 77 | static inline void setup_apic_routing(void) |
85 | 78 | { |
include/asm-i386/mach-es7000/mach_mpparse.h
... | ... | @@ -18,18 +18,6 @@ |
18 | 18 | extern int find_unisys_acpi_oem_table(unsigned long *oem_addr); |
19 | 19 | extern void setup_unisys(void); |
20 | 20 | |
21 | -static inline int mps_oem_check(struct mp_config_table *mpc, char *oem, | |
22 | - char *productid) | |
23 | -{ | |
24 | - if (mpc->mpc_oemptr) { | |
25 | - struct mp_config_oemtable *oem_table = | |
26 | - (struct mp_config_oemtable *)mpc->mpc_oemptr; | |
27 | - if (!strncmp(oem, "UNISYS", 6)) | |
28 | - return parse_unisys_oem((char *)oem_table); | |
29 | - } | |
30 | - return 0; | |
31 | -} | |
32 | - | |
33 | 21 | #ifdef CONFIG_ACPI |
34 | 22 | |
35 | 23 | static inline int es7000_check_dsdt(void) |
... | ... | @@ -39,26 +27,6 @@ |
39 | 27 | acpi_get_table_header(ACPI_SIG_DSDT, 0, &header); |
40 | 28 | if (!strncmp(header.oem_id, "UNISYS", 6)) |
41 | 29 | return 1; |
42 | - return 0; | |
43 | -} | |
44 | - | |
45 | -/* Hook from generic ACPI tables.c */ | |
46 | -static inline int acpi_madt_oem_check(char *oem_id, char *oem_table_id) | |
47 | -{ | |
48 | - unsigned long oem_addr; | |
49 | - if (!find_unisys_acpi_oem_table(&oem_addr)) { | |
50 | - if (es7000_check_dsdt()) | |
51 | - return parse_unisys_oem((char *)oem_addr); | |
52 | - else { | |
53 | - setup_unisys(); | |
54 | - return 1; | |
55 | - } | |
56 | - } | |
57 | - return 0; | |
58 | -} | |
59 | -#else | |
60 | -static inline int acpi_madt_oem_check(char *oem_id, char *oem_table_id) | |
61 | -{ | |
62 | 30 | return 0; |
63 | 31 | } |
64 | 32 | #endif |