qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [PULL 0/4] nvme queue
@ 2024-12-03  6:31 Klaus Jensen
  2024-12-03  6:31 ` [PULL 1/4] hw/nvme: fix msix_uninit with exclusive bar Klaus Jensen
                   ` (4 more replies)
  0 siblings, 5 replies; 6+ messages in thread
From: Klaus Jensen @ 2024-12-03  6:31 UTC (permalink / raw)
  To: qemu-devel; +Cc: Peter Maydell, Klaus Jensen

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

Hi,

The following changes since commit eb22a064455aeebc105cc89bf77f48aa18b52938:

  Merge tag 'pull-request-2024-12-02' of https://gitlab.com/thuth/qemu into staging (2024-12-02 16:16:15 +0000)

are available in the Git repository at:

  https://gitlab.com/birkelund/qemu.git tags/pull-nvme-20241203

for you to fetch changes up to 6651f8f2e5051f6750c2534ab3151339b3c476a2:

  hw/nvme: take a reference on the subsystem on vf realization (2024-12-03 07:28:27 +0100)

----------------------------------------------------------------
nvme queue

----------------------------------------------------------------
Klaus Jensen (4):
      hw/nvme: fix msix_uninit with exclusive bar
      hw/nvme: fix use/unuse of msix vectors
      hw/nvme: SR-IOV VFs must hardwire pci interrupt pin register to zero
      hw/nvme: take a reference on the subsystem on vf realization

 hw/nvme/ctrl.c | 27 +++++++++++++++++++++++----
 1 file changed, 23 insertions(+), 4 deletions(-)


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

* [PULL 1/4] hw/nvme: fix msix_uninit with exclusive bar
  2024-12-03  6:31 [PULL 0/4] nvme queue Klaus Jensen
@ 2024-12-03  6:31 ` Klaus Jensen
  2024-12-03  6:31 ` [PULL 2/4] hw/nvme: fix use/unuse of msix vectors Klaus Jensen
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: Klaus Jensen @ 2024-12-03  6:31 UTC (permalink / raw)
  To: qemu-devel
  Cc: Peter Maydell, Klaus Jensen, qemu-stable, Jesper Wendel Devantier,
	Keith Busch, Klaus Jensen, qemu-block

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

Commit fa905f65c554 introduced a machine compatibility parameter to
enable an exclusive bar for msix. It failed to account for this when
cleaning up. Make sure that if an exclusive bar is enabled, we use the
proper cleanup routine.

Cc: qemu-stable@nongnu.org
Fixes: fa905f65c554 ("hw/nvme: add machine compatibility parameter to enable msix exclusive bar")
Reviewed-by: Jesper Wendel Devantier <foss@defmacro.it>
Signed-off-by: Klaus Jensen <k.jensen@samsung.com>
---
 hw/nvme/ctrl.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/hw/nvme/ctrl.c b/hw/nvme/ctrl.c
index 69bce20f6692..13898d58278e 100644
--- a/hw/nvme/ctrl.c
+++ b/hw/nvme/ctrl.c
@@ -8904,7 +8904,12 @@ static void nvme_exit(PCIDevice *pci_dev)
         pcie_sriov_pf_exit(pci_dev);
     }
 
-    msix_uninit(pci_dev, &n->bar0, &n->bar0);
+    if (n->params.msix_exclusive_bar && !pci_is_vf(pci_dev)) {
+        msix_uninit_exclusive_bar(pci_dev);
+    } else {
+        msix_uninit(pci_dev, &n->bar0, &n->bar0);
+    }
+
     memory_region_del_subregion(&n->bar0, &n->iomem);
 }
 
-- 
2.45.2



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

* [PULL 2/4] hw/nvme: fix use/unuse of msix vectors
  2024-12-03  6:31 [PULL 0/4] nvme queue Klaus Jensen
  2024-12-03  6:31 ` [PULL 1/4] hw/nvme: fix msix_uninit with exclusive bar Klaus Jensen
@ 2024-12-03  6:31 ` Klaus Jensen
  2024-12-03  6:31 ` [PULL 3/4] hw/nvme: SR-IOV VFs must hardwire pci interrupt pin register to zero Klaus Jensen
                   ` (2 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: Klaus Jensen @ 2024-12-03  6:31 UTC (permalink / raw)
  To: qemu-devel
  Cc: Peter Maydell, Klaus Jensen, Jesper Wendel Devantier, Keith Busch,
	Klaus Jensen, qemu-block

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

Only call msix_{un,}use_vector() when interrupts are actually enabled
for a completion queue.

Reviewed-by: Jesper Wendel Devantier <foss@defmacro.it>
Signed-off-by: Klaus Jensen <k.jensen@samsung.com>
---
 hw/nvme/ctrl.c | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/hw/nvme/ctrl.c b/hw/nvme/ctrl.c
index 13898d58278e..a38f460a7859 100644
--- a/hw/nvme/ctrl.c
+++ b/hw/nvme/ctrl.c
@@ -5423,7 +5423,7 @@ static void nvme_free_cq(NvmeCQueue *cq, NvmeCtrl *n)
         event_notifier_set_handler(&cq->notifier, NULL);
         event_notifier_cleanup(&cq->notifier);
     }
-    if (msix_enabled(pci)) {
+    if (msix_enabled(pci) && cq->irq_enabled) {
         msix_vector_unuse(pci, cq->vector);
     }
     if (cq->cqid) {
@@ -5464,9 +5464,10 @@ static void nvme_init_cq(NvmeCQueue *cq, NvmeCtrl *n, uint64_t dma_addr,
 {
     PCIDevice *pci = PCI_DEVICE(n);
 
-    if (msix_enabled(pci)) {
+    if (msix_enabled(pci) && irq_enabled) {
         msix_vector_use(pci, vector);
     }
+
     cq->ctrl = n;
     cq->cqid = cqid;
     cq->size = size;
-- 
2.45.2



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

* [PULL 3/4] hw/nvme: SR-IOV VFs must hardwire pci interrupt pin register to zero
  2024-12-03  6:31 [PULL 0/4] nvme queue Klaus Jensen
  2024-12-03  6:31 ` [PULL 1/4] hw/nvme: fix msix_uninit with exclusive bar Klaus Jensen
  2024-12-03  6:31 ` [PULL 2/4] hw/nvme: fix use/unuse of msix vectors Klaus Jensen
@ 2024-12-03  6:31 ` Klaus Jensen
  2024-12-03  6:31 ` [PULL 4/4] hw/nvme: take a reference on the subsystem on vf realization Klaus Jensen
  2024-12-03 13:43 ` [PULL 0/4] nvme queue Peter Maydell
  4 siblings, 0 replies; 6+ messages in thread
From: Klaus Jensen @ 2024-12-03  6:31 UTC (permalink / raw)
  To: qemu-devel
  Cc: Peter Maydell, Klaus Jensen, Jesper Wendel Devantier, Keith Busch,
	Klaus Jensen, qemu-block

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

The PCI Interrupt Pin Register does not apply to VFs and MUST be
hardwired to zero.

Fixes: 44c2c09488db ("hw/nvme: Add support for SR-IOV")
Reviewed-by: Jesper Wendel Devantier <foss@defmacro.it>
Signed-off-by: Klaus Jensen <k.jensen@samsung.com>
---
 hw/nvme/ctrl.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/hw/nvme/ctrl.c b/hw/nvme/ctrl.c
index a38f460a7859..61c114c66d15 100644
--- a/hw/nvme/ctrl.c
+++ b/hw/nvme/ctrl.c
@@ -656,6 +656,12 @@ static void nvme_irq_check(NvmeCtrl *n)
     if (msix_enabled(pci)) {
         return;
     }
+
+    /* vfs does not implement intx */
+    if (pci_is_vf(pci)) {
+        return;
+    }
+
     if (~intms & n->irq_status) {
         pci_irq_assert(pci);
     } else {
@@ -8544,7 +8550,7 @@ static bool nvme_init_pci(NvmeCtrl *n, PCIDevice *pci_dev, Error **errp)
     unsigned nr_vectors;
     int ret;
 
-    pci_conf[PCI_INTERRUPT_PIN] = 1;
+    pci_conf[PCI_INTERRUPT_PIN] = pci_is_vf(pci_dev) ? 0 : 1;
     pci_config_set_prog_interface(pci_conf, 0x2);
 
     if (n->params.use_intel_id) {
-- 
2.45.2



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

* [PULL 4/4] hw/nvme: take a reference on the subsystem on vf realization
  2024-12-03  6:31 [PULL 0/4] nvme queue Klaus Jensen
                   ` (2 preceding siblings ...)
  2024-12-03  6:31 ` [PULL 3/4] hw/nvme: SR-IOV VFs must hardwire pci interrupt pin register to zero Klaus Jensen
@ 2024-12-03  6:31 ` Klaus Jensen
  2024-12-03 13:43 ` [PULL 0/4] nvme queue Peter Maydell
  4 siblings, 0 replies; 6+ messages in thread
From: Klaus Jensen @ 2024-12-03  6:31 UTC (permalink / raw)
  To: qemu-devel
  Cc: Peter Maydell, Klaus Jensen, qemu-stable, Jesper Wendel Devantier,
	Keith Busch, Klaus Jensen, qemu-block

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

Make sure we grab a reference on the subsystem when a VF is realized.
Otherwise, the subsytem will be unrealized automatically when the VFs
are unregistered and unreffed.

This fixes a latent bug but was not exposed until commit 08f632848008
("pcie: Release references of virtual functions"). This was then fixed
(or rather, hidden) by commit c613ad25125b ("pcie_sriov: Do not manually
unrealize"), but that was then reverted (due to other issues) in commit
b0fdaee5d1ed, exposing the bug yet again.

Cc: qemu-stable@nongnu.org
Fixes: 08f632848008 ("pcie: Release references of virtual functions")
Reviewed-by: Jesper Wendel Devantier <foss@defmacro.it>
Signed-off-by: Klaus Jensen <k.jensen@samsung.com>
---
 hw/nvme/ctrl.c | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/hw/nvme/ctrl.c b/hw/nvme/ctrl.c
index 61c114c66d15..ec7541956695 100644
--- a/hw/nvme/ctrl.c
+++ b/hw/nvme/ctrl.c
@@ -8841,6 +8841,13 @@ static void nvme_realize(PCIDevice *pci_dev, Error **errp)
          */
         n->params.serial = g_strdup(pn->params.serial);
         n->subsys = pn->subsys;
+
+        /*
+         * Assigning this link (strong link) causes an `object_unref` later in
+         * `object_release_link_property`. Increment the refcount to balance
+         * this out.
+         */
+        object_ref(OBJECT(pn->subsys));
     }
 
     if (!nvme_check_params(n, errp)) {
-- 
2.45.2



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

* Re: [PULL 0/4] nvme queue
  2024-12-03  6:31 [PULL 0/4] nvme queue Klaus Jensen
                   ` (3 preceding siblings ...)
  2024-12-03  6:31 ` [PULL 4/4] hw/nvme: take a reference on the subsystem on vf realization Klaus Jensen
@ 2024-12-03 13:43 ` Peter Maydell
  4 siblings, 0 replies; 6+ messages in thread
From: Peter Maydell @ 2024-12-03 13:43 UTC (permalink / raw)
  To: Klaus Jensen; +Cc: qemu-devel, Klaus Jensen

On Tue, 3 Dec 2024 at 06:31, Klaus Jensen <its@irrelevant.dk> wrote:
>
> From: Klaus Jensen <k.jensen@samsung.com>
>
> Hi,
>
> The following changes since commit eb22a064455aeebc105cc89bf77f48aa18b52938:
>
>   Merge tag 'pull-request-2024-12-02' of https://gitlab.com/thuth/qemu into staging (2024-12-02 16:16:15 +0000)
>
> are available in the Git repository at:
>
>   https://gitlab.com/birkelund/qemu.git tags/pull-nvme-20241203
>
> for you to fetch changes up to 6651f8f2e5051f6750c2534ab3151339b3c476a2:
>
>   hw/nvme: take a reference on the subsystem on vf realization (2024-12-03 07:28:27 +0100)
>
> ----------------------------------------------------------------
> nvme queue
>


Applied, thanks.

Please update the changelog at https://wiki.qemu.org/ChangeLog/9.2
for any user-visible changes.

-- PMM


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

end of thread, other threads:[~2024-12-03 13:44 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-12-03  6:31 [PULL 0/4] nvme queue Klaus Jensen
2024-12-03  6:31 ` [PULL 1/4] hw/nvme: fix msix_uninit with exclusive bar Klaus Jensen
2024-12-03  6:31 ` [PULL 2/4] hw/nvme: fix use/unuse of msix vectors Klaus Jensen
2024-12-03  6:31 ` [PULL 3/4] hw/nvme: SR-IOV VFs must hardwire pci interrupt pin register to zero Klaus Jensen
2024-12-03  6:31 ` [PULL 4/4] hw/nvme: take a reference on the subsystem on vf realization Klaus Jensen
2024-12-03 13:43 ` [PULL 0/4] nvme queue Peter Maydell

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).