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