diff options
Diffstat (limited to 'net/mac80211/work.c')
| -rw-r--r-- | net/mac80211/work.c | 39 | 
1 files changed, 17 insertions, 22 deletions
diff --git a/net/mac80211/work.c b/net/mac80211/work.c index 81d4ad64184..ae344d1ba05 100644 --- a/net/mac80211/work.c +++ b/net/mac80211/work.c @@ -43,7 +43,7 @@ enum work_action {  /* utils */  static inline void ASSERT_WORK_MTX(struct ieee80211_local *local)  { -	WARN_ON(!mutex_is_locked(&local->work_mtx)); +	lockdep_assert_held(&local->mtx);  }  /* @@ -757,7 +757,7 @@ static void ieee80211_work_rx_queued_mgmt(struct ieee80211_local *local,  	mgmt = (struct ieee80211_mgmt *) skb->data;  	fc = le16_to_cpu(mgmt->frame_control); -	mutex_lock(&local->work_mtx); +	mutex_lock(&local->mtx);  	list_for_each_entry(wk, &local->work_list, list) {  		const u8 *bssid = NULL; @@ -833,7 +833,7 @@ static void ieee80211_work_rx_queued_mgmt(struct ieee80211_local *local,  		WARN(1, "unexpected: %d", rma);  	} -	mutex_unlock(&local->work_mtx); +	mutex_unlock(&local->mtx);  	if (rma != WORK_ACT_DONE)  		goto out; @@ -845,9 +845,9 @@ static void ieee80211_work_rx_queued_mgmt(struct ieee80211_local *local,  	case WORK_DONE_REQUEUE:  		synchronize_rcu();  		wk->started = false; /* restart */ -		mutex_lock(&local->work_mtx); +		mutex_lock(&local->mtx);  		list_add_tail(&wk->list, &local->work_list); -		mutex_unlock(&local->work_mtx); +		mutex_unlock(&local->mtx);  	}   out: @@ -888,9 +888,9 @@ static void ieee80211_work_work(struct work_struct *work)  	while ((skb = skb_dequeue(&local->work_skb_queue)))  		ieee80211_work_rx_queued_mgmt(local, skb); -	ieee80211_recalc_idle(local); +	mutex_lock(&local->mtx); -	mutex_lock(&local->work_mtx); +	ieee80211_recalc_idle(local);  	list_for_each_entry_safe(wk, tmp, &local->work_list, list) {  		bool started = wk->started; @@ -995,20 +995,16 @@ static void ieee80211_work_work(struct work_struct *work)  		run_again(local, jiffies + HZ/2);  	} -	mutex_lock(&local->scan_mtx); -  	if (list_empty(&local->work_list) && local->scan_req &&  	    !local->scanning)  		ieee80211_queue_delayed_work(&local->hw,  					     &local->scan_work,  					     round_jiffies_relative(0)); -	mutex_unlock(&local->scan_mtx); - -	mutex_unlock(&local->work_mtx); -  	ieee80211_recalc_idle(local); +	mutex_unlock(&local->mtx); +  	list_for_each_entry_safe(wk, tmp, &free_work, list) {  		wk->done(wk, NULL);  		list_del(&wk->list); @@ -1035,16 +1031,15 @@ void ieee80211_add_work(struct ieee80211_work *wk)  	wk->started = false;  	local = wk->sdata->local; -	mutex_lock(&local->work_mtx); +	mutex_lock(&local->mtx);  	list_add_tail(&wk->list, &local->work_list); -	mutex_unlock(&local->work_mtx); +	mutex_unlock(&local->mtx);  	ieee80211_queue_work(&local->hw, &local->work_work);  }  void ieee80211_work_init(struct ieee80211_local *local)  { -	mutex_init(&local->work_mtx);  	INIT_LIST_HEAD(&local->work_list);  	setup_timer(&local->work_timer, ieee80211_work_timer,  		    (unsigned long)local); @@ -1057,7 +1052,7 @@ void ieee80211_work_purge(struct ieee80211_sub_if_data *sdata)  	struct ieee80211_local *local = sdata->local;  	struct ieee80211_work *wk; -	mutex_lock(&local->work_mtx); +	mutex_lock(&local->mtx);  	list_for_each_entry(wk, &local->work_list, list) {  		if (wk->sdata != sdata)  			continue; @@ -1065,19 +1060,19 @@ void ieee80211_work_purge(struct ieee80211_sub_if_data *sdata)  		wk->started = true;  		wk->timeout = jiffies;  	} -	mutex_unlock(&local->work_mtx); +	mutex_unlock(&local->mtx);  	/* run cleanups etc. */  	ieee80211_work_work(&local->work_work); -	mutex_lock(&local->work_mtx); +	mutex_lock(&local->mtx);  	list_for_each_entry(wk, &local->work_list, list) {  		if (wk->sdata != sdata)  			continue;  		WARN_ON(1);  		break;  	} -	mutex_unlock(&local->work_mtx); +	mutex_unlock(&local->mtx);  }  ieee80211_rx_result ieee80211_work_rx_mgmt(struct ieee80211_sub_if_data *sdata, @@ -1163,7 +1158,7 @@ int ieee80211_wk_cancel_remain_on_channel(struct ieee80211_sub_if_data *sdata,  	struct ieee80211_work *wk, *tmp;  	bool found = false; -	mutex_lock(&local->work_mtx); +	mutex_lock(&local->mtx);  	list_for_each_entry_safe(wk, tmp, &local->work_list, list) {  		if ((unsigned long) wk == cookie) {  			wk->timeout = jiffies; @@ -1171,7 +1166,7 @@ int ieee80211_wk_cancel_remain_on_channel(struct ieee80211_sub_if_data *sdata,  			break;  		}  	} -	mutex_unlock(&local->work_mtx); +	mutex_unlock(&local->mtx);  	if (!found)  		return -ENOENT;  |