Subject: In many cases softlockup can not be reported after disabling IRQ for long time

From: [email-masked] (Don Zickus)
Date: Thu, 2 Feb 2012 10:58:41 -0500

On Thu, Feb 02, 2012 at 04:17:02PM +0800, TAO HU wrote:
> Hi, Don
> 
> My concern is not actually that the softlockup could not be reported
> while the IRQ is disabled.
> What bothering me is that even AFTER re-enable the IRQ, it will not
> give warning in many cases.
> 
> In theory, disabling IRQ for long time (10s in my case) also implies
> the high priority thread (watchdog) is blocked
> as well.
> So the ideal case is that softlockup driver could give warning right
> after the IRQ is re-enabled.
> It does so occasionally but fails to be consistent.

The only thing I can think of is that the clock/jiffies isn't updated
until after the hrtimer is run.  I'm not sure if there is any guarantee
for ordering once interrupts are enabled.

But that is just a guess.

I guess in theory, I would expect that when interrupts are enabled, the
system would immediately jump into an IRQ context, update the
clock/jiffies, then run all the other irq handlers like hrtimers, which
would see the new time and do the right thing.  After everything is done,
the system would return to your test code and re-enable preemption
allowing the softlockup thread to run again.

I could be very wrong though. :-)

Cheers,
Don