This patch set aims to support the vCPU preempted check and PV qspinlock under KVM/arm64.
Christoffer Dall (1): KVM: arm/arm64: Factor out hypercall handling from PSCI code
Qian Cai (1): arm64/spinlock: fix a -Wunused-function warning
Steven Price (3): KVM: Implement kvm_put_guest() arm/arm64: Provide a wrapper for SMCCC 1.1 calls arm/arm64: Make use of the SMCCC 1.1 wrapper
Waiman Long (1): locking/osq: Use optimized spinning loop for arm64
Wanpeng Li (2): KVM: Boost vCPUs that are delivering interrupts KVM: Check preempted_in_kernel for involuntary preemption
Zengruan Ye (12): arm/paravirt: Use a single ops structure KVM: arm64: Document PV-sched interface KVM: arm64: Implement PV_SCHED_FEATURES call KVM: arm64: Support pvsched preempted via shared structure KVM: arm64: Add interface to support vCPU preempted check KVM: arm64: Support the vCPU preemption check KVM: arm64: Add SMCCC PV-sched to kick cpu KVM: arm64: Implement PV_SCHED_KICK_CPU call KVM: arm64: Add interface to support PV qspinlock KVM: arm64: Enable PV qspinlock KVM: arm64: Add tracepoints for PV qspinlock arm64: defconfig: add CONFIG_PARAVIRT_SPINLOCKS in default
Documentation/virtual/kvm/arm/pvsched.txt | 72 ++++++++ arch/arm/include/asm/kvm_host.h | 25 +++ arch/arm/include/asm/paravirt.h | 9 +- arch/arm/kernel/paravirt.c | 4 +- arch/arm/kvm/Makefile | 2 +- arch/arm/kvm/handle_exit.c | 2 +- arch/arm/mm/proc-v7-bugs.c | 13 +- arch/arm64/Kconfig | 14 ++ arch/arm64/configs/euleros_defconfig | 1 + arch/arm64/configs/hulk_defconfig | 1 + arch/arm64/configs/openeuler_defconfig | 1 + arch/arm64/include/asm/kvm_host.h | 20 +++ arch/arm64/include/asm/paravirt.h | 63 ++++++- arch/arm64/include/asm/pvsched-abi.h | 16 ++ arch/arm64/include/asm/qspinlock.h | 15 +- arch/arm64/include/asm/qspinlock_paravirt.h | 12 ++ arch/arm64/include/asm/spinlock.h | 26 +++ arch/arm64/kernel/Makefile | 3 +- arch/arm64/kernel/alternative.c | 5 +- arch/arm64/kernel/cpu_errata.c | 82 +++------ arch/arm64/kernel/paravirt-spinlocks.c | 18 ++ arch/arm64/kernel/paravirt.c | 188 +++++++++++++++++++- arch/arm64/kernel/setup.c | 2 + arch/arm64/kernel/trace-paravirt.h | 66 +++++++ arch/arm64/kvm/Makefile | 2 + arch/arm64/kvm/handle_exit.c | 5 +- arch/s390/kvm/interrupt.c | 2 +- drivers/xen/time.c | 4 + include/kvm/arm_hypercalls.h | 43 +++++ include/kvm/arm_psci.h | 2 +- include/linux/arm-smccc.h | 71 ++++++++ include/linux/cpuhotplug.h | 1 + include/linux/kvm_host.h | 23 +++ include/linux/kvm_types.h | 2 + kernel/locking/osq_lock.c | 23 ++- virt/kvm/arm/arm.c | 12 +- virt/kvm/arm/hypercalls.c | 72 ++++++++ virt/kvm/arm/psci.c | 76 +------- virt/kvm/arm/pvsched.c | 83 +++++++++ virt/kvm/arm/trace.h | 18 ++ virt/kvm/kvm_main.c | 17 +- 41 files changed, 939 insertions(+), 177 deletions(-) create mode 100644 Documentation/virtual/kvm/arm/pvsched.txt create mode 100644 arch/arm64/include/asm/pvsched-abi.h create mode 100644 arch/arm64/include/asm/qspinlock_paravirt.h create mode 100644 arch/arm64/kernel/paravirt-spinlocks.c create mode 100644 arch/arm64/kernel/trace-paravirt.h create mode 100644 include/kvm/arm_hypercalls.h create mode 100644 virt/kvm/arm/hypercalls.c create mode 100644 virt/kvm/arm/pvsched.c