WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

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

To: xen-devel@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-devel] [PATCH] Make use of /proc/xen/xsd_{port, kva} private to the Linux implementation.
From: John Levon <levon@xxxxxxxxxxxxxxxxx>
Date: Tue, 23 May 2006 18:34:21 +0100
Delivery-date: Tue, 23 May 2006 10:34:48 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
User-agent: Mutt/1.5.9i
# 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