From 4cdc544bf8311e0b90bf3d3f5ae80be44e34c8c2 Mon Sep 17 00:00:00 2001 From: Yuri Ershov Date: Wed, 27 Oct 2010 14:47:25 +0400 Subject: [PATCH] wl1251: fix deadlock with ieee80211 beacon filter calls Lockdep shows that there is a deadlock when calling ieee80211_rssi_changed() under wl->mutex. Fix it by releasing mutex before calling mac80211 functions. This patch is based on Work-In-Progress patch sent by Kalle Valo. Signed-off-by: Vidhya Govindan Signed-off-by: Yuri Ershov --- drivers/net/wireless/wl12xx/wl1251_event.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/net/wireless/wl12xx/wl1251_event.c b/drivers/net/wireless/wl12xx/wl1251_event.c index 3c8daa2..0423c79 100644 --- a/drivers/net/wireless/wl12xx/wl1251_event.c +++ b/drivers/net/wireless/wl12xx/wl1251_event.c @@ -81,9 +81,12 @@ static int wl1251_event_process(struct wl1251 *wl, struct event_mailbox *mbox) if (vector & SYNCHRONIZATION_TIMEOUT_EVENT_ID && wl->psm) { wl1251_debug(DEBUG_EVENT, "SYNCHRONIZATION_TIMEOUT_EVENT"); + /* need to unlock mutex to avoid deadlocking with rtnl */ + mutex_unlock(&wl->mutex); /* indicate to the stack, that beacons have been lost */ ieee80211_beacon_loss(wl->vif); + mutex_lock(&wl->mutex); } if (vector & REGAINED_BSS_EVENT_ID) { -- 2.39.5