On Sun, 5 Oct 2014 19:07:19 +0300
"Michael S. Tsirkin" <m...@redhat.com> wrote:

> virtio spec requires DRIVER_OK to be set before
> VQs are used, but some drivers use VQs before probe
> function returns.
> Since DRIVER_OK is set after probe, this violates the spec.

"Even though transitional devices support this behaviour, we want to
make it possible for those early callers to become spec compliant."

?

> 
> Add API for drivers to call before using VQs.
> 
> Sets DRIVER_OK internally.
> 
> Signed-off-by: Michael S. Tsirkin <m...@redhat.com>
> ---
>  include/linux/virtio_config.h | 17 +++++++++++++++++
>  1 file changed, 17 insertions(+)
> 
> diff --git a/include/linux/virtio_config.h b/include/linux/virtio_config.h
> index e8f8f71..6127fc8 100644
> --- a/include/linux/virtio_config.h
> +++ b/include/linux/virtio_config.h
> @@ -109,6 +109,23 @@ struct virtqueue *virtio_find_single_vq(struct 
> virtio_device *vdev,
>       return vq;
>  }
> 
> +/**
> + * virtio_early_enable_vqs - enable vq use in probe function
> + * @vdev: the device
> + *
> + * Driver must call this to use vqs in the probe function.
> + *
> + * Note: vqs are enabled automatically after probe returns.
> + */
> +static inline
> +void virtio_early_enable_vqs(struct virtio_device *dev)
> +{
> +     unsigned status = dev->config->get_status(dev);
> +
> +     BUG_ON(status & VIRTIO_CONFIG_S_DRIVER_OK);
> +     dev->config->set_status(dev, status | VIRTIO_CONFIG_S_DRIVER_OK);
> +}
> +

Maybe virtio_enable_vqs_early() instead?

>  static inline
>  const char *virtio_bus_name(struct virtio_device *vdev)
>  {

_______________________________________________
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/virtualization

Reply via email to