[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [V7 PATCH 3/7] pvh dom0: implement XENMEM_add_to_physmap_range for x86
>>> On 17.12.13 at 03:38, Mukesh Rathor <mukesh.rathor@xxxxxxxxxx> wrote: > --- a/xen/arch/x86/mm.c > +++ b/xen/arch/x86/mm.c > @@ -4675,6 +4675,39 @@ static int xenmem_add_to_physmap(struct domain *d, > return xenmem_add_to_physmap_once(d, xatp); > } > > +static int xenmem_add_to_physmap_range(struct domain *d, > + struct xen_add_to_physmap_range > *xatpr) > +{ > + /* Process entries in reverse order to allow continuations */ > + while ( xatpr->size > 0 ) > + { > + int rc; > + xen_ulong_t idx; > + xen_pfn_t gpfn; > + struct xen_add_to_physmap xatp; > + > + if ( copy_from_guest_offset(&idx, xatpr->idxs, xatpr->size-1, 1) || > + copy_from_guest_offset(&gpfn, xatpr->gpfns, xatpr->size-1, 1) ) > + return -EFAULT; > + > + xatp.space = xatpr->space; > + xatp.idx = idx; > + xatp.gpfn = gpfn; > + rc = xenmem_add_to_physmap_once(d, &xatp); > + > + if ( copy_to_guest_offset(xatpr->errs, xatpr->size-1, &rc, 1) ) > + return -EFAULT; > + > + xatpr->size--; > + > + /* Check for continuation if it's not the last interation */ > + if ( xatpr->size > 0 && hypercall_preempt_check() ) > + return -EAGAIN; > + } > + > + return 0; > +} Now that I started looking into creating the compat wrapper for this, I realize that processing this request backwards is wrong: The effect of the entire hypercall can end up being different between forward and reverse processing, if an index or gpfn happens to be twice in the set. While that's perhaps not the usual thing to do, you never know how a creative user of the interface may find it useful to do so. Jan _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |