On Thu, Nov 21, 2013 at 03:45:31PM +0100, Heinz Graalfs wrote: > 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, > +}; OK after understanding what this does, I think a better name would be VIRTIO_DEV_SURPRIZE_REMOVAL this is what happened here. > +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