On Mon, Oct 06, 2014 at 04:08:16PM +0200, Cornelia Huck wrote: > 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." > > ?
Exactly. > > > > 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? OK. > > 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