[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH 08/12] hw/nvme: rework flush bh scheduling
From: |
Klaus Jensen |
Subject: |
[PATCH 08/12] hw/nvme: rework flush bh scheduling |
Date: |
Thu, 23 Jun 2022 23:18:17 +0200 |
From: Klaus Jensen <k.jensen@samsung.com>
Remove an initial bh scheduling and move the completion invocation into
a separate bh. Also, make sure that iocb->aiocb is NULL'ed when
cancelling.
Signed-off-by: Klaus Jensen <k.jensen@samsung.com>
---
hw/nvme/ctrl.c | 32 +++++++++++++++++++-------------
1 file changed, 19 insertions(+), 13 deletions(-)
diff --git a/hw/nvme/ctrl.c b/hw/nvme/ctrl.c
index cea90cf65ce8..1acf88d9e8c7 100644
--- a/hw/nvme/ctrl.c
+++ b/hw/nvme/ctrl.c
@@ -3168,6 +3168,19 @@ static const AIOCBInfo nvme_flush_aiocb_info = {
.get_aio_context = nvme_get_aio_context,
};
+static void nvme_flush_bh(void *opaque)
+{
+ NvmeFlushAIOCB *iocb = opaque;
+
+ iocb->common.cb(iocb->common.opaque, iocb->ret);
+
+ qemu_bh_delete(iocb->bh);
+ iocb->bh = NULL;
+ qemu_aio_unref(iocb);
+}
+
+static void nvme_do_flush(NvmeFlushAIOCB *iocb);
+
static void nvme_flush_ns_cb(void *opaque, int ret)
{
NvmeFlushAIOCB *iocb = opaque;
@@ -3189,13 +3202,11 @@ static void nvme_flush_ns_cb(void *opaque, int ret)
}
out:
- iocb->aiocb = NULL;
- qemu_bh_schedule(iocb->bh);
+ nvme_do_flush(iocb);
}
-static void nvme_flush_bh(void *opaque)
+static void nvme_do_flush(NvmeFlushAIOCB *iocb)
{
- NvmeFlushAIOCB *iocb = opaque;
NvmeRequest *req = iocb->req;
NvmeCtrl *n = nvme_ctrl(req);
int i;
@@ -3222,14 +3233,9 @@ static void nvme_flush_bh(void *opaque)
return;
done:
- qemu_bh_delete(iocb->bh);
- iocb->bh = NULL;
-
- iocb->common.cb(iocb->common.opaque, iocb->ret);
-
- qemu_aio_unref(iocb);
-
- return;
+ if (iocb->bh) {
+ qemu_bh_schedule(iocb->bh);
+ }
}
static uint16_t nvme_flush(NvmeCtrl *n, NvmeRequest *req)
@@ -3263,7 +3269,7 @@ static uint16_t nvme_flush(NvmeCtrl *n, NvmeRequest *req)
}
req->aiocb = &iocb->common;
- qemu_bh_schedule(iocb->bh);
+ nvme_do_flush(iocb);
return NVME_NO_COMPLETE;
--
2.36.1
- [PATCH 00/12] hw/nvme: misc fixes and updates, Klaus Jensen, 2022/06/23
- [PATCH 01/12] hw/nvme: fix incorrect use of errp/local_err, Klaus Jensen, 2022/06/23
- [PATCH 02/12] hw/nvme: remove redundant passing of PCIDevice, Klaus Jensen, 2022/06/23
- [PATCH 03/12] hw/nvme: cleanup error reporting in nvme_init_pci(), Klaus Jensen, 2022/06/23
- [PATCH 04/12] hw/nvme: fix numzrwa handling, Klaus Jensen, 2022/06/23
- [PATCH 05/12] hw/nvme: fix accidental reintroduction of redundant code, Klaus Jensen, 2022/06/23
- [PATCH 06/12] hw/nvme: fix cancellation of format operations, Klaus Jensen, 2022/06/23
- [PATCH 07/12] hw/nvme: fix flush cancel, Klaus Jensen, 2022/06/23
- [PATCH 08/12] hw/nvme: rework flush bh scheduling,
Klaus Jensen <=
- [PATCH 09/12] hw/nvme: improve cancellation handling in zone reset, Klaus Jensen, 2022/06/23
- [PATCH 10/12] hw/nvme: improve cancellation handling in dsm, Klaus Jensen, 2022/06/23
- [PATCH 11/12] hw/nvme: simplify copy command error handling, Klaus Jensen, 2022/06/23
- [PATCH 12/12] hw/nvme: align logic of format with flush, Klaus Jensen, 2022/06/23