Whenever sched_scan(BG_SCAN) is in progress and driver downloads any command, firmware will send an event BG_SCAN_STOPPED. On recieving this, driver calls cfg80211_sched_scan_stopped. This function in turn will try to acquire rtnl_lock. But if the rtnl_lock was already held(while sending the command above), this will result in nested rtnl locking. To fix this driver must call rtnl version of the API if rtnl_is_locked(). Signed-off-by: Cathy Luo <cluo@xxxxxxxxxxx> Signed-off-by: Ganapathi Bhat <gbhat@xxxxxxxxxxx> --- drivers/net/wireless/marvell/mwifiex/sta_event.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/drivers/net/wireless/marvell/mwifiex/sta_event.c b/drivers/net/wireless/marvell/mwifiex/sta_event.c index 93dfb76..03ef625c 100644 --- a/drivers/net/wireless/marvell/mwifiex/sta_event.c +++ b/drivers/net/wireless/marvell/mwifiex/sta_event.c @@ -848,7 +848,10 @@ int mwifiex_process_sta_event(struct mwifiex_private *priv) case EVENT_BG_SCAN_STOPPED: dev_dbg(adapter->dev, "event: BGS_STOPPED\n"); - cfg80211_sched_scan_stopped(priv->wdev.wiphy, 0); + if (rtnl_is_locked()) + cfg80211_sched_scan_stopped_rtnl(priv->wdev.wiphy, 0); + else + cfg80211_sched_scan_stopped(priv->wdev.wiphy, 0); if (priv->sched_scanning) priv->sched_scanning = false; break; -- 1.9.1