xen-devel
[Xen-devel] [PATCH 10/16] xen: clear reserved bits in l3 entries given i
To: |
Ingo Molnar <mingo@xxxxxxx> |
Subject: |
[Xen-devel] [PATCH 10/16] xen: clear reserved bits in l3 entries given in the initial pagetables |
From: |
Jeremy Fitzhardinge <jeremy@xxxxxxxx> |
Date: |
Wed, 27 May 2009 00:15:32 -0700 |
Cc: |
Chris Wright <chrisw@xxxxxxxxxx>, Xen-devel <xen-devel@xxxxxxxxxxxxxxxxxxx>, Ian Campbell <ian.campbell@xxxxxxxxxx>, Ky Srinivasan <ksrinivasan@xxxxxxxxxx>, kurt.hackel@xxxxxxxxxx, the arch/x86 maintainers <x86@xxxxxxxxxx>, Linux Kernel Mailing List <linux-kernel@xxxxxxxxxxxxxxx>, Jeremy Fitzhardinge <jeremy.fitzhardinge@xxxxxxxxxx>, Jens Axboe <jens.axboe@xxxxxxxxxx>, Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx>, Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx>, Greg KH <gregkh@xxxxxxx> |
Delivery-date: |
Wed, 27 May 2009 00:24:39 -0700 |
Envelope-to: |
www-data@xxxxxxxxxxxxxxxxxxx |
In-reply-to: |
<1243408538-21100-1-git-send-email-jeremy@xxxxxxxx> |
List-help: |
<mailto:xen-devel-request@lists.xensource.com?subject=help> |
List-id: |
Xen developer discussion <xen-devel.lists.xensource.com> |
List-post: |
<mailto:xen-devel@lists.xensource.com> |
List-subscribe: |
<http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe> |
List-unsubscribe: |
<http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe> |
References: |
<1243408538-21100-1-git-send-email-jeremy@xxxxxxxx> |
Sender: |
xen-devel-bounces@xxxxxxxxxxxxxxxxxxx |
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.
[ Impact: workaround Xen bug in 32-on-64 dom0 ]
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 05cfd30..85d9d18 100644
--- a/arch/x86/xen/mmu.c
+++ b/arch/x86/xen/mmu.c
@@ -1835,6 +1835,7 @@ __init pgd_t *xen_setup_kernel_pagetable(pgd_t *pgd,
unsigned long max_pfn)
{
pmd_t *kernel_pmd;
+ int i;
max_pfn_mapped = PFN_DOWN(__pa(xen_start_info->pt_base) +
xen_start_info->nr_pt_frames * PAGE_SIZE +
@@ -1846,6 +1847,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] [GIT PULL REPOST] xen/dom0/core - core Xen dom0 support changes, Jeremy Fitzhardinge
- [Xen-devel] [PATCH 01/16] xen dom0: Make hvc_xen console work for dom0., Jeremy Fitzhardinge
- [Xen-devel] [PATCH 04/16] xen dom0: Add support for the platform_ops hypercall, Jeremy Fitzhardinge
- [Xen-devel] [PATCH 02/16] xen dom0: Initialize xenbus for dom0., Jeremy Fitzhardinge
- [Xen-devel] [PATCH 03/16] xen dom0: Set up basic IO permissions for dom0., Jeremy Fitzhardinge
- [Xen-devel] [PATCH 06/16] xen: disable PAT, Jeremy Fitzhardinge
- [Xen-devel] [PATCH 05/16] xen mtrr: Add mtrr_ops support for Xen mtrr, Jeremy Fitzhardinge
- [Xen-devel] [PATCH 08/16] xen/dom0: Use host E820 map, Jeremy Fitzhardinge
- [Xen-devel] [PATCH 09/16] xen: implement XENMEM_machphys_mapping, Jeremy Fitzhardinge
- [Xen-devel] [PATCH 07/16] xen/dom0: use _PAGE_IOMAP in ioremap to do machine mappings, Jeremy Fitzhardinge
- [Xen-devel] [PATCH 10/16] xen: clear reserved bits in l3 entries given in the initial pagetables,
Jeremy Fitzhardinge <=
- [Xen-devel] [PATCH 13/16] x86: make /dev/mem mappings _PAGE_IOMAP, Jeremy Fitzhardinge
- [Xen-devel] [PATCH 12/16] xen/dom0: add XEN_DOM0 config option, Jeremy Fitzhardinge
- [Xen-devel] [PATCH 14/16] paravirtualize IO permission bitmap, Jeremy Fitzhardinge
- [Xen-devel] [PATCH 11/16] xen: allow enable use of VGA console on dom0, Jeremy Fitzhardinge
- [Xen-devel] [PATCH 15/16] x86: don't need "changed" parameter for set_io_bitmap(), Jeremy Fitzhardinge
- [Xen-devel] [PATCH 16/16] xen/i386: make sure initial VGA/ISA mappings are not overridden, Jeremy Fitzhardinge
|
|
|