Messages in this thread | | | Date | Wed, 25 Jan 2012 16:24:32 +0800 | Subject | Softlockup (LOCKUP_DETECTOR) detection issue | From | TAO HU <> |
| |
Hi, All
While playing kernel 3.0.8 with below test code, it does NOT report any softlockup with 60%~70% chances. NOTE: the softlockup timeout is set to 10 seconds (i.e. watchdog_thresh=5) in my test. ... ... preempt_disable(); local_irq_disable(); for (i = 0; i < 20; i++) mdelay(1000); local_irq_enable(); preempt_enable(); ... ...
However, if I remove local_irq_disable()/local_irq_enable() it will report softlockup with no problem. I believe it is due to that after local_irq_enable() touch_softlockup_watchdog() is called prior softlockup timer.
touch_softlockup_watchdog() basically resets the lockup detection process which implies that the 20-second lockup will be ignored. I noticed that touch_softlockup_watchdog() is called in dozens of places in kernel.
Is that a design limitation or a bug? Any way to improve the situation?
kernel/debug/debug_core.c:453: touch_softlockup_watchdog_sync(); kernel/power/hibernate.c:443: touch_softlockup_watchdog(); kernel/panic.c:153: touch_softlockup_watchdog(); kernel/time/timekeeping.c:684: touch_softlockup_watchdog(); kernel/time/tick-sched.c:149: touch_softlockup_watchdog(); kernel/time/tick-sched.c:543: touch_softlockup_watchdog(); kernel/time/tick-sched.c:596: touch_softlockup_watchdog(); kernel/time/tick-sched.c:756: touch_softlockup_watchdog(); kernel/sched_clock.c:277: touch_softlockup_watchdog();
-- Best Regards Hu Tao
| |