This series fixes some hard to produce races by introducing the use of vcpu requests. I've tested the series on a Mustang and a ThunderX and compile-tested the ARM bits. Patch 2/10 adds documentation, as, at least for me, understanding vcpu request interplay with vcpu kicks and vcpu mode and the memory barriers that interplay implies, is exhausting. v3: - The easier to reproduce PSCI races previously fixed with this series were fixed independently with a different approach suggested by Christoffer[1]. - Based on Radim's latest vcpu request rework series[2] - Rewrote the documentation adding much more information and incorporating Christoffer's comments from v2. - Reworked the approach to controlling pause and power_off by requests. - Clear request for pending irq injection in the correct place, as pointed out by Christoffer. - Rebase required some simple changes to the PMU code patch. v2: - No longer based on Radim's vcpu request API rework[3], except for including "add kvm_request_pending" as patch 1/10 [drew] - Added vcpu request documentation [drew] - Dropped the introduction of user settable MPIDRs [Christoffer] - Added vcpu requests to all request-less vcpu kicks [Christoffer] [1] https://www.spinics.net/lists/arm-kernel/msg577630.html [2] http://www.spinics.net/lists/kvm/msg148890.html [3] https://www.spinics.net/lists/kvm/msg145588.html Andrew Jones (9): KVM: Add documentation for VCPU requests KVM: arm/arm64: prepare to use vcpu requests KVM: arm/arm64: use vcpu request in kvm_arm_halt_vcpu KVM: arm/arm64: don't clear exit request from caller KVM: arm/arm64: use vcpu requests for power_off KVM: arm/arm64: optimize VCPU RUN KVM: arm/arm64: change exit request to sleep request KVM: arm/arm64: use vcpu requests for irq injection KVM: arm/arm64: PMU: remove request-less vcpu kick Radim Krčmář (1): KVM: add kvm_request_pending Documentation/virtual/kvm/vcpu-requests.rst | 269 ++++++++++++++++++++++++++++ arch/arm/include/asm/kvm_host.h | 3 +- arch/arm/kvm/arm.c | 46 ++++- arch/arm/kvm/handle_exit.c | 1 + arch/arm/kvm/psci.c | 8 +- arch/arm64/include/asm/kvm_host.h | 3 +- arch/arm64/kvm/handle_exit.c | 1 + arch/mips/kvm/trap_emul.c | 2 +- arch/powerpc/kvm/booke.c | 2 +- arch/powerpc/kvm/powerpc.c | 5 +- arch/s390/kvm/kvm-s390.c | 2 +- arch/x86/kvm/x86.c | 4 +- include/linux/kvm_host.h | 5 + virt/kvm/arm/arch_timer.c | 1 + virt/kvm/arm/pmu.c | 40 ++--- virt/kvm/arm/vgic/vgic.c | 9 +- 16 files changed, 357 insertions(+), 44 deletions(-) create mode 100644 Documentation/virtual/kvm/vcpu-requests.rst -- 2.9.3