[libvirt] [PATCH v8 00/14] PCI passthrough support on s390

Yi Min Zhao posted 14 patches 5 years, 5 months ago
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/libvirt tags/patchew/20181108110032.72832-1-zyimin@linux.ibm.com
Test syntax-check passed
cfg.mk                                        |   1 +
docs/formatdomain.html.in                     |  10 +-
docs/news.xml                                 |  11 +
docs/schemas/basictypes.rng                   |  27 ++
docs/schemas/domaincommon.rng                 |   1 +
src/bhyve/bhyve_device.c                      |   3 +-
src/conf/device_conf.c                        |  69 ++++
src/conf/device_conf.h                        |   7 +
src/conf/domain_addr.c                        | 340 +++++++++++++++++-
src/conf/domain_addr.h                        |  27 +-
src/conf/domain_conf.c                        |  50 ++-
src/libvirt_private.syms                      |   7 +
src/qemu/qemu_capabilities.c                  |   6 +
src/qemu/qemu_capabilities.h                  |   1 +
src/qemu/qemu_command.c                       | 104 ++++++
src/qemu/qemu_command.h                       |   2 +
src/qemu/qemu_domain.c                        |  37 ++
src/qemu/qemu_domain_address.c                | 205 ++++++++++-
src/qemu/qemu_hotplug.c                       | 160 ++++++++-
src/util/virpci.c                             |  26 ++
src/util/virpci.h                             |  15 +
.../caps_2.10.0.s390x.xml                     |   1 +
.../caps_2.11.0.s390x.xml                     |   1 +
.../caps_2.12.0.s390x.xml                     |   1 +
.../qemucapabilitiesdata/caps_2.7.0.s390x.xml |   1 +
.../qemucapabilitiesdata/caps_2.8.0.s390x.xml |   1 +
.../qemucapabilitiesdata/caps_2.9.0.s390x.xml |   1 +
.../qemucapabilitiesdata/caps_3.0.0.s390x.xml |   1 +
.../disk-virtio-s390-zpci.args                |  26 ++
.../disk-virtio-s390-zpci.xml                 |  19 +
.../hostdev-vfio-zpci-autogenerate.args       |  25 ++
.../hostdev-vfio-zpci-autogenerate.xml        |  18 +
.../hostdev-vfio-zpci-boundaries.args         |  29 ++
.../hostdev-vfio-zpci-boundaries.xml          |  30 ++
.../hostdev-vfio-zpci-multidomain-many.args   |  39 ++
.../hostdev-vfio-zpci-multidomain-many.xml    |  79 ++++
.../hostdev-vfio-zpci-wrong-arch.xml          |  34 ++
tests/qemuxml2argvdata/hostdev-vfio-zpci.args |  25 ++
tests/qemuxml2argvdata/hostdev-vfio-zpci.xml  |  21 ++
tests/qemuxml2argvtest.c                      |  22 ++
.../disk-virtio-s390-zpci.xml                 |  31 ++
.../hostdev-vfio-zpci-autogenerate.xml        |  34 ++
.../hostdev-vfio-zpci-boundaries.xml          |  48 +++
.../hostdev-vfio-zpci-multidomain-many.xml    |  97 +++++
.../qemuxml2xmloutdata/hostdev-vfio-zpci.xml  |  32 ++
tests/qemuxml2xmltest.c                       |  17 +
46 files changed, 1707 insertions(+), 35 deletions(-)
create mode 100644 tests/qemuxml2argvdata/disk-virtio-s390-zpci.args
create mode 100644 tests/qemuxml2argvdata/disk-virtio-s390-zpci.xml
create mode 100644 tests/qemuxml2argvdata/hostdev-vfio-zpci-autogenerate.args
create mode 100644 tests/qemuxml2argvdata/hostdev-vfio-zpci-autogenerate.xml
create mode 100644 tests/qemuxml2argvdata/hostdev-vfio-zpci-boundaries.args
create mode 100644 tests/qemuxml2argvdata/hostdev-vfio-zpci-boundaries.xml
create mode 100644 tests/qemuxml2argvdata/hostdev-vfio-zpci-multidomain-many.args
create mode 100644 tests/qemuxml2argvdata/hostdev-vfio-zpci-multidomain-many.xml
create mode 100644 tests/qemuxml2argvdata/hostdev-vfio-zpci-wrong-arch.xml
create mode 100644 tests/qemuxml2argvdata/hostdev-vfio-zpci.args
create mode 100644 tests/qemuxml2argvdata/hostdev-vfio-zpci.xml
create mode 100644 tests/qemuxml2xmloutdata/disk-virtio-s390-zpci.xml
create mode 100644 tests/qemuxml2xmloutdata/hostdev-vfio-zpci-autogenerate.xml
create mode 100644 tests/qemuxml2xmloutdata/hostdev-vfio-zpci-boundaries.xml
create mode 100644 tests/qemuxml2xmloutdata/hostdev-vfio-zpci-multidomain-many.xml
create mode 100644 tests/qemuxml2xmloutdata/hostdev-vfio-zpci.xml
[libvirt] [PATCH v8 00/14] PCI passthrough support on s390
Posted by Yi Min Zhao 5 years, 5 months ago
Abstract
========
The PCI representation in QEMU has been extended for S390
allowing configuration of zPCI attributes like uid (user-defined
identifier) and fid (PCI function identifier).
The details can be found here:
https://lists.gnu.org/archive/html/qemu-devel/2016-06/msg07262.html

To support the new zPCI feature of the S390 platform, a new element of
PCI address is introduced. It has two optional attributes, @uid and
@fid. For example:
  <hostdev mode='subsystem' type='pci'>
    <driver name='vfio'/>
    <source>
      <address domain='0x0001' bus='0x00' slot='0x00' function='0x0'/>
    </source>
    <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0'>
      <zpci uid='0x0003' fid='0x00000027'/>
    </address>
  </hostdev>

If they are defined by the user, unique values within the guest domain
must be used. If they are not specified and the architecture requires
them, they are automatically generated with non-conflicting values.

zPCI address as an extension of the PCI address are stored in a new
structure 'virZPCIDeviceAddress' which is a member of common PCI
Address structure. Additionally, two hashtables are used for assignment
and reservation of zPCI uid/fid.

In support of extending the PCI address, a new PCI address extension flag is
introduced. This extension flag allows is not only dedicated for the S390
platform but also other architectures needing certain extensions to PCI
address space.

Code Base
=========
commit in master:
4f1107614d docs: Enhance polkit documentation to describe secondary connection

Change Log
==========
v7->v8:
1. Rebase the code to the newest code in master branch.
2. Update the words regarding version number in docs to 4.10.0.
3. Move the code introducing zpci member from patch 1 to patch 3.

v6->v7:
1. Optimize some functions' names and code logic.
2. Fixup build error.
3. Add negative test case for patch 9.
4. Use virXMLFormatElement() in virDomainDeviceInfoFormat().

v5->v6:
1. Modify zPCI XML definition.
2. Optimize the logic of zPCI address assignment and reservation.
3. Add extension flag into PCI address structure.
4. Update commit messages.

v4->v5:
1. Update the version number.
2. Fixup code style error.
3. Separate qemu code into single patch.
4. Rebase the patches to the new code of master branch.

v3->v4:
1. Update docs.
2. Format code style.
3. Optimize zPCI support check.
4. Move the check of zPCI defined in xml but unsupported by Qemu to
   qemuDomainDeviceDefValidate().
5. Change zpci address member of PCI address struct from pointer to
   instance.
6. Modify zpci address definition principle. Currently the user must
   either define both of uid and fid or not.

v2->v3:
1. Revise code style.
2. Update test cases.
3. Introduce qemuDomainCollectPCIAddressExtension() to collect PCI
   extension addresses.
4. Introduce virDeviceInfoPCIAddressExtensionPresent() to check if zPCI
   address exists.
5. Optimize zPCI address check logic.
6. Optimize passed parameters of zPCI addr alloc/release/reserve functions.
7. Report enum range error in qemuDomainDeviceSupportZPCI().
8. Update commit messages.

v1->v2:
1. Separate test commit and merge testcases into corresponding commits that
   introduce the functionalities firstly.
2. Spare some checks for zpci device.
3. Add vsock and controller support.
4. Add uin32 type schema.
5. Rename zpciuid and zpcifid to zpci_uid and zpci_fid.
6. Always return multibus support on S390.

Yi Min Zhao (14):
  conf: Add definitions for 'uid' and 'fid' PCI address attributes
  qemu: Introduce zPCI capability
  conf: Introduce extension flag and zPCI member for PCI address
  qemu: Enable PCI multi bus for S390 guests
  qemu: Auto add pci-root for s390/s390x guests
  conf: Introduce address caching for PCI extensions
  conf: use virXMLFormatElement() in virDomainDeviceInfoFormat()
  conf: Introduce parser, formatter for uid and fid
  qemu: Add zPCI address definition check
  conf: Allocate/release 'uid' and 'fid' in PCI address
  qemu: Generate and use zPCI device in QEMU command line
  qemu: Add hotpluging support for PCI devices on S390 guests
  docs: Add 'uid' and 'fid' information
  news: Update news for PCI address extension attributes

 cfg.mk                                        |   1 +
 docs/formatdomain.html.in                     |  10 +-
 docs/news.xml                                 |  11 +
 docs/schemas/basictypes.rng                   |  27 ++
 docs/schemas/domaincommon.rng                 |   1 +
 src/bhyve/bhyve_device.c                      |   3 +-
 src/conf/device_conf.c                        |  69 ++++
 src/conf/device_conf.h                        |   7 +
 src/conf/domain_addr.c                        | 340 +++++++++++++++++-
 src/conf/domain_addr.h                        |  27 +-
 src/conf/domain_conf.c                        |  50 ++-
 src/libvirt_private.syms                      |   7 +
 src/qemu/qemu_capabilities.c                  |   6 +
 src/qemu/qemu_capabilities.h                  |   1 +
 src/qemu/qemu_command.c                       | 104 ++++++
 src/qemu/qemu_command.h                       |   2 +
 src/qemu/qemu_domain.c                        |  37 ++
 src/qemu/qemu_domain_address.c                | 205 ++++++++++-
 src/qemu/qemu_hotplug.c                       | 160 ++++++++-
 src/util/virpci.c                             |  26 ++
 src/util/virpci.h                             |  15 +
 .../caps_2.10.0.s390x.xml                     |   1 +
 .../caps_2.11.0.s390x.xml                     |   1 +
 .../caps_2.12.0.s390x.xml                     |   1 +
 .../qemucapabilitiesdata/caps_2.7.0.s390x.xml |   1 +
 .../qemucapabilitiesdata/caps_2.8.0.s390x.xml |   1 +
 .../qemucapabilitiesdata/caps_2.9.0.s390x.xml |   1 +
 .../qemucapabilitiesdata/caps_3.0.0.s390x.xml |   1 +
 .../disk-virtio-s390-zpci.args                |  26 ++
 .../disk-virtio-s390-zpci.xml                 |  19 +
 .../hostdev-vfio-zpci-autogenerate.args       |  25 ++
 .../hostdev-vfio-zpci-autogenerate.xml        |  18 +
 .../hostdev-vfio-zpci-boundaries.args         |  29 ++
 .../hostdev-vfio-zpci-boundaries.xml          |  30 ++
 .../hostdev-vfio-zpci-multidomain-many.args   |  39 ++
 .../hostdev-vfio-zpci-multidomain-many.xml    |  79 ++++
 .../hostdev-vfio-zpci-wrong-arch.xml          |  34 ++
 tests/qemuxml2argvdata/hostdev-vfio-zpci.args |  25 ++
 tests/qemuxml2argvdata/hostdev-vfio-zpci.xml  |  21 ++
 tests/qemuxml2argvtest.c                      |  22 ++
 .../disk-virtio-s390-zpci.xml                 |  31 ++
 .../hostdev-vfio-zpci-autogenerate.xml        |  34 ++
 .../hostdev-vfio-zpci-boundaries.xml          |  48 +++
 .../hostdev-vfio-zpci-multidomain-many.xml    |  97 +++++
 .../qemuxml2xmloutdata/hostdev-vfio-zpci.xml  |  32 ++
 tests/qemuxml2xmltest.c                       |  17 +
 46 files changed, 1707 insertions(+), 35 deletions(-)
 create mode 100644 tests/qemuxml2argvdata/disk-virtio-s390-zpci.args
 create mode 100644 tests/qemuxml2argvdata/disk-virtio-s390-zpci.xml
 create mode 100644 tests/qemuxml2argvdata/hostdev-vfio-zpci-autogenerate.args
 create mode 100644 tests/qemuxml2argvdata/hostdev-vfio-zpci-autogenerate.xml
 create mode 100644 tests/qemuxml2argvdata/hostdev-vfio-zpci-boundaries.args
 create mode 100644 tests/qemuxml2argvdata/hostdev-vfio-zpci-boundaries.xml
 create mode 100644 tests/qemuxml2argvdata/hostdev-vfio-zpci-multidomain-many.args
 create mode 100644 tests/qemuxml2argvdata/hostdev-vfio-zpci-multidomain-many.xml
 create mode 100644 tests/qemuxml2argvdata/hostdev-vfio-zpci-wrong-arch.xml
 create mode 100644 tests/qemuxml2argvdata/hostdev-vfio-zpci.args
 create mode 100644 tests/qemuxml2argvdata/hostdev-vfio-zpci.xml
 create mode 100644 tests/qemuxml2xmloutdata/disk-virtio-s390-zpci.xml
 create mode 100644 tests/qemuxml2xmloutdata/hostdev-vfio-zpci-autogenerate.xml
 create mode 100644 tests/qemuxml2xmloutdata/hostdev-vfio-zpci-boundaries.xml
 create mode 100644 tests/qemuxml2xmloutdata/hostdev-vfio-zpci-multidomain-many.xml
 create mode 100644 tests/qemuxml2xmloutdata/hostdev-vfio-zpci.xml

-- 
Yi Min

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCH v8 00/14] PCI passthrough support on s390
Posted by Andrea Bolognani 5 years, 5 months ago
On Thu, 2018-11-08 at 19:00 +0800, Yi Min Zhao wrote:
> Abstract
> ========
> The PCI representation in QEMU has been extended for S390
> allowing configuration of zPCI attributes like uid (user-defined
> identifier) and fid (PCI function identifier).
> The details can be found here:
> https://lists.gnu.org/archive/html/qemu-devel/2016-06/msg07262.html
> 
> To support the new zPCI feature of the S390 platform, a new element of
> PCI address is introduced. It has two optional attributes, @uid and
> @fid. For example:
>   <hostdev mode='subsystem' type='pci'>
>     <driver name='vfio'/>
>     <source>
>       <address domain='0x0001' bus='0x00' slot='0x00' function='0x0'/>
>     </source>
>     <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0'>
>       <zpci uid='0x0003' fid='0x00000027'/>
>     </address>
>   </hostdev>
> 
> If they are defined by the user, unique values within the guest domain
> must be used. If they are not specified and the architecture requires
> them, they are automatically generated with non-conflicting values.
> 
> zPCI address as an extension of the PCI address are stored in a new
> structure 'virZPCIDeviceAddress' which is a member of common PCI
> Address structure. Additionally, two hashtables are used for assignment
> and reservation of zPCI uid/fid.
> 
> In support of extending the PCI address, a new PCI address extension flag is
> introduced. This extension flag allows is not only dedicated for the S390
> platform but also other architectures needing certain extensions to PCI
> address space.

I have now provided R-b for the only patch that was still missing it,
and as far as I'm concerned the series is ready to be pushed.

Dan, do you have any remaining concerns about the XML syntax, or can
I go ahead and push?

-- 
Andrea Bolognani / Red Hat / Virtualization

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCH v8 00/14] PCI passthrough support on s390
Posted by Yi Min Zhao 5 years, 5 months ago

在 2018/11/13 下午10:35, Andrea Bolognani 写道:
> On Thu, 2018-11-08 at 19:00 +0800, Yi Min Zhao wrote:
>> Abstract
>> ========
>> The PCI representation in QEMU has been extended for S390
>> allowing configuration of zPCI attributes like uid (user-defined
>> identifier) and fid (PCI function identifier).
>> The details can be found here:
>> https://lists.gnu.org/archive/html/qemu-devel/2016-06/msg07262.html
>>
>> To support the new zPCI feature of the S390 platform, a new element of
>> PCI address is introduced. It has two optional attributes, @uid and
>> @fid. For example:
>>    <hostdev mode='subsystem' type='pci'>
>>      <driver name='vfio'/>
>>      <source>
>>        <address domain='0x0001' bus='0x00' slot='0x00' function='0x0'/>
>>      </source>
>>      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0'>
>>        <zpci uid='0x0003' fid='0x00000027'/>
>>      </address>
>>    </hostdev>
>>
>> If they are defined by the user, unique values within the guest domain
>> must be used. If they are not specified and the architecture requires
>> them, they are automatically generated with non-conflicting values.
>>
>> zPCI address as an extension of the PCI address are stored in a new
>> structure 'virZPCIDeviceAddress' which is a member of common PCI
>> Address structure. Additionally, two hashtables are used for assignment
>> and reservation of zPCI uid/fid.
>>
>> In support of extending the PCI address, a new PCI address extension flag is
>> introduced. This extension flag allows is not only dedicated for the S390
>> platform but also other architectures needing certain extensions to PCI
>> address space.
> I have now provided R-b for the only patch that was still missing it,
> and as far as I'm concerned the series is ready to be pushed.
Thanks very much!
>
> Dan, do you have any remaining concerns about the XML syntax, or can
> I go ahead and push?
>

-- 
Yi Min

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCH v8 00/14] PCI passthrough support on s390
Posted by Daniel P. Berrangé 5 years, 5 months ago
On Tue, Nov 13, 2018 at 03:35:43PM +0100, Andrea Bolognani wrote:
> On Thu, 2018-11-08 at 19:00 +0800, Yi Min Zhao wrote:
> > Abstract
> > ========
> > The PCI representation in QEMU has been extended for S390
> > allowing configuration of zPCI attributes like uid (user-defined
> > identifier) and fid (PCI function identifier).
> > The details can be found here:
> > https://lists.gnu.org/archive/html/qemu-devel/2016-06/msg07262.html
> > 
> > To support the new zPCI feature of the S390 platform, a new element of
> > PCI address is introduced. It has two optional attributes, @uid and
> > @fid. For example:
> >   <hostdev mode='subsystem' type='pci'>
> >     <driver name='vfio'/>
> >     <source>
> >       <address domain='0x0001' bus='0x00' slot='0x00' function='0x0'/>
> >     </source>
> >     <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x0'>
> >       <zpci uid='0x0003' fid='0x00000027'/>
> >     </address>
> >   </hostdev>
> > 
> > If they are defined by the user, unique values within the guest domain
> > must be used. If they are not specified and the architecture requires
> > them, they are automatically generated with non-conflicting values.
> > 
> > zPCI address as an extension of the PCI address are stored in a new
> > structure 'virZPCIDeviceAddress' which is a member of common PCI
> > Address structure. Additionally, two hashtables are used for assignment
> > and reservation of zPCI uid/fid.
> > 
> > In support of extending the PCI address, a new PCI address extension flag is
> > introduced. This extension flag allows is not only dedicated for the S390
> > platform but also other architectures needing certain extensions to PCI
> > address space.
> 
> I have now provided R-b for the only patch that was still missing it,
> and as far as I'm concerned the series is ready to be pushed.
> 
> Dan, do you have any remaining concerns about the XML syntax, or can
> I go ahead and push?

Honestly, I still don't much like it & would prefer zpci as a top level
address type, but the consensus is in favour of this patch series'
approach, so don't consider me a blocker. Feel free to push if you
think it is ready.

Regards,
Daniel
-- 
|: https://berrange.com      -o-    https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org         -o-            https://fstop138.berrange.com :|
|: https://entangle-photo.org    -o-    https://www.instagram.com/dberrange :|

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCH v8 00/14] PCI passthrough support on s390
Posted by Andrea Bolognani 5 years, 5 months ago
On Thu, 2018-11-15 at 10:17 +0000, Daniel P. Berrangé wrote:
> On Tue, Nov 13, 2018 at 03:35:43PM +0100, Andrea Bolognani wrote:
> > Dan, do you have any remaining concerns about the XML syntax, or can
> > I go ahead and push?
> 
> Honestly, I still don't much like it & would prefer zpci as a top level
> address type, but the consensus is in favour of this patch series'
> approach, so don't consider me a blocker. Feel free to push if you
> think it is ready.

Okay, pushed now.

-- 
Andrea Bolognani / Red Hat / Virtualization

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCH v8 00/14] PCI passthrough support on s390
Posted by Boris Fiuczynski 5 years, 5 months ago
On 11/15/18 1:12 PM, Andrea Bolognani wrote:
> On Thu, 2018-11-15 at 10:17 +0000, Daniel P. Berrangé wrote:
>> On Tue, Nov 13, 2018 at 03:35:43PM +0100, Andrea Bolognani wrote:
>>> Dan, do you have any remaining concerns about the XML syntax, or can
>>> I go ahead and push?
>>
>> Honestly, I still don't much like it & would prefer zpci as a top level
>> address type, but the consensus is in favour of this patch series'
>> approach, so don't consider me a blocker. Feel free to push if you
>> think it is ready.
> 
> Okay, pushed now.
> 
Thank you very much!


-- 
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

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list
Re: [libvirt] [PATCH v8 00/14] PCI passthrough support on s390
Posted by Yi Min Zhao 5 years, 5 months ago

在 2018/11/15 下午8:12, Andrea Bolognani 写道:
> On Thu, 2018-11-15 at 10:17 +0000, Daniel P. Berrangé wrote:
>> On Tue, Nov 13, 2018 at 03:35:43PM +0100, Andrea Bolognani wrote:
>>> Dan, do you have any remaining concerns about the XML syntax, or can
>>> I go ahead and push?
>> Honestly, I still don't much like it & would prefer zpci as a top level
>> address type, but the consensus is in favour of this patch series'
>> approach, so don't consider me a blocker. Feel free to push if you
>> think it is ready.
> Okay, pushed now.
>
Thank you very much!

-- 
Yi Min

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list