• Linus Torvalds's avatar
    Merge tag 'for-linus' of git://git.kernel.org/pub/scm/virt/kvm/kvm · 8fa590bf
    Linus Torvalds authored
    Pull kvm updates from Paolo Bonzini:
     "ARM64:
    
       - Enable the per-vcpu dirty-ring tracking mechanism, together with an
         option to keep the good old dirty log around for pages that are
         dirtied by something other than a vcpu.
    
       - Switch to the relaxed parallel fault handling, using RCU to delay
         page table reclaim and giving better performance under load.
    
       - Relax the MTE ABI, allowing a VMM to use the MAP_SHARED mapping
         option, which multi-process VMMs such as crosvm rely on (see merge
         commit 382b5b87: "Fix a number of issues with MTE, such as
         races on the tags being initialised vs the PG_mte_tagged flag as
         well as the lack of support for VM_SHARED when KVM is involved.
         Patches from Catalin Marinas and Peter Collingbourne").
    
       - Merge the pKVM shadow vcpu state tracking that allows the
         hypervisor to have its own view of a vcpu, keeping that state
         private.
    
       - Add support for the PMUv3p5 architecture revision, bringing support
         for 64bit counters on systems that support it, and fix the
         no-quite-compliant CHAIN-ed counter support for the machines that
         actually exist out there.
    
       - Fix a handful of minor issues around 52bit VA/PA support (64kB
         pages only) as a prefix of the oncoming support for 4kB and 16kB
         pages.
    
       - Pick a small set of documentation and spelling fixes, because no
         good merge window would be complete without those.
    
      s390:
    
       - Second batch of the lazy destroy patches
    
       - First batch of KVM changes for kernel virtual != physical address
         support
    
       - Removal of a unused function
    
      x86:
    
       - Allow compiling out SMM support
    
       - Cleanup and documentation of SMM state save area format
    
       - Preserve interrupt shadow in SMM state save area
    
       - Respond to generic signals during slow page faults
    
       - Fixes and optimizations for the non-executable huge page errata
         fix.
    
       - Reprogram all performance counters on PMU filter change
    
       - Cleanups to Hyper-V emulation and tests
    
       - Process Hyper-V TLB flushes from a nested guest (i.e. from a L2
         guest running on top of a L1 Hyper-V hypervisor)
    
       - Advertise several new Intel features
    
       - x86 Xen-for-KVM:
    
          - Allow the Xen runstate information to cross a page boundary
    
          - Allow XEN_RUNSTATE_UPDATE flag behaviour to be configured
    
          - Add support for 32-bit guests in SCHEDOP_poll
    
       - Notable x86 fixes and cleanups:
    
          - One-off fixes for various emulation flows (SGX, VMXON, NRIPS=0).
    
          - Reinstate IBPB on emulated VM-Exit that was incorrectly dropped
            a few years back when eliminating unnecessary barriers when
            switching between vmcs01 and vmcs02.
    
          - Clean up vmread_error_trampoline() to make it more obvious that
            params must be passed on the stack, even for x86-64.
    
          - Let userspace set all supported bits in MSR_IA32_FEAT_CTL
            irrespective of the current guest CPUID.
    
          - Fudge around a race with TSC refinement that results in KVM
            incorrectly thinking a guest needs TSC scaling when running on a
            CPU with a constant TSC, but no hardware-enumerated TSC
            frequency.
    
          - Advertise (on AMD) that the SMM_CTL MSR is not supported
    
          - Remove unnecessary exports
    
      Generic:
    
       - Support for responding to signals during page faults; introduces
         new FOLL_INTERRUPTIBLE flag that was reviewed by mm folks
    
      Selftests:
    
       - Fix an inverted check in the access tracking perf test, and restore
         support for asserting that there aren't too many idle pages when
         running on bare metal.
    
       - Fix build errors that occur in certain setups (unsure exactly what
         is unique about the problematic setup) due to glibc overriding
         static_assert() to a variant that requires a custom message.
    
       - Introduce actual atomics for clear/set_bit() in selftests
    
       - Add support for pinning vCPUs in dirty_log_perf_test.
    
       - Rename the so called "perf_util" framework to "memstress".
    
       - Add a lightweight psuedo RNG for guest use, and use it to randomize
         the access pattern and write vs. read percentage in the memstress
         tests.
    
       - Add a common ucall implementation; code dedup and pre-work for
         running SEV (and beyond) guests in selftests.
    
       - Provide a common constructor and arch hook, which will eventually
         be used by x86 to automatically select the right hypercall (AMD vs.
         Intel).
    
       - A bunch of added/enabled/fixed selftests for ARM64, covering
         memslots, breakpoints, stage-2 faults and access tracking.
    
       - x86-specific selftest changes:
    
          - Clean up x86's page table management.
    
          - Clean up and enhance the "smaller maxphyaddr" test, and add a
            related test to cover generic emulation failure.
    
          - Clean up the nEPT support checks.
    
          - Add X86_PROPERTY_* framework to retrieve multi-bit CPUID values.
    
          - Fix an ordering issue in the AMX test introduced by recent
            conversions to use kvm_cpu_has(), and harden the code to guard
            against similar bugs in the future. Anything that tiggers
            caching of KVM's supported CPUID, kvm_cpu_has() in this case,
            effectively hides opt-in XSAVE features if the caching occurs
            before the test opts in via prctl().
    
      Documentation:
    
       - Remove deleted ioctls from documentation
    
       - Clean up the docs for the x86 MSR filter.
    
       - Various fixes"
    
    * tag 'for-linus' of git://git.kernel.org/pub/scm/virt/kvm/kvm: (361 commits)
      KVM: x86: Add proper ReST tables for userspace MSR exits/flags
      KVM: selftests: Allocate ucall pool from MEM_REGION_DATA
      KVM: arm64: selftests: Align VA space allocator with TTBR0
      KVM: arm64: Fix benign bug with incorrect use of VA_BITS
      KVM: arm64: PMU: Fix period computation for 64bit counters with 32bit overflow
      KVM: x86: Advertise that the SMM_CTL MSR is not supported
      KVM: x86: remove unnecessary exports
      KVM: selftests: Fix spelling mistake "probabalistic" -> "probabilistic"
      tools: KVM: selftests: Convert clear/set_bit() to actual atomics
      tools: Drop "atomic_" prefix from atomic test_and_set_bit()
      tools: Drop conflicting non-atomic test_and_{clear,set}_bit() helpers
      KVM: selftests: Use non-atomic clear/set bit helpers in KVM tests
      perf tools: Use dedicated non-atomic clear/set bit helpers
      tools: Take @bit as an "unsigned long" in {clear,set}_bit() helpers
      KVM: arm64: selftests: Enable single-step without a "full" ucall()
      KVM: x86: fix APICv/x2AVIC disabled when vm reboot by itself
      KVM: Remove stale comment about KVM_REQ_UNHALT
      KVM: Add missing arch for KVM_CREATE_DEVICE and KVM_{SET,GET}_DEVICE_ATTR
      KVM: Reference to kvm_userspace_memory_region in doc and comments
      KVM: Delete all references to removed KVM_SET_MEMORY_ALIAS ioctl
      ...
    8fa590bf
mmu.c 192 KB