Hi Brian,
> 
> IIUC, it's not exactly a nested lock, but a lock inversion issue.
> 
> #1
> NL80211_CMD_GET_INTERFACE thread is holding rtnl lock and later waiting
> on one of its HostCmd_CMD_* to complete
> 
> In the meantime:
> #2
> a EVENT_BG_SCAN_STOPPED is queued, and it grabs the rtnl lock
> 
> Because events are served on the same thread as commands, you get #1
> waiting on #2, which is waiting on the lock held in #1. i.e., ABBA.
> 
> The way to resolve this is to either move event processing to a different
> thread than command processing (that looks it would be very difficult to do
> correctly, given the ossified structure of your driver; but that might be a 
> wise
> move in the long term)...
> ...or else maybe you could defer this specific piece of work to its own 
> thread.
> That might require yet another workqueue?
Yes, with current design we should be doing this. We will try to get this 
change.
> 
> Anyway, the key point is that you really don't want to hold rtnl_lock in your
> main workqueue, or in any other way that might block the rest of the
> operation of your driver.
Ok. Thanks for clarifying the scenario. I missed out the fact that same thread 
is blocked by the lock.
> 
> Brian

Reply via email to