From 9746546b81e1b651f5e1aca373d79bebf67eced6 Mon Sep 17 00:00:00 2001 From: Luciano Coelho Date: Wed, 18 Jul 2012 14:58:59 +0300 Subject: [PATCH] --- yaml --- r: 315649 b: refs/heads/master c: 5285eb5442fe530d407dead812bcfbd8f2af0f46 h: refs/heads/master i: 315647: 8df9f2fbab2fc63d1e1ac6292e68b0d2d69fc7a5 v: v3 --- [refs] | 2 +- trunk/drivers/net/wireless/ti/wlcore/cmd.c | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index 2bca438cf024..27e0d6c9ad78 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: cc31a3c9aeedcb1330f34dbfccf6a979919d81f2 +refs/heads/master: 5285eb5442fe530d407dead812bcfbd8f2af0f46 diff --git a/trunk/drivers/net/wireless/ti/wlcore/cmd.c b/trunk/drivers/net/wireless/ti/wlcore/cmd.c index a23949cdaebc..20e1bd923832 100644 --- a/trunk/drivers/net/wireless/ti/wlcore/cmd.c +++ b/trunk/drivers/net/wireless/ti/wlcore/cmd.c @@ -497,6 +497,7 @@ int wl12xx_cmd_role_stop_sta(struct wl1271 *wl, struct wl12xx_vif *wlvif) { struct wl12xx_cmd_role_stop *cmd; int ret; + bool timeout = false; if (WARN_ON(wlvif->sta.hlid == WL12XX_INVALID_LINK_ID)) return -EINVAL; @@ -519,6 +520,17 @@ int wl12xx_cmd_role_stop_sta(struct wl1271 *wl, struct wl12xx_vif *wlvif) goto out_free; } + /* + * Sometimes the firmware doesn't send this event, so we just + * time out without failing. Queue recovery for other + * failures. + */ + ret = wl1271_cmd_wait_for_event_or_timeout(wl, + ROLE_STOP_COMPLETE_EVENT_ID, + &timeout); + if (ret) + wl12xx_queue_recovery_work(wl); + wl12xx_free_link(wl, wlvif, &wlvif->sta.hlid); out_free: