Commit 4a5d107a authored by Vivek Goyal's avatar Vivek Goyal Committed by Andi Kleen

[PATCH] i386: cpu hotplug/smpboot misc MODPOST warning fixes

o Misc smpboot/cpu hotplug path cleanups. I did those to supress the
  warnings generated by MODPOST. These warnings are visible only
  if CONFIG_RELOCATABLE=y.

o CONFIG_RELOCATABLE compiles the kernel with --emit-relocs option. This
  option retains relocation information in vmlinux file and MODPOST
  is quick to spit out "Section mismatch" warnings.

o This patch fixes some of those warnings. Many of the functions in
  smpboot case are __devinit type and they in turn accesses text/data which
  if of type __cpuinit. Now if CONFIG_HOTPLUG=y and CONFIG_HOTPLUG_CPU=n
  then we end up in cases where a function in .text segment is calling
  another function in .init.text segment and MODPOST emits warning.

WARNING: vmlinux - Section mismatch: reference to .init.text:identify_cpu from .text between 'smp_store_cpu_info' (at offset 0xc011020d) and 'do_boot_cpu'
WARNING: vmlinux - Section mismatch: reference to .init.text:init_gdt from .text between 'do_boot_cpu' (at offset 0xc01102ca) and '__cpu_up'
WARNING: vmlinux - Section mismatch: reference to .init.text:print_cpu_info from .text between 'do_boot_cpu' (at offset 0xc01105d0) and '__cpu_up'

o It also fixes the issues where CONFIG_HOTPLUG_CPU=y and start_secondary()
  is calling smp_callin() which in-turn calls synchronize_tsc_ap() which is
  of type __init. This should have meant broken CPU hotplug.

WARNING: vmlinux - Section mismatch: reference to .init.data: from .text between 'start_secondary' (at offset 0xc011603f) and 'initialize_secondary'
WARNING: vmlinux - Section mismatch: reference to .init.data: from .text between 'MP_processor_info' (at offset 0xc0116a4f) and 'mp_register_lapic'
WARNING: vmlinux - Section mismatch: reference to .init.data: from .text between 'MP_processor_info' (at offset 0xc0116a4f) and 'mp_register_lapic'
Signed-off-by: default avatarVivek Goyal <vgoyal@in.ibm.com>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarAndi Kleen <ak@suse.de>
parent 24420760
...@@ -36,7 +36,7 @@ ...@@ -36,7 +36,7 @@
/* Have we found an MP table */ /* Have we found an MP table */
int smp_found_config; int smp_found_config;
unsigned int __initdata maxcpus = NR_CPUS; unsigned int __cpuinitdata maxcpus = NR_CPUS;
/* /*
* Various Linux-internal data structures created from the * Various Linux-internal data structures created from the
...@@ -102,9 +102,9 @@ static int __init mpf_checksum(unsigned char *mp, int len) ...@@ -102,9 +102,9 @@ static int __init mpf_checksum(unsigned char *mp, int len)
*/ */
static int mpc_record; static int mpc_record;
static struct mpc_config_translation *translation_table[MAX_MPC_ENTRY] __initdata; static struct mpc_config_translation *translation_table[MAX_MPC_ENTRY] __cpuinitdata;
static void __devinit MP_processor_info (struct mpc_config_processor *m) static void __cpuinit MP_processor_info (struct mpc_config_processor *m)
{ {
int ver, apicid; int ver, apicid;
physid_mask_t phys_cpu; physid_mask_t phys_cpu;
...@@ -822,7 +822,7 @@ void __init mp_register_lapic_address(u64 address) ...@@ -822,7 +822,7 @@ void __init mp_register_lapic_address(u64 address)
Dprintk("Boot CPU = %d\n", boot_cpu_physical_apicid); Dprintk("Boot CPU = %d\n", boot_cpu_physical_apicid);
} }
void __devinit mp_register_lapic (u8 id, u8 enabled) void __cpuinit mp_register_lapic (u8 id, u8 enabled)
{ {
struct mpc_config_processor processor; struct mpc_config_processor processor;
int boot_cpu = 0; int boot_cpu = 0;
......
...@@ -77,7 +77,7 @@ extern struct resource code_resource; ...@@ -77,7 +77,7 @@ extern struct resource code_resource;
extern struct resource data_resource; extern struct resource data_resource;
/* cpu data as detected by the assembly code in head.S */ /* cpu data as detected by the assembly code in head.S */
struct cpuinfo_x86 new_cpu_data __initdata = { 0, 0, 0, 0, -1, 1, 0, 0, -1 }; struct cpuinfo_x86 new_cpu_data __cpuinitdata = { 0, 0, 0, 0, -1, 1, 0, 0, -1 };
/* common cpu data for all cpus */ /* common cpu data for all cpus */
struct cpuinfo_x86 boot_cpu_data __read_mostly = { 0, 0, 0, 0, -1, 1, 0, 0, -1 }; struct cpuinfo_x86 boot_cpu_data __read_mostly = { 0, 0, 0, 0, -1, 1, 0, 0, -1 };
EXPORT_SYMBOL(boot_cpu_data); EXPORT_SYMBOL(boot_cpu_data);
......
...@@ -159,7 +159,7 @@ void __init smp_alloc_memory(void) ...@@ -159,7 +159,7 @@ void __init smp_alloc_memory(void)
* a given CPU * a given CPU
*/ */
static void __devinit smp_store_cpu_info(int id) static void __cpuinit smp_store_cpu_info(int id)
{ {
struct cpuinfo_x86 *c = cpu_data + id; struct cpuinfo_x86 *c = cpu_data + id;
...@@ -364,7 +364,7 @@ extern void calibrate_delay(void); ...@@ -364,7 +364,7 @@ extern void calibrate_delay(void);
static atomic_t init_deasserted; static atomic_t init_deasserted;
static void __devinit smp_callin(void) static void __cpuinit smp_callin(void)
{ {
int cpuid, phys_id; int cpuid, phys_id;
unsigned long timeout; unsigned long timeout;
...@@ -538,7 +538,7 @@ set_cpu_sibling_map(int cpu) ...@@ -538,7 +538,7 @@ set_cpu_sibling_map(int cpu)
/* /*
* Activate a secondary processor. * Activate a secondary processor.
*/ */
static void __devinit start_secondary(void *unused) static void __cpuinit start_secondary(void *unused)
{ {
/* /*
* Don't put *anything* before secondary_cpu_init(), SMP * Don't put *anything* before secondary_cpu_init(), SMP
...@@ -931,7 +931,7 @@ static inline struct task_struct * alloc_idle_task(int cpu) ...@@ -931,7 +931,7 @@ static inline struct task_struct * alloc_idle_task(int cpu)
#define alloc_idle_task(cpu) fork_idle(cpu) #define alloc_idle_task(cpu) fork_idle(cpu)
#endif #endif
static int __devinit do_boot_cpu(int apicid, int cpu) static int __cpuinit do_boot_cpu(int apicid, int cpu)
/* /*
* NOTE - on most systems this is a PHYSICAL apic ID, but on multiquad * NOTE - on most systems this is a PHYSICAL apic ID, but on multiquad
* (ie clustered apic addressing mode), this is a LOGICAL apic ID. * (ie clustered apic addressing mode), this is a LOGICAL apic ID.
...@@ -1432,7 +1432,7 @@ void __cpu_die(unsigned int cpu) ...@@ -1432,7 +1432,7 @@ void __cpu_die(unsigned int cpu)
} }
#endif /* CONFIG_HOTPLUG_CPU */ #endif /* CONFIG_HOTPLUG_CPU */
int __devinit __cpu_up(unsigned int cpu) int __cpuinit __cpu_up(unsigned int cpu)
{ {
#ifdef CONFIG_HOTPLUG_CPU #ifdef CONFIG_HOTPLUG_CPU
int ret=0; int ret=0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment