[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [XENSTORE] Make use of /proc/xen/xsd_{port, kva} private to the Linux implementation.
# HG changeset patch # User kaf24@xxxxxxxxxxxxxxxxxxxx # Node ID 041127f2c687387e5e28fcfbec49ed753700c261 # Parent ed696467fe642fe3e8d2722048dd97267b9b3727 [XENSTORE] Make use of /proc/xen/xsd_{port,kva} private to the Linux implementation. Signed-off-by: John Levon <john.levon@xxxxxxx> --- tools/xenstore/xenstored_proc.h | 27 -------------- tools/xenstore/Makefile | 8 +++- tools/xenstore/xenstored_core.h | 8 ++++ tools/xenstore/xenstored_domain.c | 37 ++++---------------- tools/xenstore/xenstored_linux.c | 69 ++++++++++++++++++++++++++++++++++++++ 5 files changed, 92 insertions(+), 57 deletions(-) diff -r ed696467fe64 -r 041127f2c687 tools/xenstore/Makefile --- a/tools/xenstore/Makefile Wed May 24 14:12:40 2006 +0100 +++ b/tools/xenstore/Makefile Wed May 24 14:24:57 2006 +0100 @@ -27,6 +27,12 @@ CLIENTS += xenstore-write CLIENTS += xenstore-write CLIENTS_OBJS := $(patsubst xenstore-%,xenstore_%.o,$(CLIENTS)) +XENSTORED_OBJS = xenstored_core.o xenstored_watch.o xenstored_domain.o xenstored_transaction.o xs_lib.o talloc.o utils.o tdb.o hashtable.o + +XENSTORED_Linux = xenstored_linux.o + +XENSTORED_OBJS += $(XENSTORED_$(OS)) + .PHONY: all all: libxenstore.so xenstored $(CLIENTS) xs_tdb_dump xenstore-control xenstore-ls @@ -36,7 +42,7 @@ test_interleaved_transactions: test_inte .PHONY: testcode testcode: xs_test xenstored_test xs_random -xenstored: xenstored_core.o xenstored_watch.o xenstored_domain.o xenstored_transaction.o xs_lib.o talloc.o utils.o tdb.o hashtable.o +xenstored: $(XENSTORED_OBJS) $(LINK.o) $^ $(LOADLIBES) $(LDLIBS) -lxenctrl -o $@ $(CLIENTS): xenstore-%: xenstore_%.o libxenstore.so diff -r ed696467fe64 -r 041127f2c687 tools/xenstore/xenstored_core.h --- a/tools/xenstore/xenstored_core.h Wed May 24 14:12:40 2006 +0100 +++ b/tools/xenstore/xenstored_core.h Wed May 24 14:24:57 2006 +0100 @@ -19,6 +19,8 @@ #ifndef _XENSTORED_CORE_H #define _XENSTORED_CORE_H + +#include <xenctrl.h> #include <sys/types.h> #include <dirent.h> @@ -163,6 +165,12 @@ void trace(const char *fmt, ...); extern int event_fd; +/* Map the kernel's xenstore page. */ +void *xenbus_map(void); + +/* Return the event channel used by xenbus. */ +evtchn_port_t xenbus_evtchn(void); + #endif /* _XENSTORED_CORE_H */ /* diff -r ed696467fe64 -r 041127f2c687 tools/xenstore/xenstored_domain.c --- a/tools/xenstore/xenstored_domain.c Wed May 24 14:12:40 2006 +0100 +++ b/tools/xenstore/xenstored_domain.c Wed May 24 14:24:57 2006 +0100 @@ -33,12 +33,11 @@ #include "talloc.h" #include "xenstored_core.h" #include "xenstored_domain.h" -#include "xenstored_proc.h" #include "xenstored_watch.h" #include "xenstored_test.h" #include <xenctrl.h> -#include <xen/linux/evtchn.h> +#include <xen/sys/evtchn.h> static int *xc_handle; static evtchn_port_t virq_port; @@ -476,44 +475,24 @@ 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 = xenbus_evtchn(); + 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 = xenbus_map(); + 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 ed696467fe64 -r 041127f2c687 tools/xenstore/xenstored_linux.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tools/xenstore/xenstored_linux.c Wed May 24 14:24:57 2006 +0100 @@ -0,0 +1,69 @@ +/****************************************************************************** + * + * Copyright 2006 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + * + * Copyright (C) 2005 Rusty Russell IBM Corporation + * + * 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, version 2 of the + * License. + */ + +#include <fcntl.h> +#include <unistd.h> +#include <stdlib.h> +#include <sys/mman.h> + +#include "xenstored_core.h" + +#define XENSTORED_PROC_KVA "/proc/xen/xsd_kva" +#define XENSTORED_PROC_PORT "/proc/xen/xsd_port" + +evtchn_port_t xenbus_evtchn(void) +{ + 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 *xenbus_map(void) +{ + 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; +} diff -r ed696467fe64 -r 041127f2c687 tools/xenstore/xenstored_proc.h --- a/tools/xenstore/xenstored_proc.h Wed May 24 14:12:40 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-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |