Commit 3985a465 authored by Jussi Kivilinna's avatar Jussi Kivilinna Committed by John W. Linville

zd1211rw: reset device when CR_BCN_FIFO_SEMAPHORE freezes in beacon setup

When driver fails to acquire device semaphore lock, device usually
freezes soon afterwards. So failing to acquire lock indicates us that
not everything is going right in device/fw. So reset device when
this happens.
Signed-off-by: default avatarJussi Kivilinna <jussi.kivilinna@mbnet.fi>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent a0fd751f
...@@ -703,7 +703,7 @@ static int zd_mac_config_beacon(struct ieee80211_hw *hw, struct sk_buff *beacon) ...@@ -703,7 +703,7 @@ static int zd_mac_config_beacon(struct ieee80211_hw *hw, struct sk_buff *beacon)
dev_err(zd_mac_dev(mac), dev_err(zd_mac_dev(mac),
"Giving up beacon config.\n"); "Giving up beacon config.\n");
r = -ETIMEDOUT; r = -ETIMEDOUT;
goto release_sema; goto reset_device;
} }
} }
msleep(20); msleep(20);
...@@ -770,6 +770,17 @@ static int zd_mac_config_beacon(struct ieee80211_hw *hw, struct sk_buff *beacon) ...@@ -770,6 +770,17 @@ static int zd_mac_config_beacon(struct ieee80211_hw *hw, struct sk_buff *beacon)
mutex_unlock(&mac->chip.mutex); mutex_unlock(&mac->chip.mutex);
kfree(ioreqs); kfree(ioreqs);
return r; return r;
reset_device:
mutex_unlock(&mac->chip.mutex);
kfree(ioreqs);
/* semaphore stuck, reset device to avoid fw freeze later */
dev_warn(zd_mac_dev(mac), "CR_BCN_FIFO_SEMAPHORE stuck, "
"reseting device...");
usb_queue_reset_device(mac->chip.usb.intf);
return r;
} }
static int fill_ctrlset(struct zd_mac *mac, static int fill_ctrlset(struct zd_mac *mac,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment