rename XENMEM_add_to_physmap_{range => batch} The use of "range" here wasn't really correct - there are no ranges involved. As the comment in the public header already correctly said, all this is about is batching of XENMEM_add_to_physmap calls (with the addition of having a way to specify a foreign domain for XENMAPSPACE_gmfn_foreign). Suggested-by: Ian Campbell Signed-off-by: Jan Beulich Acked-by: Ian Campbell --- v2: fix the compatibility DEFINE_XEN_GUEST_HANDLE() --- a/xen/common/memory.c +++ b/xen/common/memory.c @@ -595,54 +595,54 @@ static int xenmem_add_to_physmap(struct return rc; } -static int xenmem_add_to_physmap_range(struct domain *d, - struct xen_add_to_physmap_range *xatpr, +static int xenmem_add_to_physmap_batch(struct domain *d, + struct xen_add_to_physmap_batch *xatpb, unsigned int start) { unsigned int done = 0; int rc; - if ( xatpr->size < start ) + if ( xatpb->size < start ) return -EILSEQ; - guest_handle_add_offset(xatpr->idxs, start); - guest_handle_add_offset(xatpr->gpfns, start); - guest_handle_add_offset(xatpr->errs, start); - xatpr->size -= start; + guest_handle_add_offset(xatpb->idxs, start); + guest_handle_add_offset(xatpb->gpfns, start); + guest_handle_add_offset(xatpb->errs, start); + xatpb->size -= start; - while ( xatpr->size > done ) + while ( xatpb->size > done ) { xen_ulong_t idx; xen_pfn_t gpfn; - if ( unlikely(__copy_from_guest_offset(&idx, xatpr->idxs, 0, 1)) ) + if ( unlikely(__copy_from_guest_offset(&idx, xatpb->idxs, 0, 1)) ) { rc = -EFAULT; goto out; } - if ( unlikely(__copy_from_guest_offset(&gpfn, xatpr->gpfns, 0, 1)) ) + if ( unlikely(__copy_from_guest_offset(&gpfn, xatpb->gpfns, 0, 1)) ) { rc = -EFAULT; goto out; } - rc = xenmem_add_to_physmap_one(d, xatpr->space, - xatpr->foreign_domid, + rc = xenmem_add_to_physmap_one(d, xatpb->space, + xatpb->foreign_domid, idx, gpfn); - if ( unlikely(__copy_to_guest_offset(xatpr->errs, 0, &rc, 1)) ) + if ( unlikely(__copy_to_guest_offset(xatpb->errs, 0, &rc, 1)) ) { rc = -EFAULT; goto out; } - guest_handle_add_offset(xatpr->idxs, 1); - guest_handle_add_offset(xatpr->gpfns, 1); - guest_handle_add_offset(xatpr->errs, 1); + guest_handle_add_offset(xatpb->idxs, 1); + guest_handle_add_offset(xatpb->gpfns, 1); + guest_handle_add_offset(xatpb->errs, 1); /* Check for continuation if it's not the last iteration. */ - if ( xatpr->size > ++done && hypercall_preempt_check() ) + if ( xatpb->size > ++done && hypercall_preempt_check() ) { rc = start + done; goto out; @@ -797,7 +797,7 @@ long do_memory_op(unsigned long cmd, XEN if ( copy_from_guest(&xatp, arg, 1) ) return -EFAULT; - /* Foreign mapping is only possible via add_to_physmap_range. */ + /* Foreign mapping is only possible via add_to_physmap_batch. */ if ( xatp.space == XENMAPSPACE_gmfn_foreign ) return -ENOSYS; @@ -824,29 +824,29 @@ long do_memory_op(unsigned long cmd, XEN return rc; } - case XENMEM_add_to_physmap_range: + case XENMEM_add_to_physmap_batch: { - struct xen_add_to_physmap_range xatpr; + struct xen_add_to_physmap_batch xatpb; struct domain *d; - BUILD_BUG_ON((typeof(xatpr.size))-1 > + BUILD_BUG_ON((typeof(xatpb.size))-1 > (UINT_MAX >> MEMOP_EXTENT_SHIFT)); /* Check for malicious or buggy input. */ - if ( start_extent != (typeof(xatpr.size))start_extent ) + if ( start_extent != (typeof(xatpb.size))start_extent ) return -EDOM; - if ( copy_from_guest(&xatpr, arg, 1) || - !guest_handle_okay(xatpr.idxs, xatpr.size) || - !guest_handle_okay(xatpr.gpfns, xatpr.size) || - !guest_handle_okay(xatpr.errs, xatpr.size) ) + if ( copy_from_guest(&xatpb, arg, 1) || + !guest_handle_okay(xatpb.idxs, xatpb.size) || + !guest_handle_okay(xatpb.gpfns, xatpb.size) || + !guest_handle_okay(xatpb.errs, xatpb.size) ) return -EFAULT; /* This mapspace is unsupported for this hypercall. */ - if ( xatpr.space == XENMAPSPACE_gmfn_range ) + if ( xatpb.space == XENMAPSPACE_gmfn_range ) return -EOPNOTSUPP; - d = rcu_lock_domain_by_any_id(xatpr.domid); + d = rcu_lock_domain_by_any_id(xatpb.domid); if ( d == NULL ) return -ESRCH; @@ -857,7 +857,7 @@ long do_memory_op(unsigned long cmd, XEN return rc; } - rc = xenmem_add_to_physmap_range(d, &xatpr, start_extent); + rc = xenmem_add_to_physmap_batch(d, &xatpb, start_extent); rcu_unlock_domain(d); --- a/xen/include/public/arch-arm.h +++ b/xen/include/public/arch-arm.h @@ -79,7 +79,7 @@ * * In addition the following arch specific sub-ops: * * XENMEM_add_to_physmap - * * XENMEM_add_to_physmap_range + * * XENMEM_add_to_physmap_batch * * HYPERVISOR_domctl * All generic sub-operations, with the exception of: --- a/xen/include/public/memory.h +++ b/xen/include/public/memory.h @@ -207,8 +207,7 @@ DEFINE_XEN_GUEST_HANDLE(xen_machphys_map #define XENMAPSPACE_gmfn 2 /* GMFN */ #define XENMAPSPACE_gmfn_range 3 /* GMFN range, XENMEM_add_to_physmap only. */ #define XENMAPSPACE_gmfn_foreign 4 /* GMFN from another dom, - * XENMEM_add_to_physmap_range only. - */ + * XENMEM_add_to_physmap_batch only. */ /* ` } */ /* @@ -238,8 +237,8 @@ typedef struct xen_add_to_physmap xen_ad 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 { +#define XENMEM_add_to_physmap_batch 23 +struct xen_add_to_physmap_batch { /* IN */ /* Which domain to change the mapping for. */ domid_t domid; @@ -260,8 +259,15 @@ struct xen_add_to_physmap_range { /* 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); +typedef struct xen_add_to_physmap_batch xen_add_to_physmap_batch_t; +DEFINE_XEN_GUEST_HANDLE(xen_add_to_physmap_batch_t); + +#if __XEN_INTERFACE_VERSION__ < 0x00040400 +#define XENMEM_add_to_physmap_range XENMEM_add_to_physmap_batch +#define xen_add_to_physmap_range xen_add_to_physmap_batch +typedef struct xen_add_to_physmap_batch xen_add_to_physmap_range_t; +DEFINE_XEN_GUEST_HANDLE(xen_add_to_physmap_range_t); +#endif /* * Unmaps the page appearing at a particular GPFN from the specified guest's