在 2025/2/18 21:02, Peter Zijlstra 写道:
On Tue, Feb 18, 2025 at 01:54:08PM +0100, Peter Zijlstra wrote:
---
diff --git a/arch/x86/kernel/cpu/mce/severity.c b/arch/x86/kernel/cpu/mce/severity.c
index dac4d64dfb2a..cb021058165f 100644
--- a/arch/x86/kernel/cpu/mce/severity.c
+++ b/arch/x86/kernel/cpu/mce/severity.c
@@ -300,13 +300,12 @@ static noinstr int error_context(struct mce *m, struct pt_regs *regs)
copy_user = is_copy_from_user(regs);
instrumentation_end();
- switch (fixup_type) {
- case EX_TYPE_UACCESS:
- if (!copy_user)
- return IN_KERNEL;
- m->kflags |= MCE_IN_KERNEL_COPYIN;
- fallthrough;
+ if (copy_user) {
+ m->kflags |= MCE_IN_KERNEL_COPYIN | MCE_IN_KERNEL_COPYIN;
Typing is hard, obviously that second should'be been _RECOV.
Hah, it doesn't matter, I got your point.
+ return IN_KERNEL_RECOV
But why are we having that bit *and* a return value saying the same
thing?
Yes, it is rather redundant. I can refactor this out if @Borislav is
happy with that.
+ }
+ switch (fixup_type) {
case EX_TYPE_FAULT_MCE_SAFE:
case EX_TYPE_DEFAULT_MCE_SAFE:
m->kflags |= MCE_IN_KERNEL_RECOV;
Thanks.
Shuai