summaryrefslogtreecommitdiffstats
path: root/hw/ppc.c
diff options
context:
space:
mode:
authorAnthony Liguori2010-09-08 21:29:13 +0200
committerAnthony Liguori2010-09-08 21:29:13 +0200
commit53462f4aeb869aef90a571eeb22e423688bf5ba4 (patch)
treee609f140db4a2a9edb2003c38bc68c615e790e08 /hw/ppc.c
parentMerge remote branch 'kwolf/for-anthony' into staging (diff)
parentPPC: Change PPC maintainer (diff)
downloadqemu-53462f4aeb869aef90a571eeb22e423688bf5ba4.tar.gz
qemu-53462f4aeb869aef90a571eeb22e423688bf5ba4.tar.xz
qemu-53462f4aeb869aef90a571eeb22e423688bf5ba4.zip
Merge remote branch 'agraf/ppc-next' into staging
Diffstat (limited to 'hw/ppc.c')
-rw-r--r--hw/ppc.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/hw/ppc.c b/hw/ppc.c
index 2a77eb9bff..55e380844c 100644
--- a/hw/ppc.c
+++ b/hw/ppc.c
@@ -28,6 +28,8 @@
#include "nvram.h"
#include "qemu-log.h"
#include "loader.h"
+#include "kvm.h"
+#include "kvm_ppc.h"
//#define PPC_DEBUG_IRQ
//#define PPC_DEBUG_TB
@@ -50,6 +52,8 @@ static void cpu_ppc_tb_start (CPUState *env);
static void ppc_set_irq (CPUState *env, int n_IRQ, int level)
{
+ unsigned int old_pending = env->pending_interrupts;
+
if (level) {
env->pending_interrupts |= 1 << n_IRQ;
cpu_interrupt(env, CPU_INTERRUPT_HARD);
@@ -58,6 +62,13 @@ static void ppc_set_irq (CPUState *env, int n_IRQ, int level)
if (env->pending_interrupts == 0)
cpu_reset_interrupt(env, CPU_INTERRUPT_HARD);
}
+
+ if (old_pending != env->pending_interrupts) {
+#ifdef CONFIG_KVM
+ kvmppc_set_interrupt(env, n_IRQ, level);
+#endif
+ }
+
LOG_IRQ("%s: %p n_IRQ %d level %d => pending %08" PRIx32
"req %08x\n", __func__, env, n_IRQ, level,
env->pending_interrupts, env->interrupt_request);