From mboxrd@z Thu Jan 1 00:00:00 1970 From: Alex Zeffertt Subject: [PATCH 5/24] [xen-unstable.hg] make consoled use grantref rather than map_foreign_range (which only privileged domains can do) Date: Mon, 23 Mar 2009 15:20:42 +0000 Message-ID: <49C7A8CA.6020805@eu.citrix.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------060005060608070801040300" Return-path: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: "xen-devel@lists.xensource.com" List-Id: xen-devel@lists.xenproject.org This is a multi-part message in MIME format. --------------060005060608070801040300 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit --------------060005060608070801040300 Content-Type: text/plain; name="consoled_map_grant_ref" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="consoled_map_grant_ref" This patch modifies the console daemon to use xc_gnttab_map_grant_ref instead of xc_map_foreign_range where available. TODO: This will probably break linking on Solaris, since they don't have stubs for the gntmap functions yet. A previous version of this patch was sent to xen-devel. See http://lists.xensource.com/archives/html/xen-devel/2008-07/msg00610.html Signed-off-by: Diego Ongaro Signed-off-by: Alex Zeffertt --- diff -r 5c5e30d44696 tools/console/daemon/io.c --- a/tools/console/daemon/io.c Fri Aug 01 16:50:29 2008 +0100 +++ b/tools/console/daemon/io.c Fri Aug 01 16:50:30 2008 +0100 @@ -25,6 +25,7 @@ #include #include #include +#include #include #include @@ -538,12 +539,22 @@ goto out; if (ring_ref != dom->ring_ref) { - if (dom->interface != NULL) - munmap(dom->interface, getpagesize()); - dom->interface = xc_map_foreign_range( - xc, dom->domid, getpagesize(), - PROT_READ|PROT_WRITE, - (unsigned long)ring_ref); + if (xcg >= 0) { + /* this is the preferred method */ + if (dom->interface != NULL) + xc_gnttab_munmap(xcg, dom->interface, 1); + dom->interface = xc_gnttab_map_grant_ref( + xcg, dom->domid, + GNTTAB_RESERVED_CONSOLE, + PROT_READ|PROT_WRITE); + } else { + if (dom->interface != NULL) + munmap(dom->interface, getpagesize()); + dom->interface = xc_map_foreign_range( + xc, dom->domid, getpagesize(), + PROT_READ|PROT_WRITE, + (unsigned long)ring_ref); + } if (dom->interface == NULL) { err = EINVAL; goto out; @@ -736,9 +747,13 @@ { d->is_dead = true; watch_domain(d, false); - if (d->interface != NULL) - munmap(d->interface, getpagesize()); - d->interface = NULL; + if (d->interface != NULL) { + if (xcg >= 0) + xc_gnttab_munmap(xcg, d->interface, 1); + else + munmap(d->interface, getpagesize()); + d->interface = NULL; + } if (d->xce_handle != -1) xc_evtchn_close(d->xce_handle); d->xce_handle = -1; diff -r 5c5e30d44696 tools/console/daemon/utils.c --- a/tools/console/daemon/utils.c Fri Aug 01 16:50:29 2008 +0100 +++ b/tools/console/daemon/utils.c Fri Aug 01 16:50:30 2008 +0100 @@ -38,7 +38,8 @@ #include "utils.h" struct xs_handle *xs; -int xc; +int xc = -1; +int xcg = -1; static void child_exit(int sig) { @@ -122,6 +123,11 @@ goto out; } + xcg = xc_gnttab_open(); + if (xcg == -1) { + dolog(LOG_WARNING, "Failed to open gnttab (%m)"); + } + if (!xs_watch(xs, "@introduceDomain", "domlist")) { dolog(LOG_ERR, "xenstore watch on @introduceDomain fails."); goto out; @@ -139,6 +145,8 @@ xs_daemon_close(xs); if (xc != -1) xc_interface_close(xc); + if (xcg != -1) + xc_gnttab_close(xcg); return false; } diff -r 5c5e30d44696 tools/console/daemon/utils.h --- a/tools/console/daemon/utils.h Fri Aug 01 16:50:29 2008 +0100 +++ b/tools/console/daemon/utils.h Fri Aug 01 16:50:30 2008 +0100 @@ -32,6 +32,7 @@ extern struct xs_handle *xs; extern int xc; +extern int xcg; #if 1 #define dolog(val, fmt, ...) do { \ --------------060005060608070801040300 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel --------------060005060608070801040300--