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