diff options
author | Keir Fraser <keir@xen.org> | 2011-03-03 17:46:44 +0000 |
---|---|---|
committer | Keir Fraser <keir@xen.org> | 2011-03-03 17:46:44 +0000 |
commit | c7f3f82a650f3c749b50e6923cfaf26d9e4719c5 (patch) | |
tree | afc8b3e0e351691cb0d4153614685011575b0711 /tools/libxc/xc_pagetab.c | |
parent | 4804b5c5ae52f6718ca3e9699cdb96a5799b1d84 (diff) | |
download | xen-c7f3f82a650f3c749b50e6923cfaf26d9e4719c5.tar.gz xen-c7f3f82a650f3c749b50e6923cfaf26d9e4719c5.tar.bz2 xen-c7f3f82a650f3c749b50e6923cfaf26d9e4719c5.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>
Diffstat (limited to 'tools/libxc/xc_pagetab.c')
-rw-r--r-- | tools/libxc/xc_pagetab.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/tools/libxc/xc_pagetab.c b/tools/libxc/xc_pagetab.c index 428c7fee97..b19a42c8af 100644 --- a/tools/libxc/xc_pagetab.c +++ b/tools/libxc/xc_pagetab.c @@ -61,11 +61,12 @@ unsigned long xc_translate_foreign_address(xc_interface *xch, 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; } } |