aboutsummaryrefslogtreecommitdiffstats
path: root/arch/x86/xen
diff options
context:
space:
mode:
authorKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>2012-07-12 13:59:36 -0400
committerKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>2012-08-23 11:52:07 -0400
commitcaaf9ecf16feffa4f1a5a0d617bc78906a114514 (patch)
treeb439ea614a9d9ca77c46518421d0552c5a352db4 /arch/x86/xen
parentae895ed7839f918bbc8d5425b8973b25a534f4eb (diff)
xen/mmu: For 64-bit do not call xen_map_identity_early
B/c we do not need it. During the startup the Xen provides us with all the initial memory mapped that we need to function. The initial memory mapped is up to the bootstack, which means we can reference using __ka up to 4.f): (from xen/interface/xen.h): 4. This the order of bootstrap elements in the initial virtual region: a. relocated kernel image b. initial ram disk [mod_start, mod_len] c. list of allocated page frames [mfn_list, nr_pages] d. start_info_t structure [register ESI (x86)] e. bootstrap page tables [pt_base, CR3 (x86)] f. bootstrap stack [register ESP (x86)] (initial ram disk may be ommitted). [v1: More comments in git commit] Acked-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com> Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Diffstat (limited to 'arch/x86/xen')
-rw-r--r--arch/x86/xen/mmu.c11
1 files changed, 5 insertions, 6 deletions
diff --git a/arch/x86/xen/mmu.c b/arch/x86/xen/mmu.c
index 7247e5a62f27..a59070b09055 100644
--- a/arch/x86/xen/mmu.c
+++ b/arch/x86/xen/mmu.c
@@ -84,6 +84,7 @@
84 */ 84 */
85DEFINE_SPINLOCK(xen_reservation_lock); 85DEFINE_SPINLOCK(xen_reservation_lock);
86 86
87#ifdef CONFIG_X86_32
87/* 88/*
88 * Identity map, in addition to plain kernel map. This needs to be 89 * Identity map, in addition to plain kernel map. This needs to be
89 * large enough to allocate page table pages to allocate the rest. 90 * large enough to allocate page table pages to allocate the rest.
@@ -91,7 +92,7 @@ DEFINE_SPINLOCK(xen_reservation_lock);
91 */ 92 */
92#define LEVEL1_IDENT_ENTRIES (PTRS_PER_PTE * 4) 93#define LEVEL1_IDENT_ENTRIES (PTRS_PER_PTE * 4)
93static RESERVE_BRK_ARRAY(pte_t, level1_ident_pgt, LEVEL1_IDENT_ENTRIES); 94static RESERVE_BRK_ARRAY(pte_t, level1_ident_pgt, LEVEL1_IDENT_ENTRIES);
94 95#endif
95#ifdef CONFIG_X86_64 96#ifdef CONFIG_X86_64
96/* l3 pud for userspace vsyscall mapping */ 97/* l3 pud for userspace vsyscall mapping */
97static pud_t level3_user_vsyscall[PTRS_PER_PUD] __page_aligned_bss; 98static pud_t level3_user_vsyscall[PTRS_PER_PUD] __page_aligned_bss;
@@ -1628,7 +1629,7 @@ static void set_page_prot(void *addr, pgprot_t prot)
1628 if (HYPERVISOR_update_va_mapping((unsigned long)addr, pte, 0)) 1629 if (HYPERVISOR_update_va_mapping((unsigned long)addr, pte, 0))
1629 BUG(); 1630 BUG();
1630} 1631}
1631 1632#ifdef CONFIG_X86_32
1632static void __init xen_map_identity_early(pmd_t *pmd, unsigned long max_pfn) 1633static void __init xen_map_identity_early(pmd_t *pmd, unsigned long max_pfn)
1633{ 1634{
1634 unsigned pmdidx, pteidx; 1635 unsigned pmdidx, pteidx;
@@ -1679,7 +1680,7 @@ static void __init xen_map_identity_early(pmd_t *pmd, unsigned long max_pfn)
1679 1680
1680 set_page_prot(pmd, PAGE_KERNEL_RO); 1681 set_page_prot(pmd, PAGE_KERNEL_RO);
1681} 1682}
1682 1683#endif
1683void __init xen_setup_machphys_mapping(void) 1684void __init xen_setup_machphys_mapping(void)
1684{ 1685{
1685 struct xen_machphys_mapping mapping; 1686 struct xen_machphys_mapping mapping;
@@ -1765,14 +1766,12 @@ void __init xen_setup_kernel_pagetable(pgd_t *pgd, unsigned long max_pfn)
1765 /* Note that we don't do anything with level1_fixmap_pgt which 1766 /* Note that we don't do anything with level1_fixmap_pgt which
1766 * we don't need. */ 1767 * we don't need. */
1767 1768
1768 /* Set up identity map */
1769 xen_map_identity_early(level2_ident_pgt, max_pfn);
1770
1771 /* Make pagetable pieces RO */ 1769 /* Make pagetable pieces RO */
1772 set_page_prot(init_level4_pgt, PAGE_KERNEL_RO); 1770 set_page_prot(init_level4_pgt, PAGE_KERNEL_RO);
1773 set_page_prot(level3_ident_pgt, PAGE_KERNEL_RO); 1771 set_page_prot(level3_ident_pgt, PAGE_KERNEL_RO);
1774 set_page_prot(level3_kernel_pgt, PAGE_KERNEL_RO); 1772 set_page_prot(level3_kernel_pgt, PAGE_KERNEL_RO);
1775 set_page_prot(level3_user_vsyscall, PAGE_KERNEL_RO); 1773 set_page_prot(level3_user_vsyscall, PAGE_KERNEL_RO);
1774 set_page_prot(level2_ident_pgt, PAGE_KERNEL_RO);
1776 set_page_prot(level2_kernel_pgt, PAGE_KERNEL_RO); 1775 set_page_prot(level2_kernel_pgt, PAGE_KERNEL_RO);
1777 set_page_prot(level2_fixmap_pgt, PAGE_KERNEL_RO); 1776 set_page_prot(level2_fixmap_pgt, PAGE_KERNEL_RO);
1778 1777