From mboxrd@z Thu Jan 1 00:00:00 1970 From: Alex Zeffertt Subject: [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 Date: Mon, 23 Mar 2009 15:21:24 +0000 Message-ID: <49C7A8F4.1080900@eu.citrix.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------020409090209000703070405" Return-path: List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: "xen-devel@lists.xensource.com" List-Id: xen-devel@lists.xenproject.org This is a multi-part message in MIME format. --------------020409090209000703070405 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit --------------020409090209000703070405 Content-Type: text/plain; name="minios_xenbus_ready_flag" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="minios_xenbus_ready_flag" 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 Signed-off-by: Alex Zeffertt --- 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) --------------020409090209000703070405 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel --------------020409090209000703070405--