generic IPI fix
Linus,
Please pull the latest sched-urgent-for-linus git tree from:
git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip.git sched-urgent-for-linus
Thanks,
Ingo
------------------>
Takao Indoh (1):
generic-ipi: Fix kexec boot crash by initializing call_single_queue before enabling interrupts
include/linux/smp.h | 5 ++++- init/main.c | 1 + kernel/smp.c | 5 +---- 3 files changed, 6 insertions(+), 5 deletions(-)
include/linux/smp.h +4 -1
@@ -85,12 +85,15 @@ int smp_call_function_any(const struct cpumask *mask,* Generic and arch helpers */ #ifdef CONFIG_USE_GENERIC_SMP_HELPERS +void __init call_function_init (void );void generic_smp_call_function_single_interrupt (void );void generic_smp_call_function_interrupt (void );void ipi_call_lock (void );void ipi_call_unlock (void );void ipi_call_lock_irq (void );void ipi_call_unlock_irq (void ); +#else +static inline void call_function_init (void ) { }#endif /*
@@ -134,7 +137,7 @@ static inline void smp_send_reschedule(int cpu) { }#define smp_prepare_boot_cpu () do {} while (0)#define smp_call_function_many (mask, func, info, wait) \ (up_smp_call_function(func, info)) -static inline void init_call_single_data (void ) { } +static inline void call_function_init (void ) { } static inline int smp_call_function_any(const struct cpumask *mask, smp_call_func_t func,
init/main.c +1 -0
@@ -542,6 +542,7 @@ asmlinkage void __init start_kernel(void)timekeeping_init ();time_init ();profile_init (); +call_function_init ();if (!irqs_disabled ())printk (KERN_CRIT "start_kernel(): bug: interrupts were " "enabled early\n" );
kernel/smp.c +1 -4
@@ -74,7 +74,7 @@ static struct notifier_block __cpuinitdata hotplug_cfd_notifier = { .notifier_call = hotplug_cfd, }; -static int __cpuinit init_call_single_data (void ) +void __init call_function_init (void ) {void *cpu = (void *)(long )smp_processor_id ();int i;
@@ -88,10 +88,7 @@ static int __cpuinit init_call_single_data(void)hotplug_cfd (&hotplug_cfd_notifier,CPU_UP_PREPARE , cpu);register_cpu_notifier (&hotplug_cfd_notifier); - -return 0 ; } -early_initcall (init_call_single_data);/* * csd_lock/csd_unlock used to serialize access to per-cpu csd resources