[PATCH v5 00/10] KVM: s390: More memory management fixes

Claudio Imbrenda posted 10 patches 1 week ago
arch/s390/kvm/dat.c      | 100 ++++--------------------
arch/s390/kvm/dat.h      |  23 +++---
arch/s390/kvm/gaccess.c  |  71 ++++++++++++-----
arch/s390/kvm/gmap.c     | 160 ++++++++++++++++++++++++++++-----------
arch/s390/kvm/gmap.h     |  33 +++++---
arch/s390/kvm/kvm-s390.c |  18 ++++-
arch/s390/kvm/vsie.c     |   4 +-
7 files changed, 231 insertions(+), 178 deletions(-)
[PATCH v5 00/10] KVM: s390: More memory management fixes
Posted by Claudio Imbrenda 1 week ago
This series fixes some bugs that have been recently introduced with the
big gmap rewrite.

Most of the fixes are related to vSIE (nested guests), although some
are more general. The last patch fixes an issue introduced last year.

v4->v5
* Use gmap_crstep_xchg_atomic() in gmap_handle_minor_crste_fault()
  instead of dat_crstep_xchg_atomic()
* Check the special bit in the new pte and crste, instead of the old
  one in _gmap_crstep_xchg_atomic() and in _gmap_ptep_xchg()
* Fix handling of pgste spinlock
* Handle more unshadowing events in _do_shadow_pte() and in
  _do_shadow_crste()

v3->v4
* Reorder the patches a little
* Fix dat_set_pn_crste() to only update its parameter n in case of
  success
* Fix _do_shadow_pte() and _do_shadow_crste() to return -EOPNOTSUPP
  when a nested guest would try to write-map guest-read-only memory.
* Move all host page dirtying logic into _gmap_ptep_xchg() and 
  _gmap_crstep_xchg_atomic()
* Make sure gl is not used uninitialized in _gaccess_do_shadow()
* Introduce new s softbit for crstes, analogous to ptes, and use it to
  determine whether to set a page a dirty

v2->v3
* fix a typo in the code (missin negation in patch 2)
* fix pre-existing alignment issue in _gmap_crstep_xchg_atomic()
* fix nested guest memory shadowing
* properly handle another possible place in _do_shadow_crste() where an
  unshadowing event could be triggered
* fix _gaccess_do_shadow() to properly handle the case of real-address
  asces for the nested guest
* fix some typos

v1->v2
* propagate vsie notification bit when splitting a large page
* replace gmap_crstep_xchg() with gmap_crstep_xchg_atomic(); let the
  callers properly deal with races
* do not attempt to protect guest page table when the nested guest is
  running in a real address space
* fix return value of KVM_S390_VCPU_FAULT in case of error

Claudio Imbrenda (10):
  KVM: s390: vsie: Fix dat_split_ste()
  KVM: s390: Remove non-atomic dat_crstep_xchg()
  KVM: s390: vsie: Fix check for pre-existing shadow mapping
  KVM: s390: Fix gmap_link()
  KVM: s390: Correctly handle guest mappings without struct page
  KVM: s390: vsie: Fix nested guest memory shadowing
  KVM: s390: vsie: Fix refcount overflow for shadow gmaps
  KVM: s390: vsie: Fix unshadowing while shadowing
  KVM: s390: vsie: Fix guest page tables protection
  KVM: s390: Fix KVM_S390_VCPU_FAULT ioctl

 arch/s390/kvm/dat.c      | 100 ++++--------------------
 arch/s390/kvm/dat.h      |  23 +++---
 arch/s390/kvm/gaccess.c  |  71 ++++++++++++-----
 arch/s390/kvm/gmap.c     | 160 ++++++++++++++++++++++++++++-----------
 arch/s390/kvm/gmap.h     |  33 +++++---
 arch/s390/kvm/kvm-s390.c |  18 ++++-
 arch/s390/kvm/vsie.c     |   4 +-
 7 files changed, 231 insertions(+), 178 deletions(-)

-- 
2.53.0
Re: [PATCH v5 00/10] KVM: s390: More memory management fixes
Posted by Christian Borntraeger 1 week ago
Am 26.03.26 um 14:17 schrieb Claudio Imbrenda:
> This series fixes some bugs that have been recently introduced with the
> big gmap rewrite.
> 
> Most of the fixes are related to vSIE (nested guests), although some
> are more general. The last patch fixes an issue introduced last year.
> 
> v4->v5
> * Use gmap_crstep_xchg_atomic() in gmap_handle_minor_crste_fault()
>    instead of dat_crstep_xchg_atomic()
> * Check the special bit in the new pte and crste, instead of the old
>    one in _gmap_crstep_xchg_atomic() and in _gmap_ptep_xchg()
> * Fix handling of pgste spinlock
> * Handle more unshadowing events in _do_shadow_pte() and in
>    _do_shadow_crste()

Lets add this version to kvms390/master. This already is much much better
than the current 7.0-rc state. It is hard to review the differences and
we want to get these fixes queued asap. kvms390/master is picked up by
next so we will have CI coverage inside (and outside) of IBM.

If something is really broken we can refresh kvms390/master, otherwise
we can still do followup patches.