[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-devel] [PATCH RFC 2/5] Grant table for console, xenstore pages



This patch modifies the xenstore daemon to use xc_gnttab_map_grant_ref
instead of xc_map_foreign_range.

Make sure you have linux-2.6.18-xen.hg changeset 600:1bd3dbfdaf0f before
running this.

Signed-off-by: Diego Ongaro <diego.ongaro@xxxxxxxxxx>
---
diff -r e4e473425d0f tools/xenstore/xenstored_domain.c
--- a/tools/xenstore/xenstored_domain.c Thu Jul 10 19:05:56 2008 +0100
+++ b/tools/xenstore/xenstored_domain.c Thu Jul 10 19:30:50 2008 +0100
@@ -31,8 +31,10 @@
 #include "xenstored_watch.h"
 
 #include <xenctrl.h>
+#include <xen/grant_table.h>
 
 static int *xc_handle;
+static int *xcg_handle;
 static evtchn_port_t virq_port;
 
 int xce_handle = -1; 
@@ -343,13 +345,14 @@
        domain = find_domain_by_domid(domid);
 
        if (domain == NULL) {
-               interface = xc_map_foreign_range(
-                       *xc_handle, domid,
-                       getpagesize(), PROT_READ|PROT_WRITE, mfn);
+               interface = xc_gnttab_map_grant_ref(*xcg_handle, domid,
+                                                   GNTTAB_RESERVED_XENSTORE,
+                                                   PROT_READ|PROT_WRITE);
                if (!interface) {
                        send_error(conn, errno);
                        return;
                }
+
                /* Hang domain off "in" until we're finished. */
                domain = new_domain(in, domid, port);
                if (!domain) {
@@ -542,6 +545,12 @@
        return 0;
 }
 
+static int close_xcg_handle(void *_handle)
+{
+       xc_gnttab_close(*(int *)_handle);
+       return 0;
+}
+
 /* Returns the implicit path of a connection (only domains have this) */
 const char *get_implicit_path(const struct connection *conn)
 {
@@ -593,6 +602,16 @@
                barf_perror("Failed to open connection to hypervisor");
 
        talloc_set_destructor(xc_handle, close_xc_handle);
+       
+       xcg_handle = talloc(talloc_autofree_context(), int);
+       if (!xcg_handle)
+               barf_perror("Failed to allocate domain gnttab handle");
+
+       *xcg_handle = xc_gnttab_open();
+       if (*xcg_handle < 0)
+               barf_perror("Failed to open gnttab connection to hypervisor");
+
+       talloc_set_destructor(xcg_handle, close_xcg_handle);
 
        xce_handle = xc_evtchn_open();
 

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.