Commit d50497eb authored by Jason Wang's avatar Jason Wang Committed by Michael S. Tsirkin
Browse files

virtio_config: introduce a new .enable_cbs method



This patch introduces a new method to enable the callbacks for config
and virtqueues. This will be used for making sure the virtqueue
callbacks are only enabled after virtio_device_ready() if transport
implements this method.

Signed-off-by: default avatarJason Wang <jasowang@redhat.com>
Link: https://lore.kernel.org/r/20211019070152.8236-4-jasowang@redhat.com


Signed-off-by: default avatarMichael S. Tsirkin <mst@redhat.com>
parent 28962ec5
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -23,6 +23,8 @@ struct virtio_shm_region {
 *       any of @get/@set, @get_status/@set_status, or @get_features/
 *       @finalize_features are NOT safe to be called from an atomic
 *       context.
 * @enable_cbs: enable the callbacks
 *      vdev: the virtio_device
 * @get: read the value of a configuration field
 *	vdev: the virtio_device
 *	offset: the offset of the configuration field
@@ -75,6 +77,7 @@ struct virtio_shm_region {
 */
typedef void vq_callback_t(struct virtqueue *);
struct virtio_config_ops {
	void (*enable_cbs)(struct virtio_device *vdev);
	void (*get)(struct virtio_device *vdev, unsigned offset,
		    void *buf, unsigned len);
	void (*set)(struct virtio_device *vdev, unsigned offset,
@@ -229,6 +232,9 @@ void virtio_device_ready(struct virtio_device *dev)
{
	unsigned status = dev->config->get_status(dev);

	if (dev->config->enable_cbs)
                  dev->config->enable_cbs(dev);

	BUG_ON(status & VIRTIO_CONFIG_S_DRIVER_OK);
	dev->config->set_status(dev, status | VIRTIO_CONFIG_S_DRIVER_OK);
}