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

Signed-off-by: John Levon <john.levon@sun.com>
This commit is contained in:
kaf24@firebug.cl.cam.ac.uk committed 2006-05-24 14:24:57 +01:00
1 parent 04f28b0fc7
commit 1ac7d8afca
5 files changed
+91 -56

No files matched your search

+7 -1
View File
@@ -27,6 +27,12 @@ CLIENTS := xenstore-exists xenstore-list xenstore-read xenstore-rm
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_interleaved_transactions.o
.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
+8
View File
@@ -20,6 +20,8 @@
#ifndef _XENSTORED_CORE_H
#define _XENSTORED_CORE_H
#include <xenctrl.h>
#include <sys/types.h>
#include <dirent.h>
#include <stdbool.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 */
/*
+7 -28
View File
@@ -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;
evtchn_port_t port;
struct domain *dom0;
fd = open(XENSTORED_PROC_PORT, O_RDONLY);
if (fd == -1)
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;
}
+69
View File
@@ -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;
}
-27
View File
@@ -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 */
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.