xen-devel
[Xen-devel] [PATCH] xen: clear reserved bits in l3 entries given in the
From: Ian Campbell <ian.campbell@xxxxxxxxxx>
In native PAE, the only flag that may be legitimately set in an L3
entry is Present. When Xen grafts the top-level PAE L3 pagetable
entries into the L4 pagetable, it must also set the other permissions
flags so that the mapped pages are actually accessible.
However, due to a bug in the hypervisor, it validates update to the L3
entries as formal PAE entries, so it will refuse to validate these
entries with the extra bits requires for 4-level pagetables.
This patch simply masks the entries back to the bare PAE level,
leaving Xen to add whatever bits it feels are necessary.
Signed-off-by: Ian Campbell <ian.campbell@xxxxxxxxxx>
Signed-off-by: Jeremy Fitzhardinge <jeremy.fitzhardinge@xxxxxxxxxx>
---
arch/x86/xen/mmu.c | 15 +++++++++++++++
1 files changed, 15 insertions(+), 0 deletions(-)
diff --git a/arch/x86/xen/mmu.c b/arch/x86/xen/mmu.c
index 367a7d2..5f034a1 100644
--- a/arch/x86/xen/mmu.c
+++ b/arch/x86/xen/mmu.c
@@ -1778,6 +1778,7 @@ __init pgd_t *xen_setup_kernel_pagetable(pgd_t *pgd,
unsigned long max_pfn)
{
pmd_t *kernel_pmd;
+ int i;
init_pg_tables_start = __pa(pgd);
init_pg_tables_end = __pa(pgd) + xen_start_info->nr_pt_frames*PAGE_SIZE;
@@ -1789,6 +1790,20 @@ __init pgd_t *xen_setup_kernel_pagetable(pgd_t *pgd,
xen_map_identity_early(level2_kernel_pgt, max_pfn);
memcpy(swapper_pg_dir, pgd, sizeof(pgd_t) * PTRS_PER_PGD);
+
+ /*
+ * When running a 32 bit domain 0 on a 64 bit hypervisor a
+ * pinned L3 (such as the initial pgd here) contains bits
+ * which are reserved in the PAE layout but not in the 64 bit
+ * layout. Unfortunately some versions of the hypervisor
+ * (incorrectly) validate compat mode guests against the PAE
+ * layout and hence will not allow such a pagetable to be
+ * pinned by the guest. Therefore we mask off only the PFN and
+ * Present bits of the supplied L3.
+ */
+ for (i = 0; i < PTRS_PER_PGD; i++)
+ swapper_pg_dir[i].pgd &= (PTE_PFN_MASK | _PAGE_PRESENT);
+
set_pgd(&swapper_pg_dir[KERNEL_PGD_BOUNDARY],
__pgd(__pa(level2_kernel_pgt) | _PAGE_PRESENT));
--
1.6.0.6
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|
<Prev in Thread] |
Current Thread |
[Next in Thread>
|
- [Xen-devel] [PATCH] xen: core dom0 support, Jeremy Fitzhardinge
- [Xen-devel] [PATCH] xen dom0: Initialize xenbus for dom0., Jeremy Fitzhardinge
- [Xen-devel] [PATCH] xen dom0: Set up basic IO permissions for dom0., Jeremy Fitzhardinge
- [Xen-devel] [PATCH] xen-dom0: only selectively disable cpu features, Jeremy Fitzhardinge
- [Xen-devel] [PATCH] xen dom0: Make hvc_xen console work for dom0., Jeremy Fitzhardinge
- [Xen-devel] [PATCH] xen: disable PAT, Jeremy Fitzhardinge
- [Xen-devel] [PATCH] xen dom0: Add support for the platform_ops hypercall, Jeremy Fitzhardinge
- [Xen-devel] [PATCH] xen mtrr: Add mtrr_ops support for Xen mtrr, Jeremy Fitzhardinge
- [Xen-devel] [PATCH] paravirt/xen: add pvop for page_is_ram, Jeremy Fitzhardinge
- [Xen-devel] [PATCH] xen/dom0: add XEN_DOM0 config option, Jeremy Fitzhardinge
- [Xen-devel] [PATCH] xen: clear reserved bits in l3 entries given in the initial pagetables,
Jeremy Fitzhardinge <=
- [Xen-devel] [PATCH] xen/dom0: use _PAGE_IOMAP in ioremap to do machine mappings, Jeremy Fitzhardinge
- [Xen-devel] [PATCH] xen/dom0: Use host E820 map, Jeremy Fitzhardinge
- [Xen-devel] [PATCH] xen mtrr: Kill some unneccessary includes, Jeremy Fitzhardinge
- [Xen-devel] [PATCH] xen mtrr: Use specific cpu_has_foo macros instead of generic cpu_has(), Jeremy Fitzhardinge
- [Xen-devel] [PATCH] xen: implement XENMEM_machphys_mapping, Jeremy Fitzhardinge
- [Xen-devel] [PATCH] xen mtrr: Use generic_validate_add_page(), Jeremy Fitzhardinge
- [Xen-devel] [PATCH] xen mtrr: Implement xen_get_free_region(), Jeremy Fitzhardinge
- [Xen-devel] [PATCH] xen mtrr: Add xen_{get, set}_mtrr() implementations, Jeremy Fitzhardinge
- [Xen-devel] [PATCH] xen: allow enable use of VGA console on dom0, Jeremy Fitzhardinge
- Re: [Xen-devel] [PATCH] xen: core dom0 support, Boris Derzhavets
|
|
|