[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
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |