Commit 1833d6bc72893265f22addd79cf52e6987496e0f

Authored by Vivek Goyal
Committed by Andi Kleen
1 parent e073ae1b34

[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
scripts/mod/modpost.c
... ... @@ -606,6 +606,7 @@
606 606 "_probe",
607 607 "_probe_one",
608 608 "_console",
  609 + "apic_es7000",
609 610 NULL
610 611 };
611 612