diff options
| author | Ingo Molnar <mingo@elte.hu> | 2009-01-31 03:36:17 +0100 | 
|---|---|---|
| committer | Ingo Molnar <mingo@elte.hu> | 2009-02-05 22:27:54 +0100 | 
| commit | 65a4e574d2382d83f71b30ea92f86d2e40a6ef8d (patch) | |
| tree | d265ad2f64a3ae35ee3a9ad43b8c55b0e87f6c99 | |
| parent | d8106d2e24d54497233ca9cd97fa9bec807de458 (diff) | |
| download | blackbird-op-linux-65a4e574d2382d83f71b30ea92f86d2e40a6ef8d.tar.gz blackbird-op-linux-65a4e574d2382d83f71b30ea92f86d2e40a6ef8d.zip | |
smp, generic: introduce arch_disable_smp_support() instead of disable_ioapic_setup()
Impact: cleanup
disable_ioapic_setup() in init/main.c is ugly as the function is
x86-specific. The #ifdef inline prototype there is ugly too.
Replace it with a generic arch_disable_smp_support() function - which
has a weak alias for non-x86 architectures and for non-ioapic x86 builds.
Signed-off-by: Ingo Molnar <mingo@elte.hu>
| -rw-r--r-- | arch/x86/include/asm/io_apic.h | 9 | ||||
| -rw-r--r-- | arch/x86/kernel/apic.c | 4 | ||||
| -rw-r--r-- | arch/x86/kernel/io_apic.c | 11 | ||||
| -rw-r--r-- | arch/x86/kernel/smpboot.c | 2 | ||||
| -rw-r--r-- | include/linux/smp.h | 6 | ||||
| -rw-r--r-- | init/main.c | 12 | 
6 files changed, 24 insertions, 20 deletions
| diff --git a/arch/x86/include/asm/io_apic.h b/arch/x86/include/asm/io_apic.h index 08ec793aa043..309d0e23193a 100644 --- a/arch/x86/include/asm/io_apic.h +++ b/arch/x86/include/asm/io_apic.h @@ -143,15 +143,6 @@ extern int noioapicreroute;  /* 1 if the timer IRQ uses the '8259A Virtual Wire' mode */  extern int timer_through_8259; -static inline void disable_ioapic_setup(void) -{ -#ifdef CONFIG_PCI -	noioapicquirk = 1; -	noioapicreroute = -1; -#endif -	skip_ioapic_setup = 1; -} -  /*   * If we use the IO-APIC for IRQ routing, disable automatic   * assignment of PCI IRQ's. diff --git a/arch/x86/kernel/apic.c b/arch/x86/kernel/apic.c index 85d8b50d1af7..a04a73a51d20 100644 --- a/arch/x86/kernel/apic.c +++ b/arch/x86/kernel/apic.c @@ -1138,9 +1138,7 @@ void __cpuinit setup_local_APIC(void)  	int i, j;  	if (disable_apic) { -#ifdef CONFIG_X86_IO_APIC -		disable_ioapic_setup(); -#endif +		arch_disable_smp_support();  		return;  	} diff --git a/arch/x86/kernel/io_apic.c b/arch/x86/kernel/io_apic.c index 57d60c741e37..84bccac4619f 100644 --- a/arch/x86/kernel/io_apic.c +++ b/arch/x86/kernel/io_apic.c @@ -98,10 +98,19 @@ DECLARE_BITMAP(mp_bus_not_pci, MAX_MP_BUSSES);  int skip_ioapic_setup; +void arch_disable_smp_support(void) +{ +#ifdef CONFIG_PCI +	noioapicquirk = 1; +	noioapicreroute = -1; +#endif +	skip_ioapic_setup = 1; +} +  static int __init parse_noapic(char *str)  {  	/* disable IO-APIC */ -	disable_ioapic_setup(); +	arch_disable_smp_support();  	return 0;  }  early_param("noapic", parse_noapic); diff --git a/arch/x86/kernel/smpboot.c b/arch/x86/kernel/smpboot.c index f40f86fec2fe..96f7d304f5c9 100644 --- a/arch/x86/kernel/smpboot.c +++ b/arch/x86/kernel/smpboot.c @@ -1071,7 +1071,7 @@ static int __init smp_sanity_check(unsigned max_cpus)  		printk(KERN_ERR "... forcing use of dummy APIC emulation."  				"(tell your hw vendor)\n");  		smpboot_clear_io_apic(); -		disable_ioapic_setup(); +		arch_disable_smp_support();  		return -1;  	} diff --git a/include/linux/smp.h b/include/linux/smp.h index 715196b09d67..d41a3a865fe3 100644 --- a/include/linux/smp.h +++ b/include/linux/smp.h @@ -67,6 +67,12 @@ extern int __cpu_up(unsigned int cpunum);  extern void smp_cpus_done(unsigned int max_cpus);  /* + * Callback to arch code if there's nosmp or maxcpus=0 on the + * boot command line: + */ +extern void arch_disable_smp_support(void); + +/*   * Call a function on all other processors   */  int smp_call_function(void(*func)(void *info), void *info, int wait); diff --git a/init/main.c b/init/main.c index bfe4fb0c9842..6441083f8273 100644 --- a/init/main.c +++ b/init/main.c @@ -136,14 +136,14 @@ unsigned int __initdata setup_max_cpus = NR_CPUS;   * greater than 0, limits the maximum number of CPUs activated in   * SMP mode to <NUM>.   */ -#ifndef CONFIG_X86_IO_APIC -static inline void disable_ioapic_setup(void) {}; -#endif + +void __weak arch_disable_smp_support(void) { }  static int __init nosmp(char *str)  {  	setup_max_cpus = 0; -	disable_ioapic_setup(); +	arch_disable_smp_support(); +  	return 0;  } @@ -153,14 +153,14 @@ static int __init maxcpus(char *str)  {  	get_option(&str, &setup_max_cpus);  	if (setup_max_cpus == 0) -		disable_ioapic_setup(); +		arch_disable_smp_support();  	return 0;  }  early_param("maxcpus", maxcpus);  #else -#define setup_max_cpus NR_CPUS +const unsigned int setup_max_cpus = NR_CPUS;  #endif  /* | 

