Re: [RFC 6/8] virtio-ccw: Lock ioeventfd state with VIRTIO_F_NOTIFICATION_DATA
Thomas Huth <[email protected]>
| Newsgroups | dev.linux.lists.virtio-fs,org.nongnu.qemu-devel |
|---|---|
| Message-ID | <[email protected]> |
On 01/03/2024 14.43, Jonah Palmer wrote: > Prevent ioeventfd from being enabled/disabled when a virtio-ccw device > has negotiated the VIRTIO_F_NOTIFICATION_DATA transport feature. > > Due to the ioeventfd not being able to carry the extra data associated > with this feature, the ioeventfd should be left in a disabled state for > emulated virtio-ccw devices using this feature. > > Signed-off-by: Jonah Palmer <[email protected]> > --- > hw/s390x/virtio-ccw.c | 6 ++++-- > 1 file changed, 4 insertions(+), 2 deletions(-) > > diff --git a/hw/s390x/virtio-ccw.c b/hw/s390x/virtio-ccw.c > index b4676909dd..936ba78fda 100644 > --- a/hw/s390x/virtio-ccw.c > +++ b/hw/s390x/virtio-ccw.c > @@ -530,14 +530,16 @@ static int virtio_ccw_cb(SubchDev *sch, CCW1 ccw) > if (ret) { > break; > } > - if (!(status & VIRTIO_CONFIG_S_DRIVER_OK)) { > + if (!(status & VIRTIO_CONFIG_S_DRIVER_OK) && > + !virtio_vdev_has_feature(vdev, VIRTIO_F_NOTIFICATION_DATA)) { > virtio_ccw_stop_ioeventfd(dev); > } > if (virtio_set_status(vdev, status) == 0) { > if (vdev->status == 0) { > virtio_ccw_reset_virtio(dev); > } > - if (status & VIRTIO_CONFIG_S_DRIVER_OK) { > + if ((status & VIRTIO_CONFIG_S_DRIVER_OK) && > + !virtio_vdev_has_feature(vdev, VIRTIO_F_NOTIFICATION_DATA)) { > virtio_ccw_start_ioeventfd(dev); > } > sch->curr_status.scsw.count = ccw.count - sizeof(status); Acked-by: Thomas Huth <[email protected]>