[RFC] how to perform a safe NMI stack trace on all CPUs on x86?

From: çé
Date: Wed May 13 2015 - 10:26:00 EST


Hi all,

In kernel before 3.19, when trigger_all_cpu_backtrace() is called on x86,
it will trigger an NMI on each CPU and call show_regs(). But this can lead
to a hard lock up if the NMI comes in on another printk().

The commit a9edc88093287183ac934be44f295f183b2c62dd (x86/nmi: Perform a safe
NMI stack trace on all CPUs) fix this problem on kernel mainline. when the NMI
triggers, it switches the printk routine for that CPU to call a NMI safe printk
function that records the printk in a per_cpu seq_buf descriptor. After all
NMIs have finished recording its data, the seq_bufs are printed in a safe
context. But how do we fix this problem in older version of kernel(eg, 3.10 stable)?
The 3.10 stable has no "switch printk routine" and "seq_buf" infrastructures.

Could anyone give me some ideas?

Best Regards
Wang Long