[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 |