Merge branch 'x86-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip

* 'x86-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:
x86: user_regset_view table fix for ia32 on 64-bit
x86: arch/x86/mm/pat.c - fix warning
x86: fix csum_partial() export
x86: early_init_centaur(): use set_cpu_cap()
x86: fix app crashes after SMP resume
x86: wakeup.lds.S - section ordering fix
x86: [VOYAGER] fix duplicate phys_cpu_present_map symbol
x86/pci: fix broken ISA DMA

+39 -32
+5 -5
arch/x86/kernel/acpi/realmode/wakeup.lds.S
··· 12 13 SECTIONS 14 { 15 - . = HEADER_OFFSET; 16 - .header : { 17 - *(.header) 18 - } 19 - 20 . = 0; 21 .text : { 22 *(.text*) ··· 43 __bss_start = .; 44 *(.bss) 45 __bss_end = .; 46 } 47 48 . = ALIGN(16);
··· 12 13 SECTIONS 14 { 15 . = 0; 16 .text : { 17 *(.text*) ··· 48 __bss_start = .; 49 *(.bss) 50 __bss_end = .; 51 + } 52 + 53 + . = HEADER_OFFSET; 54 + .header : { 55 + *(.header) 56 } 57 58 . = ALIGN(16);
+5 -2
arch/x86/kernel/ptrace.c
··· 1303 #define genregs32_get genregs_get 1304 #define genregs32_set genregs_set 1305 1306 #endif /* CONFIG_X86_64 */ 1307 1308 #if defined CONFIG_X86_32 || defined CONFIG_IA32_EMULATION ··· 1318 }, 1319 [REGSET_FP] = { 1320 .core_note_type = NT_PRFPREG, 1321 - .n = sizeof(struct user_i387_struct) / sizeof(u32), 1322 .size = sizeof(u32), .align = sizeof(u32), 1323 .active = fpregs_active, .get = fpregs_get, .set = fpregs_set 1324 }, 1325 [REGSET_XFP] = { 1326 .core_note_type = NT_PRXFPREG, 1327 - .n = sizeof(struct user_i387_struct) / sizeof(u32), 1328 .size = sizeof(u32), .align = sizeof(u32), 1329 .active = xfpregs_active, .get = xfpregs_get, .set = xfpregs_set 1330 },
··· 1303 #define genregs32_get genregs_get 1304 #define genregs32_set genregs_set 1305 1306 + #define user_i387_ia32_struct user_i387_struct 1307 + #define user32_fxsr_struct user_fxsr_struct 1308 + 1309 #endif /* CONFIG_X86_64 */ 1310 1311 #if defined CONFIG_X86_32 || defined CONFIG_IA32_EMULATION ··· 1315 }, 1316 [REGSET_FP] = { 1317 .core_note_type = NT_PRFPREG, 1318 + .n = sizeof(struct user_i387_ia32_struct) / sizeof(u32), 1319 .size = sizeof(u32), .align = sizeof(u32), 1320 .active = fpregs_active, .get = fpregs_get, .set = fpregs_set 1321 }, 1322 [REGSET_XFP] = { 1323 .core_note_type = NT_PRXFPREG, 1324 + .n = sizeof(struct user32_fxsr_struct) / sizeof(u32), 1325 .size = sizeof(u32), .align = sizeof(u32), 1326 .active = xfpregs_active, .get = xfpregs_get, .set = xfpregs_set 1327 },
+3 -1
arch/x86/kernel/setup.c
··· 12 #include <asm/mpspec.h> 13 #include <asm/apicdef.h> 14 15 unsigned int num_processors; 16 unsigned disabled_cpus __cpuinitdata; 17 /* Processor that is doing the boot up */ ··· 24 25 /* Bitmask of physically existing CPUs */ 26 physid_mask_t phys_cpu_present_map; 27 28 - #if defined(CONFIG_HAVE_SETUP_PER_CPU_AREA) && defined(CONFIG_SMP) 29 /* 30 * Copy data used in early init routines from the initial arrays to the 31 * per cpu data areas. These arrays then become expendable and the
··· 12 #include <asm/mpspec.h> 13 #include <asm/apicdef.h> 14 15 + #ifdef CONFIG_X86_LOCAL_APIC 16 unsigned int num_processors; 17 unsigned disabled_cpus __cpuinitdata; 18 /* Processor that is doing the boot up */ ··· 23 24 /* Bitmask of physically existing CPUs */ 25 physid_mask_t phys_cpu_present_map; 26 + #endif 27 28 + #if defined(CONFIG_HAVE_SETUP_PER_CPU_AREA) && defined(CONFIG_X86_SMP) 29 /* 30 * Copy data used in early init routines from the initial arrays to the 31 * per cpu data areas. These arrays then become expendable and the
+1 -1
arch/x86/kernel/setup_64.c
··· 951 static void __cpuinit early_init_centaur(struct cpuinfo_x86 *c) 952 { 953 if (c->x86 == 0x6 && c->x86_model >= 0xf) 954 - set_bit(X86_FEATURE_CONSTANT_TSC, &c->x86_capability); 955 } 956 957 static void __cpuinit init_centaur(struct cpuinfo_x86 *c)
··· 951 static void __cpuinit early_init_centaur(struct cpuinfo_x86 *c) 952 { 953 if (c->x86 == 0x6 && c->x86_model >= 0xf) 954 + set_cpu_cap(c, X86_FEATURE_CONSTANT_TSC); 955 } 956 957 static void __cpuinit init_centaur(struct cpuinfo_x86 *c)
+2 -1
arch/x86/kernel/smp.c
··· 231 wmb(); 232 233 /* Send a message to other CPUs */ 234 - if (cpus_equal(mask, allbutself)) 235 send_IPI_allbutself(CALL_FUNCTION_VECTOR); 236 else 237 send_IPI_mask(mask, CALL_FUNCTION_VECTOR);
··· 231 wmb(); 232 233 /* Send a message to other CPUs */ 234 + if (cpus_equal(mask, allbutself) && 235 + cpus_equal(cpu_online_map, cpu_callout_map)) 236 send_IPI_allbutself(CALL_FUNCTION_VECTOR); 237 else 238 send_IPI_mask(mask, CALL_FUNCTION_VECTOR);
+17 -7
arch/x86/kernel/smpboot.c
··· 86 87 #ifdef CONFIG_X86_32 88 u8 apicid_2_node[MAX_APICID]; 89 #endif 90 91 /* State of each CPU */ ··· 326 enable_NMI_through_LVT0(); 327 enable_8259A_irq(0); 328 } 329 330 /* This must be done before setting cpu_online_map */ 331 set_cpu_sibling_map(raw_smp_processor_id()); ··· 1047 #ifdef CONFIG_X86_32 1048 /* init low mem mapping */ 1049 clone_pgd_range(swapper_pg_dir, swapper_pg_dir + KERNEL_PGD_BOUNDARY, 1050 - min_t(unsigned long, KERNEL_PGD_PTRS, KERNEL_PGD_BOUNDARY)); 1051 flush_tlb_all(); 1052 - #endif 1053 1054 err = do_boot_cpu(apicid, cpu); 1055 - if (err < 0) { 1056 Dprintk("do_boot_cpu failed %d\n", err); 1057 - return err; 1058 } 1059 1060 /* ··· 1272 setup_ioapic_dest(); 1273 #endif 1274 check_nmi_watchdog(); 1275 - #ifdef CONFIG_X86_32 1276 - zap_low_mappings(); 1277 - #endif 1278 } 1279 1280 #ifdef CONFIG_HOTPLUG_CPU
··· 86 87 #ifdef CONFIG_X86_32 88 u8 apicid_2_node[MAX_APICID]; 89 + static int low_mappings; 90 #endif 91 92 /* State of each CPU */ ··· 325 enable_NMI_through_LVT0(); 326 enable_8259A_irq(0); 327 } 328 + 329 + #ifdef CONFIG_X86_32 330 + while (low_mappings) 331 + cpu_relax(); 332 + __flush_tlb_all(); 333 + #endif 334 335 /* This must be done before setting cpu_online_map */ 336 set_cpu_sibling_map(raw_smp_processor_id()); ··· 1040 #ifdef CONFIG_X86_32 1041 /* init low mem mapping */ 1042 clone_pgd_range(swapper_pg_dir, swapper_pg_dir + KERNEL_PGD_BOUNDARY, 1043 + min_t(unsigned long, KERNEL_PGD_PTRS, KERNEL_PGD_BOUNDARY)); 1044 flush_tlb_all(); 1045 + low_mappings = 1; 1046 1047 err = do_boot_cpu(apicid, cpu); 1048 + 1049 + zap_low_mappings(); 1050 + low_mappings = 0; 1051 + #else 1052 + err = do_boot_cpu(apicid, cpu); 1053 + #endif 1054 + if (err) { 1055 Dprintk("do_boot_cpu failed %d\n", err); 1056 + return -EIO; 1057 } 1058 1059 /* ··· 1259 setup_ioapic_dest(); 1260 #endif 1261 check_nmi_watchdog(); 1262 } 1263 1264 #ifdef CONFIG_HOTPLUG_CPU
+3
arch/x86/kernel/x8664_ksyms_64.c
··· 2 All C exports should go in the respective C files. */ 3 4 #include <linux/module.h> 5 #include <linux/smp.h> 6 7 #include <asm/processor.h> ··· 29 30 EXPORT_SYMBOL(copy_page); 31 EXPORT_SYMBOL(clear_page); 32 33 /* 34 * Export string functions. We normally rely on gcc builtin for most of these,
··· 2 All C exports should go in the respective C files. */ 3 4 #include <linux/module.h> 5 + #include <net/checksum.h> 6 #include <linux/smp.h> 7 8 #include <asm/processor.h> ··· 28 29 EXPORT_SYMBOL(copy_page); 30 EXPORT_SYMBOL(clear_page); 31 + 32 + EXPORT_SYMBOL(csum_partial); 33 34 /* 35 * Export string functions. We normally rely on gcc builtin for most of these,
-2
arch/x86/lib/csum-partial_64.c
··· 136 (__force u32)sum); 137 } 138 139 - EXPORT_SYMBOL(csum_partial); 140 - 141 /* 142 * this routine is used for miscellaneous IP-like checksums, mainly 143 * in icmp.c
··· 136 (__force u32)sum); 137 } 138 139 /* 140 * this routine is used for miscellaneous IP-like checksums, mainly 141 * in icmp.c
+1 -11
arch/x86/mm/init_32.c
··· 438 { 439 int i; 440 441 - save_pg_dir(); 442 - 443 /* 444 * Zap initial low-memory mappings. 445 * ··· 661 test_wp_bit(); 662 663 cpa_init(); 664 - 665 - /* 666 - * Subtle. SMP is doing it's boot stuff late (because it has to 667 - * fork idle threads) - but it also needs low mappings for the 668 - * protected-mode entry to work. We zap these entries only after 669 - * the WP-bit has been tested. 670 - */ 671 - #ifndef CONFIG_SMP 672 zap_low_mappings(); 673 - #endif 674 } 675 676 #ifdef CONFIG_MEMORY_HOTPLUG
··· 438 { 439 int i; 440 441 /* 442 * Zap initial low-memory mappings. 443 * ··· 663 test_wp_bit(); 664 665 cpa_init(); 666 + save_pg_dir(); 667 zap_low_mappings(); 668 } 669 670 #ifdef CONFIG_MEMORY_HOTPLUG
+2 -2
arch/x86/mm/pat.c
··· 555 "%s:%d /dev/mem ioremap_change_attr failed %s for %Lx-%Lx\n", 556 current->comm, current->pid, 557 cattr_name(flags), 558 - offset, offset + size); 559 return 0; 560 } 561 ··· 576 "%s:%d /dev/mem expected mapping type %s for %Lx-%Lx, got %s\n", 577 current->comm, current->pid, 578 cattr_name(want_flags), 579 - addr, addr + size, 580 cattr_name(flags)); 581 } 582 }
··· 555 "%s:%d /dev/mem ioremap_change_attr failed %s for %Lx-%Lx\n", 556 current->comm, current->pid, 557 cattr_name(flags), 558 + offset, (unsigned long long)(offset + size)); 559 return 0; 560 } 561 ··· 576 "%s:%d /dev/mem expected mapping type %s for %Lx-%Lx, got %s\n", 577 current->comm, current->pid, 578 cattr_name(want_flags), 579 + addr, (unsigned long long)(addr + size), 580 cattr_name(flags)); 581 } 582 }