• Linus Torvalds's avatar
    Merge tag 'for-linus' of git://git.kernel.org/pub/scm/virt/kvm/kvm · 6803bd79
    Linus Torvalds authored
    Pull kvm updates from Paolo Bonzini:
     "ARM:
    
       - Generalized infrastructure for 'writable' ID registers, effectively
         allowing userspace to opt-out of certain vCPU features for its
         guest
    
       - Optimization for vSGI injection, opportunistically compressing
         MPIDR to vCPU mapping into a table
    
       - Improvements to KVM's PMU emulation, allowing userspace to select
         the number of PMCs available to a VM
    
       - Guest support for memory operation instructions (FEAT_MOPS)
    
       - Cleanups to handling feature flags in KVM_ARM_VCPU_INIT, squashing
         bugs and getting rid of useless code
    
       - Changes to the way the SMCCC filter is constructed, avoiding wasted
         memory allocations when not in use
    
       - Load the stage-2 MMU context at vcpu_load() for VHE systems,
         reducing the overhead of errata mitigations
    
       - Miscellaneous kernel and selftest fixes
    
      LoongArch:
    
       - New architecture for kvm.
    
         The hardware uses the same model as x86, s390 and RISC-V, where
         guest/host mode is orthogonal to supervisor/user mode. The
         virtualization extensions are very similar to MIPS, therefore the
         code also has some similarities but it's been cleaned up to avoid
         some of the historical bogosities that are found in arch/mips. The
         kernel emulates MMU, timer and CSR accesses, while interrupt
         controllers are only emulated in userspace, at least for now.
    
      RISC-V:
    
       - Support for the Smstateen and Zicond extensions
    
       - Support for virtualizing senvcfg
    
       - Support for virtualized SBI debug console (DBCN)
    
      S390:
    
       - Nested page table management can be monitored through tracepoints
         and statistics
    
      x86:
    
       - Fix incorrect handling of VMX posted interrupt descriptor in
         KVM_SET_LAPIC, which could result in a dropped timer IRQ
    
       - Avoid WARN on systems with Intel IPI virtualization
    
       - Add CONFIG_KVM_MAX_NR_VCPUS, to allow supporting up to 4096 vCPUs
         without forcing more common use cases to eat the extra memory
         overhead.
    
       - Add virtualization support for AMD SRSO mitigation (IBPB_BRTYPE and
         SBPB, aka Selective Branch Predictor Barrier).
    
       - Fix a bug where restoring a vCPU snapshot that was taken within 1
         second of creating the original vCPU would cause KVM to try to
         synchronize the vCPU's TSC and thus clobber the correct TSC being
         set by userspace.
    
       - Compute guest wall clock using a single TSC read to avoid
         generating an inaccurate time, e.g. if the vCPU is preempted
         between multiple TSC reads.
    
       - "Virtualize" HWCR.TscFreqSel to make Linux guests happy, which
         complain about a "Firmware Bug" if the bit isn't set for select
         F/M/S combos. Likewise "virtualize" (ignore) MSR_AMD64_TW_CFG to
         appease Windows Server 2022.
    
       - Don't apply side effects to Hyper-V's synthetic timer on writes
         from userspace to fix an issue where the auto-enable behavior can
         trigger spurious interrupts, i.e. do auto-enabling only for guest
         writes.
    
       - Remove an unnecessary kick of all vCPUs when synchronizing the
         dirty log without PML enabled.
    
       - Advertise "support" for non-serializing FS/GS base MSR writes as
         appropriate.
    
       - Harden the fast page fault path to guard against encountering an
         invalid root when walking SPTEs.
    
       - Omit "struct kvm_vcpu_xen" entirely when CONFIG_KVM_XEN=n.
    
       - Use the fast path directly from the timer callback when delivering
         Xen timer events, instead of waiting for the next iteration of the
         run loop. This was not done so far because previously proposed code
         had races, but now care is taken to stop the hrtimer at critical
         points such as restarting the timer or saving the timer information
         for userspace.
    
       - Follow the lead of upstream Xen and ignore the VCPU_SSHOTTMR_future
         flag.
    
       - Optimize injection of PMU interrupts that are simultaneous with
         NMIs.
    
       - Usual handful of fixes for typos and other warts.
    
      x86 - MTRR/PAT fixes and optimizations:
    
       - Clean up code that deals with honoring guest MTRRs when the VM has
         non-coherent DMA and host MTRRs are ignored, i.e. EPT is enabled.
    
       - Zap EPT entries when non-coherent DMA assignment stops/start to
         prevent using stale entries with the wrong memtype.
    
       - Don't ignore guest PAT for CR0.CD=1 && KVM_X86_QUIRK_CD_NW_CLEARED=y
    
         This was done as a workaround for virtual machine BIOSes that did
         not bother to clear CR0.CD (because ancient KVM/QEMU did not bother
         to set it, in turn), and there's zero reason to extend the quirk to
         also ignore guest PAT.
    
      x86 - SEV fixes:
    
       - Report KVM_EXIT_SHUTDOWN instead of EINVAL if KVM intercepts
         SHUTDOWN while running an SEV-ES guest.
    
       - Clean up the recognition of emulation failures on SEV guests, when
         KVM would like to "skip" the instruction but it had already been
         partially emulated. This makes it possible to drop a hack that
         second guessed the (insufficient) information provided by the
         emulator, and just do the right thing.
    
      Documentation:
    
       - Various updates and fixes, mostly for x86
    
       - MTRR and PAT fixes and optimizations"
    
    * tag 'for-linus' of git://git.kernel.org/pub/scm/virt/kvm/kvm: (164 commits)
      KVM: selftests: Avoid using forced target for generating arm64 headers
      tools headers arm64: Fix references to top srcdir in Makefile
      KVM: arm64: Add tracepoint for MMIO accesses where ISV==0
      KVM: arm64: selftest: Perform ISB before reading PAR_EL1
      KVM: arm64: selftest: Add the missing .guest_prepare()
      KVM: arm64: Always invalidate TLB for stage-2 permission faults
      KVM: x86: Service NMI requests after PMI requests in VM-Enter path
      KVM: arm64: Handle AArch32 SPSR_{irq,abt,und,fiq} as RAZ/WI
      KVM: arm64: Do not let a L1 hypervisor access the *32_EL2 sysregs
      KVM: arm64: Refine _EL2 system register list that require trap reinjection
      arm64: Add missing _EL2 encodings
      arm64: Add missing _EL12 encodings
      KVM: selftests: aarch64: vPMU test for validating user accesses
      KVM: selftests: aarch64: vPMU register test for unimplemented counters
      KVM: selftests: aarch64: vPMU register test for implemented counters
      KVM: selftests: aarch64: Introduce vpmu_counter_access test
      tools: Import arm_pmuv3.h
      KVM: arm64: PMU: Allow userspace to limit PMCR_EL0.N for the guest
      KVM: arm64: Sanitize PM{C,I}NTEN{SET,CLR}, PMOVS{SET,CLR} before first run
      KVM: arm64: Add {get,set}_user for PM{C,I}NTEN{SET,CLR}, PMOVS{SET,CLR}
      ...
    6803bd79
pgtable.c 39.9 KB