On 07/24/2018 03:41 PM, Andrea Bolognani wrote:
On Tue, 2018-07-24 at 11:31 +0200, Boris Fiuczynski wrote:
> On 07/24/2018 10:20 AM, Andrea Bolognani wrote:
>> Assuming the above is a correct reading of the situation, it
>> would seem the IDs are the only guest-visible part that we need
>> to make sure doesn't change during the lifetime of the guest,
>> while the usual bus/slot/function triplet assigned to the
>> underlying PCI device doesn't actually matter. And if that's the
>> case, wouldn't something like
>>
>> <address type='zpci' uid='1' fid='1'/>
>
> Then a pci device on s390 would need a special address type zpci in
> libvirt and the design idea for libvirt is to stay compatible with pci.
Being compatible with the existing PCI machinery is certainly a
good idea when it makes sense to do so, but I'm not quite convinced
that is the case here.
From a user perspective:
I take your example below and reduce it to pci only like this:
<controller type='pci' index='1' model='pci-bridge'/>
<hostdev mode='subsystem' type='pci' managed='no'>
<driver name='vfio'/>
<source>
<address domain='0xffff' bus='0x00' slot='0x00'
function='0x0'/>
</source>
<address type='pci' domain='0x0000' bus='0x01'
slot='0x1f'
function='0x0'/>
</hostdev>
This works on x86 as well as on s390 where as your suggested zpci
address type would not allow this. This is what I wanted to express with
the word "compatible".
As I wrote before: It would also be valid for a user to not care about
the attributes domain, bus, slot and function and reduce the specified
set of attributes to e.g. <address type='pci' uid='0xffff'/>
According to Cornelia's blog post on the subject, the PCI topology
inside the guest will be determined entirely by the IDs. Is there
even a way to eg. use bridges to create a non-flat PCI hierarchy?
Or to have several PCI devices share the same bus or slot?
If none of the above applies, then that doesn't look a whole lot
like PCI to me :)
Moreover, we already have several address types in addition to PCI
such as USB, virtio-mmio, spapr-vio, ccw... Adding yet another one
is not a problem if it makes the interface more sensible.
Sure you can add one more
but wouldn't you end up with e.g. a hostdev
model vfio-pci with an address type of pci on all pci supporting
architectures but s390 where you need to use zpci? What would be the
benefit for the user or higher level management software? Actually I
would not like to introduce special handling unless required.
More concrete questions: one of the zPCI test cases includes
<controller type='pci' index='1' model='pci-bridge'/>
<hostdev mode='subsystem' type='pci' managed='no'>
<driver name='vfio'/>
<source>
<address domain='0xffff' bus='0x00' slot='0x00'
function='0x0'/>
</source>
<address type='pci' domain='0x0000' bus='0x01'
slot='0x1f'
function='0x0' uid='0xffff'
fid='0xffffffff'/>
</hostdev>
which translates to
-device zpci,uid=3,fid=2,target=pci.1,id=zpci3 \
-device pci-bridge,chassis_nr=1,id=pci.1,bus=pci.0,addr=0x1 \
-device zpci,uid=65535,fid=4294967295,target=hostdev0,id=zpci65535 \
-device vfio-pci,host=ffff:00:00.0,id=hostdev0,bus=pci.1,addr=0x1f \
How does the pci-bridge controller show up in the guest, if at all?
Do the bus= and addr= attributes of vfio-pci and pci-bridge in the
example above matter eg. for migration purposes?
> Therefore uid and fid are optional attributes and if not specified on
> s390 they are generated. The patch series also allows on s390 to specify
> the pci address type just with attributes uid and/or fid causing the
> rest of the pci address attributes to be generated.
This goes without saying: users should not have to worry about
addresses at all unless they have very specific needs.
--
Mit freundlichen Grüßen/Kind regards
Boris Fiuczynski
IBM Deutschland Research & Development GmbH
Vorsitzender des Aufsichtsrats: Martina Köderitz
Geschäftsführung: Dirk Wittkopp
Sitz der Gesellschaft: Böblingen
Registergericht: Amtsgericht Stuttgart, HRB 243294