aboutsummaryrefslogtreecommitdiffstats
path: root/xen
diff options
context:
space:
mode:
authorIan Campbell <ian.campbell@citrix.com>2013-01-17 16:48:23 +0000
committerIan Campbell <ian.campbell@citrix.com>2013-01-17 16:48:23 +0000
commit550d4d96d7c8c8b628979a4fda0fb438304afcbb (patch)
tree29d751b9d68ae697b6a7a64e3ec79e7365c6c244 /xen
parent3a55ef6cf7f70c758c7ae9943de14b02f6dac6be (diff)
downloadxen-550d4d96d7c8c8b628979a4fda0fb438304afcbb.tar.gz
xen-550d4d96d7c8c8b628979a4fda0fb438304afcbb.tar.bz2
xen-550d4d96d7c8c8b628979a4fda0fb438304afcbb.zip
xen: return a per-mapping error from XENMEM_add_to_physmap_range.
Since ARM and PVH dom0 kernel use this to map foreign domain pages they could in the future hit paged out or shared pages etc and therefore need to propagate which frames are -ENOENT and which failed for some other reason. We have not yet released a version of Xen with this particular hypercall subop so we can change the interface without worrying about compatibility (I think/hope). This would be used by the privcmd driver, in particular it relates to Mats' patch "improve performance of MMAPBATCH_V2." NB I have only implemented the ARM side since the PVH side isn't in tree yet. Signed-off-by: Ian Campbell <ian.campbell@citrix.com> Acked-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com> Acked-by: Keir Fraser <keir@xen.org> Acked-by: Mats Petersson <mats.petersson@citrix.com> Committed-by: Ian Campbell <ian.campbell@citrix.com>
Diffstat (limited to 'xen')
-rw-r--r--xen/arch/arm/mm.c4
-rw-r--r--xen/include/public/memory.h8
2 files changed, 11 insertions, 1 deletions
diff --git a/xen/arch/arm/mm.c b/xen/arch/arm/mm.c
index d97b3ea4af..945e7acb5e 100644
--- a/xen/arch/arm/mm.c
+++ b/xen/arch/arm/mm.c
@@ -612,6 +612,10 @@ static int xenmem_add_to_physmap_range(struct domain *d,
xatpr->foreign_domid,
idx, gpfn);
+ rc = copy_to_guest_offset(xatpr->errs, xatpr->size-1, &rc, 1);
+ if ( rc < 0 )
+ goto out;
+
xatpr->size--;
/* Check for continuation if it's not the last interation */
diff --git a/xen/include/public/memory.h b/xen/include/public/memory.h
index 3ee290208d..62acabd021 100644
--- a/xen/include/public/memory.h
+++ b/xen/include/public/memory.h
@@ -236,6 +236,7 @@ DEFINE_XEN_GUEST_HANDLE(xen_add_to_physmap_t);
/* A batched version of 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 */
@@ -247,8 +248,13 @@ struct xen_add_to_physmap_range {
/* Indexes into space being mapped. */
XEN_GUEST_HANDLE(xen_ulong_t) idxs;
- /* GPFN in domdwhere the source mapping page should appear. */
+ /* GPFN in domid where the source mapping page should appear. */
XEN_GUEST_HANDLE(xen_pfn_t) gpfns;
+
+ /* OUT */
+
+ /* Per index error code. */
+ XEN_GUEST_HANDLE(int) errs;
};
typedef struct xen_add_to_physmap_range xen_add_to_physmap_range_t;
DEFINE_XEN_GUEST_HANDLE(xen_add_to_physmap_range_t);