path: root/virt
diff options
authorChristoffer Dall <christoffer.dall@linaro.org>2014-09-22 22:10:36 +0200
committerChristoffer Dall <christoffer.dall@linaro.org>2014-09-22 23:05:56 +0200
commit1f2bb4acc125edc2c06db3ad3e8c699bc075ad52 (patch)
treeea414717822d6eab576c3c8cd7aed692fabfa1ba /virt
parent05e0127f9e362b36aa35f17b1a3d52bca9322a3a (diff)
arm/arm64: KVM: Fix unaligned access bug on gicv2 access
We were using an atomic bitop on the vgic_v2.vgic_elrsr field which was not aligned to the natural size on 64-bit platforms. This bug showed up after QEMU correctly identifies the pl011 line as being level-triggered, and not edge-triggered. These data structures are protected by a spinlock so simply use a non-atomic version of the accessor instead. Tested-by: Joel Schopp <joel.schopp@amd.com> Reported-by: Riku Voipio <riku.voipio@linaro.org> Signed-off-by: Christoffer Dall <christoffer.dall@linaro.org>
Diffstat (limited to 'virt')
1 files changed, 1 insertions, 1 deletions
diff --git a/virt/kvm/arm/vgic-v2.c b/virt/kvm/arm/vgic-v2.c
index 01124ef3690a..416baedfc89f 100644
--- a/virt/kvm/arm/vgic-v2.c
+++ b/virt/kvm/arm/vgic-v2.c
@@ -71,7 +71,7 @@ static void vgic_v2_sync_lr_elrsr(struct kvm_vcpu *vcpu, int lr,
struct vgic_lr lr_desc)
if (!(lr_desc.state & LR_STATE_MASK))
- set_bit(lr, (unsigned long *)vcpu->arch.vgic_cpu.vgic_v2.vgic_elrsr);
+ __set_bit(lr, (unsigned long *)vcpu->arch.vgic_cpu.vgic_v2.vgic_elrsr);
static u64 vgic_v2_get_elrsr(const struct kvm_vcpu *vcpu)

Privacy Policy