qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/2] hw/nvme: fix namespace attachment on controller hotplug
@ 2021-09-24  7:27 Klaus Jensen
  2021-09-24  7:27 ` [PATCH 1/2] hw/nvme: reattach subsystem namespaces on hotplug Klaus Jensen
                   ` (3 more replies)
  0 siblings, 4 replies; 5+ messages in thread
From: Klaus Jensen @ 2021-09-24  7:27 UTC (permalink / raw)
  To: qemu-devel
  Cc: Eduardo Habkost, qemu-block, Klaus Jensen, Keith Busch,
	Hannes Reinecke, Klaus Jensen

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

First patch from Hannes fixes the subsystem registration process such
that shared (but non-detached) namespaces are automatically attached to
hotplugged controllers.

The second patch changes the default for 'shared' such that namespaces
are shared by default and will thus by default be attached to hotplugged
controllers. This adds a compat property for older machine versions and
updates the documentation to reflect this.

Hannes Reinecke (1):
  hw/nvme: reattach subsystem namespaces on hotplug

Klaus Jensen (1):
  hw/nvme: change nvme-ns 'shared' default

 docs/system/devices/nvme.rst | 24 ++++++++++++++----------
 hw/core/machine.c            |  4 +++-
 hw/nvme/ns.c                 |  8 +-------
 hw/nvme/subsys.c             | 10 +++++++++-
 4 files changed, 27 insertions(+), 19 deletions(-)

-- 
2.33.0



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

* [PATCH 1/2] hw/nvme: reattach subsystem namespaces on hotplug
  2021-09-24  7:27 [PATCH 0/2] hw/nvme: fix namespace attachment on controller hotplug Klaus Jensen
@ 2021-09-24  7:27 ` Klaus Jensen
  2021-09-24  7:27 ` [PATCH 2/2] hw/nvme: change nvme-ns 'shared' default Klaus Jensen
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 5+ messages in thread
From: Klaus Jensen @ 2021-09-24  7:27 UTC (permalink / raw)
  To: qemu-devel
  Cc: Eduardo Habkost, qemu-block, Klaus Jensen, Keith Busch,
	Hannes Reinecke, Klaus Jensen

From: Hannes Reinecke <hare@suse.de>

With commit 5ffbaeed16 ("hw/nvme: fix controller hot unplugging")
namespaces get moved from the controller to the subsystem if one
is specified.
That keeps the namespaces alive after a controller hot-unplug, but
after a controller hotplug we have to reconnect the namespaces
from the subsystem to the controller.

Fixes: 5ffbaeed16 ("hw/nvme: fix controller hot unplugging")
Cc: Klaus Jensen <k.jensen@samsung.com>
Signed-off-by: Hannes Reinecke <hare@suse.de>
[k.jensen: only attach to shared and non-detached namespaces]
Signed-off-by: Klaus Jensen <k.jensen@samsung.com>
---
 hw/nvme/subsys.c | 10 +++++++++-
 1 file changed, 9 insertions(+), 1 deletion(-)

diff --git a/hw/nvme/subsys.c b/hw/nvme/subsys.c
index 93c35950d69d..6b2e4c975f5b 100644
--- a/hw/nvme/subsys.c
+++ b/hw/nvme/subsys.c
@@ -14,7 +14,7 @@
 int nvme_subsys_register_ctrl(NvmeCtrl *n, Error **errp)
 {
     NvmeSubsystem *subsys = n->subsys;
-    int cntlid;
+    int cntlid, nsid;
 
     for (cntlid = 0; cntlid < ARRAY_SIZE(subsys->ctrls); cntlid++) {
         if (!subsys->ctrls[cntlid]) {
@@ -29,12 +29,20 @@ 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;
 }
 
 void nvme_subsys_unregister_ctrl(NvmeSubsystem *subsys, NvmeCtrl *n)
 {
     subsys->ctrls[n->cntlid] = NULL;
+    n->cntlid = -1;
 }
 
 static void nvme_subsys_setup(NvmeSubsystem *subsys)
-- 
2.33.0



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

* [PATCH 2/2] hw/nvme: change nvme-ns 'shared' default
  2021-09-24  7:27 [PATCH 0/2] hw/nvme: fix namespace attachment on controller hotplug Klaus Jensen
  2021-09-24  7:27 ` [PATCH 1/2] hw/nvme: reattach subsystem namespaces on hotplug Klaus Jensen
@ 2021-09-24  7:27 ` Klaus Jensen
  2021-11-15 17:57 ` [PATCH 0/2] hw/nvme: fix namespace attachment on controller hotplug Klaus Jensen
  2021-11-16 15:55 ` Keith Busch
  3 siblings, 0 replies; 5+ messages in thread
From: Klaus Jensen @ 2021-09-24  7:27 UTC (permalink / raw)
  To: qemu-devel
  Cc: Eduardo Habkost, qemu-block, Klaus Jensen, Keith Busch,
	Hannes Reinecke, Klaus Jensen

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

Change namespaces to be shared namespaces by default (parameter
shared=on). Keep shared=off for older machine types.

Signed-off-by: Klaus Jensen <k.jensen@samsung.com>
---
 docs/system/devices/nvme.rst | 24 ++++++++++++++----------
 hw/core/machine.c            |  4 +++-
 hw/nvme/ns.c                 |  8 +-------
 3 files changed, 18 insertions(+), 18 deletions(-)

diff --git a/docs/system/devices/nvme.rst b/docs/system/devices/nvme.rst
index bff72d1c24d0..a1c0db01f6d5 100644
--- a/docs/system/devices/nvme.rst
+++ b/docs/system/devices/nvme.rst
@@ -110,28 +110,32 @@ multipath I/O.
 This will create an NVM subsystem with two controllers. Having controllers
 linked to an ``nvme-subsys`` device allows additional ``nvme-ns`` parameters:
 
-``shared`` (default: ``off``)
+``shared`` (default: ``on`` since 6.2)
   Specifies that the namespace will be attached to all controllers in the
-  subsystem. If set to ``off`` (the default), the namespace will remain a
-  private namespace and may only be attached to a single controller at a time.
+  subsystem. If set to ``off``, the namespace will remain a private namespace
+  and may only be attached to a single controller at a time. Shared namespaces
+  are always automatically attached to all controllers (also when controllers
+  are hotplugged).
 
 ``detached`` (default: ``off``)
   If set to ``on``, the namespace will be be available in the subsystem, but
-  not attached to any controllers initially.
+  not attached to any controllers initially. A shared namespace with this set
+  to ``on`` will never be automatically attached to controllers.
 
 Thus, adding
 
 .. code-block:: console
 
    -drive file=nvm-1.img,if=none,id=nvm-1
-   -device nvme-ns,drive=nvm-1,nsid=1,shared=on
+   -device nvme-ns,drive=nvm-1,nsid=1
    -drive file=nvm-2.img,if=none,id=nvm-2
-   -device nvme-ns,drive=nvm-2,nsid=3,detached=on
+   -device nvme-ns,drive=nvm-2,nsid=3,shared=off,detached=on
 
-will cause NSID 1 will be a shared namespace (due to ``shared=on``) that is
-initially attached to both controllers. NSID 3 will be a private namespace
-(i.e. only attachable to a single controller at a time) and will not be
-attached to any controller initially (due to ``detached=on``).
+will cause NSID 1 will be a shared namespace that is initially attached to both
+controllers. NSID 3 will be a private namespace due to ``shared=off`` and only
+attachable to a single controller at a time. Additionally it will not be
+attached to any controller initially (due to ``detached=on``) or to hotplugged
+controllers.
 
 Optional Features
 =================
diff --git a/hw/core/machine.c b/hw/core/machine.c
index 067f42b528fd..5e2fa3e392b9 100644
--- a/hw/core/machine.c
+++ b/hw/core/machine.c
@@ -37,7 +37,9 @@
 #include "hw/virtio/virtio.h"
 #include "hw/virtio/virtio-pci.h"
 
-GlobalProperty hw_compat_6_1[] = {};
+GlobalProperty hw_compat_6_1[] = {
+    { "nvme-ns", "shared", "off" },
+};
 const size_t hw_compat_6_1_len = G_N_ELEMENTS(hw_compat_6_1);
 
 GlobalProperty hw_compat_6_0[] = {
diff --git a/hw/nvme/ns.c b/hw/nvme/ns.c
index b7cf1494e75b..8b5f98c76180 100644
--- a/hw/nvme/ns.c
+++ b/hw/nvme/ns.c
@@ -465,12 +465,6 @@ static void nvme_ns_realize(DeviceState *dev, Error **errp)
                        "linked to an nvme-subsys device");
             return;
         }
-
-        if (ns->params.shared) {
-            error_setg(errp, "shared requires that the nvme device is "
-                       "linked to an nvme-subsys device");
-            return;
-        }
     } else {
         /*
          * If this namespace belongs to a subsystem (through a link on the
@@ -532,7 +526,7 @@ static void nvme_ns_realize(DeviceState *dev, Error **errp)
 static Property nvme_ns_props[] = {
     DEFINE_BLOCK_PROPERTIES(NvmeNamespace, blkconf),
     DEFINE_PROP_BOOL("detached", NvmeNamespace, params.detached, false),
-    DEFINE_PROP_BOOL("shared", NvmeNamespace, params.shared, false),
+    DEFINE_PROP_BOOL("shared", NvmeNamespace, params.shared, true),
     DEFINE_PROP_UINT32("nsid", NvmeNamespace, params.nsid, 0),
     DEFINE_PROP_UUID("uuid", NvmeNamespace, params.uuid),
     DEFINE_PROP_UINT64("eui64", NvmeNamespace, params.eui64, 0),
-- 
2.33.0



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

* Re: [PATCH 0/2] hw/nvme: fix namespace attachment on controller hotplug
  2021-09-24  7:27 [PATCH 0/2] hw/nvme: fix namespace attachment on controller hotplug Klaus Jensen
  2021-09-24  7:27 ` [PATCH 1/2] hw/nvme: reattach subsystem namespaces on hotplug Klaus Jensen
  2021-09-24  7:27 ` [PATCH 2/2] hw/nvme: change nvme-ns 'shared' default Klaus Jensen
@ 2021-11-15 17:57 ` Klaus Jensen
  2021-11-16 15:55 ` Keith Busch
  3 siblings, 0 replies; 5+ messages in thread
From: Klaus Jensen @ 2021-11-15 17:57 UTC (permalink / raw)
  To: qemu-devel; +Cc: Keith Busch, Klaus Jensen, qemu-block

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

On Sep 24 09:27, Klaus Jensen wrote:
> From: Klaus Jensen <k.jensen@samsung.com>
> 
> First patch from Hannes fixes the subsystem registration process such
> that shared (but non-detached) namespaces are automatically attached to
> hotplugged controllers.
> 
> The second patch changes the default for 'shared' such that namespaces
> are shared by default and will thus by default be attached to hotplugged
> controllers. This adds a compat property for older machine versions and
> updates the documentation to reflect this.
> 
> Hannes Reinecke (1):
>   hw/nvme: reattach subsystem namespaces on hotplug
> 
> Klaus Jensen (1):
>   hw/nvme: change nvme-ns 'shared' default
> 
>  docs/system/devices/nvme.rst | 24 ++++++++++++++----------
>  hw/core/machine.c            |  4 +++-
>  hw/nvme/ns.c                 |  8 +-------
>  hw/nvme/subsys.c             | 10 +++++++++-
>  4 files changed, 27 insertions(+), 19 deletions(-)
> 

Ping :)

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

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

* Re: [PATCH 0/2] hw/nvme: fix namespace attachment on controller hotplug
  2021-09-24  7:27 [PATCH 0/2] hw/nvme: fix namespace attachment on controller hotplug Klaus Jensen
                   ` (2 preceding siblings ...)
  2021-11-15 17:57 ` [PATCH 0/2] hw/nvme: fix namespace attachment on controller hotplug Klaus Jensen
@ 2021-11-16 15:55 ` Keith Busch
  3 siblings, 0 replies; 5+ messages in thread
From: Keith Busch @ 2021-11-16 15:55 UTC (permalink / raw)
  To: Klaus Jensen
  Cc: Eduardo Habkost, qemu-block, Klaus Jensen, qemu-devel,
	Hannes Reinecke

On Fri, Sep 24, 2021 at 09:27:40AM +0200, Klaus Jensen wrote:
> From: Klaus Jensen <k.jensen@samsung.com>
> 
> First patch from Hannes fixes the subsystem registration process such
> that shared (but non-detached) namespaces are automatically attached to
> hotplugged controllers.
> 
> The second patch changes the default for 'shared' such that namespaces
> are shared by default and will thus by default be attached to hotplugged
> controllers. This adds a compat property for older machine versions and
> updates the documentation to reflect this.

Series looks good.

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


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

end of thread, other threads:[~2021-11-16 16:05 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-09-24  7:27 [PATCH 0/2] hw/nvme: fix namespace attachment on controller hotplug Klaus Jensen
2021-09-24  7:27 ` [PATCH 1/2] hw/nvme: reattach subsystem namespaces on hotplug Klaus Jensen
2021-09-24  7:27 ` [PATCH 2/2] hw/nvme: change nvme-ns 'shared' default Klaus Jensen
2021-11-15 17:57 ` [PATCH 0/2] hw/nvme: fix namespace attachment on controller hotplug Klaus Jensen
2021-11-16 15:55 ` Keith Busch

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