mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 10:40:03 +01:00
[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:
1 parent
04f28b0fc7
commit
1ac7d8afca
5 files changed
+91
-56
No files matched your search
@@ -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
|
||||
|
||||
@@ -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 */
|
||||
|
||||
/*
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
@@ -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 */
|
||||