Commit 4d3afc9b authored by Christoffer Dall's avatar Christoffer Dall

KVM: arm/arm64: vgic-v2: Clear all dirty LRs

When saving the state of the list registers, it is critical to
reset them zero, as we could otherwise leave unexpected EOI
interrupts pending for virtual level interrupts.

Cc: stable@vger.kernel.org # v4.6+
Signed-off-by: default avatarChristoffer Dall <christoffer.dall@linaro.org>
Signed-off-by: default avatarMarc Zyngier <marc.zyngier@arm.com>
parent 1a695a90
...@@ -100,12 +100,11 @@ static void __hyp_text save_lrs(struct kvm_vcpu *vcpu, void __iomem *base) ...@@ -100,12 +100,11 @@ static void __hyp_text save_lrs(struct kvm_vcpu *vcpu, void __iomem *base)
if (!(vcpu->arch.vgic_cpu.live_lrs & (1UL << i))) if (!(vcpu->arch.vgic_cpu.live_lrs & (1UL << i)))
continue; continue;
if (cpu_if->vgic_elrsr & (1UL << i)) { if (cpu_if->vgic_elrsr & (1UL << i))
cpu_if->vgic_lr[i] &= ~GICH_LR_STATE; cpu_if->vgic_lr[i] &= ~GICH_LR_STATE;
continue; else
}
cpu_if->vgic_lr[i] = readl_relaxed(base + GICH_LR0 + (i * 4)); cpu_if->vgic_lr[i] = readl_relaxed(base + GICH_LR0 + (i * 4));
writel_relaxed(0, base + GICH_LR0 + (i * 4)); writel_relaxed(0, base + GICH_LR0 + (i * 4));
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment