Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 21a4cc00 authored by John W. Linville's avatar John W. Linville
Browse files

at76c50x-usb: avoid mutex deadlock in at76_dwork_hw_scan

http://bugzilla.kernel.org/show_bug.cgi?id=13312



at76_dwork_hw_scan holds a mutex while calling ieee80211_scan_completed,
which then calls at76_config which needs the same mutex.  This reworks
the ordering to not hold the lock while calling ieee80211_scan_completed.

Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 4d3383d0
Loading
Loading
Loading
Loading
+6 −6
Original line number Diff line number Diff line
@@ -1873,18 +1873,18 @@ static void at76_dwork_hw_scan(struct work_struct *work)
	if (ret != CMD_STATUS_COMPLETE) {
		queue_delayed_work(priv->hw->workqueue, &priv->dwork_hw_scan,
				   SCAN_POLL_INTERVAL);
		goto exit;
		mutex_unlock(&priv->mtx);
		return;
	}

	ieee80211_scan_completed(priv->hw, false);

	if (is_valid_ether_addr(priv->bssid))
		at76_join(priv);

	ieee80211_wake_queues(priv->hw);

exit:
	mutex_unlock(&priv->mtx);

	ieee80211_scan_completed(priv->hw, false);

	ieee80211_wake_queues(priv->hw);
}

static int at76_hw_scan(struct ieee80211_hw *hw,