On Thu, Nov 23, 2023 at 02:49:27PM -0500, Stefan Hajnoczi wrote:
> The SCSI subsystem uses the AioContext lock to protect internal state. This is
> necessary because the main loop and the IOThread can access SCSI state in
> parallel. This inter-thread access happens during scsi_device_purge_requests()
> and scsi_dma_restart_cb().
>
> This patch series modifies the code so SCSI state is only accessed from the
> IOThread that is executing requests. Once this has been achieved the AioContext
> lock is no longer necessary.
>
> Note that a few aio_context_acquire()/aio_context_release() calls still remain
> after this series. They surround API calls that invoke AIO_WAIT_WHILE() and
> therefore still rely on the AioContext lock for now.
>
> Stefan Hajnoczi (4):
> scsi: only access SCSIDevice->requests from one thread
> virtio-scsi: don't lock AioContext around
> virtio_queue_aio_attach_host_notifier()
> scsi: don't lock AioContext in I/O code path
> dma-helpers: don't lock AioContext in dma_blk_cb()
>
> include/hw/scsi/scsi.h | 7 +-
> hw/scsi/scsi-bus.c | 174 ++++++++++++++++++++++----------
> hw/scsi/scsi-disk.c | 23 -----
> hw/scsi/scsi-generic.c | 20 +---
> hw/scsi/virtio-scsi-dataplane.c | 8 +-
> system/dma-helpers.c | 7 +-
> 6 files changed, 130 insertions(+), 109 deletions(-)
CCing Kevin and qemu-block
>
> --
> 2.42.0
>