Re: [PATCH 00/32] KVM: s390: enable zPCI for interpretive execution

Matthew Rosato
2021-12-07T21:16:58Z

On 12/7/21 3:57 PM, Matthew Rosato wrote:
> Enable interpretive execution of zPCI instructions + adapter interruption
> forwarding for s390x KVM vfio-pci. This is done by introducing a series
> of new vfio-pci feature ioctls that are unique vfio-pci-zdev (s390x) and
> are used to negotiate the various aspects of zPCI interpretation setup.
> By allowing intepretation of zPCI instructions and firmware delivery of
> interrupts to guests, we can significantly reduce the frequency of guest
> SIE exits for zPCI. We then see additional gains by handling a hot-path
> instruction that can still intercept to the hypervisor (RPCIT) directly
> in kvm.
>
> From the perspective of guest configuration, you passthrough zPCI devices
> in the same manner as before, with intepretation support being used by
> default if available in kernel+qemu.
>
> Will reply with a link to the associated QEMU series.

https://lists.gnu.org/archive/html/qemu-devel/2021-12/msg00873.html

>
> Matthew Rosato (32):
> s390/sclp: detect the zPCI interpretation facility
> s390/sclp: detect the AISII facility
> s390/sclp: detect the AENI facility
> s390/sclp: detect the AISI facility
> s390/airq: pass more TPI info to airq handlers
> s390/airq: allow for airq structure that uses an input vector
> s390/pci: externalize the SIC operation controls and routine
> s390/pci: stash associated GISA designation
> s390/pci: export some routines related to RPCIT processing
> s390/pci: stash dtsm and maxstbl
> s390/pci: add helper function to find device by handle
> s390/pci: get SHM information from list pci
> KVM: s390: pci: add basic kvm_zdev structure
> KVM: s390: pci: do initial setup for AEN interpretation
> KVM: s390: pci: enable host forwarding of Adapter Event Notifications
> KVM: s390: expose the guest zPCI interpretation facility
> KVM: s390: expose the guest Adapter Interruption Source ID facility
> KVM: s390: expose guest Adapter Event Notification Interpretation
> facility
> KVM: s390: mechanism to enable guest zPCI Interpretation
> KVM: s390: pci: provide routines for enabling/disabling interpretation
> KVM: s390: pci: provide routines for enabling/disabling interrupt
> forwarding
> KVM: s390: pci: provide routines for enabling/disabling IOAT assist
> KVM: s390: pci: handle refresh of PCI translations
> KVM: s390: intercept the rpcit instruction
> vfio/pci: re-introduce CONFIG_VFIO_PCI_ZDEV
> vfio-pci/zdev: wire up group notifier
> vfio-pci/zdev: wire up zPCI interpretive execution support
> vfio-pci/zdev: wire up zPCI adapter interrupt forwarding support
> vfio-pci/zdev: wire up zPCI IOAT assist support
> vfio-pci/zdev: add DTSM to clp group capability
> KVM: s390: introduce CPU feature for zPCI Interpretation
> MAINTAINERS: additional files related kvm s390 pci passthrough
>
> MAINTAINERS | 2 +
> arch/s390/include/asm/airq.h | 7 +-
> arch/s390/include/asm/kvm_host.h | 5 +
> arch/s390/include/asm/kvm_pci.h | 62 +++
> arch/s390/include/asm/pci.h | 13 +
> arch/s390/include/asm/pci_clp.h | 11 +-
> arch/s390/include/asm/pci_dma.h | 3 +
> arch/s390/include/asm/pci_insn.h | 29 +-
> arch/s390/include/asm/sclp.h | 4 +
> arch/s390/include/asm/tpi.h | 14 +
> arch/s390/include/uapi/asm/kvm.h | 1 +
> arch/s390/kvm/Makefile | 2 +-
> arch/s390/kvm/interrupt.c | 97 +++-
> arch/s390/kvm/kvm-s390.c | 65 ++-
> arch/s390/kvm/kvm-s390.h | 10 +
> arch/s390/kvm/pci.c | 784 +++++++++++++++++++++++++++++++
> arch/s390/kvm/pci.h | 59 +++
> arch/s390/kvm/priv.c | 41 ++
> arch/s390/pci/pci.c | 47 ++
> arch/s390/pci/pci_clp.c | 19 +-
> arch/s390/pci/pci_dma.c | 1 +
> arch/s390/pci/pci_insn.c | 5 +-
> arch/s390/pci/pci_irq.c | 50 +-
> drivers/s390/char/sclp_early.c | 4 +
> drivers/s390/cio/airq.c | 12 +-
> drivers/s390/cio/qdio_thinint.c | 6 +-
> drivers/s390/crypto/ap_bus.c | 9 +-
> drivers/s390/virtio/virtio_ccw.c | 6 +-
> drivers/vfio/pci/Kconfig | 11 +
> drivers/vfio/pci/Makefile | 2 +-
> drivers/vfio/pci/vfio_pci_core.c | 8 +
> drivers/vfio/pci/vfio_pci_zdev.c | 292 +++++++++++-
> include/linux/vfio_pci_core.h | 44 +-
> include/uapi/linux/vfio.h | 22 +
> include/uapi/linux/vfio_zdev.h | 51 ++
> 35 files changed, 1738 insertions(+), 60 deletions(-)
> create mode 100644 arch/s390/include/asm/kvm_pci.h
> create mode 100644 arch/s390/kvm/pci.c
> create mode 100644 arch/s390/kvm/pci.h
>