virtio-scsi: implement BlockDevOps->drained_begin()
The virtio-scsi Host Bus Adapter provides access to devices on a SCSI bus. Those SCSI devices typically have a BlockBackend. When the BlockBackend enters a drained section, the SCSI device must temporarily stop submitting new I/O requests. Implement this behavior by temporarily stopping virtio-scsi virtqueue processing when one of the SCSI devices enters a drained section. The new scsi_device_drained_begin() API allows scsi-disk to message the virtio-scsi HBA. scsi_device_drained_begin() uses a drain counter so that multiple SCSI devices can have overlapping drained sections. The HBA only sees one pair of .drained_begin/end() calls. After this commit, virtio-scsi no longer depends on hw/virtio's ioeventfd aio_set_event_notifier(is_external=true). This commit is a step towards removing the aio_disable_external() API. Signed-off-by:Stefan Hajnoczi <stefanha@redhat.com> Message-Id: <20230516190238.8401-19-stefanha@redhat.com> Signed-off-by:
Kevin Wolf <kwolf@redhat.com>
Showing
- hw/scsi/scsi-bus.c 40 additions, 0 deletionshw/scsi/scsi-bus.c
- hw/scsi/scsi-disk.c 22 additions, 5 deletionshw/scsi/scsi-disk.c
- hw/scsi/trace-events 2 additions, 0 deletionshw/scsi/trace-events
- hw/scsi/virtio-scsi-dataplane.c 11 additions, 7 deletionshw/scsi/virtio-scsi-dataplane.c
- hw/scsi/virtio-scsi.c 38 additions, 0 deletionshw/scsi/virtio-scsi.c
- include/hw/scsi/scsi.h 14 additions, 0 deletionsinclude/hw/scsi/scsi.h
Loading
Please register or sign in to comment