On Mon, 2010-10-04 at 22:27 -0700, Ben Greear wrote: > I think the deadlock might be between kworker and ip, on the > sdata->u.mgd.mtx v/s iflist_mtx lock. It seems both processes > have ifmgd->mtx held, and worker is trying to grab it again but > blocks. > > I think maybe the ip process has locked a different sdata than > 'forsdata', so that is why this nested lock attempt by the worker thread > to all of the !forsdata objects blocks? > > void ieee80211_recalc_smps(struct ieee80211_local *local, > struct ieee80211_sub_if_data *forsdata) > ... > if (sdata != forsdata) { > /* > * This nested is ok -- we are holding the iflist_mtx > * so can't get here twice or so. But it's required > * since normally we acquire it first and then the > * iflist_mtx. > */ > mutex_lock_nested(&sdata->u.mgd.mtx, SINGLE_DEPTH_NESTING); > count += check_mgd_smps(&sdata->u.mgd, &smps_mode); > mutex_unlock(&sdata->u.mgd.mtx); > } else I just debugged the same based on your other mail ... johannes -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html