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

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



If each of the files /var/run/{console,xenstore}.did contains an
integer, this integer is interpreted as the domain id for that daemon.
The default or fallback is domid=0, of course. In this patch, libxc is
modified to use this mechanism for the grant table entries.

Signed-off-by: Diego Ongaro <diego.ongaro@xxxxxxxxxx>
---
diff -r 581c5525e1ac tools/libxc/xc_dom_boot.c
--- a/tools/libxc/xc_dom_boot.c Thu Jul 10 19:50:48 2008 +0100
+++ b/tools/libxc/xc_dom_boot.c Fri Jul 11 15:50:02 2008 +0100
@@ -297,14 +297,40 @@
     return mfn;
 }
 
-/* TODO: don't hard-code these */
-#define CONSOLE_DOMID 0
-#define XENSTORE_DOMID 0
+static uint32_t read_domid(const char *service)
+{
+    char buf[64];
+    int n;
+    FILE *f = NULL;
+    uint32_t domid = 0;
+    
+    n = snprintf(buf, sizeof(buf), "/var/run/%s.did", service);
+    if ( n < 0 || n >= sizeof(buf) )
+        goto out;
+
+    f = fopen(buf, "r");
+    if ( f == NULL )
+        goto out;
+
+    if ( fscanf(f, "%d", &domid) != 1 )
+        goto out;
+
+out:
+    if ( f != NULL )
+        fclose(f);
+
+    return domid;
+}
 
 int xc_dom_gnttab_init(struct xc_dom_image *dom)
 {
+    uint32_t console_domid;
+    uint32_t xenstore_domid;
     unsigned long grant_table_mfn;
     grant_entry_t *grant_table;
+
+    console_domid = read_domid("console");
+    xenstore_domid = read_domid("xenstore");
 
     grant_table_mfn = xc_dom_gnttab_mfn(dom);
     if ( grant_table_mfn == -1 )
@@ -324,17 +350,17 @@
         return -1;
     }
 
-    if ( dom->guest_domid != CONSOLE_DOMID )
+    if ( dom->guest_domid != console_domid )
     {
         grant_table[GNTTAB_RESERVED_CONSOLE].flags = GTF_permit_access;
-        grant_table[GNTTAB_RESERVED_CONSOLE].domid = CONSOLE_DOMID;
+        grant_table[GNTTAB_RESERVED_CONSOLE].domid = console_domid;
         grant_table[GNTTAB_RESERVED_CONSOLE].frame = xc_dom_p2m_host(dom, 
dom->console_pfn);
     }
 
-    if ( dom->guest_domid != XENSTORE_DOMID )
+    if ( dom->guest_domid != xenstore_domid )
     {
         grant_table[GNTTAB_RESERVED_XENSTORE].flags = GTF_permit_access;
-        grant_table[GNTTAB_RESERVED_XENSTORE].domid = XENSTORE_DOMID;
+        grant_table[GNTTAB_RESERVED_XENSTORE].domid = xenstore_domid;
         grant_table[GNTTAB_RESERVED_XENSTORE].frame = xc_dom_p2m_host(dom, 
dom->xenstore_pfn);
     }
 

_______________________________________________
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®.