On Wed, Dec 05, 2018 at 11:46:20PM +0800, Feng Tang wrote:
On Wed, Dec 05, 2018 at 05:00:44PM +0900, Sergey Senozhatsky wrote:
On (12/05/18 14:29), Sergey Senozhatsky wrote:
On (12/05/18 11:57), Sergey Senozhatsky wrote:
On (12/05/18 10:47), Feng Tang wrote:
OK... So, apparently, what's happening is panic() calls smp_send_stop(). And smp_send_stop()->native_stop_other_cpus() on x86 disables local APIC. So no fun anymore.
If I keep APIC enabled on panic CPU, then I have my keyboard working, including PageUp-PageDown scrolling, sysrq handling, and so on.
Meeh, it's much harder than this. Worked on one machine only.
Same here, I tried on several platforms and hardly get the sysrq magic key working, though it works while system is running.
And it make me wondering if those workqueue dependent led blinking code can still really work.
Also, IMHO, if we need a panic blink method, it should better be simple and robust with only HW registers access plus delay function, as I'm not sure if the scheduling can still work.
Anyway, can I propose to make the "local_irq_enable" conditional and off by default, and add a warning.
@@ -295,7 +295,10 @@ void panic(const char *fmt, ...) } #endif pr_emerg("---[ end Kernel panic - not syncing: %s ]---\n", buf); - local_irq_enable(); + if (panic_keep_irq_on) + local_irq_enable(); + else + pr_emerg("Please add panic_keep_irq_on to cmdline, if you want blink/sysrq work"); for (i = 0; ; i += PANIC_TIMER_STEP) { touch_softlockup_watchdog(); if (i >= i_next) {
Any comments? thanks!
- Feng
PeterZ, for those folks who sometimes have to use framebuffer for debugging (just a trivial "let me scrollback and see the panic backtrace") and not always have access to serial console, can we have local APIC enabled on the panic_cpu? Or is it a terrible thing to ask for?
The question remains: can we have input irqs on panic_cpu after panic?
With current kernel, the irq is still enabled for the panic CPU, I did see timer and some device's ISR get called, but they will only fire IRQ one time after panic triggered.