]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
Merge tag 'kvmarm-6.18' of git://git.kernel.org/pub/scm/linux/kernel/git/kvmarm/kvmar...
authorPaolo Bonzini <pbonzini@redhat.com>
Tue, 30 Sep 2025 17:23:28 +0000 (13:23 -0400)
committerPaolo Bonzini <pbonzini@redhat.com>
Tue, 30 Sep 2025 17:23:28 +0000 (13:23 -0400)
KVM/arm64 updates for 6.18

- Add support for FF-A 1.2 as the secure memory conduit for pKVM,
  allowing more registers to be used as part of the message payload.

- Change the way pKVM allocates its VM handles, making sure that the
  privileged hypervisor is never tricked into using uninitialised
  data.

- Speed up MMIO range registration by avoiding unnecessary RCU
  synchronisation, which results in VMs starting much quicker.

- Add the dump of the instruction stream when panic-ing in the EL2
  payload, just like the rest of the kernel has always done. This will
  hopefully help debugging non-VHE setups.

- Add 52bit PA support to the stage-1 page-table walker, and make use
  of it to populate the fault level reported to the guest on failing
  to translate a stage-1 walk.

- Add NV support to the GICv3-on-GICv5 emulation code, ensuring
  feature parity for guests, irrespective of the host platform.

- Fix some really ugly architecture problems when dealing with debug
  in a nested VM. This has some bad performance impacts, but is at
  least correct.

- Add enough infrastructure to be able to disable EL2 features and
  give effective values to the EL2 control registers. This then allows
  a bunch of features to be turned off, which helps cross-host
  migration.

- Large rework of the selftest infrastructure to allow most tests to
  transparently run at EL2. This is the first step towards enabling
  NV testing.

- Various fixes and improvements all over the map, including one BE
  fix, just in time for the removal of the feature.

12 files changed:
1  2 
arch/arm64/include/asm/kvm_host.h
arch/arm64/include/asm/kvm_pkvm.h
arch/arm64/kvm/arm.c
arch/arm64/kvm/debug.c
arch/arm64/kvm/mmu.c
arch/arm64/kvm/nested.c
arch/arm64/kvm/pkvm.c
arch/arm64/kvm/vgic/vgic-init.c
include/kvm/arm_vgic.h
include/linux/kvm_host.h
tools/testing/selftests/kvm/Makefile.kvm
virt/kvm/kvm_main.c

Simple merge
Simple merge
Simple merge
Simple merge
index 217767c89b90260fcac06f0db536847ac516d4d4,e574769b33309ed3278300a5326160af5260c4f2..7cc964af8d305313643d4ebffc53a69ff2ecff60
@@@ -1798,10 -1726,31 +1795,15 @@@ static int user_mem_abort(struct kvm_vc
        }
  
        if (exec_fault && s2_force_noncacheable)
-               return -ENOEXEC;
+               ret = -ENOEXEC;
+       if (ret) {
+               kvm_release_page_unused(page);
+               return ret;
+       }
  
 -      /*
 -       * Potentially reduce shadow S2 permissions to match the guest's own
 -       * S2. For exec faults, we'd only reach this point if the guest
 -       * actually allowed it (see kvm_s2_handle_perm_fault).
 -       *
 -       * Also encode the level of the original translation in the SW bits
 -       * of the leaf entry as a proxy for the span of that translation.
 -       * This will be retrieved on TLB invalidation from the guest and
 -       * used to limit the invalidation scope if a TTL hint or a range
 -       * isn't provided.
 -       */
 -      if (nested) {
 -              writable &= kvm_s2_trans_writable(nested);
 -              if (!kvm_s2_trans_readable(nested))
 -                      prot &= ~KVM_PGTABLE_PROT_R;
 -
 -              prot |= kvm_encode_nested_level(nested);
 -      }
 +      if (nested)
 +              adjust_nested_fault_perms(nested, &prot, &writable);
  
        kvm_fault_lock(kvm);
        pgt = vcpu->arch.hw_mmu->pgt;
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge