[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH v4 12/18] x86/mem_sharing: Enable mem_sharing on first memop



On Thu, Jan 16, 2020 at 9:18 AM Jan Beulich <jbeulich@xxxxxxxx> wrote:
>
> On 08.01.2020 18:14, Tamas K Lengyel wrote:
> > It is wasteful to require separate hypercalls to enable sharing on both the
> > parent and the client domain during VM forking. To speed things up we enable
> > sharing on the first memop in case it wasn't already enabled.
> >
> > Signed-off-by: Tamas K Lengyel <tamas.lengyel@xxxxxxxxx>
> > ---
> >  xen/arch/x86/mm/mem_sharing.c | 36 +++++++++++++++++++++--------------
> >  1 file changed, 22 insertions(+), 14 deletions(-)
> >
> > diff --git a/xen/arch/x86/mm/mem_sharing.c b/xen/arch/x86/mm/mem_sharing.c
> > index 3f36cd6bbc..b8a9228ecf 100644
> > --- a/xen/arch/x86/mm/mem_sharing.c
> > +++ b/xen/arch/x86/mm/mem_sharing.c
> > @@ -1412,6 +1412,24 @@ static int range_share(struct domain *d, struct 
> > domain *cd,
> >      return rc;
> >  }
> >
> > +static inline int mem_sharing_control(struct domain *d, bool enable)
> > +{
> > +    if ( enable )
> > +    {
> > +        if ( unlikely(!is_hvm_domain(d)) )
> > +            return -ENOSYS;
>
> -EOPNOTSUPP or some such please. ENOSYS has a very specific meaning,
> which (according to my understanding) doesn't apply here.
>
> > +        if ( unlikely(!hap_enabled(d)) )
> > +            return -ENODEV;
>
> Doesn't this allow dropping the HAP check from
> mem_sharing_enabled(d)?

Yes, looks like it could be dropped from there.

>
> > +        if ( unlikely(is_iommu_enabled(d)) )
> > +            return -EXDEV;
> > +    }
> > +
> > +    d->arch.hvm.mem_sharing.enabled = enable;
> > +    return 0;
> > +}
> > +
> >  int mem_sharing_memop(XEN_GUEST_HANDLE_PARAM(xen_mem_sharing_op_t) arg)
> >  {
> >      int rc;
> > @@ -1433,10 +1451,8 @@ int 
> > mem_sharing_memop(XEN_GUEST_HANDLE_PARAM(xen_mem_sharing_op_t) arg)
> >      if ( rc )
> >          goto out;
> >
> > -    /* Only HAP is supported */
> > -    rc = -ENODEV;
> > -    if ( !mem_sharing_enabled(d) )
> > -        goto out;
> > +    if ( !mem_sharing_enabled(d) && (rc = mem_sharing_control(d, true)) )
> > +        return rc;
>
> Perhaps already in patch 6, doesn't this eliminate the need for the
> individual mem_sharing_enabled() checks in the case blocks?

Yes it does. I think I was planning on removing those checks but it
slipped my mind.

>
> > @@ -1703,18 +1719,10 @@ int mem_sharing_domctl(struct domain *d, struct 
> > xen_domctl_mem_sharing_op *mec)
> >  {
> >      int rc;
> >
> > -    /* Only HAP is supported */
> > -    if ( !hap_enabled(d) )
> > -        return -ENODEV;
> > -
> > -    switch ( mec->op )
> > +    switch( mec->op )
>
> Please don't corrupt proper Xen style.

Ack.

Thanks!
Tamas

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.