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

Re: [Xen-devel] [RFC PATCH V3 06/22] Define extended event channel registration interface



On Thu, 2013-02-28 at 12:32 +0000, David Vrabel wrote:
> On 27/02/13 14:33, Wei Liu wrote:
> > This interface allows user to query supported event channel types. If we 
> > need
> > to disable a specific ABI in the future, we just need to remove the dead 
> > code
> > and clear corresponding feature bit.
> > 
> > Signed-off-by: Wei Liu <wei.liu2@xxxxxxxxxx>
> > ---
> >  xen/include/public/event_channel.h |   44 
> > ++++++++++++++++++++++++++++++++++++
> >  1 file changed, 44 insertions(+)
> > 
> > diff --git a/xen/include/public/event_channel.h 
> > b/xen/include/public/event_channel.h
> > index 07ff321..dff3364 100644
> > --- a/xen/include/public/event_channel.h
> > +++ b/xen/include/public/event_channel.h
> > @@ -71,6 +71,7 @@
> >  #define EVTCHNOP_bind_vcpu        8
> >  #define EVTCHNOP_unmask           9
> >  #define EVTCHNOP_reset           10
> > +#define EVTCHNOP_register_extended 11
> >  /* ` } */
> >  
> >  typedef uint32_t evtchn_port_t;
> > @@ -258,6 +259,49 @@ struct evtchn_reset {
> >  typedef struct evtchn_reset evtchn_reset_t;
> >  
> >  /*
> > + * EVTCHNOP_register_extended: Register extended event channel
> > + * NOTES:
> > + *  1. Currently only 3-level is supported.
> > + *  2. Should fall back to 2-level if this call fails.
> > + */
> > +/* 64 bit guests need 8 pages for evtchn_pending and evtchn_mask for
> > + * 256k event channels while 32 bit ones only need 1 page for 32k
> > + * event channels. */
> > +#define EVTCHN_MAX_L3_PAGES 8
> > +struct evtchn_register_3level {
> > +    /* IN parameters. */
> > +    uint32_t nr_pages;          /* for evtchn_{pending,mask} */
> > +    uint32_t nr_vcpus;          /* for l2sel_{mfns,offsets} */
> > +    XEN_GUEST_HANDLE(xen_pfn_t) evtchn_pending;
> > +    XEN_GUEST_HANDLE(xen_pfn_t) evtchn_mask;
> > +    XEN_GUEST_HANDLE(xen_pfn_t) l2sel_mfns;
> > +    XEN_GUEST_HANDLE(xen_pfn_t) l2sel_offsets;
> > +};
> 
> Registering per-VCPU resources at start-of-day doesn't seem like the
> right thing to do here.  Why waste resources for VCPUs that are never
> going to be used?  And I don't think we want to constraint how VCPU
> hotplug works by requiring resource for all possible VCPUs to be
> allocated up-front.
> 

My first thought was that it is important for Dom0 or driver domains to
get what they want otherwise the whole system suffers from performance
degradation.

I'm considering per-cpu registration call now, for the reason of saving
resources.

> 
> > + */
> > +#define EVTCHN_EXTENDED_QUERY 0
> > +/* supported extended event channel */
> > +#define EVTCHN_EXTENDED_NONE  0
> > +#define _EVTCHN_EXTENDED_L3   0
> > +#define EVTCHN_EXTENDED_L3    (1U << _EVTCHN_EXTENDED_L3)
> > +struct evtchn_register_extended {
> > +    /* IN parameters. */
> > +    uint32_t cmd;
> > +    union {
> > +        evtchn_register_3level_t l3;
> > +    } u;
> > +};
> 
> Adding new members to this union as new event channels ABI are
> implemented are going to change its size and potentially the alignment
> of the union member.  This seems a potential for future ABI
> compatibility problems.  See also by comment to patch 18.
> 

One way to solve this is to have that union contain pointers to specific
structures, but as you suggested, just add sub-op for each new ABI is
Ok.


Wei.



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


 


Rackspace

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