Commit 07d0c943 authored by Ian Campbell's avatar Ian Campbell Committed by Konrad Rzeszutek Wilk

xen: implement updated XENMEM_add_to_physmap_range ABI

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: default avatarIan Campbell <ian.campbell@citrix.com>
[v1: Rebased without PVH patches]
Signed-off-by: default avatarKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>
parent dacd45f4
...@@ -59,14 +59,16 @@ static int map_foreign_page(unsigned long lpfn, unsigned long fgmfn, ...@@ -59,14 +59,16 @@ static int map_foreign_page(unsigned long lpfn, unsigned long fgmfn,
}; };
xen_ulong_t idx = fgmfn; xen_ulong_t idx = fgmfn;
xen_pfn_t gpfn = lpfn; xen_pfn_t gpfn = lpfn;
int err = 0;
set_xen_guest_handle(xatp.idxs, &idx); set_xen_guest_handle(xatp.idxs, &idx);
set_xen_guest_handle(xatp.gpfns, &gpfn); set_xen_guest_handle(xatp.gpfns, &gpfn);
set_xen_guest_handle(xatp.errs, &err);
rc = HYPERVISOR_memory_op(XENMEM_add_to_physmap_range, &xatp); rc = HYPERVISOR_memory_op(XENMEM_add_to_physmap_range, &xatp);
if (rc) { if (rc || err) {
pr_warn("Failed to map pfn to mfn rc:%d pfn:%lx mfn:%lx\n", pr_warn("Failed to map pfn to mfn rc:%d:%d pfn:%lx mfn:%lx\n",
rc, lpfn, fgmfn); rc, err, lpfn, fgmfn);
return 1; return 1;
} }
return 0; return 0;
......
...@@ -190,6 +190,7 @@ DEFINE_GUEST_HANDLE_STRUCT(xen_add_to_physmap); ...@@ -190,6 +190,7 @@ DEFINE_GUEST_HANDLE_STRUCT(xen_add_to_physmap);
#define XENMEM_add_to_physmap_range 23 #define XENMEM_add_to_physmap_range 23
struct xen_add_to_physmap_range { struct xen_add_to_physmap_range {
/* IN */
/* Which domain to change the mapping for. */ /* Which domain to change the mapping for. */
domid_t domid; domid_t domid;
uint16_t space; /* => enum phys_map_space */ uint16_t space; /* => enum phys_map_space */
...@@ -203,6 +204,11 @@ struct xen_add_to_physmap_range { ...@@ -203,6 +204,11 @@ struct xen_add_to_physmap_range {
/* GPFN in domid where the source mapping page should appear. */ /* GPFN in domid where the source mapping page should appear. */
GUEST_HANDLE(xen_pfn_t) gpfns; GUEST_HANDLE(xen_pfn_t) gpfns;
/* OUT */
/* Per index error code. */
GUEST_HANDLE(int) errs;
}; };
DEFINE_GUEST_HANDLE_STRUCT(xen_add_to_physmap_range); DEFINE_GUEST_HANDLE_STRUCT(xen_add_to_physmap_range);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment