summaryrefslogtreecommitdiffstats
path: root/sys/xen/xenstore
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/xenstore
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/xenstore')
-rw-r--r--sys/xen/xenstore/xenstorevar.h9
1 files changed, 6 insertions, 3 deletions
diff --git a/sys/xen/xenstore/xenstorevar.h b/sys/xen/xenstore/xenstorevar.h
index df41e31..4a1382d 100644
--- a/sys/xen/xenstore/xenstorevar.h
+++ b/sys/xen/xenstore/xenstorevar.h
@@ -56,8 +56,8 @@ struct xenstore_domain_interface;
struct xs_watch;
extern struct xenstore_domain_interface *xen_store;
-typedef void (xs_watch_cb_t)(struct xs_watch *,
- const char **vec, unsigned int len);
+typedef void (xs_watch_cb_t)(struct xs_watch *, const char **vec,
+ unsigned int len);
/* Register callback to watch subtree (node) in the XenStore. */
struct xs_watch
@@ -69,6 +69,9 @@ struct xs_watch
/* Callback (executed in a process context with no locks held). */
xs_watch_cb_t *callback;
+
+ /* Callback client data untouched by the XenStore watch mechanism. */
+ uintptr_t callback_data;
};
LIST_HEAD(xs_watch_list, xs_watch);
@@ -301,7 +304,7 @@ int xs_gather(struct xs_transaction t, const char *dir, ...);
* XenStore watches allow a client to be notified via a callback (embedded
* within the watch object) of changes to an object in the XenStore.
*
- * \param watch A xenbus_watch struct with it's node and callback fields
+ * \param watch An xs_watch struct with it's node and callback fields
* properly initialized.
*
* \return On success, 0. Otherwise an errno value indicating the
OpenPOWER on IntegriCloud