diff options
| author | Stefan Hajnoczi <stefanha@redhat.com> | 2023-12-04 11:42:56 -0500 |
|---|---|---|
| committer | Kevin Wolf <kwolf@redhat.com> | 2023-12-21 22:49:27 +0100 |
| commit | eaad0fe26050c227dc5dad63205835bac4912a51 (patch) | |
| tree | 6c954c0f7d9cebf9ee228a68b281483a9d4e9fe2 /include/hw/scsi | |
| parent | bb6e2511eb48539b7dcbcb5f47772e156b9c45d1 (diff) | |
| download | focaccia-qemu-eaad0fe26050c227dc5dad63205835bac4912a51.tar.gz focaccia-qemu-eaad0fe26050c227dc5dad63205835bac4912a51.zip | |
scsi: only access SCSIDevice->requests from one thread
Stop depending on the AioContext lock and instead access SCSIDevice->requests from only one thread at a time: - When the VM is running only the BlockBackend's AioContext may access the requests list. - When the VM is stopped only the main loop may access the requests list. These constraints protect the requests list without the need for locking in the I/O code path. Note that multiple IOThreads are not supported yet because the code assumes all SCSIRequests are executed from a single AioContext. Leave that as future work. Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com> Reviewed-by: Eric Blake <eblake@redhat.com> Message-ID: <20231204164259.1515217-2-stefanha@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
Diffstat (limited to 'include/hw/scsi')
| -rw-r--r-- | include/hw/scsi/scsi.h | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/include/hw/scsi/scsi.h b/include/hw/scsi/scsi.h index 3692ca82f3..10c4e8288d 100644 --- a/include/hw/scsi/scsi.h +++ b/include/hw/scsi/scsi.h @@ -69,14 +69,19 @@ struct SCSIDevice { DeviceState qdev; VMChangeStateEntry *vmsentry; - QEMUBH *bh; uint32_t id; BlockConf conf; SCSISense unit_attention; bool sense_is_ua; uint8_t sense[SCSI_SENSE_BUF_SIZE]; uint32_t sense_len; + + /* + * The requests list is only accessed from the AioContext that executes + * requests or from the main loop when IOThread processing is stopped. + */ QTAILQ_HEAD(, SCSIRequest) requests; + uint32_t channel; uint32_t lun; int blocksize; |