From mboxrd@z Thu Jan 1 00:00:00 1970 From: Wei Liu Subject: [RFC PATCH V4 09/18] Add evtchn_extended in struct domain Date: Tue, 5 Mar 2013 12:30:31 +0000 Message-ID: <1362486640-14707-10-git-send-email-wei.liu2@citrix.com> References: <1362486640-14707-1-git-send-email-wei.liu2@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <1362486640-14707-1-git-send-email-wei.liu2@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: xen-devel@lists.xen.org Cc: Wei Liu , keir@xen.org, ian.campbell@citrix.com, jbeulich@suse.com, david.vrabel@citrix.com List-Id: xen-devel@lists.xenproject.org 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 --- 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 #include #include +#include #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