* [PATCH] target/ppc: Do not clear MSR[ME] on MCE interrupts to supervisor
@ 2024-03-21 5:54 Nicholas Piggin
2024-03-22 8:32 ` Harsh Prateek Bora
0 siblings, 1 reply; 2+ messages in thread
From: Nicholas Piggin @ 2024-03-21 5:54 UTC (permalink / raw)
To: qemu-ppc
Cc: Nicholas Piggin, qemu-devel, Daniel Henrique Barboza,
Harsh Prateek Bora
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: 678b6f1af75ef ("target/ppc: Prevent supervisor from modifying MSR[ME]")
Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
---
target/ppc/excp_helper.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/target/ppc/excp_helper.c b/target/ppc/excp_helper.c
index 80f584f933..674c05a2ce 100644
--- a/target/ppc/excp_helper.c
+++ b/target/ppc/excp_helper.c
@@ -1345,9 +1345,10 @@ static void powerpc_excp_books(PowerPCCPU *cpu, int excp)
* clear (e.g., see FWNMI in PAPR).
*/
new_msr |= (target_ulong)MSR_HVB;
+
+ /* HV machine check exceptions don't have ME set */
+ new_msr &= ~((target_ulong)1 << MSR_ME);
}
- /* machine check exceptions don't have ME set */
- new_msr &= ~((target_ulong)1 << MSR_ME);
msr |= env->error_code;
break;
--
2.42.0
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH] target/ppc: Do not clear MSR[ME] on MCE interrupts to supervisor
2024-03-21 5:54 [PATCH] target/ppc: Do not clear MSR[ME] on MCE interrupts to supervisor Nicholas Piggin
@ 2024-03-22 8:32 ` Harsh Prateek Bora
0 siblings, 0 replies; 2+ messages in thread
From: Harsh Prateek Bora @ 2024-03-22 8:32 UTC (permalink / raw)
To: Nicholas Piggin, qemu-ppc; +Cc: qemu-devel, Daniel Henrique Barboza
On 3/21/24 11:24, Nicholas Piggin wrote:
> 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: 678b6f1af75ef ("target/ppc: Prevent supervisor from modifying MSR[ME]")
> Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
Reviewed-by: Harsh Prateek Bora <harshpb@linux.ibm.com>
> ---
> target/ppc/excp_helper.c | 5 +++--
> 1 file changed, 3 insertions(+), 2 deletions(-)
>
> diff --git a/target/ppc/excp_helper.c b/target/ppc/excp_helper.c
> index 80f584f933..674c05a2ce 100644
> --- a/target/ppc/excp_helper.c
> +++ b/target/ppc/excp_helper.c
> @@ -1345,9 +1345,10 @@ static void powerpc_excp_books(PowerPCCPU *cpu, int excp)
> * clear (e.g., see FWNMI in PAPR).
> */
> new_msr |= (target_ulong)MSR_HVB;
> +
> + /* HV machine check exceptions don't have ME set */
> + new_msr &= ~((target_ulong)1 << MSR_ME);
> }
> - /* machine check exceptions don't have ME set */
> - new_msr &= ~((target_ulong)1 << MSR_ME);
>
> msr |= env->error_code;
> break;
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2024-03-22 8:33 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-03-21 5:54 [PATCH] target/ppc: Do not clear MSR[ME] on MCE interrupts to supervisor Nicholas Piggin
2024-03-22 8:32 ` Harsh Prateek Bora
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).