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

Re: [Xen-devel] [PATCH v2] xen/evtchn: rearrange fields



>>> On 25.03.14 at 18:23, <dgdegra@xxxxxxxxxxxxx> wrote:
> Event channel arrays are allocated in blocks with EVTCHNS_PER_BUCKET
> elements, which must be a power of 2.  When XSM is disabled, struct
> evtchn is 32 bytes including padding; however, when XSM is enabled, the
> structure becomes larger and EVTCHNS_PER_BUCKET is halved.  Rearranging
> some of the fields in struct evtchn allows a 4-byte XSM field to fit
> within the 32-byte structure.
> 
> This rearrangement turns the xen_consumer field of struct evtchn into a
> bitfield and adjusts the xen_consumers array to fit the number of
> addressable elements from this value.  Since there are currently only
> two users of this array, only 3 bits (7 values) are reserved.  This
> field is also used rarely enough that the slight overhead from applying
> a bitmask should not cause problems.
> 
> Signed-off-by: Daniel De Graaf <dgdegra@xxxxxxxxxxxxx>
> Cc: David Vrabel <david.vrabel@xxxxxxxxxx>

Reviewed-by: Jan Beulich <jbeulich@xxxxxxxx>

> Cc: Keir Fraser <keir@xxxxxxx>
> ---
>  xen/common/event_channel.c | 2 +-
>  xen/include/xen/sched.h    | 9 ++++++---
>  2 files changed, 7 insertions(+), 4 deletions(-)
> 
> diff --git a/xen/common/event_channel.c b/xen/common/event_channel.c
> index db952af..83bc7df 100644
> --- a/xen/common/event_channel.c
> +++ b/xen/common/event_channel.c
> @@ -59,7 +59,7 @@
>   * with a pointer, we stash them dynamically in a small lookup array which
>   * can be indexed by a small integer.
>   */
> -static xen_event_channel_notification_t xen_consumers[8];
> +static xen_event_channel_notification_t xen_consumers[NR_XEN_CONSUMERS];
>  
>  /* Default notification action: wake up from wait_on_xen_event_channel(). 
> */
>  static void default_xen_notification_fn(struct vcpu *v, unsigned int port)
> diff --git a/xen/include/xen/sched.h b/xen/include/xen/sched.h
> index b9ba379..94c7db3 100644
> --- a/xen/include/xen/sched.h
> +++ b/xen/include/xen/sched.h
> @@ -68,6 +68,9 @@ extern struct domain *dom0;
>  #define EVTCHNS_PER_GROUP  (BUCKETS_PER_GROUP * EVTCHNS_PER_BUCKET)
>  #define NR_EVTCHN_GROUPS   DIV_ROUND_UP(MAX_NR_EVTCHNS, EVTCHNS_PER_GROUP)
>  
> +#define XEN_CONSUMER_BITS 3
> +#define NR_XEN_CONSUMERS ((1 << XEN_CONSUMER_BITS) - 1)
> +
>  struct evtchn
>  {
>  #define ECS_FREE         0 /* Channel is available for use.                 
>  */
> @@ -78,7 +81,8 @@ struct evtchn
>  #define ECS_VIRQ         5 /* Channel is bound to a virtual IRQ line.       
>  */
>  #define ECS_IPI          6 /* Channel is bound to a virtual IPI line.       
>  */
>      u8  state;             /* ECS_* */
> -    u8  xen_consumer;      /* Consumer in Xen, if any? (0 = send to guest) 
> */
> +    u8  xen_consumer:XEN_CONSUMER_BITS; /* Consumer in Xen if nonzero */
> +    u8  pending:1;
>      u16 notify_vcpu_id;    /* VCPU for local delivery notification */
>      u32 port;
>      union {
> @@ -97,9 +101,8 @@ struct evtchn
>          u16 virq;      /* state == ECS_VIRQ */
>      } u;
>      u8 priority;
> -    u8 pending:1;
> -    u16 last_vcpu_id;
>      u8 last_priority;
> +    u16 last_vcpu_id;
>  #ifdef XSM_ENABLE
>      union {
>  #ifdef XSM_NEED_GENERIC_EVTCHN_SSID
> -- 
> 1.8.5.3




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