Hello, This patch series is third one to support multi-controller and namespace sharing in multi-path. This series introduced subsystem scheme to manage controller(s) and namespace(s) in the subsystem.
This series has new patches from the V2: 'detached' parameter has been added to the nvme-ns device. This will decide whether to attach the namespace to controller(s) in the current subsystem or not. If it's given with true, then it will be just allocated in the subsystem, but not attaching to any controllers in the subsystem. Otherwise, it will automatically attach to all the controllers in the subsystem. The other t hing is that the last patch implemented Identify Active Namespace ID List command handler apart from the Allocated Namespace ID List. Run with: -device nvme,serial=qux,id=nvme3 -device nvme-ns,id=ns3,drive=drv12,nsid=3,bus=nvme3 -device nvme-subsys,id=subsys0 -device nvme,serial=foo,id=nvme0,subsys=subsys0 -device nvme,serial=bar,id=nvme1,subsys=subsys0 -device nvme,serial=baz,id=nvme2,subsys=subsys0 -device nvme-ns,id=ns1,drive=drv10,nsid=1,subsys=subsys0,detached=true -device nvme-ns,id=ns2,drive=drv11,nsid=2,bus=nvme2 nvme-cli: root@vm:~/work# nvme list -v NVM Express Subsystems Subsystem Subsystem-NQN Controllers ---------------- ------------------------------------------------------------------------------------------------ ---------------- nvme-subsys0 nqn.2019-08.org.qemu:qux nvme0 nvme-subsys1 nqn.2019-08.org.qemu:subsys0 nvme1, nvme2, nvme3 NVM Express Controllers Device SN MN FR TxPort Address Subsystem Namespaces -------- -------------------- ---------------------------------------- -------- ------ -------------- ------------ ---------------- nvme0 qux QEMU NVMe Ctrl 1.0 pcie 0000:00:06.0 nvme-subsys0 nvme1 foo QEMU NVMe Ctrl 1.0 pcie 0000:00:07.0 nvme-subsys1 nvme2 bar QEMU NVMe Ctrl 1.0 pcie 0000:00:08.0 nvme-subsys1 nvme3 baz QEMU NVMe Ctrl 1.0 pcie 0000:00:09.0 nvme-subsys1 nvme1n1 NVM Express Namespaces Device NSID Usage Format Controllers ------------ -------- -------------------------- ---------------- ---------------- nvme0n1 3 268.44 MB / 268.44 MB 512 B + 0 B nvme0 nvme1n1 2 268.44 MB / 268.44 MB 512 B + 0 B nvme3 Now we have [allocated|not-allocated]/[attached/detached] scheme for namespaces and controllers. The next series is going to be to support namespace management and attachment with few Identify command handlers. Please review. Thanks! Since RFC V2: - Rebased on nvme-next branch with trivial patches from the previous version(V2) applied. (Klaus) - Fix enumeration type name convention with NvmeIdNs prefix. (Klaus) - Put 'cntlid' to NvmeCtrl instance in nvme_init_ctrl() which was missed in V2. - Added 'detached' parameter to nvme-ns device to decide whether to attach or not to controller(s) in the subsystem. (Klaus) - Implemented Identify Active Namespace ID List aprt from Identify Allocated Namespace ID List by removing fall-thru statement. Since RFC V1: - Updated namespace sharing scheme to be based on nvme-subsys hierarchy. Minwoo Im (8): hw/block/nvme: introduce nvme-subsys device hw/block/nvme: support to map controller to a subsystem hw/block/nvme: add CMIC enum value for Identify Controller hw/block/nvme: support for multi-controller in subsystem hw/block/nvme: add NMIC enum value for Identify Namespace hw/block/nvme: support for shared namespace in subsystem hw/block/nvme: add 'detached' param not to attach namespace hw/block/nvme: Add Identify Active Namespace ID List hw/block/meson.build | 2 +- hw/block/nvme-ns.c | 32 ++++++++-- hw/block/nvme-ns.h | 13 ++++ hw/block/nvme-subsys.c | 111 +++++++++++++++++++++++++++++++++ hw/block/nvme-subsys.h | 32 ++++++++++ hw/block/nvme.c | 137 ++++++++++++++++++++++++++++++++++++++--- hw/block/nvme.h | 19 ++++++ include/block/nvme.h | 8 +++ 8 files changed, 340 insertions(+), 14 deletions(-) create mode 100644 hw/block/nvme-subsys.c create mode 100644 hw/block/nvme-subsys.h -- 2.17.1