[PATCH 09/10] uio_hv_generic: add rescind support
Stephen Hemminger
stephen at networkplumber.org
Thu Jan 4 22:13:33 UTC 2018
When host rescinds the device, the UIO driver will clear the interrupt
state and notify application. The read (or write) on the interrupt FD
will then fail with -EIO. This is simpler than adding lots extra uevent
stuff inside UIO.
Signed-off-by: Stephen Hemminger <sthemmin at microsoft.com>
---
drivers/uio/uio_hv_generic.c | 19 +++++++++++++++++++
1 file changed, 19 insertions(+)
diff --git a/drivers/uio/uio_hv_generic.c b/drivers/uio/uio_hv_generic.c
index b5fe0db844a7..eab173665dd4 100644
--- a/drivers/uio/uio_hv_generic.c
+++ b/drivers/uio/uio_hv_generic.c
@@ -115,6 +115,23 @@ static void hv_uio_channel_cb(void *context)
uio_event_notify(&pdata->info);
}
+/*
+ * Callback from vmbus_event when channel is rescinded.
+ */
+static void hv_uio_rescind(struct vmbus_channel *channel)
+{
+ struct hv_device *hv_dev = channel->primary_channel->device_obj;
+ struct hv_uio_private_data *pdata = hv_get_drvdata(hv_dev);
+
+ /*
+ * Turn off the interrupt file handle
+ * Next read for event will return -EIO
+ */
+ pdata->info.irq = 0;
+
+ /* Wake up reader */
+ uio_event_notify(&pdata->info);
+}
static void
hv_uio_cleanup(struct hv_device *dev, struct hv_uio_private_data *pdata)
@@ -248,6 +265,8 @@ hv_uio_probe(struct hv_device *dev,
goto fail_cleanup;
}
+ vmbus_set_chn_rescind_callback(dev->channel, hv_uio_rescind);
+
hv_set_drvdata(dev, pdata);
return 0;
--
2.15.1
More information about the devel
mailing list