[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v4 03/13] scsi: track per-SCSIRequest AioContext
From: |
Stefan Hajnoczi |
Subject: |
[PATCH v4 03/13] scsi: track per-SCSIRequest AioContext |
Date: |
Tue, 11 Mar 2025 21:26:06 +0800 |
Until now, a SCSIDevice's I/O requests have run in a single AioContext.
In order to support multiple IOThreads it will be necessary to move to
the concept of a per-SCSIRequest AioContext.
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Reviewed-by: Kevin Wolf <kwolf@redhat.com>
---
include/hw/scsi/scsi.h | 1 +
hw/scsi/scsi-bus.c | 1 +
hw/scsi/scsi-disk.c | 17 ++++++-----------
3 files changed, 8 insertions(+), 11 deletions(-)
diff --git a/include/hw/scsi/scsi.h b/include/hw/scsi/scsi.h
index c3d5e17e38..ffc48203f9 100644
--- a/include/hw/scsi/scsi.h
+++ b/include/hw/scsi/scsi.h
@@ -24,6 +24,7 @@ struct SCSIRequest {
SCSIBus *bus;
SCSIDevice *dev;
const SCSIReqOps *ops;
+ AioContext *ctx;
uint32_t refcount;
uint32_t tag;
uint32_t lun;
diff --git a/hw/scsi/scsi-bus.c b/hw/scsi/scsi-bus.c
index 7d4546800f..846bbbf0ec 100644
--- a/hw/scsi/scsi-bus.c
+++ b/hw/scsi/scsi-bus.c
@@ -868,6 +868,7 @@ invalid_opcode:
}
}
+ req->ctx = qemu_get_current_aio_context();
req->cmd = cmd;
req->residual = req->cmd.xfer;
diff --git a/hw/scsi/scsi-disk.c b/hw/scsi/scsi-disk.c
index f049a20275..7cf8c31b98 100644
--- a/hw/scsi/scsi-disk.c
+++ b/hw/scsi/scsi-disk.c
@@ -328,9 +328,8 @@ static void scsi_aio_complete(void *opaque, int ret)
SCSIDiskReq *r = (SCSIDiskReq *)opaque;
SCSIDiskState *s = DO_UPCAST(SCSIDiskState, qdev, r->req.dev);
- /* The request must only run in the BlockBackend's AioContext */
- assert(blk_get_aio_context(s->qdev.conf.blk) ==
- qemu_get_current_aio_context());
+ /* The request must run in its AioContext */
+ assert(r->req.ctx == qemu_get_current_aio_context());
assert(r->req.aiocb != NULL);
r->req.aiocb = NULL;
@@ -430,12 +429,10 @@ static void scsi_dma_complete(void *opaque, int ret)
static void scsi_read_complete_noio(SCSIDiskReq *r, int ret)
{
- SCSIDiskState *s = DO_UPCAST(SCSIDiskState, qdev, r->req.dev);
uint32_t n;
- /* The request must only run in the BlockBackend's AioContext */
- assert(blk_get_aio_context(s->qdev.conf.blk) ==
- qemu_get_current_aio_context());
+ /* The request must run in its AioContext */
+ assert(r->req.ctx == qemu_get_current_aio_context());
assert(r->req.aiocb == NULL);
if (scsi_disk_req_check_error(r, ret, ret > 0)) {
@@ -562,12 +559,10 @@ static void scsi_read_data(SCSIRequest *req)
static void scsi_write_complete_noio(SCSIDiskReq *r, int ret)
{
- SCSIDiskState *s = DO_UPCAST(SCSIDiskState, qdev, r->req.dev);
uint32_t n;
- /* The request must only run in the BlockBackend's AioContext */
- assert(blk_get_aio_context(s->qdev.conf.blk) ==
- qemu_get_current_aio_context());
+ /* The request must run in its AioContext */
+ assert(r->req.ctx == qemu_get_current_aio_context());
assert (r->req.aiocb == NULL);
if (scsi_disk_req_check_error(r, ret, ret > 0)) {
--
2.48.1
- [PATCH v4 00/13] virtio-scsi: add iothread-vq-mapping parameter, Stefan Hajnoczi, 2025/03/11
- [PATCH v4 01/13] scsi-disk: drop unused SCSIDiskState->bh field, Stefan Hajnoczi, 2025/03/11
- [PATCH v4 02/13] dma: use current AioContext for dma_blk_io(), Stefan Hajnoczi, 2025/03/11
- [PATCH v4 03/13] scsi: track per-SCSIRequest AioContext,
Stefan Hajnoczi <=
- [PATCH v4 06/13] virtio-scsi: protect events_dropped field, Stefan Hajnoczi, 2025/03/11
- [PATCH v4 05/13] virtio-scsi: introduce event and ctrl virtqueue locks, Stefan Hajnoczi, 2025/03/11
- [PATCH v4 04/13] scsi: introduce requests_lock, Stefan Hajnoczi, 2025/03/11
- [PATCH v4 10/13] virtio: extract iothread-vq-mapping.h API, Stefan Hajnoczi, 2025/03/11
- [PATCH v4 07/13] virtio-scsi: perform TMFs in appropriate AioContexts, Stefan Hajnoczi, 2025/03/11
- [PATCH v4 12/13] virtio-scsi: handle ctrl virtqueue in main loop, Stefan Hajnoczi, 2025/03/11
- [PATCH v4 09/13] virtio-blk: tidy up iothread_vq_mapping functions, Stefan Hajnoczi, 2025/03/11
- [PATCH v4 11/13] virtio-scsi: add iothread-vq-mapping parameter, Stefan Hajnoczi, 2025/03/11
- [PATCH v4 13/13] virtio-scsi: only expose cmd vqs via iothread-vq-mapping, Stefan Hajnoczi, 2025/03/11
- [PATCH v4 08/13] virtio-blk: extract cleanup_iothread_vq_mapping() function, Stefan Hajnoczi, 2025/03/11