[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 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)?

> +        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?

> @@ -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.

Jan

_______________________________________________
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®.