|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 4/8] evtchn: Dynamically allocate d->evtchn
On Tue, 2013-03-19 at 21:00 +0000, David Vrabel wrote:
> From: Wei Liu <wei.liu2@xxxxxxxxxx>
>
> As we move to extended evtchn ABI we need bigger d->evtchn, as a result
> this will bloat struct domain. So move this array out of struct domain
> and allocate a dedicated array for it.
>
Please check out the patch series I sent yesterday. I modified the
internal object store for event channel, which can save space when your
domain only has small number of event channels, which is the case for
FIFO-based ABI.
Wei.
> Signed-off-by: Wei Liu <wei.liu2@xxxxxxxxxx>
> Signed-off-by: David Vrabel <david.vrabel@xxxxxxxxxx>
> ---
> xen/common/event_channel.c | 14 ++++++++++++++
> xen/include/xen/sched.h | 2 +-
> 2 files changed, 15 insertions(+), 1 deletions(-)
>
> diff --git a/xen/common/event_channel.c b/xen/common/event_channel.c
> index 3a91241..44672b5 100644
> --- a/xen/common/event_channel.c
> +++ b/xen/common/event_channel.c
> @@ -1136,15 +1136,27 @@ void notify_via_xen_event_channel(struct domain *ld,
> int lport)
>
> int evtchn_init(struct domain *d)
> {
> + BUILD_BUG_ON(sizeof(struct evtchn *) * NR_EVTCHN_BUCKETS > PAGE_SIZE);
> + d->evtchn = xzalloc_array(struct evtchn *, NR_EVTCHN_BUCKETS);
> +
> + if ( d->evtchn == NULL )
> + return -ENOMEM;
> +
> spin_lock_init(&d->event_lock);
> if ( get_free_port(d) != 0 )
> + {
> + xfree(d->evtchn);
> return -EINVAL;
> + }
> evtchn_from_port(d, 0)->state = ECS_RESERVED;
>
> #if MAX_VIRT_CPUS > BITS_PER_LONG
> d->poll_mask = xmalloc_array(unsigned long,
> BITS_TO_LONGS(MAX_VIRT_CPUS));
> if ( !d->poll_mask )
> + {
> + xfree(d->evtchn);
> return -ENOMEM;
> + }
> bitmap_zero(d->poll_mask, MAX_VIRT_CPUS);
> #endif
>
> @@ -1180,6 +1192,8 @@ void evtchn_destroy(struct domain *d)
> spin_unlock(&d->event_lock);
>
> clear_global_virq_handlers(d);
> +
> + xfree(d->evtchn);
> }
>
>
> diff --git a/xen/include/xen/sched.h b/xen/include/xen/sched.h
> index 0db73c0..ad9d7ef 100644
> --- a/xen/include/xen/sched.h
> +++ b/xen/include/xen/sched.h
> @@ -263,7 +263,7 @@ struct domain
> spinlock_t rangesets_lock;
>
> /* Event channel information. */
> - struct evtchn *evtchn[NR_EVTCHN_BUCKETS];
> + struct evtchn **evtchn;
> spinlock_t event_lock;
> struct evtchn_port_ops *evtchn_port_ops;
>
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |