qemu/target-ppc
Nicholas Piggin 10c21b5c20 ppc: allow certain HV interrupts to be delivered to guests
ppc hypervisors have delivered system reset and machine check exception
interrupts to guests in some situations (e.g., see FWNMI feature of LoPAPR,
or NMI injection in QEMU).

These exceptions are architected to set the HV bit in hardware, however
when injected into a guest, the HV bit should be cleared. Current code
masks off the HV bit before setting the new MSR, however this happens after
the interrupt delivery model has calculated delivery mode for the exception.
This can result in the guest's MSR LE bit being lost.

Account for this in the exception handler and don't set HV bit for guest
delivery.

Also add another sanity check to ensure similar bugs get caught.

Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
2016-10-28 11:17:35 +11:00
..
translate target-ppc: Add xvcmpnesp, xvcmpnedp instructions 2016-10-28 11:17:35 +11:00
arch_dump.c ppc64: fix compressed dump with pseries kernel 2016-08-10 13:05:05 +10:00
cpu-models.c target-ppc: Introduce Power9 family 2016-09-07 09:52:14 +10:00
cpu-models.h target-ppc: Introduce Power9 family 2016-09-07 09:52:14 +10:00
cpu-qom.h exec: call cpu_exec_exit() from a CPU unrealize common function 2016-10-24 17:29:16 -02:00
cpu.h target-ppc: tlbie/tlbivax should have global effect 2016-09-23 12:39:07 +10:00
dfp_helper.c target-ppc: add dtstsfi[q] instructions 2016-09-07 12:40:11 +10:00
excp_helper.c ppc: allow certain HV interrupts to be delivered to guests 2016-10-28 11:17:35 +11:00
fpu_helper.c target-ppc: Add xvcmpnesp, xvcmpnedp instructions 2016-10-28 11:17:35 +11:00
gdbstub.c qemu-common: push cpu.h inclusion out of qemu-common.h 2016-05-19 16:42:29 +02:00
helper_regs.h target-ppc: tlbie/tlbivax should have global effect 2016-09-23 12:39:07 +10:00
helper.h target-ppc: Add xvcmpnesp, xvcmpnedp instructions 2016-10-28 11:17:35 +11:00
int_helper.c target-ppc: implement vnegw/d instructions 2016-10-28 09:36:58 +11:00
kvm_ppc.h ppc: Check the availability of transactional memory 2016-10-05 11:05:28 +11:00
kvm-stub.c qemu-common: push cpu.h inclusion out of qemu-common.h 2016-05-19 16:42:29 +02:00
kvm.c target-ppc/kvm: Enable transactional memory on POWER8 with KVM-HV, too 2016-10-05 11:05:28 +11:00
machine.c ppc: Use split I/D mmu modes to avoid flushes on interrupts 2016-05-30 13:20:04 +10:00
Makefile.objs kvm_ppc: remove kvmppc_timer_hack 2015-09-20 22:48:38 +02:00
mem_helper.c ppc: Speed up dcbz 2016-09-07 12:40:11 +10:00
mfrom_table_gen.c ppc: Clean up includes 2016-01-29 15:07:22 +00:00
mfrom_table.c
misc_helper.c ppc: Don't update NIP in facility unavailable interrupts 2016-09-07 12:40:10 +10:00
mmu_helper.c target-ppc: tlbie/tlbivax should have global effect 2016-09-23 12:39:07 +10:00
mmu-hash32.c cpu: move exec-all.h inclusion out of cpu.h 2016-05-19 16:42:29 +02:00
mmu-hash32.h Clean up ill-advised or unusual header guards 2016-07-12 16:20:46 +02:00
mmu-hash64.c target-ppc: tlbie/tlbivax should have global effect 2016-09-23 12:39:07 +10:00
mmu-hash64.h Remove unused function declarations 2016-09-15 15:32:22 +03:00
monitor.c ppc: Clean up includes 2016-01-29 15:07:22 +00:00
STATUS target-ppc: remove powerpc 970gx 2014-03-05 03:06:23 +01:00
timebase_helper.c ppc: Don't update NIP in DCR access routines 2016-09-07 12:40:10 +10:00
trace-events trace-events: fix first line comment in trace-events 2016-08-12 10:36:01 +01:00
translate_init.c exec: call cpu_exec_exit() from a CPU unrealize common function 2016-10-24 17:29:16 -02:00
translate.c ppc: Fix single step with gdb stub 2016-10-28 09:36:58 +11:00
user_only_helper.c ppc: Clean up includes 2016-01-29 15:07:22 +00:00