x86 fixes
Linus,
Please pull the latest x86-fixes-for-linus git tree from:
git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip.git x86-fixes-for-linus
Thanks,
Ingo
------------------>
H. Peter Anvin (1):
x86, hibernate: Initialize mmu_cr4_features during boot
Hans Rosenfeld (1):
x86-32, fpu: Fix FPU exception handling on non-SSE systems
Tejun Heo (1):
x86-32, NUMA: Fix ACPI NUMA init broken by recent x86-64 change
Thomas Gleixner (1):
x86: visws: Fixup irq overhaul fallout
arch/x86/include/asm/i387.h | 2 +- arch/x86/kernel/setup.c | 5 +++++ arch/x86/mm/srat_32.c | 4 +++- arch/x86/platform/visws/visws_quirks.c | 20 ++++++-------------- 4 files changed, 15 insertions(+), 16 deletions(-)
arch/x86/include/asm/i387.h +1 -1
@@ -237,7 +237,7 @@ static inline void fpu_save_init(struct fpu *fpu) }else if (use_fxsr ()) {fpu_fxsave (fpu); }else { - asmvolatile ("fsave %[fx]; fwait" + asmvolatile ("fnsave %[fx]; fwait" : [fx]"=m" (fpu->state->fsave));return ; }
arch/x86/kernel/setup.c +5 -0
@@ -976,6 +976,11 @@ void __init setup_arch(char **cmdline_p)paging_init (); x86_init.paging.pagetable_setup_done (swapper_pg_dir); +if (boot_cpu_data.cpuid_level >=0 ) { +/* A CPU has %cr4 if and only if it has CPUID */ + mmu_cr4_features =read_cr4 (); + } +#ifdef CONFIG_X86_32 /* sync back kernel address range */ clone_pgd_range(initial_page_table + KERNEL_PGD_BOUNDARY,
arch/x86/mm/srat_32.c +3 -1
@@ -211,10 +211,12 @@ int __init get_memcfg_from_srat(void) {int i, j, nid; -if (srat_disabled ()) goto out_fail; +if (acpi_numa_init () <0 ) + goto out_fail; +if (num_memory_chunks ==0 ) {printk (KERN_DEBUG "could not find any ACPI SRAT memory areas.\n" );
arch/x86/platform/visws/visws_quirks.c +6 -14
@@ -471,15 +471,7 @@ static unsigned int startup_piix4_master_irq(struct irq_data *data) { legacy_pic->init (0 );enable_cobalt_irq (data); -} - -static void end_piix4_master_irq (struct irq_data *data) -{ -unsigned long flags; - -spin_lock_irqsave (&cobalt_lock, flags); -enable_cobalt_irq (data); -spin_unlock_irqrestore (&cobalt_lock, flags); +return 0 ; }static struct irq_chip piix4_master_irq_type = {
@@ -492,7 +484,7 @@ static void pii4_mask(struct irq_data *data) { }static struct irq_chip piix4_virtual_irq_type = { .name ="PIIX4-virtual" , - .mask = pii4_mask, + .irq_mask = pii4_mask, };/*
@@ -580,9 +572,9 @@ static struct irqaction cascade_action = {static inline void set_piix4_virtual_irq_type (void ) { - piix4_virtual_irq_type.enable = i8259A_chip.unmask; - piix4_virtual_irq_type.disable = i8259A_chip.mask; - piix4_virtual_irq_type.unmask = i8259A_chip.unmask; + piix4_virtual_irq_type.irq_enable = i8259A_chip.irq_unmask; + piix4_virtual_irq_type.irq_disable = i8259A_chip.irq_mask; + piix4_virtual_irq_type.irq_unmask = i8259A_chip.irq_unmask; }static void __init visws_pre_intr_init (void )
@@ -599,7 +591,7 @@ static void __init visws_pre_intr_init(void)else if (i ==CO_IRQ_IDE0 ) chip = &cobalt_irq_type;else if (i ==CO_IRQ_IDE1 ) - >chip = &cobalt_irq_type; + chip = &cobalt_irq_type;else if (i ==CO_IRQ_8259 ) chip = &piix4_master_irq_type;else if (i <CO_IRQ_APIC0 )