]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
xen: implement updated XENMEM_add_to_physmap_range ABI
authorIan Campbell <Ian.Campbell@citrix.com>
Fri, 4 Jan 2013 14:04:12 +0000 (14:04 +0000)
committerKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Fri, 11 Jan 2013 17:51:31 +0000 (12:51 -0500)
Allows for more fine grained error reporting. Only used by PVH and
ARM both of which are marked EXPERIMENTAL precisely because the ABI
is not yet stable

Signed-off-by: Ian Campbell <ian.campbell@citrix.com>
Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
arch/arm/xen/enlighten.c
arch/x86/xen/mmu.c
include/xen/interface/memory.h

index f28fc1ac87600d4cb25d323b2a6e7aabf19e8849..31e4ae352568072618fca54af1f84d7289f02fc9 100644 (file)
@@ -59,14 +59,16 @@ static int map_foreign_page(unsigned long lpfn, unsigned long fgmfn,
        };
        xen_ulong_t idx = fgmfn;
        xen_pfn_t gpfn = lpfn;
+       int err = 0;
 
        set_xen_guest_handle(xatp.idxs, &idx);
        set_xen_guest_handle(xatp.gpfns, &gpfn);
+       set_xen_guest_handle(xatp.errs, &err);
 
        rc = HYPERVISOR_memory_op(XENMEM_add_to_physmap_range, &xatp);
-       if (rc) {
-               pr_warn("Failed to map pfn to mfn rc:%d pfn:%lx mfn:%lx\n",
-                       rc, lpfn, fgmfn);
+       if (rc || err) {
+               pr_warn("Failed to map pfn to mfn rc:%d:%d pfn:%lx mfn:%lx\n",
+                       rc, err, lpfn, fgmfn);
                return 1;
        }
        return 0;
index ca89d98015b63e5b3e01521777439792d11d9c2d..1a3806074b4342cb46616cb6237e6c6e3c2566c4 100644 (file)
@@ -2509,14 +2509,16 @@ static int pvh_add_to_xen_p2m(unsigned long lpfn, unsigned long fgmfn,
        };
        xen_ulong_t idx = fgmfn;
        xen_pfn_t gpfn = lpfn;
+       int err = 0;
 
        set_xen_guest_handle(xatp.idxs, &idx);
        set_xen_guest_handle(xatp.gpfns, &gpfn);
+       set_xen_guest_handle(xatp.errs, &err);
 
        rc = HYPERVISOR_memory_op(XENMEM_add_to_physmap_range, &xatp);
-       if (rc)
-               pr_warn("d0: Failed to map pfn (0x%lx) to mfn (0x%lx) rc:%d\n",
-                       lpfn, fgmfn, rc);
+       if (rc || err)
+               pr_warn("d0: Failed to map pfn (0x%lx) to mfn (0x%lx) rc:%d:%d\n",
+                       lpfn, fgmfn, rc, err);
        return rc;
 }
 
index b40a4315cb8b0724a7ff373570c5526800dceee5..2ecfe4f700d94ce9adefdf423e235fe7c5e3d14c 100644 (file)
@@ -190,6 +190,7 @@ DEFINE_GUEST_HANDLE_STRUCT(xen_add_to_physmap);
 
 #define XENMEM_add_to_physmap_range 23
 struct xen_add_to_physmap_range {
+    /* IN */
     /* Which domain to change the mapping for. */
     domid_t domid;
     uint16_t space; /* => enum phys_map_space */
@@ -203,6 +204,11 @@ struct xen_add_to_physmap_range {
 
     /* GPFN in domid where the source mapping page should appear. */
     GUEST_HANDLE(xen_pfn_t) gpfns;
+
+    /* OUT */
+
+    /* Per index error code. */
+    GUEST_HANDLE(int) errs;
 };
 DEFINE_GUEST_HANDLE_STRUCT(xen_add_to_physmap_range);