From 211529a7fe97521acdeaf1f785e48ea3ddd26517 Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Tue, 30 Jun 2015 17:06:58 +0100 Subject: [xen] Wait for and clear XenStore event before receiving data Older, out-of-tree Xen kernel modules (such as those provided with SuSE Linux Enterprise Server 11) do not clear the leftover "event pending" bit when opening an event channel. Consequently, no event is ever delivered to indicate that there is information in the XenStore ring buffer, and the system hangs shortly after loading the xen-platform-pci kernel module. Work around this problem by always waiting for the XenStore event channel to be signalled, and clearing the event before processing the received data. Signed-off-by: Michael Brown --- src/interface/xen/xenstore.c | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'src/interface') diff --git a/src/interface/xen/xenstore.c b/src/interface/xen/xenstore.c index 731af779c..23424a926 100644 --- a/src/interface/xen/xenstore.c +++ b/src/interface/xen/xenstore.c @@ -242,6 +242,10 @@ static int xenstore_response ( struct xen_hypervisor *xen, uint32_t req_id, char *string; int rc; + /* Wait for response to become available */ + while ( ! xenevent_pending ( xen, xen->store.port ) ) + cpu_nap(); + /* Receive message header */ xenstore_recv ( xen, &msg, sizeof ( msg ) ); *len = msg.len; -- cgit v1.2.3-55-g7522