mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 18:50:05 +01:00
[XEN] Fix CR3 plumbing for shadowed PV PAE guests.
Signed-off-by: Tim Deegan <Tim.Deegan@xensource.com>
This commit is contained in:
1 parent
f81b951ee4
commit
637a66db3d
1 file changed
+9
@@ -3514,7 +3514,16 @@ sh_update_cr3(struct vcpu *v)
|
||||
{
|
||||
/* We don't support PV except guest == shadow == config levels */
|
||||
BUG_ON(GUEST_PAGING_LEVELS != SHADOW_PAGING_LEVELS);
|
||||
#if SHADOW_PAGING_LEVELS == 3
|
||||
/* 2-on-3 or 3-on-3: Use the PAE shadow l3 table we just fabricated.
|
||||
* Don't use make_cr3 because (a) we know it's below 4GB, and
|
||||
* (b) it's not necessarily page-aligned, and make_cr3 takes a pfn */
|
||||
ASSERT(virt_to_maddr(&v->arch.shadow.l3table) <= 0xffffffe0ULL);
|
||||
v->arch.cr3 = virt_to_maddr(&v->arch.shadow.l3table);
|
||||
#else
|
||||
/* 2-on-2 or 4-on-4: Just use the shadow top-level directly */
|
||||
make_cr3(v, pagetable_get_pfn(v->arch.shadow_table[0]));
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
||||