summaryrefslogtreecommitdiff
path: root/arch
diff options
context:
space:
mode:
authorMarc Zyngier <marc.zyngier@arm.com>2013-04-17 12:09:09 -0700
committerLinus Torvalds <torvalds@linux-foundation.org>2013-04-17 12:51:32 -0700
commit15bbc1b28ff65767922f78c266821cc138b90a47 (patch)
tree419287be95672919211746e6657be7f56c19ab06 /arch
parentfca83168aae6fa0c36a923ef99311587ad5b54f2 (diff)
downloadlinux-3.10-15bbc1b28ff65767922f78c266821cc138b90a47.tar.gz
linux-3.10-15bbc1b28ff65767922f78c266821cc138b90a47.tar.bz2
linux-3.10-15bbc1b28ff65767922f78c266821cc138b90a47.zip
ARM: KVM: fix unbalanced get_cpu() in access_dcsw
In the very unlikely event where a guest would be foolish enough to *read* from a write-only cache maintainance register, we end up with preemption disabled, due to a misplaced get_cpu(). Just move the "is_write" test outside of the critical section. Signed-off-by: Marc Zyngier <marc.zyngier@arm.com> Signed-off-by: Christoffer Dall <cdall@cs.columbia.edu> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'arch')
-rw-r--r--arch/arm/kvm/coproc.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/arch/arm/kvm/coproc.c b/arch/arm/kvm/coproc.c
index 4ea9a982269..7bed7556077 100644
--- a/arch/arm/kvm/coproc.c
+++ b/arch/arm/kvm/coproc.c
@@ -79,11 +79,11 @@ static bool access_dcsw(struct kvm_vcpu *vcpu,
u32 val;
int cpu;
- cpu = get_cpu();
-
if (!p->is_write)
return read_from_write_only(vcpu, p);
+ cpu = get_cpu();
+
cpumask_setall(&vcpu->arch.require_dcache_flush);
cpumask_clear_cpu(cpu, &vcpu->arch.require_dcache_flush);