Hello, This series added support for multi-path I/O with multi-controllers and namespace sharing. By supporting these features, we can test Linux kernel mpath(multi-path) code with this NVMe device.
Patches from the first to third added multi-controller support in a NVM subsystem by adding a mpath.ctrl parameter to nvme device. The rest of the patches added namespace sharing support in a NVM subsystem with two or more controllers by adding mpath.ns parameter to nvme-ns device. Multi-path enabled in kernel with this series for two controllers with a namespace: root@vm:~/work# nvme list -v NVM Express Subsystems Subsystem Subsystem-NQN Controllers ---------------- ------------------------------------------------------------------------------------------------ ---------------- nvme-subsys0 nqn.2019-08.org.qemu:serial nvme0, nvme1 NVM Express Controllers Device SN MN FR TxPort Address Subsystem Namespaces -------- -------------------- ---------------------------------------- -------- ------ -------------- ------------ ---------------- nvme0 serial QEMU NVMe Ctrl 1.0 pcie 0000:01:00.0 nvme-subsys0 nvme0n1 nvme1 serial QEMU NVMe Ctrl 1.0 pcie 0000:02:00.0 nvme-subsys0 nvme0n1 NVM Express Namespaces Device NSID Usage Format Controllers ------------ -------- -------------------------- ---------------- ---------------- nvme0n1 1 268.44 MB / 268.44 MB 512 B + 0 B nvme0, nvme1 The reason why I put 'RFC' tag to this series is mostly about the last patch "hw/block/nvme: add namespace sharing param for mpath". It seems like QEMU block backing device does not support to be shared among two or more -device(s). It means that we just can't give same drive= property to multiple nvme-ns devices. This patch has just let -device maps to -drive one-to-one(1:1), but if namespae sharing is detected and setup by the host kernel, then a single block device will be selected for the NVM subsystem. I'm not sure this is a good start for this feature, so I put the RFC tag here. Please kindly review! Thanks, Minwoo Im (5): hw/block/nvme: add controller id parameter nvme: add CMIC enum value for Identify Controller hw/block/nvme: add multi-controller param for mpath nvme: add NMIC enum value for Identify Namespace hw/block/nvme: add namespace sharing param for mpath hw/block/nvme-ns.c | 14 ++++++++++++-- hw/block/nvme-ns.h | 2 ++ hw/block/nvme.c | 26 ++++++++++++++++++++++++++ hw/block/nvme.h | 2 ++ include/block/nvme.h | 8 ++++++++ 5 files changed, 50 insertions(+), 2 deletions(-) -- 2.17.1