qemu-e2k/target/ppc
Nicholas Piggin 434531619f target/ppc: Do not clear MSR[ME] on MCE interrupts to supervisor
Hardware clears the MSR[ME] bit when delivering a machine check
interrupt, so that is what QEMU does.

The spapr environment runs in supervisor mode though, and receives
machine check interrupts after they are processed by the hypervisor,
and MSR[ME] must always be enabled in supervisor mode (otherwise it
could checkstop the system). So MSR[ME] must not be cleared when
delivering machine checks to the supervisor.

The fix to prevent supervisor mode from modifying MSR[ME] also
prevented it from re-enabling the incorrectly cleared MSR[ME] bit
when returning from handling the interrupt. Before that fix, the
problem was not very noticable with well-behaved code. So the
Fixes tag is not strictly correct, but practically they go together.

Found by kvm-unit-tests machine check tests (not yet upstream).

Fixes: 678b6f1af7 ("target/ppc: Prevent supervisor from modifying MSR[ME]")
Reviewed-by: Harsh Prateek Bora <harshpb@linux.ibm.com>
Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
2024-03-30 18:50:25 +10:00
..
translate target/ppc: Move add and subf type fixed-point arithmetic instructions to decodetree 2024-03-13 02:47:04 +10:00
arch_dump.c target: ppc: Use MSR_HVB bit to get the target endianness for memory dump 2023-07-07 04:46:12 -03:00
compat.c spapr: Fix machine reset deadlock from replay-record 2023-09-06 11:19:33 +02:00
cpu_init.c target/ppc: Restore [H]DEXCR to 64-bits 2024-03-30 18:50:24 +10:00
cpu-models.c ppc: Drop support for POWER9 and POWER10 DD1 chips 2024-03-13 02:47:04 +10:00
cpu-models.h ppc: spelling fixes 2023-09-20 07:54:34 +03:00
cpu-param.h target/ppc: Enable TARGET_PAGE_BITS_VARY for user-only 2024-02-29 11:35:37 -10:00
cpu-qom.h target/ppc: Use GDBFeature for dynamic XML 2024-02-28 09:09:25 +00:00
cpu.c target/ppc: Flush inputs to zero with NJ in ppc_store_vscr 2023-09-06 11:19:33 +02:00
cpu.h spapr: nested: Introduce H_GUEST_RUN_VCPU hcall. 2024-03-13 02:47:04 +10:00
dfp_helper.c target/ppc: Fix warning with clang-15 2023-02-27 22:29:01 +01:00
excp_helper.c target/ppc: Do not clear MSR[ME] on MCE interrupts to supervisor 2024-03-30 18:50:25 +10:00
fpu_helper.c target/ppc: Fix bugs in VSX_CVT_FP_TO_INT and VSX_CVT_FP_TO_INT2 macros 2023-11-21 08:39:58 +01:00
gdbstub.c target/ppc: Fix GDB register indexing on secondary CPUs 2024-03-30 18:50:24 +10:00
helper_regs.c target/ppc: Prevent supervisor from modifying MSR[ME] 2024-03-13 02:47:04 +10:00
helper_regs.h target/ppc: Fix PMU hflags calculation 2023-06-10 10:19:24 -03:00
helper.h target/ppc: Implement watchpoint debug facility for v2.07S 2023-09-06 11:19:32 +02:00
insn32.decode target/ppc: Move add and subf type fixed-point arithmetic instructions to decodetree 2024-03-13 02:47:04 +10:00
insn64.decode target/ppc: Implemented [pm]xvbf16ger2* 2022-05-26 17:11:33 -03:00
int_helper.c target/ppc: Rename variables to avoid local variable shadowing in VUPKPX 2023-10-06 10:56:54 +02:00
internal.h target/ppc: Define powerpc_pm_insn_t in 'internal.h' 2023-11-07 12:13:28 +01:00
Kconfig meson: Introduce target-specific Kconfig 2021-07-09 18:21:34 +02:00
kvm_ppc.h target/ppc: Prohibit target specific KVM prototypes on user emulation 2023-11-07 12:13:28 +01:00
kvm.c * PAPR nested hypervisor host implementation for spapr TCG 2024-03-13 12:37:27 +00:00
machine.c target/ppc: Constify VMState in machine.c 2023-12-29 11:17:30 +11:00
mem_helper.c target/ppc: Split out ppc_env_mmu_index 2024-02-03 16:46:10 +10:00
meson.build target/ppc: Restrict KVM objects to system emulation 2023-11-07 12:13:28 +01:00
misc_helper.c ppc/pnv: Improve pervasive topology calculation for big-core 2024-03-13 02:47:04 +10:00
mmu_common.c target/ppc: Split out ppc_env_mmu_index 2024-02-03 16:46:10 +10:00
mmu_helper.c target/ppc: optimise ppcemb_tlb_t flushing 2024-02-23 23:24:43 +10:00
mmu-book3s-v3.c ppc: Check partition and process table alignment 2022-07-18 13:59:43 -03:00
mmu-book3s-v3.h target/ppc: Implement ISA 3.00 tlbie[l] 2022-07-18 13:59:43 -03:00
mmu-books.h target/ppc: introduce mmu-books.h 2021-07-09 10:38:19 +10:00
mmu-hash32.c bulk: Rename TARGET_FMT_plx -> HWADDR_FMT_plx 2023-01-18 11:14:34 +01:00
mmu-hash32.h target/ppc: Remove PowerPC 601 CPUs 2022-02-09 09:08:55 +01:00
mmu-hash64.c target/ppc: Fix VRMA page size for ISA v3.0 2023-08-04 12:22:03 -03:00
mmu-hash64.h target/ppc: Fix VRMA page size for ISA v3.0 2023-08-04 12:22:03 -03:00
mmu-radix64.c target/ppc/mmu-radix64: Use correct string format in walk_tree() 2024-03-30 18:50:23 +10:00
mmu-radix64.h target/ppc: Check effective address validity 2022-01-04 07:55:34 +01:00
power8-pmu-regs.c.inc tcg: Rename cpu_env to tcg_env 2023-10-03 08:01:02 -07:00
power8-pmu.c target/helpers: Remove unnecessary 'qemu/main-loop.h' header 2023-08-31 19:47:43 +02:00
power8-pmu.h target/ppc: Fix PMU hflags calculation 2023-06-10 10:19:24 -03:00
ppc-qmp-cmds.c target/ppc: Prefer fast cpu_env() over slower CPU QOM cast macro 2024-03-12 12:04:24 +01:00
spr_common.h target/ppc: Implement watchpoint debug facility for v2.07S 2023-09-06 11:19:32 +02:00
tcg-stub.c hw/ppc/spapr_hcall: Allow elision of softmmu_resize_hpt_prep 2024-02-23 23:24:42 +10:00
timebase_helper.c target/ppc: Add SMT support to time facilities 2024-02-23 23:24:43 +10:00
trace-events target/ppc: Improve KVM hypercall trace 2022-04-20 18:00:30 -03:00
trace.h trace: switch position of headers to what Meson requires 2020-08-21 06:18:24 -04:00
translate.c target/ppc: Add gen_exception_err_nip() function 2024-03-13 02:47:04 +10:00
user_only_helper.c target/ppc: Prefer fast cpu_env() over slower CPU QOM cast macro 2024-03-12 12:04:24 +01:00