On Mon, 2010-08-16 at 20:42 +0200, Stefan Richter wrote:
It says the locks nest like:
(&(shost->host_lock)->rlock){-.-...}
(&t->split_timeout_timer){+.-...}
But:
...
vs
...
So shost->host_lock->rlock is a lock used in hardirq context but
split_timeout_timer is a !irq-safe lock.
Which means that it now worries the following can happen:
softirq:
spin_lock(&t->split_timeout_timer);
IRQ:
spin_lock(&(shost->host_lock)->rlock);
spin_lock(&t->split_timeout_timer);
Now, the thing is that split_timeout_timer is a fake lock used to
annotate timers, its use is to connect lock chains from within the timer
callback to del_timer_sync() callers, to detect deadlocks.
Now, I can't seem to remember why del_timer_sync() explicitly disables
IRQs but call_timer_fn() does not, Johill, happen to remember?
--