On Wed, 2006-11-29 at 18:49 +1100, Herbert Xu wrote: > Peter Zijlstra <[EMAIL PROTECTED]> wrote: > > > > ========================================================= > > [ INFO: possible irq lock inversion dependency detected ] > > 2.6.19-rc6 #4 > > --------------------------------------------------------- > > nc/1854 just changed the state of lock: > > (af_callback_keys + sk->sk_family#2){-.-?}, at: [<c0268a7f>] > > sock_def_error_report+0x1f/0x90 > > but this lock was taken by another, soft-irq-safe lock in the past: > > (slock-AF_INET){-+..} > > > > and interrupts could create inverse lock ordering between them. > > I think this is bogus. The slock is not a standard lock. When we > hold it in process context we don't actually hold the spin lock part > of it. However, it does prevent the softirq path from running in > critical sections which also prevents any attempt to grab the > callback lock from softirq context. > > If you still think there is a problem, please show an actual scenario > where it dead locks.
process context does lock_sock(sk) which is basically a sleeping lock and sets an owner field when acquired. BH context does bh_lock_sock(sk); which spins on the spinlock protecting the owner field; and checks for an owner under this lock. When an owner is found it will stick the skb on a queue for later processing. This scheme does indeed seem to avoid the reported deadlock scenario - although I didn't audit all code paths. However I'm not quite sure yet how to teach lockdep about this. The proposed patch will shut it up though. - To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html