Merge tag 'for-linus' of git://git.kernel.org/pub/scm/virt/kvm/kvm
authorLinus Torvalds <torvalds@linux-foundation.org>
Tue, 7 Sep 2021 20:40:51 +0000 (13:40 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Tue, 7 Sep 2021 20:40:51 +0000 (13:40 -0700)
Pull KVM updates from Paolo Bonzini:
 "ARM:
   - Page ownership tracking between host EL1 and EL2
   - Rely on userspace page tables to create large stage-2 mappings
   - Fix incompatibility between pKVM and kmemleak
   - Fix the PMU reset state, and improve the performance of the virtual
     PMU
   - Move over to the generic KVM entry code
   - Address PSCI reset issues w.r.t. save/restore
   - Preliminary rework for the upcoming pKVM fixed feature
   - A bunch of MM cleanups
   - a vGIC fix for timer spurious interrupts
   - Various cleanups

  s390:
   - enable interpretation of specification exceptions
   - fix a vcpu_idx vs vcpu_id mixup

  x86:
   - fast (lockless) page fault support for the new MMU
   - new MMU now the default
   - increased maximum allowed VCPU count
   - allow inhibit IRQs on KVM_RUN while debugging guests
   - let Hyper-V-enabled guests run with virtualized LAPIC as long as
     they do not enable the Hyper-V "AutoEOI" feature
   - fixes and optimizations for the toggling of AMD AVIC (virtualized
     LAPIC)
   - tuning for the case when two-dimensional paging (EPT/NPT) is
     disabled
   - bugfixes and cleanups, especially with respect to vCPU reset and
     choosing a paging mode based on CR0/CR4/EFER
   - support for 5-level page table on AMD processors

  Generic:
   - MMU notifier invalidation callbacks do not take mmu_lock unless
     necessary
   - improved caching of LRU kvm_memory_slot
   - support for histogram statistics
   - add statistics for halt polling and remote TLB flush requests"

* tag 'for-linus' of git://git.kernel.org/pub/scm/virt/kvm/kvm: (210 commits)
  KVM: Drop unused kvm_dirty_gfn_invalid()
  KVM: x86: Update vCPU's hv_clock before back to guest when tsc_offset is adjusted
  KVM: MMU: mark role_regs and role accessors as maybe unused
  KVM: MIPS: Remove a "set but not used" variable
  x86/kvm: Don't enable IRQ when IRQ enabled in kvm_wait
  KVM: stats: Add VM stat for remote tlb flush requests
  KVM: Remove unnecessary export of kvm_{inc,dec}_notifier_count()
  KVM: x86/mmu: Move lpage_disallowed_link further "down" in kvm_mmu_page
  KVM: x86/mmu: Relocate kvm_mmu_page.tdp_mmu_page for better cache locality
  Revert "KVM: x86: mmu: Add guest physical address check in translate_gpa()"
  KVM: x86/mmu: Remove unused field mmio_cached in struct kvm_mmu_page
  kvm: x86: Increase KVM_SOFT_MAX_VCPUS to 710
  kvm: x86: Increase MAX_VCPUS to 1024
  kvm: x86: Set KVM_MAX_VCPU_ID to 4*KVM_MAX_VCPUS
  KVM: VMX: avoid running vmx_handle_exit_irqoff in case of emulation
  KVM: x86/mmu: Don't freak out if pml5_root is NULL on 4-level host
  KVM: s390: index kvm->arch.idle_mask by vcpu_idx
  KVM: s390: Enable specification exception interpretation
  KVM: arm64: Trim guest debug exception handling
  KVM: SVM: Add 5-level page table support for SVM
  ...

13 files changed:
1  2 
Documentation/virt/kvm/api.rst
arch/arm64/include/asm/cpufeature.h
arch/arm64/include/asm/sysreg.h
arch/arm64/kernel/cpufeature.c
arch/powerpc/include/asm/kvm_host.h
arch/powerpc/kvm/book3s_64_vio_hv.c
arch/powerpc/kvm/book3s_hv.c
arch/s390/include/asm/kvm_host.h
arch/s390/kvm/kvm-s390.c
arch/x86/kvm/hyperv.c
arch/x86/kvm/svm/nested.c
arch/x86/kvm/svm/svm.c
arch/x86/kvm/vmx/nested.c

@@@ -5235,9 -5240,8 +5241,9 @@@ by this descriptor. Its endianness is C
  The following flags are supported:
  
  Bits 0-3 of ``flags`` encode the type:
 +
    * ``KVM_STATS_TYPE_CUMULATIVE``
-     The statistics data is cumulative. The value of data can only be increased.
+     The statistics reports a cumulative count. The value of data can only be increased.
      Most of the counters used in KVM are of this type.
      The corresponding ``size`` field for this type is always 1.
      All cumulative statistics data are read/write.
      All instant statistics are read only.
      The corresponding ``size`` field for this type is always 1.
    * ``KVM_STATS_TYPE_PEAK``
-     The statistics data is peak. The value of data can only be increased, and
-     represents a peak value for a measurement, for example the maximum number
+     The statistics data reports a peak value, for example the maximum number
      of items in a hash table bucket, the longest time waited and so on.
+     The value of data can only be increased.
      The corresponding ``size`` field for this type is always 1.
+   * ``KVM_STATS_TYPE_LINEAR_HIST``
+     The statistic is reported as a linear histogram. The number of
+     buckets is specified by the ``size`` field. The size of buckets is specified
+     by the ``hist_param`` field. The range of the Nth bucket (1 <= N < ``size``)
+     is [``hist_param``*(N-1), ``hist_param``*N), while the range of the last
+     bucket is [``hist_param``*(``size``-1), +INF). (+INF means positive infinity
+     value.) The bucket value indicates how many samples fell in the bucket's range.
+   * ``KVM_STATS_TYPE_LOG_HIST``
+     The statistic is reported as a logarithmic histogram. The number of
+     buckets is specified by the ``size`` field. The range of the first bucket is
+     [0, 1), while the range of the last bucket is [pow(2, ``size``-2), +INF).
+     Otherwise, The Nth bucket (1 < N < ``size``) covers
+     [pow(2, N-2), pow(2, N-1)). The bucket value indicates how many samples fell
+     in the bucket's range.
  
  Bits 4-7 of ``flags`` encode the unit:
 +
    * ``KVM_STATS_UNIT_NONE``
      There is no unit for the value of statistics data. This usually means that
      the value is a simple counter of an event.
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge
Simple merge