[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH 18/24] [xen-unstable.hg] flag in minios kernel to say whether xenbus is initialised - it might not be if this is a xenstore stubdom
Aborts minios xenbus initialization if there is no xenstored mfn or port available. Adds a is_xenbus_ready function for other modules to query whether xenbus is available. TODO: Do we just want a global integer instead of a function? TODO: Should fini_xenbus take it back to not ready? TODO: Should the other non-static functions fail if !ready? Signed-off-by: Diego Ongaro <diego.ongaro@xxxxxxxxxx> Signed-off-by: Alex Zeffertt <alex.zeffertt@xxxxxxxxxxxxx> --- diff -r e53f83b91052 extras/mini-os/include/xenbus.h --- a/extras/mini-os/include/xenbus.h Fri Aug 01 16:50:48 2008 +0100 +++ b/extras/mini-os/include/xenbus.h Fri Aug 01 16:50:49 2008 +0100 @@ -6,6 +6,8 @@ /* Initialize the XenBus system. */ void init_xenbus(void); + +int is_xenbus_ready(void); /* Read the value associated with a path. Returns a malloc'd error string on failure and sets *value to NULL. On success, *value is diff -r e53f83b91052 extras/mini-os/xenbus/xenbus.c --- a/extras/mini-os/xenbus/xenbus.c Fri Aug 01 16:50:48 2008 +0100 +++ b/extras/mini-os/xenbus/xenbus.c Fri Aug 01 16:50:49 2008 +0100 @@ -41,6 +41,7 @@ #define DEBUG(_f, _a...) ((void)0) #endif +static int xenbus_ready; static struct xenstore_domain_interface *xenstore_buf; static DECLARE_WAIT_QUEUE_HEAD(xb_waitq); DECLARE_WAIT_QUEUE_HEAD(xenbus_watch_queue); @@ -254,12 +255,23 @@ return o_probe; } +int is_xenbus_ready(void) +{ + return xenbus_ready; +} + /* Initialise xenbus. */ void init_xenbus(void) { int err; printk("Initialising xenbus\n"); DEBUG("init_xenbus called.\n"); + + if (start_info.store_mfn == -1 || start_info.store_evtchn == -1) { + printk("No start_info store_mfn/store_evtchn, aborting init_xenbus\n"); + return; + } + xenstore_buf = mfn_to_virt(start_info.store_mfn); create_thread("xenstore", xenbus_thread_func, NULL); DEBUG("buf at %p.\n", xenstore_buf); @@ -268,6 +280,8 @@ NULL); unmask_evtchn(start_info.store_evtchn); DEBUG("xenbus on irq %d\n", err); + + xenbus_ready = 1; } void fini_xenbus(void) _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |