aboutsummaryrefslogtreecommitdiffstats
path: root/arch/powerpc/kvm/book3s.c
diff options
context:
space:
mode:
authorAlexander Graf <agraf@suse.de>2010-07-29 08:47:51 -0400
committerAvi Kivity <avi@redhat.com>2010-10-24 04:50:46 -0400
commit90bba358873dc96a6746f0df453a0a8ca3d6b86e (patch)
tree28fed8ca78b7f88f631ead5d1f4ea7d2c8ba1378 /arch/powerpc/kvm/book3s.c
parentfad93fe1d452960eb838109222cc949eb77f2859 (diff)
KVM: PPC: Tell guest about pending interrupts
When the guest turns on interrupts again, it needs to know if we have an interrupt pending for it. Because if so, it should rather get out of guest context and get the interrupt. So we introduce a new field in the shared page that we use to tell the guest that there's a pending interrupt lying around. Signed-off-by: Alexander Graf <agraf@suse.de> Signed-off-by: Avi Kivity <avi@redhat.com>
Diffstat (limited to 'arch/powerpc/kvm/book3s.c')
-rw-r--r--arch/powerpc/kvm/book3s.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/arch/powerpc/kvm/book3s.c b/arch/powerpc/kvm/book3s.c
index d6227ff0ceae..06229fec5c9f 100644
--- a/arch/powerpc/kvm/book3s.c
+++ b/arch/powerpc/kvm/book3s.c
@@ -337,6 +337,7 @@ int kvmppc_book3s_irqprio_deliver(struct kvm_vcpu *vcpu, unsigned int priority)
337void kvmppc_core_deliver_interrupts(struct kvm_vcpu *vcpu) 337void kvmppc_core_deliver_interrupts(struct kvm_vcpu *vcpu)
338{ 338{
339 unsigned long *pending = &vcpu->arch.pending_exceptions; 339 unsigned long *pending = &vcpu->arch.pending_exceptions;
340 unsigned long old_pending = vcpu->arch.pending_exceptions;
340 unsigned int priority; 341 unsigned int priority;
341 342
342#ifdef EXIT_DEBUG 343#ifdef EXIT_DEBUG
@@ -356,6 +357,12 @@ void kvmppc_core_deliver_interrupts(struct kvm_vcpu *vcpu)
356 BITS_PER_BYTE * sizeof(*pending), 357 BITS_PER_BYTE * sizeof(*pending),
357 priority + 1); 358 priority + 1);
358 } 359 }
360
361 /* Tell the guest about our interrupt status */
362 if (*pending)
363 vcpu->arch.shared->int_pending = 1;
364 else if (old_pending)
365 vcpu->arch.shared->int_pending = 0;
359} 366}
360 367
361void kvmppc_set_pvr(struct kvm_vcpu *vcpu, u32 pvr) 368void kvmppc_set_pvr(struct kvm_vcpu *vcpu, u32 pvr)