|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH 05/11] evtchn: dynamically allocate d->evtchn
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.
Signed-off-by: Wei Liu <wei.liu2@xxxxxxxxxx>
Signed-off-by: David Vrabel <david.vrabel@xxxxxxxxxx>
Reviewed-by: Jan Beulich <jbeulich@xxxxxxxx>
---
xen/common/event_channel.c | 13 +++++++++++++
xen/include/xen/sched.h | 2 +-
2 files changed, 14 insertions(+), 1 deletions(-)
diff --git a/xen/common/event_channel.c b/xen/common/event_channel.c
index 0c92cb0..273d449 100644
--- a/xen/common/event_channel.c
+++ b/xen/common/event_channel.c
@@ -1153,15 +1153,26 @@ int evtchn_init(struct domain *d)
/* Default to N-level ABI. */
evtchn_2l_init(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
@@ -1195,6 +1206,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 532dd46..9227685 100644
--- a/xen/include/xen/sched.h
+++ b/xen/include/xen/sched.h
@@ -271,7 +271,7 @@ struct domain
spinlock_t rangesets_lock;
/* Event channel information. */
- struct evtchn *evtchn[NR_EVTCHN_BUCKETS];
+ struct evtchn **evtchn;
unsigned max_evtchns;
spinlock_t event_lock;
const struct evtchn_port_ops *evtchn_port_ops;
--
1.7.2.5
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |