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

[Xen-devel] [PATCH] Make use of /proc/xen/xsd_{port, kva} private to the Linux implementation.



# HG changeset patch
# User john.levon@xxxxxxx
# Node ID 645e109ef777618564dd40839263da9527bab87b
# Parent  13d6d993d79724d86a0c9ac556a7f884baed98ae
Make use of /proc/xen/xsd_{port,kva} private to the Linux implementation.

Signed-off-by: John Levon <john.levon@xxxxxxx>

diff -r 13d6d993d797 -r 645e109ef777 tools/libxc/xc_linux.c
--- a/tools/libxc/xc_linux.c    Mon May 22 17:30:25 2006 +0100
+++ b/tools/libxc/xc_linux.c    Tue May 23 01:50:39 2006 -0700
@@ -13,6 +13,9 @@
 
 #include <xen/memory.h>
 #include <xen/sys/evtchn.h>
+
+#define XENSTORED_PROC_KVA  "/proc/xen/xsd_kva"
+#define XENSTORED_PROC_PORT "/proc/xen/xsd_port"
 
 int xc_interface_open(void)
 {
@@ -103,6 +106,51 @@ int do_xen_hypercall(int xc_handle, priv
                       (unsigned long)hypercall);
 }
 
+evtchn_port_t xc_xenbus_evtchn(int xc_handle)
+{
+    int fd;
+    int rc;
+    evtchn_port_t port; 
+    char str[20]; 
+
+    fd = open(XENSTORED_PROC_PORT, O_RDONLY); 
+    if ( fd == -1 )
+       return -1;
+
+    rc = read(fd, str, sizeof(str)); 
+    if ( rc == -1 )
+    {
+        int err = errno;
+        close(fd);
+        errno = err;
+        return -1;
+    }
+
+    str[rc] = '\0'; 
+    port = strtoul(str, NULL, 0); 
+
+    close(fd); 
+    return port;
+}
+
+void *xc_xenbus_map(int xc_handle)
+{
+    int fd;
+    void *addr;
+
+    fd = open(XENSTORED_PROC_KVA, O_RDWR);
+    if ( fd == -1 )
+        return NULL;
+
+    addr = mmap(NULL, getpagesize(), PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0);
+    if ( addr == MAP_FAILED )
+        addr = NULL;
+
+    close(fd);
+
+    return addr;
+}
+
 /*
  * Local variables:
  * mode: C
diff -r 13d6d993d797 -r 645e109ef777 tools/libxc/xenctrl.h
--- a/tools/libxc/xenctrl.h     Mon May 22 17:30:25 2006 +0100
+++ b/tools/libxc/xenctrl.h     Tue May 23 01:50:39 2006 -0700
@@ -596,4 +596,15 @@ int xc_finish_mmu_updates(int xc_handle,
 
 int xc_acm_op(int xc_handle, int cmd, void *arg, size_t arg_size);
 
+/**
+ * Return the event channel for communication with the kernel's xenbus device.
+ * Returns -1 on failure.
+ */
+evtchn_port_t xc_xenbus_evtchn(int xc_handle);
+
+/**
+ * Map xenstore page from the kernel's xenbus device. Returns NULL on failure.
+ */
+void *xc_xenbus_map(int xc_handle);
+
 #endif
diff -r 13d6d993d797 -r 645e109ef777 tools/xenstore/xenstored_domain.c
--- a/tools/xenstore/xenstored_domain.c Mon May 22 17:30:25 2006 +0100
+++ b/tools/xenstore/xenstored_domain.c Tue May 23 01:50:39 2006 -0700
@@ -33,7 +33,6 @@
 #include "talloc.h"
 #include "xenstored_core.h"
 #include "xenstored_domain.h"
-#include "xenstored_proc.h"
 #include "xenstored_watch.h"
 #include "xenstored_test.h"
 
@@ -476,44 +475,26 @@ void restore_existing_connections(void)
 
 static int dom0_init(void) 
 { 
-       int rc, fd;
-       evtchn_port_t port; 
-       char str[20]; 
-       struct domain *dom0; 
-
-       fd = open(XENSTORED_PROC_PORT, O_RDONLY); 
-       if (fd == -1)
+       evtchn_port_t port;
+       struct domain *dom0;
+
+       port = xc_xenbus_evtchn(*xc_handle);
+
+       if (port == -1)
                return -1;
 
-       rc = read(fd, str, sizeof(str)); 
-       if (rc == -1)
-               goto outfd;
-       str[rc] = '\0'; 
-       port = strtoul(str, NULL, 0); 
-
-       close(fd); 
-
        dom0 = new_domain(NULL, 0, port); 
 
-       fd = open(XENSTORED_PROC_KVA, O_RDWR);
-       if (fd == -1)
+       dom0->interface = xc_xenbus_map(*xc_handle);
+
+       if (dom0->interface == NULL)
                return -1;
 
-       dom0->interface = mmap(NULL, getpagesize(), PROT_READ|PROT_WRITE,
-                              MAP_SHARED, fd, 0);
-       if (dom0->interface == MAP_FAILED)
-               goto outfd;
-
-       close(fd);
-
        talloc_steal(dom0->conn, dom0); 
 
        evtchn_notify(dom0->port); 
 
        return 0; 
-outfd:
-       close(fd);
-       return -1;
 }
 
 
diff -r 13d6d993d797 -r 645e109ef777 tools/xenstore/xenstored_proc.h
--- a/tools/xenstore/xenstored_proc.h   Mon May 22 17:30:25 2006 +0100
+++ /dev/null   Thu Jan 01 00:00:00 1970 +0000
@@ -1,27 +0,0 @@
-/* 
-    Copyright (C) 2005 XenSource Ltd
-
-    This program is free software; you can redistribute it and/or modify
-    it under the terms of the GNU General Public License as published by
-    the Free Software Foundation; either version 2 of the License, or
-    (at your option) any later version.
-
-    This program is distributed in the hope that it will be useful,
-    but WITHOUT ANY WARRANTY; without even the implied warranty of
-    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-    GNU General Public License for more details.
-
-    You should have received a copy of the GNU General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-
-*/
-
-#ifndef _XENSTORED_PROC_H
-#define _XENSTORED_PROC_H
-
-#define XENSTORED_PROC_KVA  "/proc/xen/xsd_kva"
-#define XENSTORED_PROC_PORT "/proc/xen/xsd_port"
-
-
-#endif /* _XENSTORED_PROC_H */

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