Message ID | 20220323084954.11769-2-sgarzare@redhat.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | vsock/virtio: enable VQs early on probe and finish the setup before using them | expand |
On Wed, Mar 23, 2022 at 09:49:52AM +0100, Stefano Garzarella wrote: > virtio spec requires drivers to set DRIVER_OK before using VQs. > This is set automatically after probe returns, but virtio-vsock > driver uses VQs in the probe function to fill rx and event VQs > with new buffers. > > Let's fix this, calling virtio_device_ready() before using VQs > in the probe function. > > Fixes: 0ea9e1d3a9e3 ("VSOCK: Introduce virtio_transport.ko") > Signed-off-by: Stefano Garzarella <sgarzare@redhat.com> > --- > net/vmw_vsock/virtio_transport.c | 2 ++ > 1 file changed, 2 insertions(+) > > diff --git a/net/vmw_vsock/virtio_transport.c b/net/vmw_vsock/virtio_transport.c > index 5afc194a58bb..b1962f8cd502 100644 > --- a/net/vmw_vsock/virtio_transport.c > +++ b/net/vmw_vsock/virtio_transport.c > @@ -622,6 +622,8 @@ static int virtio_vsock_probe(struct virtio_device *vdev) > INIT_WORK(&vsock->event_work, virtio_transport_event_work); > INIT_WORK(&vsock->send_pkt_work, virtio_transport_send_pkt_work); > > + virtio_device_ready(vdev); Can rx and event virtqueue interrupts be lost if they occur before we assign vdev->priv later in virtio_vsock_probe()? Stefan
On Wed, Mar 23, 2022 at 01:44:42PM +0000, Stefan Hajnoczi wrote: >On Wed, Mar 23, 2022 at 09:49:52AM +0100, Stefano Garzarella wrote: >> virtio spec requires drivers to set DRIVER_OK before using VQs. >> This is set automatically after probe returns, but virtio-vsock >> driver uses VQs in the probe function to fill rx and event VQs >> with new buffers. >> >> Let's fix this, calling virtio_device_ready() before using VQs >> in the probe function. >> >> Fixes: 0ea9e1d3a9e3 ("VSOCK: Introduce virtio_transport.ko") >> Signed-off-by: Stefano Garzarella <sgarzare@redhat.com> >> --- >> net/vmw_vsock/virtio_transport.c | 2 ++ >> 1 file changed, 2 insertions(+) >> >> diff --git a/net/vmw_vsock/virtio_transport.c b/net/vmw_vsock/virtio_transport.c >> index 5afc194a58bb..b1962f8cd502 100644 >> --- a/net/vmw_vsock/virtio_transport.c >> +++ b/net/vmw_vsock/virtio_transport.c >> @@ -622,6 +622,8 @@ static int virtio_vsock_probe(struct virtio_device *vdev) >> INIT_WORK(&vsock->event_work, virtio_transport_event_work); >> INIT_WORK(&vsock->send_pkt_work, virtio_transport_send_pkt_work); >> >> + virtio_device_ready(vdev); > >Can rx and event virtqueue interrupts be lost if they occur before we >assign vdev->priv later in virtio_vsock_probe()? Yep, as Michael suggested I'll fix the patch order in the next version. Thanks, Stefano
diff --git a/net/vmw_vsock/virtio_transport.c b/net/vmw_vsock/virtio_transport.c index 5afc194a58bb..b1962f8cd502 100644 --- a/net/vmw_vsock/virtio_transport.c +++ b/net/vmw_vsock/virtio_transport.c @@ -622,6 +622,8 @@ static int virtio_vsock_probe(struct virtio_device *vdev) INIT_WORK(&vsock->event_work, virtio_transport_event_work); INIT_WORK(&vsock->send_pkt_work, virtio_transport_send_pkt_work); + virtio_device_ready(vdev); + mutex_lock(&vsock->tx_lock); vsock->tx_run = true; mutex_unlock(&vsock->tx_lock);
virtio spec requires drivers to set DRIVER_OK before using VQs. This is set automatically after probe returns, but virtio-vsock driver uses VQs in the probe function to fill rx and event VQs with new buffers. Let's fix this, calling virtio_device_ready() before using VQs in the probe function. Fixes: 0ea9e1d3a9e3 ("VSOCK: Introduce virtio_transport.ko") Signed-off-by: Stefano Garzarella <sgarzare@redhat.com> --- net/vmw_vsock/virtio_transport.c | 2 ++ 1 file changed, 2 insertions(+)