Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

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:
xen: remove support for non-PAE 32-bit

+27 -77
+1 -1
arch/x86/xen/Kconfig
··· 6 6 bool "Xen guest support" 7 7 select PARAVIRT 8 8 depends on X86_32 9 - depends on X86_CMPXCHG && X86_TSC && !(X86_VISWS || X86_VOYAGER) 9 + depends on X86_CMPXCHG && X86_TSC && X86_PAE && !(X86_VISWS || X86_VOYAGER) 10 10 help 11 11 This is the Linux Xen port. Enabling this will allow the 12 12 kernel to boot in a paravirtualized environment under the
+18 -33
arch/x86/xen/enlighten.c
··· 785 785 static __init void xen_pagetable_setup_start(pgd_t *base) 786 786 { 787 787 pgd_t *xen_pgd = (pgd_t *)xen_start_info->pt_base; 788 + int i; 788 789 789 790 /* special set_pte for pagetable initialization */ 790 791 pv_mmu_ops.set_pte = xen_set_pte_init; 791 792 792 793 init_mm.pgd = base; 793 794 /* 794 - * copy top-level of Xen-supplied pagetable into place. For 795 - * !PAE we can use this as-is, but for PAE it is a stand-in 796 - * while we copy the pmd pages. 795 + * copy top-level of Xen-supplied pagetable into place. This 796 + * is a stand-in while we copy the pmd pages. 797 797 */ 798 798 memcpy(base, xen_pgd, PTRS_PER_PGD * sizeof(pgd_t)); 799 799 800 - if (PTRS_PER_PMD > 1) { 801 - int i; 802 - /* 803 - * For PAE, need to allocate new pmds, rather than 804 - * share Xen's, since Xen doesn't like pmd's being 805 - * shared between address spaces. 806 - */ 807 - for (i = 0; i < PTRS_PER_PGD; i++) { 808 - if (pgd_val_ma(xen_pgd[i]) & _PAGE_PRESENT) { 809 - pmd_t *pmd = (pmd_t *)alloc_bootmem_low_pages(PAGE_SIZE); 800 + /* 801 + * For PAE, need to allocate new pmds, rather than 802 + * share Xen's, since Xen doesn't like pmd's being 803 + * shared between address spaces. 804 + */ 805 + for (i = 0; i < PTRS_PER_PGD; i++) { 806 + if (pgd_val_ma(xen_pgd[i]) & _PAGE_PRESENT) { 807 + pmd_t *pmd = (pmd_t *)alloc_bootmem_low_pages(PAGE_SIZE); 810 808 811 - memcpy(pmd, (void *)pgd_page_vaddr(xen_pgd[i]), 812 - PAGE_SIZE); 809 + memcpy(pmd, (void *)pgd_page_vaddr(xen_pgd[i]), 810 + PAGE_SIZE); 813 811 814 - make_lowmem_page_readonly(pmd); 812 + make_lowmem_page_readonly(pmd); 815 813 816 - set_pgd(&base[i], __pgd(1 + __pa(pmd))); 817 - } else 818 - pgd_clear(&base[i]); 819 - } 814 + set_pgd(&base[i], __pgd(1 + __pa(pmd))); 815 + } else 816 + pgd_clear(&base[i]); 820 817 } 821 818 822 819 /* make sure zero_page is mapped RO so we can use it in pagetables */ ··· 870 873 871 874 /* Actually pin the pagetable down, but we can't set PG_pinned 872 875 yet because the page structures don't exist yet. */ 873 - { 874 - unsigned level; 875 - 876 - #ifdef CONFIG_X86_PAE 877 - level = MMUEXT_PIN_L3_TABLE; 878 - #else 879 - level = MMUEXT_PIN_L2_TABLE; 880 - #endif 881 - 882 - pin_pagetable_pfn(level, PFN_DOWN(__pa(base))); 883 - } 876 + pin_pagetable_pfn(MMUEXT_PIN_L3_TABLE, PFN_DOWN(__pa(base))); 884 877 } 885 878 886 879 /* This is called once we have the cpu_possible_map */ ··· 1080 1093 .make_pte = xen_make_pte, 1081 1094 .make_pgd = xen_make_pgd, 1082 1095 1083 - #ifdef CONFIG_X86_PAE 1084 1096 .set_pte_atomic = xen_set_pte_atomic, 1085 1097 .set_pte_present = xen_set_pte_at, 1086 1098 .set_pud = xen_set_pud, ··· 1088 1102 1089 1103 .make_pmd = xen_make_pmd, 1090 1104 .pmd_val = xen_pmd_val, 1091 - #endif /* PAE */ 1092 1105 1093 1106 .activate_mm = xen_activate_mm, 1094 1107 .dup_mmap = xen_dup_mmap,
+2 -17
arch/x86/xen/mmu.c
··· 228 228 { 229 229 return pte_mfn_to_pfn(pmd.pmd); 230 230 } 231 - #ifdef CONFIG_X86_PAE 231 + 232 232 void xen_set_pud(pud_t *ptr, pud_t val) 233 233 { 234 234 struct multicall_space mcs; ··· 276 276 pmd = pte_pfn_to_mfn(pmd); 277 277 return native_make_pmd(pmd); 278 278 } 279 - #else /* !PAE */ 280 - void xen_set_pte(pte_t *ptep, pte_t pte) 281 - { 282 - *ptep = pte; 283 - } 284 - #endif /* CONFIG_X86_PAE */ 285 279 286 280 /* 287 281 (Yet another) pagetable walker. This one is intended for pinning a ··· 428 434 read-only, and can be pinned. */ 429 435 void xen_pgd_pin(pgd_t *pgd) 430 436 { 431 - unsigned level; 432 - 433 437 xen_mc_batch(); 434 438 435 439 if (pgd_walk(pgd, pin_page, TASK_SIZE)) { ··· 437 445 xen_mc_batch(); 438 446 } 439 447 440 - #ifdef CONFIG_X86_PAE 441 - level = MMUEXT_PIN_L3_TABLE; 442 - #else 443 - level = MMUEXT_PIN_L2_TABLE; 444 - #endif 445 - 446 - xen_do_pin(level, PFN_DOWN(__pa(pgd))); 447 - 448 + xen_do_pin(MMUEXT_PIN_L3_TABLE, PFN_DOWN(__pa(pgd))); 448 449 xen_mc_issue(0); 449 450 } 450 451
+6 -18
arch/x86/xen/mmu.h
··· 37 37 void xen_pgd_pin(pgd_t *pgd); 38 38 //void xen_pgd_unpin(pgd_t *pgd); 39 39 40 - #ifdef CONFIG_X86_PAE 41 - unsigned long long xen_pte_val(pte_t); 42 - unsigned long long xen_pmd_val(pmd_t); 43 - unsigned long long xen_pgd_val(pgd_t); 40 + pteval_t xen_pte_val(pte_t); 41 + pmdval_t xen_pmd_val(pmd_t); 42 + pgdval_t xen_pgd_val(pgd_t); 44 43 45 - pte_t xen_make_pte(unsigned long long); 46 - pmd_t xen_make_pmd(unsigned long long); 47 - pgd_t xen_make_pgd(unsigned long long); 44 + pte_t xen_make_pte(pteval_t); 45 + pmd_t xen_make_pmd(pmdval_t); 46 + pgd_t xen_make_pgd(pgdval_t); 48 47 49 48 void xen_set_pte_at(struct mm_struct *mm, unsigned long addr, 50 49 pte_t *ptep, pte_t pteval); ··· 51 52 void xen_set_pud(pud_t *ptr, pud_t val); 52 53 void xen_pte_clear(struct mm_struct *mm, unsigned long addr, pte_t *ptep); 53 54 void xen_pmd_clear(pmd_t *pmdp); 54 - 55 - 56 - #else 57 - unsigned long xen_pte_val(pte_t); 58 - unsigned long xen_pmd_val(pmd_t); 59 - unsigned long xen_pgd_val(pgd_t); 60 - 61 - pte_t xen_make_pte(unsigned long); 62 - pmd_t xen_make_pmd(unsigned long); 63 - pgd_t xen_make_pgd(unsigned long); 64 - #endif 65 55 66 56 #endif /* _XEN_MMU_H */
-4
arch/x86/xen/xen-head.S
··· 30 30 ELFNOTE(Xen, XEN_ELFNOTE_ENTRY, .long startup_xen) 31 31 ELFNOTE(Xen, XEN_ELFNOTE_HYPERCALL_PAGE, .long hypercall_page) 32 32 ELFNOTE(Xen, XEN_ELFNOTE_FEATURES, .asciz "!writable_page_tables|pae_pgdir_above_4gb") 33 - #ifdef CONFIG_X86_PAE 34 33 ELFNOTE(Xen, XEN_ELFNOTE_PAE_MODE, .asciz "yes") 35 - #else 36 - ELFNOTE(Xen, XEN_ELFNOTE_PAE_MODE, .asciz "no") 37 - #endif 38 34 ELFNOTE(Xen, XEN_ELFNOTE_LOADER, .asciz "generic") 39 35 40 36 #endif /*CONFIG_XEN */
-4
include/asm-x86/xen/page.h
··· 150 150 return (pte_t) { .pte = x }; 151 151 } 152 152 153 - #ifdef CONFIG_X86_PAE 154 153 #define pmd_val_ma(v) ((v).pmd) 155 154 #define pud_val_ma(v) ((v).pgd.pgd) 156 155 #define __pmd_ma(x) ((pmd_t) { (x) } ) 157 - #else /* !X86_PAE */ 158 - #define pmd_val_ma(v) ((v).pud.pgd.pgd) 159 - #endif /* CONFIG_X86_PAE */ 160 156 161 157 #define pgd_val_ma(x) ((x).pgd) 162 158