This is a follow up on a very old thread[1]. My aim is to attach/detatch nvme
devices during runtime and test the Linux nvme subsystem in the guest.

In order to it working, I had first to add hotplug able PCI bus and the
nvme-subsystem. The nvme-subsystem can't be instatiated during runtime so far
(libvirtd config):

  <qemu:commandline>
    <qemu:arg value='-device'/>
    <qemu:arg value='pcie-root-port,id=root,bus=pcie.0,addr=0x6'/>
    <qemu:arg value='-device'/>
    <qemu:arg value='nvme-subsys,id=nvme-subsys-1,nqn=nvme-1'/>
  </qemu:commandline>

and then with a bunch of monitor commands:

  qemu-monitor-command tw --hmp device_add 
nvme,id=nvme1,serial=nvme-1,subsys=nvme-subsys-1,bus=root
  qemu-monitor-command tw --hmp drive_add 0 
if=none,file=/var/lib/libvirt/images/tw-nvme1.img,format=raw,id=nvme1
  qemu-monitor-command tw --hmp device_add nvme-ns,drive=nvme1,shared=on

  qemu-monitor-command tw --hmp info block

  qemu-monitor-command tw --hmp device_del nvme1

I see the nvme device pop up in the guest:

  [  187.047693 ] pci 0000:0f:00.0: [1b36:0010] type 00 class 0x010802
  [  187.050324 ] pci 0000:0f:00.0: reg 0x10: [mem 0x00000000-0x00003fff 64bit]
  [  187.098823 ] pci 0000:0f:00.0: BAR 0: assigned [mem 0xc0800000-0xc0803fff 
64bit]
  [  187.102173 ] nvme nvme1: pci function 0000:0f:00.0
  [  187.103084 ] nvme 0000:0f:00.0: enabling device (0000 -> 0002)
  [  187.131154 ] nvme nvme1: 4/0/0 default/read/poll queues
  [  187.133460 ] nvme nvme1: Ignoring bogus Namespace Identifiers

and it looks pretty reasonable:

  # nvme list -v
  Subsystem        Subsystem-NQN                                                
                                    Controllers
  ---------------- 
------------------------------------------------------------------------------------------------
 ----------------
  nvme-subsys1     nqn.2019-08.org.qemu:nvme-1                                  
                                    nvme1
  nvme-subsys0     nqn.2019-08.org.qemu:nvme-0                                  
                                    nvme0
  
  Device   SN                   MN                                       FR     
  TxPort Address        Subsystem    Namespaces      
  -------- -------------------- ---------------------------------------- 
-------- ------ -------------- ------------ ----------------
  nvme1    nvme-1               QEMU NVMe Ctrl                           8.0.0  
  pcie   0000:0f:00.0   nvme-subsys1 nvme1n1
  nvme0    nvme-0               QEMU NVMe Ctrl                           8.0.0  
  pcie   0000:00:05.0   nvme-subsys0 nvme0n1
  
  Device       Generic      NSID       Usage                      Format        
   Controllers     
  ------------ ------------ ---------- -------------------------- 
---------------- ----------------
  /dev/nvme1n1 /dev/ng1n1   0x1          1.07  GB /   1.07  GB    512   B +  0 
B   nvme1
  /dev/nvme0n1 /dev/ng0n1   0x1          1.07  GB /   1.07  GB    512   B +  0 
B   nvme0


[1] https://lore.kernel.org/all/Y195nENga028PvT9@cormorant.local/

Daniel Wagner (1):
  hw/nvme: Add hotplug handler to nvme bus

 hw/nvme/ctrl.c | 13 +++++++++++++
 1 file changed, 13 insertions(+)

-- 
2.40.0


Reply via email to