[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [RFC PATCH V4 09/18] Add evtchn_extended in struct domain
This field is a bitmap of currently in use extended event channel ABI, which can have 0 (no extended event channel in use) or 1 bit set. It is manipulated by hypervisor only, so if anything goes wrong it is a bug. The default event channel ABI is EVTCHN_EXTENDED_NONE, which means no extended event channel is used. Signed-off-by: Wei Liu <wei.liu2@xxxxxxxxxx> --- xen/common/event_channel.c | 8 +++++++- xen/include/xen/event.h | 12 +++++++++++- xen/include/xen/sched.h | 1 + 3 files changed, 19 insertions(+), 2 deletions(-) diff --git a/xen/common/event_channel.c b/xen/common/event_channel.c index 6b23157..99af57e 100644 --- a/xen/common/event_channel.c +++ b/xen/common/event_channel.c @@ -988,6 +988,12 @@ out: return rc; } +static void __set_evtchn_abi(struct domain *d, uint64_t abi) +{ + d->evtchn_extended = abi; + /* This must go after setting ABI */ + d->max_evtchns = max_evtchns(d); +} long do_event_channel_op(int cmd, XEN_GUEST_HANDLE_PARAM(void) arg) { @@ -1205,7 +1211,7 @@ int evtchn_init(struct domain *d) if ( d->evtchn == NULL ) return -ENOMEM; - d->max_evtchns = max_evtchns(d); + __set_evtchn_abi(d, EVTCHN_EXTENDED_NONE); spin_lock_init(&d->event_lock); if ( get_free_port(d) != 0 ) diff --git a/xen/include/xen/event.h b/xen/include/xen/event.h index fbbe9dc..f5a49a9 100644 --- a/xen/include/xen/event.h +++ b/xen/include/xen/event.h @@ -14,6 +14,7 @@ #include <xen/softirq.h> #include <asm/bitops.h> #include <asm/event.h> +#include <public/event_channel.h> #ifndef CONFIG_COMPAT #define BITS_PER_EVTCHN_WORD(d) BITS_PER_XEN_ULONG @@ -22,7 +23,16 @@ #endif static inline unsigned int max_evtchns(struct domain *d) { - return BITS_PER_EVTCHN_WORD(d) * BITS_PER_EVTCHN_WORD(d); + unsigned int ret = 0; + switch ( d->evtchn_extended ) + { + case EVTCHN_EXTENDED_NONE: + ret = BITS_PER_EVTCHN_WORD(d) * BITS_PER_EVTCHN_WORD(d); + break; + default: + BUG(); + } + return ret; } #define EVTCHNS_PER_BUCKET 128 diff --git a/xen/include/xen/sched.h b/xen/include/xen/sched.h index ad0f042..8bdf5ec 100644 --- a/xen/include/xen/sched.h +++ b/xen/include/xen/sched.h @@ -218,6 +218,7 @@ struct domain struct evtchn **evtchn; spinlock_t event_lock; unsigned int max_evtchns; + unsigned int evtchn_extended; struct grant_table *grant_table; -- 1.7.10.4 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |