summaryrefslogtreecommitdiff
path: root/linux-user
diff options
context:
space:
mode:
authorBenjamin Herrenschmidt <benh@kernel.crashing.org>2016-06-21 23:48:51 +0200
committerDavid Gibson <david@gibson.dropbear.id.au>2016-06-23 12:43:54 +1000
commit9b2fadda3e0196ffd485adde4fe9cdd6fae35300 (patch)
treee771c86394816930b2190bee08832b26a6a4aca0 /linux-user
parent33595dc9f3f4839fa7d1195df6007f3457e515be (diff)
downloadqemu-9b2fadda3e0196ffd485adde4fe9cdd6fae35300.tar.gz
ppc: Rework generation of priv and inval interrupts
Recent server processors use the Hypervisor Emulation Assistance interrupt for illegal instructions and *some* type of SPR accesses. Also the code was always generating inval instructions even for priv violations due to setting the wrong flags Finally, the checking for PR/HV was open coded everywhere. This reworks it all, using little helper macros for checking, and adding the HV interrupt (which gets converted back to program check in the slow path of excp_helper.c on CPUs that don't want it). Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org> [clg: fixed checkpatch.pl errors ] Signed-off-by: Cédric Le Goater <clg@kaod.org> Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
Diffstat (limited to 'linux-user')
-rw-r--r--linux-user/main.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/linux-user/main.c b/linux-user/main.c
index 358ed01e96..fd88e22fe3 100644
--- a/linux-user/main.c
+++ b/linux-user/main.c
@@ -1721,6 +1721,7 @@ void cpu_loop(CPUPPCState *env)
queue_signal(env, info.si_signo, &info);
break;
case POWERPC_EXCP_PROGRAM: /* Program exception */
+ case POWERPC_EXCP_HV_EMU: /* HV emulation */
/* XXX: check this */
switch (env->error_code & ~0xF) {
case POWERPC_EXCP_FP: