Message ID | 20240301134330.4191007-7-jonah.palmer@oracle.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | virtio,vhost: Add VIRTIO_F_NOTIFICATION_DATA support | expand |
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 <jonah.palmer@oracle.com> > --- > 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 <thuth@redhat.com>
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);
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 <jonah.palmer@oracle.com> --- hw/s390x/virtio-ccw.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)