[GIT PULL] KVM changes for Linux 5.5 merge window

From: Paolo Bonzini
Date: Mon Nov 25 2019 - 06:01:59 EST


Linus,

The following changes since commit 9cb09e7c1c9af2968d5186ef9085f05641ab65d9:

KVM: Add a comment describing the /dev/kvm no_compat handling (2019-11-15 10:14:04 +0100)

are available in the git repository at:

https://git.kernel.org/pub/scm/virt/kvm/kvm.git tags/for-linus

for you to fetch changes up to 96710247298df52a4b8150a62a6fe87083093ff3:

Merge tag 'kvm-ppc-next-5.5-2' of git://git.kernel.org/pub/scm/linux/kernel/git/paulus/powerpc into HEAD (2019-11-25 11:29:05 +0100)

----------------------------------------------------------------

ARM:
- Data abort report and injection
- Steal time support
- GICv4 performance improvements
- vgic ITS emulation fixes
- Simplify FWB handling
- Enable halt polling counters
- Make the emulated timer PREEMPT_RT compliant

s390:
- Small fixes and cleanups
- selftest improvements
- yield improvements

PPC:
- Add capability to tell userspace whether we can single-step the guest.
- Improve the allocation of XIVE virtual processor IDs
- Rewrite interrupt synthesis code to deliver interrupts in virtual
mode when appropriate.
- Minor cleanups and improvements.

x86:
- XSAVES support for AMD
- more accurate report of nested guest TSC to the nested hypervisor
- retpoline optimizations
- support for nested 5-level page tables
- PMU virtualization optimizations, and improved support for nested
PMU virtualization
- correct latching of INITs for nested virtualization
- IOAPIC optimization
- TSX_CTRL virtualization for more TAA happiness
- improved allocation and flushing of SEV ASIDs
- many bugfixes and cleanups

----------------------------------------------------------------
Aaron Lewis (13):
KVM: x86: Introduce vcpu->arch.xsaves_enabled
KVM: VMX: Fix conditions for guest IA32_XSS support
KVM: x86: Remove unneeded kvm_vcpu variable, guest_xcr0_loaded
KVM: SVM: Use wrmsr for switching between guest and host IA32_XSS on AMD
KVM: VMX: Use wrmsr for switching between guest and host IA32_XSS on Intel
KVM: x86: Move IA32_XSS-swapping on VM-entry/VM-exit to common x86 code
kvm: x86: Move IA32_XSS to kvm_{get,set}_msr_common
kvm: svm: Update svm_xsaves_supported
kvm: tests: Add test to verify MSR_IA32_XSS
kvm: nested: Introduce read_and_check_msr_entry()
kvm: vmx: Rename NR_AUTOLOAD_MSRS to NR_LOADSTORE_MSRS
kvm: vmx: Rename function find_msr() to vmx_find_msr_index()
KVM: nVMX: Add support for capturing highest observable L2 TSC

Andrea Arcangeli (4):
KVM: x86: optimize more exit handlers in vmx.c
KVM: retpolines: x86: eliminate retpoline from vmx.c exit handlers
KVM: retpolines: x86: eliminate retpoline from svm.c exit handlers
x86: retpolines: eliminate retpoline from msr event handlers

Chenyi Qiang (1):
KVM: nVMX: add CR4_LA57 bit to nested CR4_FIXED1

Christian Borntraeger (4):
selftests: kvm: make syncregs more reliable on s390
KVM: s390: count invalid yields
KVM: s390: Do not yield when target is already running
KVM: arm/arm64: Show halt poll counters in debugfs

Christoffer Dall (4):
KVM: arm/arm64: Allow reporting non-ISV data aborts to userspace
KVM: arm/arm64: Allow user injection of external data aborts
KVM: arm/arm64: Factor out hypercall handling from PSCI code
KVM: arm64: Don't set HCR_EL2.TVM when S2FWB is supported

Fabiano Rosas (1):
KVM: PPC: Report single stepping capability

Greg Kurz (7):
KVM: PPC: Book3S HV: XIVE: Set kvm->arch.xive when VPs are allocated
KVM: PPC: Book3S HV: XIVE: Show VP id in debugfs
KVM: PPC: Book3S HV: XIVE: Compute the VP id in a common helper
KVM: PPC: Book3S HV: XIVE: Make VP block size configurable
KVM: PPC: Book3S HV: XIVE: Allow userspace to set the # of VPs
KVM: PPC: Book3S HV: XIVE: Free previous EQ page when setting up a new one
KVM: PPC: Book3S HV: XIVE: Fix potential page leak on error path

Janosch Frank (1):
KVM: s390: Cleanup kvm_arch_init error path

Jim Mattson (1):
kvm: nVMX: Relax guest IA32_FEATURE_CONTROL constraints

Leonardo Bras (2):
KVM: PPC: Reduce calls to get current->mm by storing the value locally
KVM: PPC: E500: Replace current->mm by kvm->mm

Like Xu (7):
KVM: x86/vPMU: Declare kvm_pmu->reprogram_pmi field using DECLARE_BITMAP
perf/core: Provide a kernel-internal interface to recalibrate event period
perf/core: Provide a kernel-internal interface to pause perf_event
KVM: x86/vPMU: Rename pmu_ops callbacks from msr_idx to rdpmc_ecx
KVM: x86/vPMU: Introduce a new kvm_pmu_ops->msr_idx_to_pmc callback
KVM: x86/vPMU: Reuse perf_event to avoid unnecessary pmc_reprogram_counter
KVM: x86/vPMU: Add lazy mechanism to release perf_event per vPMC

Liran Alon (12):
KVM: x86: Evaluate latched_init in KVM_SET_VCPU_EVENTS when vCPU not in SMM
KVM: x86: Prevent set vCPU into INIT/SIPI_RECEIVED state when INIT are latched
KVM: VMX: Consume pending LAPIC INIT event when exit on INIT_SIGNAL
KVM: SVM: Remove check if APICv enabled in SVM update_cr8_intercept() handler
KVM: VMX: Refactor update_cr8_intercept()
KVM: nVMX: Update vmcs01 TPR_THRESHOLD if L2 changed L1 TPR
KVM: x86: Optimization: Requst TLB flush in fast_cr3_switch() instead of do it directly
KVM: nVMX: Use semi-colon instead of comma for exit-handlers initialization
KVM: x86: Unexport kvm_vcpu_reload_apic_access_page()
KVM: nVMX: Assume TLB entries of L1 and L2 are tagged differently if L0 use EPT
KVM: nVMX: Do not mark vmcs02->apic_access_page as dirty when unpinning
KVM: nVMX: Remove unnecessary TLB flushes on L1<->L2 switches when L1 use apic-access-page

Mao Wenan (1):
KVM: x86: remove set but not used variable 'called'

Marc Zyngier (6):
Merge remote-tracking branch 'arm64/for-next/smccc-conduit-cleanup' into kvm-arm64/stolen-time
Merge remote-tracking branch 'kvmarm/kvm-arm64/stolen-time' into kvmarm-master/next
KVM: arm64: vgic-v4: Move the GICv4 residency flow to be driven by vcpu_load/put
KVM: vgic-v4: Track the number of VLPIs per vcpu
KVM: arm64: Opportunistically turn off WFI trapping when using direct LPI injection
Merge remote-tracking branch 'kvmarm/misc-5.5' into kvmarm/next

Marcelo Tosatti (1):
KVM: x86: switch KVMCLOCK base to monotonic raw clock

Mark Rutland (5):
arm/arm64: smccc/psci: add arm_smccc_1_1_get_conduit()
arm64: errata: use arm_smccc_1_1_get_conduit()
arm: spectre-v2: use arm_smccc_1_1_get_conduit()
firmware/psci: use common SMCCC_CONDUIT_*
firmware: arm_sdei: use common SMCCC_CONDUIT_*

Miaohe Lin (6):
KVM: remove redundant code in kvm_arch_vm_ioctl
KVM: x86: get rid of odd out jump label in pdptrs_changed
KVM: MMIO: get rid of odd out_err label in kvm_coalesced_mmio_init
KVM: X86: avoid unused setup_syscalls_segments call when SYSCALL check failed
KVM: APIC: add helper func to remove duplicate code in kvm_pv_send_ipi
KVM: Fix jump label out_free_* in kvm_init()

Nicholas Piggin (5):
KVM: PPC: Book3S: Define and use SRR1_MSR_BITS
KVM: PPC: Book3S: Replace reset_msr mmu op with inject_interrupt arch op
KVM: PPC: Book3S HV: Reuse kvmppc_inject_interrupt for async guest delivery
KVM: PPC: Book3S HV: Implement LPCR[AIL]=3 mode for injected interrupts
KVM: PPC: Book3S HV: Reject mflags=2 (LPCR[AIL]=2) ADDR_TRANS_MODE mode

Nitesh Narayan Lal (2):
KVM: x86: deliver KVM IOAPIC scan request to target vCPUs
KVM: x86: Zero the IOAPIC scan request dest vCPUs bitmap

Oliver Upton (6):
KVM: VMX: Add helper to check reserved bits in IA32_PERF_GLOBAL_CTRL
KVM: nVMX: Check GUEST_IA32_PERF_GLOBAL_CTRL on VM-Entry
KVM: nVMX: Check HOST_IA32_PERF_GLOBAL_CTRL on VM-Entry
KVM: nVMX: Use kvm_set_msr to load IA32_PERF_GLOBAL_CTRL on VM-Exit
KVM: nVMX: Load GUEST_IA32_PERF_GLOBAL_CTRL MSR on VM-Entry
KVM: nVMX: Expose load IA32_PERF_GLOBAL_CTRL VM-{Entry,Exit} control

Paolo Bonzini (12):
Merge tag 'kvm-ppc-next-5.5-1' of git://git.kernel.org/.../paulus/powerpc into HEAD
KVM: nVMX: mark functions in the header as "static inline"
Merge tag 'kvm-s390-next-5.5-1' of git://git.kernel.org/.../kvms390/linux into HEAD
Merge tag 'kvmarm-5.5' of git://git.kernel.org/.../kvmarm/kvmarm into HEAD
KVM: x86: fix presentation of TSX feature in ARCH_CAPABILITIES
KVM: x86: do not modify masked bits of shared MSRs
KVM: x86: implement MSR_IA32_TSX_CTRL effect on CPUID
KVM: vmx: implement MSR_IA32_TSX_CTRL disable RTM functionality
KVM: vmx: use MSR_IA32_TSX_CTRL to hard-disable TSX on guest that lack it
Merge branch 'kvm-tsx-ctrl' into HEAD
KVM: x86: create mmu/ subdirectory
Merge tag 'kvm-ppc-next-5.5-2' of git://git.kernel.org/.../paulus/powerpc into HEAD

Radim KrÄmÃÅ (1):
KVM: remember position in kvm->vcpus array

Sean Christopherson (12):
KVM: nVMX: Always write vmcs02.GUEST_CR3 during nested VM-Enter
KVM: VMX: Skip GUEST_CR3 VMREAD+VMWRITE if the VMCS is up-to-date
KVM: VMX: Consolidate to_vmx() usage in RFLAGS accessors
KVM: VMX: Optimize vmx_set_rflags() for unrestricted guest
KVM: x86: Add WARNs to detect out-of-bounds register indices
KVM: x86: Fold 'enum kvm_ex_reg' definitions into 'enum kvm_reg'
KVM: x86: Add helpers to test/mark reg availability and dirtiness
KVM: x86: Fold decache_cr3() into cache_reg()
KVM: Add separate helper for putting borrowed reference to kvm
KVM: x86: Remove a spurious export of a static function
KVM: x86: Open code shared_msr_update() in its only caller
KVM: x86: Grab KVM's srcu lock when setting nested state

Steven Price (10):
KVM: arm64: Document PV-time interface
KVM: arm64: Implement PV_TIME_FEATURES call
KVM: Implement kvm_put_guest()
KVM: arm64: Support stolen time reporting via shared structure
KVM: Allow kvm_device_ops to be const
KVM: arm64: Provide VCPU attributes for stolen time
arm/arm64: Provide a wrapper for SMCCC 1.1 calls
arm/arm64: Make use of the SMCCC 1.1 wrapper
arm64: Retrieve stolen time as paravirtualized guest
KVM: arm64: Select TASK_DELAY_ACCT+TASKSTATS rather than SCHEDSTATS

Suthikulpanit, Suravee (1):
kvm: x86: Modify kvm_x86_ops.get_enable_apicv() to use struct kvm parameter

Thomas Gleixner (1):
KVM: arm/arm64: Let the timer expire in hardirq context on RT

Thomas Huth (1):
KVM: s390: Remove unused parameter from __inject_sigp_restart()

Tom Lendacky (4):
KVM: SVM: Serialize access to the SEV ASID bitmap
KVM: SVM: Guard against DEACTIVATE when performing WBINVD/DF_FLUSH
KVM: SVM: Remove unneeded WBINVD and DF_FLUSH when starting SEV guests
KVM: SVM: Reduce WBINVD/DF_FLUSH invocations

Wainer dos Santos Moschetta (1):
selftests: kvm: Simplify loop in kvm_create_max_vcpus test

Xiaoyao Li (4):
KVM: VMX: Write VPID to vmcs when creating vcpu
KVM: VMX: Remove vmx->hv_deadline_tsc initialization from vmx_vcpu_setup()
KVM: VMX: Initialize vmx->guest_msrs[] right after allocation
KVM: VMX: Rename {vmx,nested_vmx}_vcpu_setup()

Yi Wang (1):
x86/kvm: Fix -Wmissing-prototypes warnings

Zenghui Yu (3):
KVM: arm/arm64: vgic: Remove the declaration of kvm_send_userspace_msi()
KVM: arm/arm64: vgic: Fix some comments typo
KVM: arm/arm64: vgic: Don't rely on the wrong pending table

Documentation/admin-guide/kernel-parameters.txt | 6 +-
Documentation/virt/kvm/api.txt | 58 +++-
Documentation/virt/kvm/arm/pvtime.rst | 80 +++++
Documentation/virt/kvm/devices/vcpu.txt | 14 +
Documentation/virt/kvm/devices/xics.txt | 14 +-
Documentation/virt/kvm/devices/xive.txt | 8 +
arch/arm/include/asm/kvm_arm.h | 1 +
arch/arm/include/asm/kvm_emulate.h | 9 +-
arch/arm/include/asm/kvm_host.h | 33 ++
arch/arm/include/uapi/asm/kvm.h | 3 +-
arch/arm/kvm/Makefile | 2 +-
arch/arm/kvm/guest.c | 14 +
arch/arm/kvm/handle_exit.c | 2 +-
arch/arm/mm/proc-v7-bugs.c | 21 +-
arch/arm64/include/asm/kvm_arm.h | 3 +-
arch/arm64/include/asm/kvm_emulate.h | 26 +-
arch/arm64/include/asm/kvm_host.h | 37 +++
arch/arm64/include/asm/paravirt.h | 9 +-
arch/arm64/include/asm/pvclock-abi.h | 17 ++
arch/arm64/include/uapi/asm/kvm.h | 5 +-
arch/arm64/kernel/cpu_errata.c | 102 ++-----
arch/arm64/kernel/paravirt.c | 140 +++++++++
arch/arm64/kernel/sdei.c | 3 +-
arch/arm64/kernel/time.c | 3 +
arch/arm64/kvm/Kconfig | 4 +
arch/arm64/kvm/Makefile | 2 +
arch/arm64/kvm/guest.c | 23 ++
arch/arm64/kvm/handle_exit.c | 4 +-
arch/arm64/kvm/inject_fault.c | 4 +-
arch/powerpc/include/asm/kvm_host.h | 1 -
arch/powerpc/include/asm/kvm_ppc.h | 1 +
arch/powerpc/include/asm/reg.h | 12 +
arch/powerpc/include/uapi/asm/kvm.h | 3 +
arch/powerpc/kvm/book3s.c | 27 +-
arch/powerpc/kvm/book3s.h | 3 +
arch/powerpc/kvm/book3s_32_mmu.c | 6 -
arch/powerpc/kvm/book3s_64_mmu.c | 15 -
arch/powerpc/kvm/book3s_64_mmu_hv.c | 26 +-
arch/powerpc/kvm/book3s_64_vio.c | 2 +-
arch/powerpc/kvm/book3s_hv.c | 28 +-
arch/powerpc/kvm/book3s_hv_builtin.c | 82 ++++-
arch/powerpc/kvm/book3s_hv_nested.c | 2 +-
arch/powerpc/kvm/book3s_pr.c | 40 ++-
arch/powerpc/kvm/book3s_xive.c | 128 ++++++--
arch/powerpc/kvm/book3s_xive.h | 5 +
arch/powerpc/kvm/book3s_xive_native.c | 82 ++---
arch/powerpc/kvm/e500_mmu_host.c | 6 +-
arch/powerpc/kvm/powerpc.c | 2 +
arch/s390/include/asm/kvm_host.h | 1 +
arch/s390/kvm/diag.c | 22 +-
arch/s390/kvm/interrupt.c | 5 +-
arch/s390/kvm/kvm-s390.c | 19 +-
arch/x86/events/intel/core.c | 11 +
arch/x86/include/asm/kvm_host.h | 32 +-
arch/x86/kernel/kvm.c | 1 +
arch/x86/kvm/Makefile | 4 +-
arch/x86/kvm/cpuid.c | 8 +-
arch/x86/kvm/emulate.c | 6 +-
arch/x86/kvm/ioapic.c | 34 ++-
arch/x86/kvm/kvm_cache_regs.h | 51 +++-
arch/x86/kvm/lapic.c | 111 ++++---
arch/x86/kvm/lapic.h | 3 +
arch/x86/kvm/{ => mmu}/mmu.c | 2 +-
arch/x86/kvm/{ => mmu}/page_track.c | 0
arch/x86/kvm/{ => mmu}/paging_tmpl.h | 0
arch/x86/kvm/pmu.c | 124 +++++++-
arch/x86/kvm/pmu.h | 29 +-
arch/x86/kvm/pmu_amd.c | 24 +-
arch/x86/kvm/svm.c | 140 ++++++---
arch/x86/kvm/vmx/nested.c | 252 ++++++++++++---
arch/x86/kvm/vmx/nested.h | 9 +-
arch/x86/kvm/vmx/pmu_intel.c | 34 ++-
arch/x86/kvm/vmx/vmx.c | 339 +++++++++++----------
arch/x86/kvm/vmx/vmx.h | 12 +-
arch/x86/kvm/x86.c | 244 +++++++++------
arch/x86/kvm/x86.h | 15 +-
drivers/crypto/ccp/psp-dev.c | 9 +
drivers/firmware/arm_sdei.c | 12 +-
drivers/firmware/psci/psci.c | 24 +-
drivers/irqchip/irq-gic-v4.c | 7 +-
include/Kbuild | 2 +
include/kvm/arm_hypercalls.h | 43 +++
include/kvm/arm_psci.h | 2 +-
include/kvm/arm_vgic.h | 8 +-
include/linux/arm-smccc.h | 75 +++++
include/linux/arm_sdei.h | 6 -
include/linux/cpuhotplug.h | 1 +
include/linux/irqchip/arm-gic-v4.h | 4 +
include/linux/kvm_host.h | 41 ++-
include/linux/kvm_types.h | 2 +
include/linux/perf_event.h | 10 +
include/linux/psci.h | 9 +-
include/uapi/linux/kvm.h | 11 +
kernel/events/core.c | 46 ++-
tools/testing/selftests/kvm/.gitignore | 1 +
tools/testing/selftests/kvm/Makefile | 1 +
.../selftests/kvm/include/x86_64/processor.h | 7 +-
tools/testing/selftests/kvm/kvm_create_max_vcpus.c | 7 +-
tools/testing/selftests/kvm/lib/x86_64/processor.c | 72 ++++-
tools/testing/selftests/kvm/s390x/sync_regs_test.c | 15 +-
tools/testing/selftests/kvm/x86_64/xss_msr_test.c | 76 +++++
virt/kvm/arm/arch_timer.c | 8 +-
virt/kvm/arm/arm.c | 49 ++-
virt/kvm/arm/hypercalls.c | 71 +++++
virt/kvm/arm/mmio.c | 9 +-
virt/kvm/arm/psci.c | 84 +----
virt/kvm/arm/pvtime.c | 131 ++++++++
virt/kvm/arm/vgic/vgic-init.c | 1 +
virt/kvm/arm/vgic/vgic-its.c | 3 +
virt/kvm/arm/vgic/vgic-v3.c | 12 +-
virt/kvm/arm/vgic/vgic-v4.c | 59 ++--
virt/kvm/arm/vgic/vgic.c | 4 -
virt/kvm/arm/vgic/vgic.h | 2 -
virt/kvm/coalesced_mmio.c | 8 +-
virt/kvm/kvm_main.c | 34 ++-
115 files changed, 2641 insertions(+), 975 deletions(-)
create mode 100644 Documentation/virt/kvm/arm/pvtime.rst
create mode 100644 arch/arm64/include/asm/pvclock-abi.h
rename arch/x86/kvm/{ => mmu}/mmu.c (99%)
rename arch/x86/kvm/{ => mmu}/page_track.c (100%)
rename arch/x86/kvm/{ => mmu}/paging_tmpl.h (100%)
create mode 100644 include/kvm/arm_hypercalls.h
create mode 100644 tools/testing/selftests/kvm/x86_64/xss_msr_test.c
create mode 100644 virt/kvm/arm/hypercalls.c
create mode 100644 virt/kvm/arm/pvtime.c