Add an optional notify() callback to virtio_driver. A backend driver can provide this callback to perform actions for a lost device. notify() event values are inherited from virtio_ccw's notify() callback. We might want to support even more of them lateron. notify() return values are defined in include/linux/notifier.h. Signed-off-by: Heinz Graalfs <graalfs@xxxxxxxxxxxxxxxxxx> --- drivers/virtio/virtio.c | 9 +++++++++ include/linux/virtio.h | 10 ++++++++++ 2 files changed, 19 insertions(+) diff --git a/drivers/virtio/virtio.c b/drivers/virtio/virtio.c index ee59b74..a7f4302 100644 --- a/drivers/virtio/virtio.c +++ b/drivers/virtio/virtio.c @@ -3,6 +3,7 @@ #include <linux/virtio_config.h> #include <linux/module.h> #include <linux/idr.h> +#include <linux/notifier.h> /* Unique numbering for virtio devices. */ static DEFINE_IDA(virtio_index_ida); @@ -186,6 +187,14 @@ void unregister_virtio_driver(struct virtio_driver *driver) } EXPORT_SYMBOL_GPL(unregister_virtio_driver); +int notify_virtio_device(struct virtio_device *vdev, int event) +{ + struct virtio_driver *drv = drv_to_virtio(vdev->dev.driver); + + return drv->notify ? drv->notify(vdev, event) : NOTIFY_DONE; +} +EXPORT_SYMBOL_GPL(notify_virtio_device); + int register_virtio_device(struct virtio_device *dev) { int err; diff --git a/include/linux/virtio.h b/include/linux/virtio.h index f15f6e7..da18e9a 100644 --- a/include/linux/virtio.h +++ b/include/linux/virtio.h @@ -110,6 +110,15 @@ int register_virtio_device(struct virtio_device *dev); void unregister_virtio_device(struct virtio_device *dev); /** + * notify event values + * @VDEV_GONE: device gone + */ +enum { + VDEV_GONE = 1, +}; +int notify_virtio_device(struct virtio_device *dev, int event); + +/** * virtio_driver - operations for a virtio I/O driver * @driver: underlying device driver (populate name and owner). * @id_table: the ids serviced by this driver. @@ -129,6 +138,7 @@ struct virtio_driver { void (*scan)(struct virtio_device *dev); void (*remove)(struct virtio_device *dev); void (*config_changed)(struct virtio_device *dev); + int (*notify)(struct virtio_device *dev, int event); #ifdef CONFIG_PM int (*freeze)(struct virtio_device *dev); int (*restore)(struct virtio_device *dev); -- 1.8.3.1 _______________________________________________ Virtualization mailing list Virtualization@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linuxfoundation.org/mailman/listinfo/virtualization