aboutsummaryrefslogtreecommitdiff
path: root/virt/kvm/arm/vgic-v2.c
diff options
context:
space:
mode:
authorKevin Hilman <khilman@linaro.org>2015-08-14 10:39:12 -0700
committerKevin Hilman <khilman@linaro.org>2015-08-14 10:39:12 -0700
commit373cea9e2c9c6495a80efdae55cf2114f384a75b (patch)
tree7a8c31aff389cd60937edf7d311c2d93d42a3c7d /virt/kvm/arm/vgic-v2.c
parentea64087da6e7655f5acac074a70496b50b310a29 (diff)
parent8a7eb06341c73248d152a2a12e4f00f472295de7 (diff)
Merge branch 'linux-linaro-lsk-v3.14' into linux-linaro-lsk-v3.14-rtlsk-v3.14-15.08-rt
Diffstat (limited to 'virt/kvm/arm/vgic-v2.c')
-rw-r--r--virt/kvm/arm/vgic-v2.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/virt/kvm/arm/vgic-v2.c b/virt/kvm/arm/vgic-v2.c
index 01124ef3690a..60bde24f38a8 100644
--- a/virt/kvm/arm/vgic-v2.c
+++ b/virt/kvm/arm/vgic-v2.c
@@ -72,6 +72,8 @@ static void vgic_v2_sync_lr_elrsr(struct kvm_vcpu *vcpu, int lr,
{
if (!(lr_desc.state & LR_STATE_MASK))
set_bit(lr, (unsigned long *)vcpu->arch.vgic_cpu.vgic_v2.vgic_elrsr);
+ else
+ clear_bit(lr, (unsigned long *)vcpu->arch.vgic_cpu.vgic_v2.vgic_elrsr);
}
static u64 vgic_v2_get_elrsr(const struct kvm_vcpu *vcpu)
@@ -102,6 +104,12 @@ static u64 vgic_v2_get_eisr(const struct kvm_vcpu *vcpu)
return val;
}
+static void vgic_v2_clear_eisr(struct kvm_vcpu *vcpu)
+{
+ vcpu->arch.vgic_cpu.vgic_v2.vgic_eisr[0] = 0;
+ vcpu->arch.vgic_cpu.vgic_v2.vgic_eisr[1] = 0;
+}
+
static u32 vgic_v2_get_interrupt_status(const struct kvm_vcpu *vcpu)
{
u32 misr = vcpu->arch.vgic_cpu.vgic_v2.vgic_misr;
@@ -166,6 +174,7 @@ static const struct vgic_ops vgic_v2_ops = {
.sync_lr_elrsr = vgic_v2_sync_lr_elrsr,
.get_elrsr = vgic_v2_get_elrsr,
.get_eisr = vgic_v2_get_eisr,
+ .clear_eisr = vgic_v2_clear_eisr,
.get_interrupt_status = vgic_v2_get_interrupt_status,
.enable_underflow = vgic_v2_enable_underflow,
.disable_underflow = vgic_v2_disable_underflow,