aboutsummaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorAlexander Graf <agraf@suse.de>2010-04-20 02:49:47 +0200
committerAvi Kivity <avi@redhat.com>2010-05-17 12:18:57 +0300
commit7fdaec997cc8ef77e8da7ed70f3d9f074b61c31f (patch)
treeaa72586e8eb24d32353c54158a51470e9245122d /arch
parentaf7b4d104b36e782a5a97dd55958c3c63964e088 (diff)
downloadkernel_goldelico_gta04-7fdaec997cc8ef77e8da7ed70f3d9f074b61c31f.zip
kernel_goldelico_gta04-7fdaec997cc8ef77e8da7ed70f3d9f074b61c31f.tar.gz
kernel_goldelico_gta04-7fdaec997cc8ef77e8da7ed70f3d9f074b61c31f.tar.bz2
KVM: PPC: Make Performance Counters work
When we get a performance counter interrupt we need to route it on to the Linux handler after we got out of the guest context. We also need to tell our handling code that this particular interrupt doesn't need treatment. So let's add those two bits in, making perf work while having a KVM guest running. Signed-off-by: Alexander Graf <agraf@suse.de> Signed-off-by: Avi Kivity <avi@redhat.com>
Diffstat (limited to 'arch')
-rw-r--r--arch/powerpc/kvm/book3s.c3
-rw-r--r--arch/powerpc/kvm/book3s_interrupts.S2
2 files changed, 5 insertions, 0 deletions
diff --git a/arch/powerpc/kvm/book3s.c b/arch/powerpc/kvm/book3s.c
index 6ee9c5e..f66de7e 100644
--- a/arch/powerpc/kvm/book3s.c
+++ b/arch/powerpc/kvm/book3s.c
@@ -873,6 +873,9 @@ int kvmppc_handle_exit(struct kvm_run *run, struct kvm_vcpu *vcpu,
vcpu->stat.ext_intr_exits++;
r = RESUME_GUEST;
break;
+ case BOOK3S_INTERRUPT_PERFMON:
+ r = RESUME_GUEST;
+ break;
case BOOK3S_INTERRUPT_PROGRAM:
{
enum emulation_result er;
diff --git a/arch/powerpc/kvm/book3s_interrupts.S b/arch/powerpc/kvm/book3s_interrupts.S
index a1b5028..2f0bc92 100644
--- a/arch/powerpc/kvm/book3s_interrupts.S
+++ b/arch/powerpc/kvm/book3s_interrupts.S
@@ -228,6 +228,8 @@ no_dcbz32_off:
beq call_linux_handler
cmpwi r12, BOOK3S_INTERRUPT_DECREMENTER
beq call_linux_handler
+ cmpwi r12, BOOK3S_INTERRUPT_PERFMON
+ beq call_linux_handler
/* Back to EE=1 */
mtmsr r6