On Mon, 13 Aug 2018 12:46:16 +0800 Yi Min Zhao <zyimin@xxxxxxxxxxxxx> wrote: > Is there any comment? I expect comments from all of you. Well, I don't have any objections from my side, but you need the libvirt folks' opinion on this. > > > 在 2018/8/7 下午5:10, Yi Min Zhao 写道: > > Abstract > > ======== > > The PCI representation in QEMU has recently 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, two new XML > > attributes, @uid and @fid, are introduced for device addresses of type > > 'pci', i.e.: > > <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' > > uid='0x0003' fid='0x00000027'/> > > </hostdev> > > > > uid and fid are optional attributes. 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. > > > > Current implementation is the most seamless one for the user as it > > unites the address specific data of a PCI device on one XML element. > > It could accommodate both specifying our special parameters (uid and fid) > > and re-using standard statements (domain, bus, slot and function) for > > PCI devices. User can still specify bus/slot/function for the virtualized > > PCI devices in the XML. > > > > Thus uid/fid act as an extension to the PCI address and 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 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: > > 087de2f5a3: docs: formatdomain: fix spacing before parentheses > > > > Change Log > > ========== > > 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 (12): > > conf: Add definitions for 'uid' and 'fid' PCI address attributes > > qemu: Introduce zPCI capability > > conf: Introduce a new PCI address extension flag > > 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: Introduce parser, formatter for uid and fid > > 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 > > > > docs/formatdomain.html.in | 9 +- > > docs/news.xml | 11 + > > docs/schemas/basictypes.rng | 23 ++ > > docs/schemas/domaincommon.rng | 1 + > > src/conf/device_conf.c | 78 +++++ > > src/conf/device_conf.h | 8 + > > src/conf/domain_addr.c | 379 +++++++++++++++++++++ > > src/conf/domain_addr.h | 29 ++ > > src/conf/domain_conf.c | 6 + > > src/libvirt_private.syms | 4 + > > src/qemu/qemu_capabilities.c | 6 + > > src/qemu/qemu_capabilities.h | 1 + > > src/qemu/qemu_command.c | 114 +++++++ > > src/qemu/qemu_command.h | 4 + > > src/qemu/qemu_domain.c | 1 + > > src/qemu/qemu_domain_address.c | 204 ++++++++++- > > src/qemu/qemu_hotplug.c | 155 ++++++++- > > src/util/virpci.h | 13 + > > tests/qemucapabilitiesdata/caps_2.10.0.s390x.xml | 1 + > > tests/qemucapabilitiesdata/caps_2.11.0.s390x.xml | 1 + > > tests/qemucapabilitiesdata/caps_2.12.0.s390x.xml | 1 + > > tests/qemucapabilitiesdata/caps_2.7.0.s390x.xml | 1 + > > tests/qemucapabilitiesdata/caps_2.8.0.s390x.xml | 1 + > > tests/qemucapabilitiesdata/caps_2.9.0.s390x.xml | 1 + > > tests/qemuxml2argvdata/disk-virtio-s390-zpci.args | 27 ++ > > tests/qemuxml2argvdata/disk-virtio-s390-zpci.xml | 17 + > > .../hostdev-vfio-zpci-autogenerate.args | 26 ++ > > .../hostdev-vfio-zpci-autogenerate.xml | 18 + > > .../hostdev-vfio-zpci-boundaries.args | 30 ++ > > .../hostdev-vfio-zpci-boundaries.xml | 26 ++ > > .../hostdev-vfio-zpci-multidomain-many.args | 40 +++ > > .../hostdev-vfio-zpci-multidomain-many.xml | 67 ++++ > > tests/qemuxml2argvdata/hostdev-vfio-zpci.args | 26 ++ > > tests/qemuxml2argvdata/hostdev-vfio-zpci.xml | 19 ++ > > tests/qemuxml2argvtest.c | 17 + > > tests/qemuxml2xmloutdata/disk-virtio-s390-zpci.xml | 29 ++ > > .../hostdev-vfio-zpci-autogenerate.xml | 30 ++ > > .../hostdev-vfio-zpci-boundaries.xml | 42 +++ > > .../hostdev-vfio-zpci-multidomain-many.xml | 79 +++++ > > tests/qemuxml2xmloutdata/hostdev-vfio-zpci.xml | 30 ++ > > tests/qemuxml2xmltest.c | 14 + > > 41 files changed, 1575 insertions(+), 14 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.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 > > > -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list