[PATCH v2 00/20] KVM: s390: vsie: Add VSIE SIGP ECALL and SRSI Interpretation
Christoph Schlameuss <[email protected]>
| Newsgroups | org.kernel.vger.linux-s390,org.kernel.vger.kvm |
|---|---|
| Message-ID | <[email protected]> |
In the IBM Z machine generation z17 the s390x architecture does have a VSIE Interpretation Extension Facility to improve guest-3 guest performance. To exploit the machine support the guest-1 KVM needs to create and maintain shadow structures pointing to the original state descriptions and system control areas of currently running guest-3 configurations. These pointers are followed by the machines firmware and modifications of the original SCA for guest-3 (located in guest-2) are monitored and handled by firmware. This results in fewer VSIE exits. The SIGP orders EXTERNAL CALL (2) and SENSE RUNNING STATUS (21) can be handled if requested by the setting the ECA_SIGPI respective ECB_SRSI state description bits. The series includes some changes to the non ssca path as well. - original SCA pinning is lazily kept after exiting vsie - addr_to_page radix_tree usage is replaced by xarray Due to no ESCA support in old g2 kernel and qemu the patches do introduce a limitation for setups with a unaware g2 when g1 KVM has ssca=1 the g2 kernel will report KVM_CAP_MAX_VCPUS=64. --- Changes in v2: Changes requested by Janosch (Thanks!) - First 3 commits split out to its own vsie-cleanup series - Re-split main code into commits a bit differently and hopefully easier - Renamed sclp bit to has_vsie_interp_extf - Renamed module parameter to ssca - Renamed arch struct variable to ssca - Add head and tail struct groups in struct vsie_sca - Make writes to ssca atomic - Add patch introducing SCA_ALIGNMENT_SHIFT - Force vsie_sca->ssca offset to 0 instead of complex assertion - Do not error out on scb_addr 0 (architecture compliant) - move VSIE_PAGE_PINNED const - decrease sca_o_nr_pages variable size - Fixed Sashiko findings - allow 4 page esca if properly aligned - put sca on error in get_vsie_sca() - force reshadow on _shadow_sca() fail - unpin when destroy vsie_page - fix locking in sca change cases - fix writeback of SCAO in unpin_blocks() if g3 does not use 64bscao - fix err goto from shadow_sca() - set validity on shadow sca from pin_blocks() - remove vsie_page mention from comment - fix get_sca_entry_addr() for sca pages 2-5 - fixed commit message, fix double read conditions for configuration values - use xarray insert instead of store and change alloc flags to *_ACCOUNT - fix double read conditions for max_sc* configuration values - empty xarrays on destroy - correct stat counter increments - Link to v1: https://lore.kernel.org/r/[email protected] Changes from RFC: - fix locking and vsie_page reuse to run stable - pull some methods out of the main patch to simplify the review - rework kvm_s390_handle_vsie() to allocate vsie_sca first to store vsie_page references directly - move sie_uses_esca() to patch 1 as it is used there as well - thanks Eric - change pointers in {read,write}_scao() to generic 'unsigned long' to not imply gpa or hpa as it can in fact be either depending on the situation - thanks Claudio - simplify code in sca_mcn_equals() using memcmp() - thanks Janosch - copy mcn into vsie_sca using memcpy() instead of loop - only shadow sca if the g3 wants and can to use sigpif - thanks Janosch - change vsie_sca->ssca from pointer to embedded struct to as vsie_sca is only needed when we actually also want the ssca - fix kvm_s390_handle_vsie() cleanup order - rename sca variables to vsie_sca - cleanup error paths - adjust some comments Cc: Alexander Gordeev <[email protected]> Cc: Christian Borntraeger <[email protected]> Cc: Claudio Imbrenda <[email protected]> Cc: David Hildenbrand <[email protected]> Cc: Eric Farman <[email protected]> Cc: Heiko Carstens <[email protected]> Cc: Janosch Frank <[email protected]> Cc: Nico Boehr <[email protected]> Cc: Paolo Bonzini <[email protected]> Cc: Shuah Khan <[email protected]> Cc: Sven Schnelle <[email protected]> Cc: Vasily Gorbik <[email protected]> To: [email protected] To: [email protected] --- Christoph Schlameuss (20): KVM: s390: vsie: Add SCAO read and write helpers KVM: s390: vsie: Move SCAO validation into a function KVM: s390: vsie: Add vsie_interp_extf detection KVM: s390: vsie: Add ssca_block and ssca_entry structs KVM: s390: vsie: Move pin/unpin_scb methods KVM: s390: vsie: Move pin/unpin guest page KVM: s390: vsie: Move release/acquire gmap shadow KVM: s390: vsie: Create helpers to alloc and free vsie_pages KVM: s390: vsie: Replace radix_tree with xarray addr_to_page KVM: s390: vsie: Add helper to release gmap shadow KVM: s390: vsie: Lazily keep original scb pinned after vsie exit KVM: s390: vsie: Add helper to pin and unpin multiple guest pages KVM: s390: vsie: Add struct vsie_sca with pin and unpin methods KVM: s390: vsie: Shadow VSIE SCA in guest-1 KVM: s390: vsie: Guard against invalid CPU address KVM: s390: vsie: Allow guest-3 cpu add and remove with ssca KVM: s390: vsie: Add VSIE max shadow configuration KVM: s390: vsie: Add VSIE shadow stat counters KVM: s390: vsie: Create minimal scb shadows for not running g3 blocks KVM: s390: vsie: Enable use of VSIE SSCA arch/s390/include/asm/kvm_host.h | 28 +- arch/s390/include/asm/kvm_host_types.h | 27 +- arch/s390/include/asm/sclp.h | 1 + arch/s390/kvm/kvm-s390.c | 15 +- arch/s390/kvm/vsie.c | 1232 +++++++++++++++++++----- drivers/s390/char/sclp_early.c | 1 + tools/testing/selftests/kvm/include/s390/sie.h | 2 +- 7 files changed, 1054 insertions(+), 252 deletions(-) --- base-commit: db2ddb87143519e20a95aa36c60b36107b736a58 change-id: 20251113-vsie-sigpi-3de01243efd6 prerequisite-change-id: 20260716-vsie-cleanup-202607-8690ba7ac3ea:v1 prerequisite-patch-id: 0af599c91d3f2d10c1d2918b6de8e84d593eae26 prerequisite-patch-id: 98bb44791da9135bd417bd9114fe301c19c13895 prerequisite-patch-id: 11a133c07f1d30a48898705db1c21e62d53f8f3b prerequisite-patch-id: 02bb7b6f57ac045c9b2d37ba0177145a65337e59 prerequisite-patch-id: ef7e3c6deef90a8c91753eea4d4f50cc83204109 prerequisite-patch-id: 4b93b72638c82737b11db6792f365a4f27f8083a Best regards, -- Christoph Schlameuss <[email protected]>