All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH for-7.1 0/3] hw/nvme: misc ioeventfd fixes
@ 2022-07-28  8:25 Klaus Jensen
  2022-07-28  8:25 ` [PATCH for-7.1 1/3] hw/nvme: skip queue processing if notifier is cleared Klaus Jensen
                   ` (4 more replies)
  0 siblings, 5 replies; 6+ messages in thread
From: Klaus Jensen @ 2022-07-28  8:25 UTC (permalink / raw)
  To: qemu-devel
  Cc: Klaus Jensen, Keith Busch, qemu-block, Jinhao Fan, Klaus Jensen

From: Klaus Jensen <k.jensen@samsung.com>

A set of fixes/changes to the ioeventfd support.

Klaus Jensen (3):
  hw/nvme: skip queue processing if notifier is cleared
  hw/nvme: unregister the event notifier handler on the main loop
  hw/nvme: do not enable ioeventfd by default

 hw/nvme/ctrl.c | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)

-- 
2.36.1



^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH for-7.1 1/3] hw/nvme: skip queue processing if notifier is cleared
  2022-07-28  8:25 [PATCH for-7.1 0/3] hw/nvme: misc ioeventfd fixes Klaus Jensen
@ 2022-07-28  8:25 ` Klaus Jensen
  2022-07-28  8:25 ` [PATCH for-7.1 2/3] hw/nvme: unregister the event notifier handler on the main loop Klaus Jensen
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: Klaus Jensen @ 2022-07-28  8:25 UTC (permalink / raw)
  To: qemu-devel
  Cc: Klaus Jensen, Keith Busch, qemu-block, Jinhao Fan, Klaus Jensen

From: Klaus Jensen <k.jensen@samsung.com>

While it is safe to process the queues when they are empty, skip it if
the event notifier callback was invoked spuriously.

Signed-off-by: Klaus Jensen <k.jensen@samsung.com>
---
 hw/nvme/ctrl.c | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/hw/nvme/ctrl.c b/hw/nvme/ctrl.c
index 533ad14e7a61..8aa73b048d51 100644
--- a/hw/nvme/ctrl.c
+++ b/hw/nvme/ctrl.c
@@ -4238,7 +4238,9 @@ static void nvme_cq_notifier(EventNotifier *e)
     NvmeCQueue *cq = container_of(e, NvmeCQueue, notifier);
     NvmeCtrl *n = cq->ctrl;
 
-    event_notifier_test_and_clear(&cq->notifier);
+    if (!event_notifier_test_and_clear(e)) {
+        return;
+    }
 
     nvme_update_cq_head(cq);
 
@@ -4275,7 +4277,9 @@ static void nvme_sq_notifier(EventNotifier *e)
 {
     NvmeSQueue *sq = container_of(e, NvmeSQueue, notifier);
 
-    event_notifier_test_and_clear(&sq->notifier);
+    if (!event_notifier_test_and_clear(e)) {
+        return;
+    }
 
     nvme_process_sq(sq);
 }
-- 
2.36.1



^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH for-7.1 2/3] hw/nvme: unregister the event notifier handler on the main loop
  2022-07-28  8:25 [PATCH for-7.1 0/3] hw/nvme: misc ioeventfd fixes Klaus Jensen
  2022-07-28  8:25 ` [PATCH for-7.1 1/3] hw/nvme: skip queue processing if notifier is cleared Klaus Jensen
@ 2022-07-28  8:25 ` Klaus Jensen
  2022-07-28  8:25 ` [PATCH for-7.1 3/3] hw/nvme: do not enable ioeventfd by default Klaus Jensen
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: Klaus Jensen @ 2022-07-28  8:25 UTC (permalink / raw)
  To: qemu-devel
  Cc: Klaus Jensen, Keith Busch, qemu-block, Jinhao Fan, Klaus Jensen

From: Klaus Jensen <k.jensen@samsung.com>

Make sure the notifier handler is unregistered in the main loop prior to
cleaning it up.

Fixes: 2e53b0b45024 ("hw/nvme: Use ioeventfd to handle doorbell updates")
Signed-off-by: Klaus Jensen <k.jensen@samsung.com>
---
 hw/nvme/ctrl.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/hw/nvme/ctrl.c b/hw/nvme/ctrl.c
index 8aa73b048d51..70b454eedbd8 100644
--- a/hw/nvme/ctrl.c
+++ b/hw/nvme/ctrl.c
@@ -4311,6 +4311,7 @@ static void nvme_free_sq(NvmeSQueue *sq, NvmeCtrl *n)
     if (sq->ioeventfd_enabled) {
         memory_region_del_eventfd(&n->iomem,
                                   0x1000 + offset, 4, false, 0, &sq->notifier);
+        event_notifier_set_handler(&sq->notifier, NULL);
         event_notifier_cleanup(&sq->notifier);
     }
     g_free(sq->io_req);
@@ -4701,6 +4702,7 @@ static void nvme_free_cq(NvmeCQueue *cq, NvmeCtrl *n)
     if (cq->ioeventfd_enabled) {
         memory_region_del_eventfd(&n->iomem,
                                   0x1000 + offset, 4, false, 0, &cq->notifier);
+        event_notifier_set_handler(&cq->notifier, NULL);
         event_notifier_cleanup(&cq->notifier);
     }
     if (msix_enabled(&n->parent_obj)) {
-- 
2.36.1



^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH for-7.1 3/3] hw/nvme: do not enable ioeventfd by default
  2022-07-28  8:25 [PATCH for-7.1 0/3] hw/nvme: misc ioeventfd fixes Klaus Jensen
  2022-07-28  8:25 ` [PATCH for-7.1 1/3] hw/nvme: skip queue processing if notifier is cleared Klaus Jensen
  2022-07-28  8:25 ` [PATCH for-7.1 2/3] hw/nvme: unregister the event notifier handler on the main loop Klaus Jensen
@ 2022-07-28  8:25 ` Klaus Jensen
  2022-07-28 15:15 ` [PATCH for-7.1 0/3] hw/nvme: misc ioeventfd fixes Keith Busch
  2022-07-28 15:28 ` Jinhao Fan
  4 siblings, 0 replies; 6+ messages in thread
From: Klaus Jensen @ 2022-07-28  8:25 UTC (permalink / raw)
  To: qemu-devel
  Cc: Klaus Jensen, Keith Busch, qemu-block, Jinhao Fan, Klaus Jensen

From: Klaus Jensen <k.jensen@samsung.com>

Do not enable ioeventfd by default. Let the feature mature a bit before
we consider enabling it by default.

Fixes: 2e53b0b45024 ("hw/nvme: Use ioeventfd to handle doorbell updates")
Signed-off-by: Klaus Jensen <k.jensen@samsung.com>
---
 hw/nvme/ctrl.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/hw/nvme/ctrl.c b/hw/nvme/ctrl.c
index 70b454eedbd8..87aeba056499 100644
--- a/hw/nvme/ctrl.c
+++ b/hw/nvme/ctrl.c
@@ -7670,7 +7670,7 @@ static Property nvme_props[] = {
     DEFINE_PROP_UINT8("vsl", NvmeCtrl, params.vsl, 7),
     DEFINE_PROP_BOOL("use-intel-id", NvmeCtrl, params.use_intel_id, false),
     DEFINE_PROP_BOOL("legacy-cmb", NvmeCtrl, params.legacy_cmb, false),
-    DEFINE_PROP_BOOL("ioeventfd", NvmeCtrl, params.ioeventfd, true),
+    DEFINE_PROP_BOOL("ioeventfd", NvmeCtrl, params.ioeventfd, false),
     DEFINE_PROP_UINT8("zoned.zasl", NvmeCtrl, params.zasl, 0),
     DEFINE_PROP_BOOL("zoned.auto_transition", NvmeCtrl,
                      params.auto_transition_zones, true),
-- 
2.36.1



^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH for-7.1 0/3] hw/nvme: misc ioeventfd fixes
  2022-07-28  8:25 [PATCH for-7.1 0/3] hw/nvme: misc ioeventfd fixes Klaus Jensen
                   ` (2 preceding siblings ...)
  2022-07-28  8:25 ` [PATCH for-7.1 3/3] hw/nvme: do not enable ioeventfd by default Klaus Jensen
@ 2022-07-28 15:15 ` Keith Busch
  2022-07-28 15:28 ` Jinhao Fan
  4 siblings, 0 replies; 6+ messages in thread
From: Keith Busch @ 2022-07-28 15:15 UTC (permalink / raw)
  To: Klaus Jensen; +Cc: qemu-devel, qemu-block, Jinhao Fan, Klaus Jensen

On Thu, Jul 28, 2022 at 10:25:19AM +0200, Klaus Jensen wrote:
> From: Klaus Jensen <k.jensen@samsung.com>
> 
> A set of fixes/changes to the ioeventfd support.

Series looks good.

Reviewed-by: Keith Busch <kbusch@kernel.org>


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH for-7.1 0/3] hw/nvme: misc ioeventfd fixes
  2022-07-28  8:25 [PATCH for-7.1 0/3] hw/nvme: misc ioeventfd fixes Klaus Jensen
                   ` (3 preceding siblings ...)
  2022-07-28 15:15 ` [PATCH for-7.1 0/3] hw/nvme: misc ioeventfd fixes Keith Busch
@ 2022-07-28 15:28 ` Jinhao Fan
  4 siblings, 0 replies; 6+ messages in thread
From: Jinhao Fan @ 2022-07-28 15:28 UTC (permalink / raw)
  To: Klaus Jensen; +Cc: qemu-devel, Keith Busch, qemu-block, Klaus Jensen

at 4:25 PM, Klaus Jensen <its@irrelevant.dk> wrote:

> From: Klaus Jensen <k.jensen@samsung.com>
> 
> A set of fixes/changes to the ioeventfd support.
> 
> Klaus Jensen (3):
>  hw/nvme: skip queue processing if notifier is cleared
>  hw/nvme: unregister the event notifier handler on the main loop
>  hw/nvme: do not enable ioeventfd by default
> 
> hw/nvme/ctrl.c | 12 +++++++++---
> 1 file changed, 9 insertions(+), 3 deletions(-)
> 
> -- 
> 2.36.1

Looks good to me as well.

Reviewed-by: Jinhao Fan <fanjinhao21s@ict.ac.cn>



^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2022-07-28 15:31 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-07-28  8:25 [PATCH for-7.1 0/3] hw/nvme: misc ioeventfd fixes Klaus Jensen
2022-07-28  8:25 ` [PATCH for-7.1 1/3] hw/nvme: skip queue processing if notifier is cleared Klaus Jensen
2022-07-28  8:25 ` [PATCH for-7.1 2/3] hw/nvme: unregister the event notifier handler on the main loop Klaus Jensen
2022-07-28  8:25 ` [PATCH for-7.1 3/3] hw/nvme: do not enable ioeventfd by default Klaus Jensen
2022-07-28 15:15 ` [PATCH for-7.1 0/3] hw/nvme: misc ioeventfd fixes Keith Busch
2022-07-28 15:28 ` Jinhao Fan

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.