[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [PATCH v2 26/29] tools/xenstored: mount 9pfs device in stubdom
Mount the 9pfs device in stubdom enabling it to use files. This has to happen in a worker thread in order to allow the main thread handling the required Xenstore accesses in parallel. Signed-off-by: Juergen Gross <jgross@xxxxxxxx> Reviewed-by: Jason Andryuk <jandryuk@xxxxxxxxx> --- tools/xenstored/core.h | 4 ++++ tools/xenstored/domain.c | 2 ++ tools/xenstored/minios.c | 36 ++++++++++++++++++++++++++++++++++++ 3 files changed, 42 insertions(+) diff --git a/tools/xenstored/core.h b/tools/xenstored/core.h index 3c28007d11..a0d3592961 100644 --- a/tools/xenstored/core.h +++ b/tools/xenstored/core.h @@ -389,6 +389,10 @@ static inline bool domain_is_unprivileged(const struct connection *conn) evtchn_port_t get_xenbus_evtchn(void); void early_init(void); +#ifdef __MINIOS__ +void mount_9pfs(void); +#endif + /* Write out the pidfile */ void write_pidfile(const char *pidfile); diff --git a/tools/xenstored/domain.c b/tools/xenstored/domain.c index 162b87b460..4263c1360f 100644 --- a/tools/xenstored/domain.c +++ b/tools/xenstored/domain.c @@ -1236,6 +1236,8 @@ void stubdom_init(void) barf_perror("Failed to initialize stubdom"); xenevtchn_notify(xce_handle, stubdom->port); + + mount_9pfs(); #endif } diff --git a/tools/xenstored/minios.c b/tools/xenstored/minios.c index 202d70387a..fddbede869 100644 --- a/tools/xenstored/minios.c +++ b/tools/xenstored/minios.c @@ -19,8 +19,16 @@ #include <sys/mman.h> #include "core.h" #include <xen/grant_table.h> +#include <mini-os/9pfront.h> #include <mini-os/events.h> #include <mini-os/gnttab.h> +#include <mini-os/sched.h> +#include <mini-os/xenbus.h> +#include <mini-os/xmalloc.h> + +#define P9_STATE_PATH "device/9pfs/0/state" + +static void *p9_device; void write_pidfile(const char *pidfile) { @@ -62,3 +70,31 @@ void early_init(void) if (stub_domid == DOMID_INVALID) barf("could not get own domid"); } + +static void mount_thread(void *p) +{ + xenbus_event_queue events = NULL; + char *err; + char *dummy; + + free(xenbus_watch_path_token(XBT_NIL, P9_STATE_PATH, "9pfs", &events)); + + for (;;) { + xenbus_wait_for_watch(&events); + err = xenbus_read(XBT_NIL, P9_STATE_PATH, &dummy); + if (!err) + break; + free(err); + } + + free(dummy); + + free(xenbus_unwatch_path_token(XBT_NIL, P9_STATE_PATH, "9pfs")); + + p9_device = init_9pfront(0, XENSTORE_LIB_DIR); +} + +void mount_9pfs(void) +{ + create_thread("mount-9pfs", mount_thread, NULL); +} -- 2.35.3
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |