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>
This commit is contained in:
parent
05e0127f9e
commit
1f2bb4acc1
|
@ -71,7 +71,7 @@ static void vgic_v2_sync_lr_elrsr(struct kvm_vcpu *vcpu, int lr,
|
||||||
struct vgic_lr lr_desc)
|
struct vgic_lr lr_desc)
|
||||||
{
|
{
|
||||||
if (!(lr_desc.state & LR_STATE_MASK))
|
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)
|
static u64 vgic_v2_get_elrsr(const struct kvm_vcpu *vcpu)
|
||||||
|
|
Loading…
Reference in New Issue