* [PATCH 0/2] KVM/arm64 fixes for 5.8, take #3
@ 2020-07-06 11:05 Marc Zyngier
2020-07-06 11:05 ` [PATCH 1/2] KVM: arm64: PMU: Fix per-CPU access in preemptible context Marc Zyngier
` (2 more replies)
0 siblings, 3 replies; 4+ messages in thread
From: Marc Zyngier @ 2020-07-06 11:05 UTC (permalink / raw)
To: Paolo Bonzini
Cc: Andrew Scull, Andrew Murray, James Morse, Julien Thierry,
Suzuki K Poulose, kvm, kvmarm, linux-arm-kernel
Hi Paolo,
Yet another small batch of fixes for 5.8. One is a long standing
preemption issue that got uncovered by another fix that went in
5.8. The other one is a fix for an issue potentially affecting kexec.
Please pull,
M.
The following changes since commit a3f574cd65487cd993f79ab235d70229d9302c1e:
KVM: arm64: vgic-v4: Plug race between non-residency and v4.1 doorbell (2020-06-23 11:24:39 +0100)
are available in the Git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/kvmarm/kvmarm.git tags/kvmarm-fixes-5.8-3
for you to fetch changes up to b9e10d4a6c9f5cbe6369ce2c17ebc67d2e5a4be5:
KVM: arm64: Stop clobbering x0 for HVC_SOFT_RESTART (2020-07-06 11:47:02 +0100)
----------------------------------------------------------------
KVM/arm fixes for 5.8, take #3
- Disable preemption on context-switching PMU EL0 state happening
on system register trap
- Don't clobber X0 when tearing down KVM via a soft reset (kexec)
----------------------------------------------------------------
Andrew Scull (1):
KVM: arm64: Stop clobbering x0 for HVC_SOFT_RESTART
Marc Zyngier (1):
KVM: arm64: PMU: Fix per-CPU access in preemptible context
arch/arm64/kvm/hyp-init.S | 11 +++++++----
arch/arm64/kvm/pmu.c | 7 ++++++-
2 files changed, 13 insertions(+), 5 deletions(-)
^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH 1/2] KVM: arm64: PMU: Fix per-CPU access in preemptible context
2020-07-06 11:05 [PATCH 0/2] KVM/arm64 fixes for 5.8, take #3 Marc Zyngier
@ 2020-07-06 11:05 ` Marc Zyngier
2020-07-06 11:05 ` [PATCH 2/2] KVM: arm64: Stop clobbering x0 for HVC_SOFT_RESTART Marc Zyngier
2020-07-06 17:05 ` [PATCH 0/2] KVM/arm64 fixes for 5.8, take #3 Paolo Bonzini
2 siblings, 0 replies; 4+ messages in thread
From: Marc Zyngier @ 2020-07-06 11:05 UTC (permalink / raw)
To: Paolo Bonzini
Cc: Andrew Scull, Andrew Murray, James Morse, Julien Thierry,
Suzuki K Poulose, kvm, kvmarm, linux-arm-kernel
Commit 07da1ffaa137 ("KVM: arm64: Remove host_cpu_context
member from vcpu structure") has, by removing the host CPU
context pointer, exposed that kvm_vcpu_pmu_restore_guest
is called in preemptible contexts:
[ 266.932442] BUG: using smp_processor_id() in preemptible [00000000] code: qemu-system-aar/779
[ 266.939721] caller is debug_smp_processor_id+0x20/0x30
[ 266.944157] CPU: 2 PID: 779 Comm: qemu-system-aar Tainted: G E 5.8.0-rc3-00015-g8d4aa58b2fe3 #1374
[ 266.954268] Hardware name: amlogic w400/w400, BIOS 2020.04 05/22/2020
[ 266.960640] Call trace:
[ 266.963064] dump_backtrace+0x0/0x1e0
[ 266.966679] show_stack+0x20/0x30
[ 266.969959] dump_stack+0xe4/0x154
[ 266.973338] check_preemption_disabled+0xf8/0x108
[ 266.977978] debug_smp_processor_id+0x20/0x30
[ 266.982307] kvm_vcpu_pmu_restore_guest+0x2c/0x68
[ 266.986949] access_pmcr+0xf8/0x128
[ 266.990399] perform_access+0x8c/0x250
[ 266.994108] kvm_handle_sys_reg+0x10c/0x2f8
[ 266.998247] handle_exit+0x78/0x200
[ 267.001697] kvm_arch_vcpu_ioctl_run+0x2ac/0xab8
Note that the bug was always there, it is only the switch to
using percpu accessors that made it obvious.
The fix is to wrap these accesses in a preempt-disabled section,
so that we sample a coherent context on trap from the guest.
Fixes: 435e53fb5e21 ("arm64: KVM: Enable VHE support for :G/:H perf event modifiers")
Cc:: Andrew Murray <amurray@thegoodpenguin.co.uk>
Signed-off-by: Marc Zyngier <maz@kernel.org>
---
arch/arm64/kvm/pmu.c | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/arch/arm64/kvm/pmu.c b/arch/arm64/kvm/pmu.c
index b5ae3a5d509e..3c224162b3dd 100644
--- a/arch/arm64/kvm/pmu.c
+++ b/arch/arm64/kvm/pmu.c
@@ -159,7 +159,10 @@ static void kvm_vcpu_pmu_disable_el0(unsigned long events)
}
/*
- * On VHE ensure that only guest events have EL0 counting enabled
+ * On VHE ensure that only guest events have EL0 counting enabled.
+ * This is called from both vcpu_{load,put} and the sysreg handling.
+ * Since the latter is preemptible, special care must be taken to
+ * disable preemption.
*/
void kvm_vcpu_pmu_restore_guest(struct kvm_vcpu *vcpu)
{
@@ -169,12 +172,14 @@ void kvm_vcpu_pmu_restore_guest(struct kvm_vcpu *vcpu)
if (!has_vhe())
return;
+ preempt_disable();
host = this_cpu_ptr(&kvm_host_data);
events_guest = host->pmu_events.events_guest;
events_host = host->pmu_events.events_host;
kvm_vcpu_pmu_enable_el0(events_guest);
kvm_vcpu_pmu_disable_el0(events_host);
+ preempt_enable();
}
/*
--
2.27.0
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [PATCH 2/2] KVM: arm64: Stop clobbering x0 for HVC_SOFT_RESTART
2020-07-06 11:05 [PATCH 0/2] KVM/arm64 fixes for 5.8, take #3 Marc Zyngier
2020-07-06 11:05 ` [PATCH 1/2] KVM: arm64: PMU: Fix per-CPU access in preemptible context Marc Zyngier
@ 2020-07-06 11:05 ` Marc Zyngier
2020-07-06 17:05 ` [PATCH 0/2] KVM/arm64 fixes for 5.8, take #3 Paolo Bonzini
2 siblings, 0 replies; 4+ messages in thread
From: Marc Zyngier @ 2020-07-06 11:05 UTC (permalink / raw)
To: Paolo Bonzini
Cc: Andrew Scull, Andrew Murray, James Morse, Julien Thierry,
Suzuki K Poulose, kvm, kvmarm, linux-arm-kernel, stable
From: Andrew Scull <ascull@google.com>
HVC_SOFT_RESTART is given values for x0-2 that it should installed
before exiting to the new address so should not set x0 to stub HVC
success or failure code.
Fixes: af42f20480bf1 ("arm64: hyp-stub: Zero x0 on successful stub handling")
Cc: stable@vger.kernel.org
Signed-off-by: Andrew Scull <ascull@google.com>
Signed-off-by: Marc Zyngier <maz@kernel.org>
Link: https://lore.kernel.org/r/20200706095259.1338221-1-ascull@google.com
---
arch/arm64/kvm/hyp-init.S | 11 +++++++----
1 file changed, 7 insertions(+), 4 deletions(-)
diff --git a/arch/arm64/kvm/hyp-init.S b/arch/arm64/kvm/hyp-init.S
index 6e6ed5581eed..e76c0e89d48e 100644
--- a/arch/arm64/kvm/hyp-init.S
+++ b/arch/arm64/kvm/hyp-init.S
@@ -136,11 +136,15 @@ SYM_CODE_START(__kvm_handle_stub_hvc)
1: cmp x0, #HVC_RESET_VECTORS
b.ne 1f
-reset:
+
/*
- * Reset kvm back to the hyp stub. Do not clobber x0-x4 in
- * case we coming via HVC_SOFT_RESTART.
+ * Set the HVC_RESET_VECTORS return code before entering the common
+ * path so that we do not clobber x0-x2 in case we are coming via
+ * HVC_SOFT_RESTART.
*/
+ mov x0, xzr
+reset:
+ /* Reset kvm back to the hyp stub. */
mrs x5, sctlr_el2
mov_q x6, SCTLR_ELx_FLAGS
bic x5, x5, x6 // Clear SCTL_M and etc
@@ -151,7 +155,6 @@ reset:
/* Install stub vectors */
adr_l x5, __hyp_stub_vectors
msr vbar_el2, x5
- mov x0, xzr
eret
1: /* Bad stub call */
--
2.27.0
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [PATCH 0/2] KVM/arm64 fixes for 5.8, take #3
2020-07-06 11:05 [PATCH 0/2] KVM/arm64 fixes for 5.8, take #3 Marc Zyngier
2020-07-06 11:05 ` [PATCH 1/2] KVM: arm64: PMU: Fix per-CPU access in preemptible context Marc Zyngier
2020-07-06 11:05 ` [PATCH 2/2] KVM: arm64: Stop clobbering x0 for HVC_SOFT_RESTART Marc Zyngier
@ 2020-07-06 17:05 ` Paolo Bonzini
2 siblings, 0 replies; 4+ messages in thread
From: Paolo Bonzini @ 2020-07-06 17:05 UTC (permalink / raw)
To: Marc Zyngier
Cc: Andrew Scull, Andrew Murray, James Morse, Julien Thierry,
Suzuki K Poulose, kvm, kvmarm, linux-arm-kernel
On 06/07/20 13:05, Marc Zyngier wrote:
> git://git.kernel.org/pub/scm/linux/kernel/git/kvmarm/kvmarm.git tags/kvmarm-fixes-5.8-3
Pulled, thanks.
Paolo
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2020-07-06 17:05 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-07-06 11:05 [PATCH 0/2] KVM/arm64 fixes for 5.8, take #3 Marc Zyngier
2020-07-06 11:05 ` [PATCH 1/2] KVM: arm64: PMU: Fix per-CPU access in preemptible context Marc Zyngier
2020-07-06 11:05 ` [PATCH 2/2] KVM: arm64: Stop clobbering x0 for HVC_SOFT_RESTART Marc Zyngier
2020-07-06 17:05 ` [PATCH 0/2] KVM/arm64 fixes for 5.8, take #3 Paolo Bonzini
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).