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

Re: [Xen-devel] [PATCH] vm_event: Add a new opcode to get VM_EVENT_INTERFACE_VERSION



On Wed, 2019-02-13 at 08:27 -0700, Jan Beulich wrote:
> > > > On 13.02.19 at 14:25, <ppircalabu@xxxxxxxxxxxxxxx> wrote:
> > 
> > @@ -592,6 +592,19 @@ int vm_event_domctl(struct domain *d, struct
> > xen_domctl_vm_event_op *vec,
> >  {
> >      int rc;
> >  
> > +    if ( vec->op == XEN_VM_EVENT_GET_INTERFACE_VERSION )
> > +    {
> > +        vec->u.get_interface_version.value =
> > VM_EVENT_INTERFACE_VERSION;
> > +        return 0;
> > +    }
> > +
> > +    if ( unlikely(d == NULL) )
> > +    {
> > +        gdprintk(XENLOG_INFO,
> > +                 "Tried to do a memory event op on an invalid
> > domain.\n");
> > +        return -EINVAL;
> > +    }
> 
> To be compatible with previous behavior you want to return
> -ESRCH here. I'm also unconvinced of the need to add a log
> message here - there was none before in that case. But I'm
> not a maintainer of this code.
I will update the patch and post a new version.
> 
> > --- a/xen/include/public/domctl.h
> > +++ b/xen/include/public/domctl.h
> > @@ -778,9 +778,10 @@ struct xen_domctl_gdbsx_domstatus {
> >   * to the hypervisor to pull responses (resume) from the given
> >   * ring.
> >   */
> > -#define XEN_VM_EVENT_ENABLE               0
> > -#define XEN_VM_EVENT_DISABLE              1
> > -#define XEN_VM_EVENT_RESUME               2
> > +#define XEN_VM_EVENT_ENABLE                 0
> > +#define XEN_VM_EVENT_DISABLE                1
> > +#define XEN_VM_EVENT_RESUME                 2
> > +#define XEN_VM_EVENT_GET_INTERFACE_VERSION  3
> 
> Perhaps just XEN_VM_EVENT_GET_VERSION?
I agree, it's simpler. I have used "INTERFACE" only to match the
VM_EVENT_INTERFACE_VERSION macro.

> 
> > @@ -843,7 +844,15 @@ struct xen_domctl_vm_event_op {
> >      uint32_t       op;           /* XEN_VM_EVENT_* */
> >      uint32_t       mode;         /* XEN_DOMCTL_VM_EVENT_OP_* */
> >  
> > -    uint32_t port;              /* OUT: event channel for ring */
> > +    union {
> > +        struct {
> > +            uint32_t port;       /* OUT: event channel for ring */
> > +        } enable;
> > +
> > +        struct {
> > +            uint32_t value;
> > +        } get_interface_version;
> 
> Why the wrapper structs? Having just a "port" and "version"
> field inside the union would be good enough, wouldn't it? But
> even if you want to stick to that, the new structure's name
> could be simply "version", thus also allowing re-use for a
> hypothetical "set-version" operation (in case multiple versions
> would want/need to be supported going forward).
I chose to wrap the "port" field in a structure because it's valid only
for the XEN_VM_EVENT_ENABLE operation (I have used the wrapping structs
in order to match the operation name). 
The "version" domctl should only return the vm_event version
(VM_EVENT_INTERFACE_VERSION is a macro and is defined at compile time).
At least in this case I think the backward compatibility issues should
be handled only at the client level (easier maintainance and
deployment).

Many thanks for your comments,
Petre


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