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

Re: [Xen-devel] [PATCH v1 07/12] tmem/libxc: Squash XEN_SYSCTL_TMEM_OP_[SET|SAVE]..



>>> On 28.09.16 at 11:42, <konrad.wilk@xxxxxxxxxx> wrote:
> Hypervisor wise we had to do a bit of casting. The
> 'struct xen_sysctl_tmem_op'->buf variable is a pointer to
> char. Casting that using the guest_handle_cast to a structure
> (struct tmem_client) does not work. Hence we first have to
> cast it a void and then to xen_sysctl_tmem_client_t.
> This could be improved by having an union and in fact the
> patch titled:
> "tmem: Handle 'struct tmem_info' as a seperate field in the"
> does that. It could be squashed in here but that can make
> it harder to review.

Perhaps appropriate parts of that should then be made a prereq
patch for this one?

> --- a/xen/common/tmem_control.c
> +++ b/xen/common/tmem_control.c
> @@ -258,43 +258,58 @@ static int tmemc_list(domid_t cli_id, 
> tmem_cli_va_param_t buf, uint32_t len,
>      return 0;
>  }
>  
> -static int __tmemc_set_var(struct client *client, uint32_t subop, uint32_t 
> arg1)
> +static int __tmemc_set_var(struct client *client, uint32_t subop,
> +                           XEN_GUEST_HANDLE_PARAM(xen_sysctl_tmem_client_t) 
> buf)
>  {
>      domid_t cli_id = client->cli_id;
>      uint32_t old_weight;
> +    xen_sysctl_tmem_client_t info = { };
>  
> -    switch (subop)
> +    ASSERT(client);
> +
> +    if ( subop != XEN_SYSCTL_TMEM_OP_SET_CLIENT_INFO )
> +    {
> +        tmem_client_warn("tmem: unknown subop %d for tmemc_set_var\n", 
> subop);
> +        return -1;
> +    }
> +    if ( copy_from_guest(&info, buf, 1) )
> +        return -EFAULT;
> +
> +    if ( info.weight != client->info.weight )

Ahead of this - no need to check at least the version field (which I
think would have been more obvious if the field got added in this
patch rather than in the earlier one)?

> +    case XEN_SYSCTL_TMEM_OP_GET_CLIENT_INFO:
> +        rc = 0;
> +        info = guest_handle_cast(buf, xen_sysctl_tmem_client_t);
> +        if ( client )
> +        {
> +            if ( copy_to_guest(info, &client->info, 1) )
> +                rc = -EFAULT;
> +        }
> +        else
> +        {
> +            xen_sysctl_tmem_client_t generic = { .version = 
> TMEM_SPEC_VERSION,
> +                                                 .maxpools = 
> MAX_POOLS_PER_DOMAIN };

static const?

> +typedef struct tmem_client xen_sysctl_tmem_client_t;

Please have typedef name and structure tag match (except
obviously for the trailing _t); in particular I'm not sure about
the need for the _sysctl infix.

Jan


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel

 


Rackspace

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