aboutsummaryrefslogtreecommitdiffstats
path: root/tools/xenstore
diff options
context:
space:
mode:
authorDaniel De Graaf <dgdegra@tycho.nsa.gov>2012-02-09 18:33:35 +0000
committerDaniel De Graaf <dgdegra@tycho.nsa.gov>2012-02-09 18:33:35 +0000
commit7e0fd117e73fde58fe1ddb2fd4bd56108d2918a1 (patch)
treef81fbd7c25b616edc281c84ad6368e493a9d24f5 /tools/xenstore
parentf5f38f9f51d3dcf214d1035f8c23b2c2004243eb (diff)
downloadxen-7e0fd117e73fde58fe1ddb2fd4bd56108d2918a1.tar.gz
xen-7e0fd117e73fde58fe1ddb2fd4bd56108d2918a1.tar.bz2
xen-7e0fd117e73fde58fe1ddb2fd4bd56108d2918a1.zip
xenstored: add --event parameter for bootstrapping
When xenstored is run in a minios domain, it needs a bootstrap connection to dom0 so that additional domain introduce messages can be sent to it. Signed-off-by: Daniel De Graaf <dgdegra@tycho.nsa.gov> Acked-by: Ian Campbell <ian.campbell@citrix.com> Cc: Ian Jackson <ian.jackson@eu.citrix.com> Cc: Stefano Stabellini <stefano.stabellini@eu.citrix.com> Committed-by: Ian Jackson <Ian.Jackson@eu.citrix.com>
Diffstat (limited to 'tools/xenstore')
-rw-r--r--tools/xenstore/xenstored_core.c5
-rw-r--r--tools/xenstore/xenstored_core.h3
-rw-r--r--tools/xenstore/xenstored_domain.c2
-rw-r--r--tools/xenstore/xenstored_minios.c6
4 files changed, 13 insertions, 3 deletions
diff --git a/tools/xenstore/xenstored_core.c b/tools/xenstore/xenstored_core.c
index a762db714f..40e2fc0c8b 100644
--- a/tools/xenstore/xenstored_core.c
+++ b/tools/xenstore/xenstored_core.c
@@ -1749,6 +1749,7 @@ static struct option options[] = {
{ "no-domain-init", 0, NULL, 'D' },
{ "entry-nb", 1, NULL, 'E' },
{ "pid-file", 1, NULL, 'F' },
+ { "event", 1, NULL, 'e' },
{ "help", 0, NULL, 'H' },
{ "no-fork", 0, NULL, 'N' },
{ "output-pid", 0, NULL, 'P' },
@@ -1763,6 +1764,7 @@ static struct option options[] = {
{ NULL, 0, NULL, 0 } };
extern void dump_conn(struct connection *conn);
+int dom0_event = 0;
int main(int argc, char *argv[])
{
@@ -1820,6 +1822,9 @@ int main(int argc, char *argv[])
case 'W':
quota_nb_watch_per_domain = strtol(optarg, NULL, 10);
break;
+ case 'e':
+ dom0_event = strtol(optarg, NULL, 10);
+ break;
}
}
if (optind != argc)
diff --git a/tools/xenstore/xenstored_core.h b/tools/xenstore/xenstored_core.h
index f0749551be..e1c2be7a48 100644
--- a/tools/xenstore/xenstored_core.h
+++ b/tools/xenstore/xenstored_core.h
@@ -168,6 +168,7 @@ void trace(const char *fmt, ...);
void dtrace_io(const struct connection *conn, const struct buffered_data *data, int out);
extern int event_fd;
+extern int dom0_event;
/* Map the kernel's xenstore page. */
void *xenbus_map(void);
@@ -190,6 +191,8 @@ void finish_daemonize(void);
/* Open a pipe for signal handling */
void init_pipe(int reopen_log_pipe[2]);
+xc_gnttab **xcg_handle;
+
#endif /* _XENSTORED_CORE_H */
/*
diff --git a/tools/xenstore/xenstored_domain.c b/tools/xenstore/xenstored_domain.c
index 62069612b7..558e5cbc59 100644
--- a/tools/xenstore/xenstored_domain.c
+++ b/tools/xenstore/xenstored_domain.c
@@ -35,7 +35,7 @@
#include <xen/grant_table.h>
static xc_interface **xc_handle;
-static xc_gnttab **xcg_handle;
+xc_gnttab **xcg_handle;
static evtchn_port_t virq_port;
xc_evtchn *xce_handle = NULL;
diff --git a/tools/xenstore/xenstored_minios.c b/tools/xenstore/xenstored_minios.c
index c8700baa58..1c6f794d39 100644
--- a/tools/xenstore/xenstored_minios.c
+++ b/tools/xenstore/xenstored_minios.c
@@ -46,15 +46,17 @@ void xenbus_notify_running(void)
evtchn_port_t xenbus_evtchn(void)
{
- return -1;
+ return dom0_event;
}
void *xenbus_map(void)
{
- return NULL;
+ return xc_gnttab_map_grant_ref(*xcg_handle, 0,
+ GNTTAB_RESERVED_XENSTORE, PROT_READ|PROT_WRITE);
}
void unmap_xenbus(void *interface)
{
+ xc_gnttab_munmap(*xcg_handle, interface, 1);
}