summaryrefslogtreecommitdiffstats
path: root/sys/xen/xenbus/xenbusvar.h
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/xenbus/xenbusvar.h
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/xenbus/xenbusvar.h')
-rw-r--r--sys/xen/xenbus/xenbusvar.h24
1 files changed, 20 insertions, 4 deletions
diff --git a/sys/xen/xenbus/xenbusvar.h b/sys/xen/xenbus/xenbusvar.h
index 55d7f29..bf2a342 100644
--- a/sys/xen/xenbus/xenbusvar.h
+++ b/sys/xen/xenbus/xenbusvar.h
@@ -51,8 +51,6 @@
#include <xen/xenstore/xenstorevar.h>
-#include "xenbus_if.h"
-
/* XenBus allocations including XenStore data returned to clients. */
MALLOC_DECLARE(M_XENBUS);
@@ -116,6 +114,8 @@ XenbusState xenbus_read_driver_state(const char *path);
* must be stable for the lifetime of the watch.
* \param callback The function to call when XenStore objects at or below
* path are modified.
+ * \param cb_data Client data that can be retrieved from the watch object
+ * during the callback.
*
* \return On success, 0. Otherwise an errno value indicating the
* type of failure.
@@ -126,7 +126,8 @@ XenbusState xenbus_read_driver_state(const char *path);
*/
int xenbus_watch_path(device_t dev, char *path,
struct xs_watch *watch,
- xs_watch_cb_t *callback);
+ xs_watch_cb_t *callback,
+ uintptr_t cb_data);
/**
* Initialize and register a watch at path/path2 in the XenStore.
@@ -138,6 +139,8 @@ int xenbus_watch_path(device_t dev, char *path,
* must be stable for the lifetime of the watch.
* \param callback The function to call when XenStore objects at or below
* path are modified.
+ * \param cb_data Client data that can be retrieved from the watch object
+ * during the callback.
*
* \return On success, 0. Otherwise an errno value indicating the
* type of failure.
@@ -153,7 +156,8 @@ int xenbus_watch_path(device_t dev, char *path,
*/
int xenbus_watch_path2(device_t dev, const char *path,
const char *path2, struct xs_watch *watch,
- xs_watch_cb_t *callback);
+ xs_watch_cb_t *callback,
+ uintptr_t cb_data);
/**
* Grant access to the given ring_mfn to the peer of the given device.
@@ -275,4 +279,16 @@ const char *xenbus_strstate(enum xenbus_state state);
*/
int xenbus_dev_is_online(device_t dev);
+/**
+ * Default callback invoked when a change to the local XenStore sub-tree
+ * for a device is modified.
+ *
+ * \param dev The XenBus device whose tree was modified.
+ * \param path The tree relative sub-path to the modified node. The empty
+ * string indicates the root of the tree was destroyed.
+ */
+void xenbus_localend_changed(device_t dev, const char *path);
+
+#include "xenbus_if.h"
+
#endif /* _XEN_XENBUS_XENBUSVAR_H */
OpenPOWER on IntegriCloud