aboutsummaryrefslogtreecommitdiffstats
path: root/tools/libxc/xc_pagetab.c
diff options
context:
space:
mode:
authorKeir Fraser <keir@xen.org>2011-03-03 17:46:44 +0000
committerKeir Fraser <keir@xen.org>2011-03-03 17:46:44 +0000
commitc7f3f82a650f3c749b50e6923cfaf26d9e4719c5 (patch)
treeafc8b3e0e351691cb0d4153614685011575b0711 /tools/libxc/xc_pagetab.c
parent4804b5c5ae52f6718ca3e9699cdb96a5799b1d84 (diff)
downloadxen-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.c7
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;
}
}