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: completely disable NOPL on 32 bits
x86/paravirt: Remove duplicate paravirt_pagetable_setup_{start, done}()
xen: fix for xen guest with mem > 3.7G
x86: fix possible x86_64 and EFI regression
arch/x86/kernel/kdebugfs.c: introduce missing kfree

+10 -26
+4 -20
arch/x86/kernel/cpu/common.c
··· 344 345 /* 346 * The NOPL instruction is supposed to exist on all CPUs with 347 - * family >= 6, unfortunately, that's not true in practice because 348 * of early VIA chips and (more importantly) broken virtualizers that 349 - * are not easy to detect. Hence, probe for it based on first 350 - * principles. 351 */ 352 static void __cpuinit detect_nopl(struct cpuinfo_x86 *c) 353 { 354 - const u32 nopl_signature = 0x888c53b1; /* Random number */ 355 - u32 has_nopl = nopl_signature; 356 - 357 clear_cpu_cap(c, X86_FEATURE_NOPL); 358 - if (c->x86 >= 6) { 359 - asm volatile("\n" 360 - "1: .byte 0x0f,0x1f,0xc0\n" /* nopl %eax */ 361 - "2:\n" 362 - " .section .fixup,\"ax\"\n" 363 - "3: xor %0,%0\n" 364 - " jmp 2b\n" 365 - " .previous\n" 366 - _ASM_EXTABLE(1b,3b) 367 - : "+a" (has_nopl)); 368 - 369 - if (has_nopl == nopl_signature) 370 - set_cpu_cap(c, X86_FEATURE_NOPL); 371 - } 372 } 373 374 static void __cpuinit generic_identify(struct cpuinfo_x86 *c)
··· 344 345 /* 346 * The NOPL instruction is supposed to exist on all CPUs with 347 + * family >= 6; unfortunately, that's not true in practice because 348 * of early VIA chips and (more importantly) broken virtualizers that 349 + * are not easy to detect. In the latter case it doesn't even *fail* 350 + * reliably, so probing for it doesn't even work. Disable it completely 351 + * unless we can find a reliable way to detect all the broken cases. 352 */ 353 static void __cpuinit detect_nopl(struct cpuinfo_x86 *c) 354 { 355 clear_cpu_cap(c, X86_FEATURE_NOPL); 356 } 357 358 static void __cpuinit generic_identify(struct cpuinfo_x86 *c)
+1
arch/x86/kernel/kdebugfs.c
··· 139 if (PageHighMem(pg)) { 140 data = ioremap_cache(pa_data, sizeof(*data)); 141 if (!data) { 142 error = -ENXIO; 143 goto err_dir; 144 }
··· 139 if (PageHighMem(pg)) { 140 data = ioremap_cache(pa_data, sizeof(*data)); 141 if (!data) { 142 + kfree(node); 143 error = -ENXIO; 144 goto err_dir; 145 }
+4 -1
arch/x86/kernel/setup.c
··· 670 671 parse_early_param(); 672 673 #if defined(CONFIG_VMI) && defined(CONFIG_X86_32) 674 /* 675 * Must be before kernel pagetables are setup ··· 742 #else 743 num_physpages = max_pfn; 744 745 - check_efer(); 746 747 /* How many end-of-memory variables you have, grandma! */ 748 /* need this before calling reserve_initrd */
··· 670 671 parse_early_param(); 672 673 + #ifdef CONFIG_X86_64 674 + check_efer(); 675 + #endif 676 + 677 #if defined(CONFIG_VMI) && defined(CONFIG_X86_32) 678 /* 679 * Must be before kernel pagetables are setup ··· 738 #else 739 num_physpages = max_pfn; 740 741 742 /* How many end-of-memory variables you have, grandma! */ 743 /* need this before calling reserve_initrd */
-4
arch/x86/mm/init_32.c
··· 458 { 459 pgd_t *pgd_base = swapper_pg_dir; 460 461 - paravirt_pagetable_setup_start(pgd_base); 462 - 463 permanent_kmaps_init(pgd_base); 464 - 465 - paravirt_pagetable_setup_done(pgd_base); 466 } 467 468 #ifdef CONFIG_ACPI_SLEEP
··· 458 { 459 pgd_t *pgd_base = swapper_pg_dir; 460 461 permanent_kmaps_init(pgd_base); 462 } 463 464 #ifdef CONFIG_ACPI_SLEEP
+1 -1
arch/x86/xen/setup.c
··· 42 43 e820.nr_map = 0; 44 45 - e820_add_region(0, PFN_PHYS(max_pfn), E820_RAM); 46 47 /* 48 * Even though this is normal, usable memory under Xen, reserve
··· 42 43 e820.nr_map = 0; 44 45 + e820_add_region(0, PFN_PHYS((u64)max_pfn), E820_RAM); 46 47 /* 48 * Even though this is normal, usable memory under Xen, reserve