diff options
author | Keir Fraser <keir@xen.org> | 2011-03-08 16:23:19 +0000 |
---|---|---|
committer | Keir Fraser <keir@xen.org> | 2011-03-08 16:23:19 +0000 |
commit | f48395673e6d5c07ae7fc224a3ce24346b086e0c (patch) | |
tree | 14244e9517da0715e44d9fe174d15a686cfb2e9e | |
parent | c7a057e756cb354d37ebb228cab269ac4acf5bba (diff) | |
download | xen-f48395673e6d5c07ae7fc224a3ce24346b086e0c.tar.gz xen-f48395673e6d5c07ae7fc224a3ce24346b086e0c.tar.bz2 xen-f48395673e6d5c07ae7fc224a3ce24346b086e0c.zip |
x86, libxc: Fix xc_translate_foreign_address() for PV guests of
different bitness than dom0 (32-bit vs 64-bit).
Original patch by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Keir Fraser <keir@xen.org>
xen-unstable changeset: 22966:de49500f344a
xen-unstable date: Thu Mar 03 17:46:44 2011 +0000
-rw-r--r-- | tools/include/xen-foreign/structs.py | 1 | ||||
-rw-r--r-- | tools/libxc/xc_pagetab.c | 7 |
2 files changed, 5 insertions, 3 deletions
diff --git a/tools/include/xen-foreign/structs.py b/tools/include/xen-foreign/structs.py index a1bc055a19..964829c534 100644 --- a/tools/include/xen-foreign/structs.py +++ b/tools/include/xen-foreign/structs.py @@ -53,6 +53,7 @@ defines = [ "__i386__", # all archs "xen_pfn_to_cr3", + "xen_cr3_to_pfn", "XEN_LEGACY_MAX_VCPUS", "MAX_GUEST_CMDLINE" ]; diff --git a/tools/libxc/xc_pagetab.c b/tools/libxc/xc_pagetab.c index 1a4a3d01e5..40bf11a20a 100644 --- a/tools/libxc/xc_pagetab.c +++ b/tools/libxc/xc_pagetab.c @@ -46,11 +46,12 @@ unsigned long xc_translate_foreign_address(int xc_handle, uint32_t dom, return 0; if (domctl.u.address_size.size == 64) { pt_levels = 4; - paddr = ctx.x64.ctrlreg[3] & ~0xfffull; + paddr = (uint64_t)xen_cr3_to_pfn_x86_64(ctx.x64.ctrlreg[3]) + << PAGE_SHIFT; } else { pt_levels = 3; - paddr = (((uint64_t) xen_cr3_to_pfn(ctx.x32.ctrlreg[3])) - << PAGE_SHIFT); + paddr = (uint64_t)xen_cr3_to_pfn_x86_32(ctx.x32.ctrlreg[3]) + << PAGE_SHIFT; } } |