mbox series

[v8,0/8] s390x/pci: zPCI interpretation support

Message ID 20220902172737.170349-1-mjrosato@linux.ibm.com (mailing list archive)
Headers show
Series s390x/pci: zPCI interpretation support | expand

Message

Matthew Rosato Sept. 2, 2022, 5:27 p.m. UTC
Now that the kernel series [1] is merged and the freeze is over, here is a
refresh of the zPCI interpretation series. 
                                                           
For QEMU, the majority of the work in enabling instruction interpretation
is handled via SHM bit settings (to indicate to firmware whether or not
interpretive execution facilities are to be used) + a new KVM ioctl is
used to setup firmware-interpreted forwarding of Adapter Event
Notifications.

This series also adds a new, optional 'interpret' parameter to zpci which
can be used to disable interpretation support (interpret=off) as well as
an 'forwarding_assist' parameter to determine whether or not the firmware
assist will be used for adapter event delivery (default when
interpretation is in use) or whether the host will be responsible for
delivering all adapter event notifications (forwarding_assist=off).

The zpcii-disable machine property is added to allow disabling use of
zPCI interpretation facilities for a guest. This property is set to on
for older (pre-7.2 compat machines), but defaults to off for 7.2 and
newer. This allows newer machines to use interpretation by default if
the necessary kernel interfaces and hardware facilities are available,
but also provides a mechanism for disabling interpretation completely
for debug purposes.

As a consequence of implementing zPCI interpretation, ISM devices now
become eligible for passthrough (but only when zPCI interpretation is
available).

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.

Changelog v7->v8:
- Rebase onto 7.1.0
- Move compat machine changes for patch 8
- Refresh kernel header sync to 6.0-rc3                     

[1] https://lore.kernel.org/kvm/20220606203325.110625-1-mjrosato@linux.ibm.com/

Matthew Rosato (8):
  linux-headers: update to 6.0-rc3
  s390x/pci: add routine to get host function handle from CLP info
  s390x/pci: enable for load/store intepretation
  s390x/pci: don't fence interpreted devices without MSI-X
  s390x/pci: enable adapter event notification for interpreted devices
  s390x/pci: let intercept devices have separate PCI groups
  s390x/pci: reflect proper maxstbl for groups of interpreted devices
  s390x/s390-virtio-ccw: add zpcii-disable machine property

 hw/s390x/meson.build                          |   1 +
 hw/s390x/s390-pci-bus.c                       | 111 ++++++++++-
 hw/s390x/s390-pci-inst.c                      |  56 +++++-
 hw/s390x/s390-pci-kvm.c                       |  54 ++++++
 hw/s390x/s390-pci-vfio.c                      | 129 +++++++++++--
 hw/s390x/s390-virtio-ccw.c                    |  25 +++
 include/hw/s390x/s390-pci-bus.h               |   8 +-
 include/hw/s390x/s390-pci-kvm.h               |  38 ++++
 include/hw/s390x/s390-pci-vfio.h              |   5 +
 include/hw/s390x/s390-virtio-ccw.h            |   1 +
 include/standard-headers/asm-x86/bootparam.h  |   7 +-
 include/standard-headers/drm/drm_fourcc.h     |  73 +++++++-
 include/standard-headers/linux/ethtool.h      |  29 +--
 include/standard-headers/linux/input.h        |  12 +-
 include/standard-headers/linux/pci_regs.h     |  30 ++-
 include/standard-headers/linux/vhost_types.h  |  17 +-
 include/standard-headers/linux/virtio_9p.h    |   2 +-
 .../standard-headers/linux/virtio_config.h    |   7 +-
 include/standard-headers/linux/virtio_ids.h   |  14 +-
 include/standard-headers/linux/virtio_net.h   |  34 +++-
 include/standard-headers/linux/virtio_pci.h   |   2 +
 include/standard-headers/linux/virtio_ring.h  |  16 +-
 linux-headers/asm-arm64/kvm.h                 |  33 +++-
 linux-headers/asm-generic/unistd.h            |   4 +-
 linux-headers/asm-riscv/kvm.h                 |  22 +++
 linux-headers/asm-riscv/unistd.h              |   3 +-
 linux-headers/asm-s390/kvm.h                  |   1 +
 linux-headers/asm-x86/kvm.h                   |  33 ++--
 linux-headers/asm-x86/mman.h                  |  14 --
 linux-headers/linux/kvm.h                     | 172 +++++++++++++++++-
 linux-headers/linux/userfaultfd.h             |  10 +-
 linux-headers/linux/vduse.h                   |  47 +++++
 linux-headers/linux/vfio.h                    |   4 +-
 linux-headers/linux/vfio_zdev.h               |   7 +
 linux-headers/linux/vhost.h                   |  35 +++-
 qemu-options.hx                               |   8 +-
 target/s390x/kvm/kvm.c                        |   7 +
 target/s390x/kvm/kvm_s390x.h                  |   1 +
 util/qemu-config.c                            |   4 +
 39 files changed, 955 insertions(+), 121 deletions(-)
 create mode 100644 hw/s390x/s390-pci-kvm.c
 create mode 100644 include/hw/s390x/s390-pci-kvm.h

Comments

Thomas Huth Sept. 23, 2022, 6:59 p.m. UTC | #1
On 02/09/2022 19.27, Matthew Rosato wrote:
> Now that the kernel series [1] is merged and the freeze is over, here is a
> refresh of the zPCI interpretation series.
>                                                             
> For QEMU, the majority of the work in enabling instruction interpretation
> is handled via SHM bit settings (to indicate to firmware whether or not
> interpretive execution facilities are to be used) + a new KVM ioctl is
> used to setup firmware-interpreted forwarding of Adapter Event
> Notifications.
> 
> This series also adds a new, optional 'interpret' parameter to zpci which
> can be used to disable interpretation support (interpret=off) as well as
> an 'forwarding_assist' parameter to determine whether or not the firmware
> assist will be used for adapter event delivery (default when
> interpretation is in use) or whether the host will be responsible for
> delivering all adapter event notifications (forwarding_assist=off).
> 
> The zpcii-disable machine property is added to allow disabling use of
> zPCI interpretation facilities for a guest. This property is set to on
> for older (pre-7.2 compat machines), but defaults to off for 7.2 and
> newer. This allows newer machines to use interpretation by default if
> the necessary kernel interfaces and hardware facilities are available,
> but also provides a mechanism for disabling interpretation completely
> for debug purposes.
> 
> As a consequence of implementing zPCI interpretation, ISM devices now
> become eligible for passthrough (but only when zPCI interpretation is
> available).
> 
>  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.
> 
> Changelog v7->v8:
> - Rebase onto 7.1.0
> - Move compat machine changes for patch 8
> - Refresh kernel header sync to 6.0-rc3
> 
> [1] https://lore.kernel.org/kvm/20220606203325.110625-1-mjrosato@linux.ibm.com/
> 
> Matthew Rosato (8):
>    linux-headers: update to 6.0-rc3
>    s390x/pci: add routine to get host function handle from CLP info
>    s390x/pci: enable for load/store intepretation

Typo in that subject, should be "interpretation" instead of "intepretation".

>    s390x/pci: don't fence interpreted devices without MSI-X
>    s390x/pci: enable adapter event notification for interpreted devices
>    s390x/pci: let intercept devices have separate PCI groups
>    s390x/pci: reflect proper maxstbl for groups of interpreted devices
>    s390x/s390-virtio-ccw: add zpcii-disable machine property

Thanks, patch series looks basically fine to me now. Some nits here and 
there, so if you could still fix those up and send a v9, that would be 
great! (If you are completely out of spare time for that, let me know, then 
I can also try to fix those up on my own when picking up the patches)

  Thomas