xen-devel.lists.xenproject.org archive mirror
 help / color / mirror / Atom feed
From: Wei Liu <wei.liu2@citrix.com>
To: xen-devel@lists.xen.org
Cc: Wei Liu <wei.liu2@citrix.com>,
	ian.campbell@citrix.com, jbeulich@suse.com,
	david.vrabel@citrix.com
Subject: [RFC PATCH V2 03/14] Add evtchn_level in struct domain
Date: Mon, 21 Jan 2013 14:30:43 +0000	[thread overview]
Message-ID: <1358778654-29559-4-git-send-email-wei.liu2@citrix.com> (raw)
In-Reply-To: <1358778654-29559-1-git-send-email-wei.liu2@citrix.com>

This field is manipulated by hypervisor only, so if anything goes
wrong, it is a bug.

The default event channel level is 2, which has a two level lookup
structure: a selector in struct vcpu and a shared bitmap in shared
info.

The up coming 3-level event channel utilies a three level lookup
structure: a top level selector and second level selector for every
vcpu, and shared bitmap.

When building a domain, it starts with 2-level event channel, which is
guaranteed to be always supported by the hypervisor. If a domain wants
to use N (>=3) level event channel, it must explicitly issue a
hypercall to setup N level event channel.

Signed-off-by: Wei Liu <wei.liu2@citrix.com>
---
 xen/common/event_channel.c |    1 +
 xen/include/xen/sched.h    |   19 ++++++++++++++++++-
 2 files changed, 19 insertions(+), 1 deletion(-)

diff --git a/xen/common/event_channel.c b/xen/common/event_channel.c
index 9231eb0..bc5db10 100644
--- a/xen/common/event_channel.c
+++ b/xen/common/event_channel.c
@@ -1173,6 +1173,7 @@ void notify_via_xen_event_channel(struct domain *ld, int lport)
 int evtchn_init(struct domain *d)
 {
     spin_lock_init(&d->event_lock);
+    d->evtchn_level = EVTCHN_DEFAULT_LEVEL; /* = 2 */
     if ( get_free_port(d) != 0 )
         return -EINVAL;
     evtchn_from_port(d, 0)->state = ECS_RESERVED;
diff --git a/xen/include/xen/sched.h b/xen/include/xen/sched.h
index 39f85d2..aa97407 100644
--- a/xen/include/xen/sched.h
+++ b/xen/include/xen/sched.h
@@ -50,7 +50,23 @@ extern struct domain *dom0;
 #else
 #define BITS_PER_EVTCHN_WORD(d) (has_32bit_shinfo(d) ? 32 : BITS_PER_LONG)
 #endif
-#define MAX_EVTCHNS(d) (BITS_PER_EVTCHN_WORD(d) * BITS_PER_EVTCHN_WORD(d))
+
+#define EVTCHN_2_LEVEL       2
+#define EVTCHN_3_LEVEL       3
+#define EVTCHN_DEFAULT_LEVEL EVTCHN_2_LEVEL
+#define MAX_EVTCHNS_L2(d) (BITS_PER_EVTCHN_WORD(d) * BITS_PER_EVTCHN_WORD(d))
+#define MAX_EVTCHNS_L3(d) (MAX_EVTCHNS_L2(d) * BITS_PER_EVTCHN_WORD(d))
+#define MAX_EVTCHNS(d) ({ int __v = 0;          \
+            switch ( d->evtchn_level ) {        \
+            case EVTCHN_2_LEVEL:                \
+                __v = MAX_EVTCHNS_L2(d); break; \
+            case EVTCHN_3_LEVEL:                \
+                __v = MAX_EVTCHNS_L3(d); break; \
+            default:                            \
+                BUG();                          \
+            };                                  \
+            __v;})
+
 #define EVTCHNS_PER_BUCKET 128
 #define NR_EVTCHN_BUCKETS  (NR_EVENT_CHANNELS / EVTCHNS_PER_BUCKET)
 
@@ -262,6 +278,7 @@ struct domain
     /* Event channel information. */
     struct evtchn   *evtchn[NR_EVTCHN_BUCKETS];
     spinlock_t       event_lock;
+    unsigned int     evtchn_level;
 
     struct grant_table *grant_table;
 
-- 
1.7.10.4

  parent reply	other threads:[~2013-01-21 14:30 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-01-21 14:30 [RFC PATCH V2] Implement 3-level event channel support in Xen Wei Liu
2013-01-21 14:30 ` [RFC PATCH V2 01/14] Remove trailing whitespaces in event_channel.c Wei Liu
2013-01-21 14:30 ` [RFC PATCH V2 02/14] Remove trailing whitespaces in sched.h Wei Liu
2013-01-21 14:30 ` Wei Liu [this message]
2013-01-21 14:30 ` [RFC PATCH V2 04/14] Dynamically allocate d->evtchn Wei Liu
2013-01-21 14:30 ` [RFC PATCH V2 05/14] Bump EVTCHNS_PER_BUCKET to 512 Wei Liu
2013-01-21 14:30 ` [RFC PATCH V2 06/14] Add evtchn_is_{pending, masked} and evtchn_clear_pending Wei Liu
2013-01-21 14:30 ` [RFC PATCH V2 07/14] Genneralized event channel operations Wei Liu
2013-01-21 16:36   ` Jan Beulich
2013-01-21 14:30 ` [RFC PATCH V2 08/14] Define N-level event channel registration interface Wei Liu
2013-01-21 16:38   ` Jan Beulich
2013-01-21 14:30 ` [RFC PATCH V2 09/14] Update Xen public header Wei Liu
2013-01-21 16:40   ` Jan Beulich
2013-01-21 14:30 ` [RFC PATCH V2 10/14] Add control structures for 3-level event channel Wei Liu
2013-01-21 14:30 ` [RFC PATCH V2 11/14] Introduce some macros for event channels Wei Liu
2013-01-21 16:46   ` Jan Beulich
2013-01-21 14:30 ` [RFC PATCH V2 12/14] Make NR_EVTCHN_BUCKETS 3-level ready Wei Liu
2013-01-21 14:30 ` [RFC PATCH V2 13/14] Infrastructure for manipulating 3-level event channel pages Wei Liu
2013-01-21 16:50   ` Jan Beulich
2013-01-28 17:21     ` Wei Liu
2013-01-29  8:43       ` Jan Beulich
2013-01-29 18:10         ` Wei Liu
2013-01-30  8:04           ` Jan Beulich
2013-01-21 14:30 ` [RFC PATCH V2 14/14] Implement 3-level event channel routines Wei Liu
2013-01-21 16:53   ` Jan Beulich

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1358778654-29559-4-git-send-email-wei.liu2@citrix.com \
    --to=wei.liu2@citrix.com \
    --cc=david.vrabel@citrix.com \
    --cc=ian.campbell@citrix.com \
    --cc=jbeulich@suse.com \
    --cc=xen-devel@lists.xen.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).