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: [PATCH V2 14/15] Only allow 3-level event channel on Dom0 and driver domain
Date: Mon, 4 Feb 2013 17:23:57 +0000 [thread overview]
Message-ID: <1359998638-16774-15-git-send-email-wei.liu2@citrix.com> (raw)
In-Reply-To: <1359998638-16774-1-git-send-email-wei.liu2@citrix.com>
For non-Dom0 domains, add a flag to indicate whether it can use 3-level event
channel, admins can specify this flag when creating a driver domain.
Signed-off-by: Wei Liu <wei.liu2@citrix.com>
---
xen/common/domain.c | 3 +++
xen/common/domctl.c | 5 ++++-
xen/common/event_channel.c | 3 +++
xen/include/public/domctl.h | 3 +++
xen/include/xen/sched.h | 5 +++++
5 files changed, 18 insertions(+), 1 deletion(-)
diff --git a/xen/common/domain.c b/xen/common/domain.c
index 07f62b3..28405b8 100644
--- a/xen/common/domain.c
+++ b/xen/common/domain.c
@@ -250,6 +250,9 @@ struct domain *domain_create(
if ( domcr_flags & DOMCRF_dummy )
return d;
+ if ( domcr_flags & DOMCRF_evtchn_l3 )
+ d->evtchn_l3 = 1;
+
if ( !is_idle_domain(d) )
{
if ( (err = xsm_domain_create(XSM_HOOK, d, ssidref)) != 0 )
diff --git a/xen/common/domctl.c b/xen/common/domctl.c
index a713ce6..fb61e40 100644
--- a/xen/common/domctl.c
+++ b/xen/common/domctl.c
@@ -369,7 +369,8 @@ long do_domctl(XEN_GUEST_HANDLE_PARAM(xen_domctl_t) u_domctl)
if ( supervisor_mode_kernel ||
(op->u.createdomain.flags &
~(XEN_DOMCTL_CDF_hvm_guest | XEN_DOMCTL_CDF_hap |
- XEN_DOMCTL_CDF_s3_integrity | XEN_DOMCTL_CDF_oos_off)) )
+ XEN_DOMCTL_CDF_s3_integrity | XEN_DOMCTL_CDF_oos_off |
+ XEN_DOMCTL_CDF_evtchn_l3)) )
break;
dom = op->domain;
@@ -405,6 +406,8 @@ long do_domctl(XEN_GUEST_HANDLE_PARAM(xen_domctl_t) u_domctl)
domcr_flags |= DOMCRF_s3_integrity;
if ( op->u.createdomain.flags & XEN_DOMCTL_CDF_oos_off )
domcr_flags |= DOMCRF_oos_off;
+ if ( op->u.createdomain.flags & XEN_DOMCTL_CDF_evtchn_l3 )
+ domcr_flags |= DOMCRF_evtchn_l3;
d = domain_create(dom, domcr_flags, op->u.createdomain.ssidref);
if ( IS_ERR(d) )
diff --git a/xen/common/event_channel.c b/xen/common/event_channel.c
index a91ecba..2d9d0bb 100644
--- a/xen/common/event_channel.c
+++ b/xen/common/event_channel.c
@@ -1262,6 +1262,9 @@ static long evtchn_register_3level(evtchn_register_3level_t *arg)
xen_pfn_t l2sel_mfn = 0;
xen_pfn_t l2sel_offset = 0;
+ if ( d->evtchn_l3 == 0 && d->domain_id != 0 )
+ return -EPERM;
+
if ( d->evtchn_level == EVTCHN_3_LEVEL )
{
rc = -EINVAL;
diff --git a/xen/include/public/domctl.h b/xen/include/public/domctl.h
index 74160b0..4dacf95 100644
--- a/xen/include/public/domctl.h
+++ b/xen/include/public/domctl.h
@@ -59,6 +59,9 @@ struct xen_domctl_createdomain {
/* Disable out-of-sync shadow page tables? */
#define _XEN_DOMCTL_CDF_oos_off 3
#define XEN_DOMCTL_CDF_oos_off (1U<<_XEN_DOMCTL_CDF_oos_off)
+ /* Can this domain use 3-level event channel? */
+#define _XEN_DOMCTL_CDF_evtchn_l3 4
+#define XEN_DOMCTL_CDF_evtchn_l3 (1U<<_XEN_DOMCTL_CDF_evtchn_l3)
uint32_t flags;
};
typedef struct xen_domctl_createdomain xen_domctl_createdomain_t;
diff --git a/xen/include/xen/sched.h b/xen/include/xen/sched.h
index 1d8c1b5..931655f 100644
--- a/xen/include/xen/sched.h
+++ b/xen/include/xen/sched.h
@@ -224,6 +224,8 @@ struct domain
unsigned int evtchn_level;
unsigned long *evtchn_pending[EVTCHN_MAX_L3_PAGES];
unsigned long *evtchn_mask[EVTCHN_MAX_L3_PAGES];
+ /* Can the domain use 3-level event channel? */
+ bool_t evtchn_l3;
struct grant_table *grant_table;
@@ -411,6 +413,9 @@ struct domain *domain_create(
/* DOMCRF_oos_off: dont use out-of-sync optimization for shadow page tables */
#define _DOMCRF_oos_off 4
#define DOMCRF_oos_off (1U<<_DOMCRF_oos_off)
+/* DOMCRF_evtchn_l3: this domain can use 3-level event channel (driver domain) */
+#define _DOMCRF_evtchn_l3 5
+#define DOMCRF_evtchn_l3 (1U<<_DOMCRF_evtchn_l3)
/*
* rcu_lock_domain_by_id() is more efficient than get_domain_by_id().
--
1.7.10.4
next prev parent reply other threads:[~2013-02-04 17:23 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-02-04 17:23 [PATCH V2] Implement 3-level event channel in Xen Wei Liu
2013-02-04 17:23 ` [PATCH V2 01/15] Dynamically allocate d->evtchn Wei Liu
2013-02-04 17:23 ` [PATCH V2 02/15] Move event channel macros / struct definition to proper place Wei Liu
2013-02-04 17:23 ` [PATCH V2 03/15] Add evtchn_level in struct domain Wei Liu
2013-02-04 17:23 ` [PATCH V2 04/15] Bump EVTCHNS_PER_BUCKET to 512 Wei Liu
2013-02-04 17:23 ` [PATCH V2 05/15] Add evtchn_is_{pending, masked} and evtchn_clear_pending Wei Liu
2013-02-04 17:23 ` [PATCH V2 06/15] Introduce some macros for event channels Wei Liu
2013-02-04 17:23 ` [PATCH V2 07/15] Update Xen public header Wei Liu
2013-02-04 17:23 ` [PATCH V2 08/15] Define N-level event channel registration interface Wei Liu
2013-02-04 17:23 ` [PATCH V2 09/15] Add control structures for 3-level event channel Wei Liu
2013-02-04 17:23 ` [PATCH V2 10/15] Make NR_EVTCHN_BUCKETS 3-level ready Wei Liu
2013-02-04 17:23 ` [PATCH V2 11/15] Genneralized event channel operations Wei Liu
2013-02-04 17:23 ` [PATCH V2 12/15] Infrastructure for manipulating 3-level event channel pages Wei Liu
2013-02-04 17:23 ` [PATCH V2 13/15] Implement 3-level event channel routines Wei Liu
2013-02-04 17:23 ` Wei Liu [this message]
2013-02-06 8:28 ` [PATCH V2 14/15] Only allow 3-level event channel on Dom0 and driver domain Jan Beulich
2013-02-04 17:23 ` [PATCH V2 15/15] libxl: add evtchn_l3 flag Wei Liu
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=1359998638-16774-15-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).