On Thu 2026-06-25 15:25:57, Bradley Morgan wrote:
> The powerpc watchdog prints all CPU backtraces itself. When the watchdog
> mask contains only SYS_INFO_ALL_BT, stripping that bit leaves zero and
> sys_info(0) falls back to kernel_sys_info.
> 
> Use sys_info_with_filter() so an explicit all_bt mask does not request
> the global default.
> 
> --- a/arch/powerpc/kernel/watchdog.c
> +++ b/arch/powerpc/kernel/watchdog.c
> @@ -418,11 +421,12 @@ DEFINE_INTERRUPT_HANDLER_NMI(soft_nmi_interrupt)
>  
>               xchg(&__wd_nmi_output, 1); // see wd_lockup_ipi
>  
> +             si_mask = READ_ONCE(hardlockup_si_mask);
>               if (sysctl_hardlockup_all_cpu_backtrace ||
> -                 (hardlockup_si_mask & SYS_INFO_ALL_BT))
> +                 (si_mask & SYS_INFO_ALL_BT))
>                       trigger_allbutcpu_cpu_backtrace(cpu);
>  
> -             sys_info(hardlockup_si_mask & ~SYS_INFO_ALL_BT);
> +             sys_info_with_filter(si_mask, SYS_INFO_ALL_BT);
>               if (hardlockup_panic)
>                       nmi_panic(regs, "Hard LOCKUP");

I thought more about it and it is even more complicated.

Even if we prevent the duplicated output with sys_info_with_filter()
here. Then nmi_panic() might still trigger it once again.

We could say that this patch is a step in the right direction and
fix the other problem later. But I am not sure. We might need
a completely different approach and this is just a step aside.

And there is another problem in the panic() code. I am going to
comment in it in the 4th patch.

Best Regards,
Petr

Reply via email to