hw/block/nvme: support multiple namespaces
commit7f0f1acedf159d00684d495d7a14d52220c1d16b
authorKlaus Jensen <k.jensen@samsung.com>
Wed, 26 Jun 2019 06:51:06 +0000 (26 08:51 +0200)
committerKlaus Jensen <k.jensen@samsung.com>
Tue, 27 Oct 2020 06:24:47 +0000 (27 07:24 +0100)
tree1dc8557a7ebdf56c5f664b0898b3ab8d40a6ed3a
parent7c9c350c15289b601766c391024e0bfea8a36ee0
hw/block/nvme: support multiple namespaces

This adds support for multiple namespaces by introducing a new 'nvme-ns'
device model. The nvme device creates a bus named from the device name
('id'). The nvme-ns devices then connect to this and registers
themselves with the nvme device.

This changes how an nvme device is created. Example with two namespaces:

  -drive file=nvme0n1.img,if=none,id=disk1
  -drive file=nvme0n2.img,if=none,id=disk2
  -device nvme,serial=deadbeef,id=nvme0
  -device nvme-ns,drive=disk1,bus=nvme0,nsid=1
  -device nvme-ns,drive=disk2,bus=nvme0,nsid=2

The drive property is kept on the nvme device to keep the change
backward compatible, but the property is now optional. Specifying a
drive for the nvme device will always create the namespace with nsid 1.

Signed-off-by: Klaus Jensen <k.jensen@samsung.com>
Reviewed-by: Keith Busch <kbusch@kernel.org>
Reviewed-by: Minwoo Im <minwoo.im.dev@gmail.com>
hw/block/meson.build
hw/block/nvme-ns.c [new file with mode: 0644]
hw/block/nvme-ns.h [new file with mode: 0644]
hw/block/nvme.c
hw/block/nvme.h
hw/block/trace-events