]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
Merge tag 'arm64-upstream' of git://git.kernel.org/pub/scm/linux/kernel/git/arm64...
authorLinus Torvalds <torvalds@linux-foundation.org>
Tue, 28 Jan 2025 17:01:36 +0000 (09:01 -0800)
committerLinus Torvalds <torvalds@linux-foundation.org>
Tue, 28 Jan 2025 17:01:36 +0000 (09:01 -0800)
Pull KVM/arm64 updates from Will Deacon:
 "New features:

   - Support for non-protected guest in protected mode, achieving near
     feature parity with the non-protected mode

   - Support for the EL2 timers as part of the ongoing NV support

   - Allow control of hardware tracing for nVHE/hVHE

  Improvements, fixes and cleanups:

   - Massive cleanup of the debug infrastructure, making it a bit less
     awkward and definitely easier to maintain. This should pave the way
     for further optimisations

   - Complete rewrite of pKVM's fixed-feature infrastructure, aligning
     it with the rest of KVM and making the code easier to follow

   - Large simplification of pKVM's memory protection infrastructure

   - Better handling of RES0/RES1 fields for memory-backed system
     registers

   - Add a workaround for Qualcomm's Snapdragon X CPUs, which suffer
     from a pretty nasty timer bug

   - Small collection of cleanups and low-impact fixes"

* tag 'arm64-upstream' of git://git.kernel.org/pub/scm/linux/kernel/git/arm64/linux: (87 commits)
  arm64/sysreg: Get rid of TRFCR_ELx SysregFields
  KVM: arm64: nv: Fix doc header layout for timers
  KVM: arm64: nv: Apply RESx settings to sysreg reset values
  KVM: arm64: nv: Always evaluate HCR_EL2 using sanitising accessors
  KVM: arm64: Fix selftests after sysreg field name update
  coresight: Pass guest TRFCR value to KVM
  KVM: arm64: Support trace filtering for guests
  KVM: arm64: coresight: Give TRBE enabled state to KVM
  coresight: trbe: Remove redundant disable call
  arm64/sysreg/tools: Move TRFCR definitions to sysreg
  tools: arm64: Update sysreg.h header files
  KVM: arm64: Drop pkvm_mem_transition for host/hyp donations
  KVM: arm64: Drop pkvm_mem_transition for host/hyp sharing
  KVM: arm64: Drop pkvm_mem_transition for FF-A
  KVM: arm64: Explicitly handle BRBE traps as UNDEFINED
  KVM: arm64: vgic: Use str_enabled_disabled() in vgic_v3_probe()
  arm64: kvm: Introduce nvhe stack size constants
  KVM: arm64: Fix nVHE stacktrace VA bits mask
  KVM: arm64: Fix FEAT_MTE in pKVM
  Documentation: Update the behaviour of "kvm-arm.mode"
  ...

1  2 
Documentation/admin-guide/kernel-parameters.txt
arch/arm64/kvm/arm.c
arch/arm64/kvm/hyp/pgtable.c
arch/arm64/kvm/sys_regs.c
arch/arm64/tools/sysreg
tools/testing/selftests/kvm/arm64/aarch32_id_regs.c
tools/testing/selftests/kvm/arm64/set_id_regs.c

Simple merge
Simple merge
index e4749ecbcd79c8e748cb623ab923d96ef04b30ae,526d66f24e34aea2eb62415f14e9cdb3858e6484..f6cd1ea7fb55e509f4faae067eb57ee7e24e8d29
@@@ -1599,12 -1608,10 +1608,13 @@@ static u64 __kvm_read_sanitised_id_reg(
                if (!vcpu_has_ptrauth(vcpu))
                        val &= ~(ARM64_FEATURE_MASK(ID_AA64ISAR2_EL1_APA3) |
                                 ARM64_FEATURE_MASK(ID_AA64ISAR2_EL1_GPA3));
-               if (!cpus_have_final_cap(ARM64_HAS_WFXT))
+               if (!cpus_have_final_cap(ARM64_HAS_WFXT) ||
+                   has_broken_cntvoff())
                        val &= ~ARM64_FEATURE_MASK(ID_AA64ISAR2_EL1_WFxT);
                break;
 +      case SYS_ID_AA64ISAR3_EL1:
 +              val &= ID_AA64ISAR3_EL1_FPRCVT | ID_AA64ISAR3_EL1_FAMINMAX;
 +              break;
        case SYS_ID_AA64MMFR2_EL1:
                val &= ~ID_AA64MMFR2_EL1_CCIDX_MASK;
                break;
Simple merge
index 447d61cae4db119029dd4278ab23ad7afe6c51cb,bd182be48c1b1530e7e2574b3bca0919d58e4228..cef8f7323ceb8842145d6678f5106fe839c7fd8e
@@@ -144,10 -144,10 +144,10 @@@ static bool vcpu_aarch64_only(struct kv
  {
        uint64_t val, el0;
  
 -      vcpu_get_reg(vcpu, KVM_ARM64_SYS_REG(SYS_ID_AA64PFR0_EL1), &val);
 +      val = vcpu_get_reg(vcpu, KVM_ARM64_SYS_REG(SYS_ID_AA64PFR0_EL1));
  
        el0 = FIELD_GET(ARM64_FEATURE_MASK(ID_AA64PFR0_EL1_EL0), val);
-       return el0 == ID_AA64PFR0_EL1_ELx_64BIT_ONLY;
+       return el0 == ID_AA64PFR0_EL1_EL0_IMP;
  }
  
  int main(void)
index 3dd85ce8551c6a1811757f4e950d60ef3b5fc3cc,6b190654e0eae7a2650ac8a0258041607a9f6f1a..217541fe653601a82697134c8d773e901a205cfe
@@@ -664,9 -664,9 +664,9 @@@ int main(void
        vm = vm_create_with_one_vcpu(&vcpu, guest_code);
  
        /* Check for AARCH64 only system */
 -      vcpu_get_reg(vcpu, KVM_ARM64_SYS_REG(SYS_ID_AA64PFR0_EL1), &val);
 +      val = vcpu_get_reg(vcpu, KVM_ARM64_SYS_REG(SYS_ID_AA64PFR0_EL1));
        el0 = FIELD_GET(ARM64_FEATURE_MASK(ID_AA64PFR0_EL1_EL0), val);
-       aarch64_only = (el0 == ID_AA64PFR0_EL1_ELx_64BIT_ONLY);
+       aarch64_only = (el0 == ID_AA64PFR0_EL1_EL0_IMP);
  
        ksft_print_header();