summaryrefslogtreecommitdiffstats
path: root/sys/xen/interface
diff options
context:
space:
mode:
authorgibbs <gibbs@FreeBSD.org>2011-06-11 04:59:01 +0000
committergibbs <gibbs@FreeBSD.org>2011-06-11 04:59:01 +0000
commitc8e3d11e24e29c032a1ed9d46c65d8f10e9f0030 (patch)
tree686e2101c9d5986d71756880e57aea7fb13199f0 /sys/xen/interface
parent33760b7ad202030ba9427e4ca67e61512759e2e0 (diff)
downloadFreeBSD-src-c8e3d11e24e29c032a1ed9d46c65d8f10e9f0030.zip
FreeBSD-src-c8e3d11e24e29c032a1ed9d46c65d8f10e9f0030.tar.gz
Monitor and emit events for XenStore changes to XenBus trees
of the devices we manage. These changes can be due to writes we make ourselves or due to changes made by the control domain. The goal of these changes is to insure that all state transitions can be detected regardless of their source and to allow common device policies (e.g. "onlined" backend devices) to be centralized in the XenBus bus code. sys/xen/xenbus/xenbusvar.h: sys/xen/xenbus/xenbus.c: sys/xen/xenbus/xenbus_if.m: Add a new method for XenBus drivers "localend_changed". This method is invoked whenever a write is detected to a device's XenBus tree. The default implementation of this method is a no-op. sys/xen/xenbus/xenbus_if.m: sys/dev/xen/netfront/netfront.c: sys/dev/xen/blkfront/blkfront.c: sys/dev/xen/blkback/blkback.c: Change the signature of the "otherend_changed" method. This notification cannot fail, so it should return void. sys/xen/xenbus/xenbusb_back.c: Add "online" device handling to the XenBus Back Bus support code. An online backend device remains active after a front-end detaches as a reconnect is expected to occur in the near future. sys/xen/interface/io/xenbus.h: Add comment block further explaining the meaning and driver responsibilities associated with the XenBus Closed state. sys/xen/xenbus/xenbusb.c: sys/xen/xenbus/xenbusb.h: sys/xen/xenbus/xenbusb_back.c: sys/xen/xenbus/xenbusb_front.c: sys/xen/xenbus/xenbusb_if.m: o Register a XenStore watch against the local XenBus tree for all devices. o Cache the string length of the path to our local tree. o Allow the xenbus front and back drivers to hook/filter both local and otherend watch processing. o Update the device ivar version of "state" when we detect a XenStore update of that node. sys/dev/xen/control/control.c: sys/xen/xenbus/xenbus.c: sys/xen/xenbus/xenbusb.c: sys/xen/xenbus/xenbusb.h: sys/xen/xenbus/xenbusvar.h: sys/xen/xenstore/xenstorevar.h: Allow clients of the XenStore watch mechanism to attach a single uintptr_t worth of client data to the watch. This removes the need to carefully place client watch data within enclosing objects so that a cast or offsetof calculation can be used to convert from watch to enclosing object. Sponsored by: Spectra Logic Corporation MFC after: 1 week
Diffstat (limited to 'sys/xen/interface')
-rw-r--r--sys/xen/interface/io/xenbus.h9
1 files changed, 9 insertions, 0 deletions
diff --git a/sys/xen/interface/io/xenbus.h b/sys/xen/interface/io/xenbus.h
index 5e24f31..672c7d4 100644
--- a/sys/xen/interface/io/xenbus.h
+++ b/sys/xen/interface/io/xenbus.h
@@ -64,6 +64,15 @@ enum xenbus_state {
/*
* Closed: No connection exists between front and back end.
+ *
+ * For backend devices with the "online" attribute, the front can
+ * request a reconnect at any time. To handle this transition
+ * gracefully, backend devices must reinitialize any XenStore data
+ * used to negotiate features with a peer before transitioning to
+ * the closed state. When a reconnect request occurs, the
+ * XenBus backend support code will automatically transition the
+ * backend device from Closed to InitWait, kicking off the ring
+ * and feature negotiation process.
*/
XenbusStateClosed = 6,
OpenPOWER on IntegriCloud