]> xenbits.xensource.com Git - xen.git/commitdiff
x86, libxc: Fix xc_translate_foreign_address() for PV guests of
authorKeir Fraser <keir@xen.org>
Tue, 8 Mar 2011 16:23:19 +0000 (16:23 +0000)
committerKeir Fraser <keir@xen.org>
Tue, 8 Mar 2011 16:23:19 +0000 (16:23 +0000)
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

tools/include/xen-foreign/structs.py
tools/libxc/xc_pagetab.c

index a1bc055a197153669ca6a6e3132f9942d2fb0c6e..964829c53462831dcfb308ae7555fe2475b3434d 100644 (file)
@@ -53,6 +53,7 @@ defines = [ "__i386__",
 
             # all archs
             "xen_pfn_to_cr3",
+            "xen_cr3_to_pfn",
             "XEN_LEGACY_MAX_VCPUS",
             "MAX_GUEST_CMDLINE" ];
 
index 1a4a3d01e5fa005a03ffd18f6d786f23ac71190b..40bf11a20a84379593d26734f748ab34f871b15d 100644 (file)
@@ -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;
         }
     }