qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] hw/nvme: fix attachment of private namespaces
@ 2025-04-08 10:20 Klaus Jensen
  2025-04-08 10:23 ` Keith Busch
                   ` (2 more replies)
  0 siblings, 3 replies; 5+ messages in thread
From: Klaus Jensen @ 2025-04-08 10:20 UTC (permalink / raw)
  To: qemu-devel, Keith Busch, Klaus Jensen, Jesper Devantier,
	qemu-block
  Cc: Klaus Jensen, Alan Adamson

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

Fix regression when attaching private namespaces that gets attached to
the wrong controller.

Keep track of the original controller "owner" of private namespaces, and
only attach if this matches on controller enablement.

Fixes: 6ccca4b6bb9f ("hw/nvme: rework csi handling")
Reported-by: Alan Adamson <alan.adamson@oracle.com>
Suggested-by: Alan Adamson <alan.adamson@oracle.com>
Signed-off-by: Klaus Jensen <k.jensen@samsung.com>
---
 hw/nvme/ctrl.c   | 7 ++++++-
 hw/nvme/ns.c     | 4 ++++
 hw/nvme/nvme.h   | 3 +++
 hw/nvme/subsys.c | 9 +--------
 4 files changed, 14 insertions(+), 9 deletions(-)

diff --git a/hw/nvme/ctrl.c b/hw/nvme/ctrl.c
index 518d02dc66706e2d2e86f1705db52188a97a67fc..d6b77d4fbc9def4639d53074c93f35ca882c4a02 100644
--- a/hw/nvme/ctrl.c
+++ b/hw/nvme/ctrl.c
@@ -7755,7 +7755,11 @@ static int nvme_start_ctrl(NvmeCtrl *n)
     for (int i = 1; i <= NVME_MAX_NAMESPACES; i++) {
         NvmeNamespace *ns = nvme_subsys_ns(n->subsys, i);
 
-        if (ns && nvme_csi_supported(n, ns->csi) && !ns->params.detached) {
+        if (!ns || (!ns->params.shared && ns->ctrl != n)) {
+            continue;
+        }
+
+        if (nvme_csi_supported(n, ns->csi) && !ns->params.detached) {
             if (!ns->attached || ns->params.shared) {
                 nvme_attach_ns(n, ns);
             }
@@ -8988,6 +8992,7 @@ static void nvme_realize(PCIDevice *pci_dev, Error **errp)
     if (n->namespace.blkconf.blk) {
         ns = &n->namespace;
         ns->params.nsid = 1;
+        ns->ctrl = n;
 
         if (nvme_ns_setup(ns, errp)) {
             return;
diff --git a/hw/nvme/ns.c b/hw/nvme/ns.c
index 98c1e75a5d29627351f1aa741da3625c984a2d40..4ab8ba74f51b346a50419869b6f4a7f4b2d0e9c2 100644
--- a/hw/nvme/ns.c
+++ b/hw/nvme/ns.c
@@ -763,6 +763,10 @@ static void nvme_ns_realize(DeviceState *dev, Error **errp)
 
     ns->id_ns.endgid = cpu_to_le16(0x1);
     ns->id_ns_ind.endgrpid = cpu_to_le16(0x1);
+
+    if (!ns->params.shared) {
+        ns->ctrl = n;
+    }
 }
 
 static const Property nvme_ns_props[] = {
diff --git a/hw/nvme/nvme.h b/hw/nvme/nvme.h
index 6f782ba18826d3ff8db7198d3a29c7654262bb7b..b5c9378ea4e524abacced613fbc4ce5a404350c0 100644
--- a/hw/nvme/nvme.h
+++ b/hw/nvme/nvme.h
@@ -268,6 +268,9 @@ typedef struct NvmeNamespace {
     NvmeSubsystem *subsys;
     NvmeEnduranceGroup *endgrp;
 
+    /* NULL for shared namespaces; set to specific controller if private */
+    NvmeCtrl *ctrl;
+
     struct {
         uint32_t err_rec;
     } features;
diff --git a/hw/nvme/subsys.c b/hw/nvme/subsys.c
index 2ae56f12a596198e93a118428579301f8c8275d8..b617ac3892a32efebcaedca837eff59104dcc751 100644
--- a/hw/nvme/subsys.c
+++ b/hw/nvme/subsys.c
@@ -56,7 +56,7 @@ int nvme_subsys_register_ctrl(NvmeCtrl *n, Error **errp)
 {
     NvmeSubsystem *subsys = n->subsys;
     NvmeSecCtrlEntry *sctrl = nvme_sctrl(n);
-    int cntlid, nsid, num_rsvd, num_vfs = n->params.sriov_max_vfs;
+    int cntlid, num_rsvd, num_vfs = n->params.sriov_max_vfs;
 
     if (pci_is_vf(&n->parent_obj)) {
         cntlid = le16_to_cpu(sctrl->scid);
@@ -92,13 +92,6 @@ int nvme_subsys_register_ctrl(NvmeCtrl *n, Error **errp)
 
     subsys->ctrls[cntlid] = n;
 
-    for (nsid = 1; nsid < ARRAY_SIZE(subsys->namespaces); nsid++) {
-        NvmeNamespace *ns = subsys->namespaces[nsid];
-        if (ns && ns->params.shared && !ns->params.detached) {
-            nvme_attach_ns(n, ns);
-        }
-    }
-
     return cntlid;
 }
 

---
base-commit: dfaecc04c46d298e9ee81bd0ca96d8754f1c27ed
change-id: 20250408-fix-private-ns-19b2bdf62696

Best regards,
-- 
Klaus Jensen <k.jensen@samsung.com>



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

* Re: [PATCH] hw/nvme: fix attachment of private namespaces
  2025-04-08 10:20 [PATCH] hw/nvme: fix attachment of private namespaces Klaus Jensen
@ 2025-04-08 10:23 ` Keith Busch
  2025-04-08 16:41 ` alan.adamson
  2025-04-08 18:56 ` Philippe Mathieu-Daudé
  2 siblings, 0 replies; 5+ messages in thread
From: Keith Busch @ 2025-04-08 10:23 UTC (permalink / raw)
  To: Klaus Jensen
  Cc: qemu-devel, Jesper Devantier, qemu-block, Klaus Jensen,
	Alan Adamson

On Tue, Apr 08, 2025 at 12:20:46PM +0200, Klaus Jensen wrote:
> From: Klaus Jensen <k.jensen@samsung.com>
> 
> Fix regression when attaching private namespaces that gets attached to
> the wrong controller.
> 
> Keep track of the original controller "owner" of private namespaces, and
> only attach if this matches on controller enablement.

Looks good.

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


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

* Re: [PATCH] hw/nvme: fix attachment of private namespaces
  2025-04-08 10:20 [PATCH] hw/nvme: fix attachment of private namespaces Klaus Jensen
  2025-04-08 10:23 ` Keith Busch
@ 2025-04-08 16:41 ` alan.adamson
  2025-04-08 18:56 ` Philippe Mathieu-Daudé
  2 siblings, 0 replies; 5+ messages in thread
From: alan.adamson @ 2025-04-08 16:41 UTC (permalink / raw)
  To: Klaus Jensen, qemu-devel, Keith Busch, Jesper Devantier,
	qemu-block
  Cc: Klaus Jensen


On 4/8/25 3:20 AM, Klaus Jensen wrote:
> From: Klaus Jensen <k.jensen@samsung.com>
>
> Fix regression when attaching private namespaces that gets attached to
> the wrong controller.
>
> Keep track of the original controller "owner" of private namespaces, and
> only attach if this matches on controller enablement.

Tested-by: Alan Adamson <alan.adamson@oracle.com>

Reviewed-by: Alan Adamson <alan.adamson@oracle.com>



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

* Re: [PATCH] hw/nvme: fix attachment of private namespaces
  2025-04-08 10:20 [PATCH] hw/nvme: fix attachment of private namespaces Klaus Jensen
  2025-04-08 10:23 ` Keith Busch
  2025-04-08 16:41 ` alan.adamson
@ 2025-04-08 18:56 ` Philippe Mathieu-Daudé
  2025-04-09  6:36   ` Klaus Jensen
  2 siblings, 1 reply; 5+ messages in thread
From: Philippe Mathieu-Daudé @ 2025-04-08 18:56 UTC (permalink / raw)
  To: Klaus Jensen, qemu-devel, Keith Busch, Jesper Devantier,
	qemu-block
  Cc: Klaus Jensen, Alan Adamson

On 8/4/25 12:20, Klaus Jensen wrote:
> From: Klaus Jensen <k.jensen@samsung.com>
> 
> Fix regression when attaching private namespaces that gets attached to
> the wrong controller.
> 
> Keep track of the original controller "owner" of private namespaces, and
> only attach if this matches on controller enablement.
> 
> Fixes: 6ccca4b6bb9f ("hw/nvme: rework csi handling")
> Reported-by: Alan Adamson <alan.adamson@oracle.com>
> Suggested-by: Alan Adamson <alan.adamson@oracle.com>
> Signed-off-by: Klaus Jensen <k.jensen@samsung.com>
> ---
>   hw/nvme/ctrl.c   | 7 ++++++-
>   hw/nvme/ns.c     | 4 ++++
>   hw/nvme/nvme.h   | 3 +++
>   hw/nvme/subsys.c | 9 +--------
>   4 files changed, 14 insertions(+), 9 deletions(-)


Patch queued, thanks!


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

* Re: [PATCH] hw/nvme: fix attachment of private namespaces
  2025-04-08 18:56 ` Philippe Mathieu-Daudé
@ 2025-04-09  6:36   ` Klaus Jensen
  0 siblings, 0 replies; 5+ messages in thread
From: Klaus Jensen @ 2025-04-09  6:36 UTC (permalink / raw)
  To: Philippe Mathieu-Daudé
  Cc: qemu-devel, Keith Busch, Jesper Devantier, qemu-block,
	Klaus Jensen, Alan Adamson

[-- Attachment #1: Type: text/plain, Size: 908 bytes --]

On Apr  8 20:56, Philippe Mathieu-Daudé wrote:
> On 8/4/25 12:20, Klaus Jensen wrote:
> > From: Klaus Jensen <k.jensen@samsung.com>
> > 
> > Fix regression when attaching private namespaces that gets attached to
> > the wrong controller.
> > 
> > Keep track of the original controller "owner" of private namespaces, and
> > only attach if this matches on controller enablement.
> > 
> > Fixes: 6ccca4b6bb9f ("hw/nvme: rework csi handling")
> > Reported-by: Alan Adamson <alan.adamson@oracle.com>
> > Suggested-by: Alan Adamson <alan.adamson@oracle.com>
> > Signed-off-by: Klaus Jensen <k.jensen@samsung.com>
> > ---
> >   hw/nvme/ctrl.c   | 7 ++++++-
> >   hw/nvme/ns.c     | 4 ++++
> >   hw/nvme/nvme.h   | 3 +++
> >   hw/nvme/subsys.c | 9 +--------
> >   4 files changed, 14 insertions(+), 9 deletions(-)
> 
> 
> Patch queued, thanks!

Hi Philippe,

Thanks for picking this up!

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

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

end of thread, other threads:[~2025-04-09  6:38 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-04-08 10:20 [PATCH] hw/nvme: fix attachment of private namespaces Klaus Jensen
2025-04-08 10:23 ` Keith Busch
2025-04-08 16:41 ` alan.adamson
2025-04-08 18:56 ` Philippe Mathieu-Daudé
2025-04-09  6:36   ` Klaus Jensen

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).