x86 fixes
Linus,
Please pull the latest x86-urgent-for-linus git tree from:
git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip.git x86-urgent-for-linus
Thanks,
Ingo
------------------>
Florian Fainelli (1):
x86: devicetree: Add missing early_init_dt_setup_initrd_arch stub
Thomas Gleixner (1):
x86: cpu-hotplug: Prevent softirq wakeup on wrong CPU
arch/x86/kernel/devicetree.c | 11 +++++++++++ arch/x86/kernel/smpboot.c | 13 +++++++++++++ 2 files changed, 24 insertions(+), 0 deletions(-)
arch/x86/kernel/devicetree.c +11 -0
@@ -13,6 +13,7 @@#include <linux/slab.h> #include <linux/pci.h> #include <linux/of_pci.h> +#include <linux/initrd.h> #include <asm/hpet.h> #include <asm/irq_controller.h>
@@ -98,6 +99,16 @@ void * __init early_init_dt_alloc_memory_arch(u64 size, u64 align)return __alloc_bootmem (size, align,__pa (MAX_DMA_ADDRESS )); } +#ifdef CONFIG_BLK_DEV_INITRD +void __init early_init_dt_setup_initrd_arch (unsigned long start, +unsigned long end) +{ + initrd_start = (unsigned long )__va (start); + initrd_end = (unsigned long )__va (end); + initrd_below_start_ok =1 ; +} +#endif +void __init add_dtb (u64 data) { initial_dtb = data + offsetof(struct setup_data , data);
arch/x86/kernel/smpboot.c +13 -0
@@ -285,6 +285,19 @@ notrace static void __cpuinit start_secondary(void *unused)per_cpu (cpu_state,smp_processor_id ()) =CPU_ONLINE ; x86_platform.nmi_init (); +/* +* Wait until the cpu which brought this one up marked it +* online before enabling interrupts. If we don't do that then +* we can end up waking up the softirq thread before this cpu +* reached the active state, which makes the scheduler unhappy +* and schedule the softirq thread on the wrong cpu. This is +* only observable with forced threaded interrupts, but in +* theory it could also happen w/o them. It's just way harder +* to achieve. +*/ +while (!cpumask_test_cpu (smp_processor_id (), cpu_active_mask)) +cpu_relax (); +/* enable local interrupts */ local_irq_enable ();