From 2641e757426b0b92d46421eeceb63f24ac002566 Mon Sep 17 00:00:00 2001 From: Sepherosa Ziehau Date: Fri, 25 Nov 2016 09:13:10 +0000 Subject: hyperv/vmbus: Add a simplified version of channel close. So that the caller can know the channel close error and react accordingly. MFC after: 1 week Sponsored by: Microsoft Differential Revision: https://reviews.freebsd.org/D8600 --- sys/dev/hyperv/include/vmbus.h | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'sys/dev/hyperv/include') diff --git a/sys/dev/hyperv/include/vmbus.h b/sys/dev/hyperv/include/vmbus.h index 9671c8ee6d47..5fd9676c7053 100644 --- a/sys/dev/hyperv/include/vmbus.h +++ b/sys/dev/hyperv/include/vmbus.h @@ -131,6 +131,7 @@ vmbus_get_channel(device_t dev) /* * vmbus_chan_open_br() + * * Return values: * 0 Succeeded. * EISCONN Failed, and the memory passed through 'br' is still @@ -139,6 +140,24 @@ vmbus_get_channel(device_t dev) * other values Failed. The memory passed through 'br' is no longer * connected. Callers are free to do anything with the * memory passed through 'br'. + * + * + * + * vmbus_chan_close_direct() + * + * NOTE: + * Callers of this function _must_ make sure to close all sub-channels before + * closing the primary channel. + * + * Return values: + * 0 Succeeded. + * EISCONN Failed, and the memory associated with the bufring + * is still connected. Callers must _not_ free the the + * memory associated with the bufring, if this error + * happens. + * other values Failed. The memory associated with the bufring is + * no longer connected. Callers are free to do anything + * with the memory associated with the bufring. */ int vmbus_chan_open(struct vmbus_channel *chan, int txbr_size, int rxbr_size, const void *udata, int udlen, @@ -147,6 +166,7 @@ int vmbus_chan_open_br(struct vmbus_channel *chan, const struct vmbus_chan_br *cbr, const void *udata, int udlen, vmbus_chan_callback_t cb, void *cbarg); void vmbus_chan_close(struct vmbus_channel *chan); +int vmbus_chan_close_direct(struct vmbus_channel *chan); void vmbus_chan_intr_drain(struct vmbus_channel *chan); void vmbus_chan_run_task(struct vmbus_channel *chan, struct task *task); -- cgit v1.3