
On Mon, Nov 23, 2020 at 13:07:51 +0000, Thanos Makatos wrote:
On Mon, Nov 23, 2020 at 09:47:23 +0000, Thanos Makatos wrote:
On Thu, Nov 19, 2020 at 10:17:56 +0000, Thanos Makatos wrote:
> As a starting point a trivial way to model this in the XML will be: > > <controller type='nvme' index='1' model='nvme'> > > And then add the storage into it as: > > <disk type='file' device='disk'> > <source dev='/Host/QEMUGuest1.qcow2'/> > <target dev='sda' bus='nvme'/>
'target dev' is how the device appears in the guest, right? It should
something like 'nvme0n1'. I'm not sure though this is something
be that
we
can
put here anyway, I think the guest driver can number controllers arbitrarily.
Well, it was supposed to be like that but really is not. Even with other buses the kernel can name the device arbitrarily, so it doesn't really matter.
Maybe we should specify something like BDF? Or is this something QEMU will have to figure out how to do?
> <address type='drive' controller='1' bus='0' target='0' unit='0'/> > </disk> > > <disk type='file' device='disk'> > <source dev='/Host/QEMUGuest2.qcow2'/> > <target dev='sdb' bus='nvme'/> > <address type='drive' controller='1' bus='0' target='0' unit='1'/> > </disk>
Revistiting your initial suggestion, it should be something like this (s/sdb/nvme0):
<disk type='file' device='disk'> <source dev='/Host/QEMUGuest2.qcow2'/> <target dev='nvme0' bus='nvme'/> <address type='drive' controller='1' bus='0' target='0' unit='1'/> </disk>
Note that the parser for 'dev' is a bit quirky, old, and used in many places besides the qemu driver. It's also used with numbers in non-qemu cases. Extending that to parse numbers for nvme but not for sda might become ugly very quickly. Sticking with a letter at the end ('nvmea' might be a more straightforward approach.
Then I think we should just stick with 'nvme'.
You still need a way to "index" it somehow. The target must be unique for each disk.
I think I've misunderstood something, I thought controller='1' in <address ...> refers to index='1' in <controller ...>. So <address ...> should be: <address type='nvme' index='1' controller='1' ns='2'/> What's controller='1' then?