From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Michael S. Tsirkin" Subject: Re: [PATCH v2 RFC 1/3] virtio: add notify() callback to virtio_driver Date: Thu, 21 Nov 2013 17:18:34 +0200 Message-ID: <20131121151834.GA12032@redhat.com> References: <1385045133-2165-1-git-send-email-graalfs@linux.vnet.ibm.com> <1385045133-2165-2-git-send-email-graalfs@linux.vnet.ibm.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: Content-Disposition: inline In-Reply-To: <1385045133-2165-2-git-send-email-graalfs@linux.vnet.ibm.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: virtualization-bounces@lists.linux-foundation.org Errors-To: virtualization-bounces@lists.linux-foundation.org To: Heinz Graalfs Cc: borntraeger@de.ibm.com, virtualization@lists.linux-foundation.org List-Id: virtualization@lists.linuxfoundation.org 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 > --- > 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 > #include > #include > +#include > > /* 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