Commit 39a6e737 authored by Sudip Mukherjee's avatar Sudip Mukherjee Committed by Greg Kroah-Hartman

staging: rtl8712: fix stack dump

del_timer_sync() is not to be called in the interrupt context unless
the timer is irqsafe. but most of the functions where commits
6501c8e7 and 382d020f touched were called in interrupt
context. And as a result the WARN_ON was getting triggered. Changed
to del_timer() in places which were called from interrupt.

Fixes: 382d020f ("Staging: rtl8712: Eliminate use of _cancel_timer"
Fixes: 6501c8e7 ("Staging: rtl8712: Eliminate use of _cancel_timer_ex")
Fixes: https://bugzilla.kernel.org/show_bug.cgi?id=97711Reported-by: default avatarArek Rusniak <arek.rusi@gmail.com>
Tested-by: default avatarArek Rusniak <arek.rusi@gmail.com>
Signed-off-by: default avatarSudip Mukherjee <sudip@vectorindia.org>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 9a59029b
This diff is collapsed.
...@@ -910,7 +910,7 @@ void r8712_createbss_cmd_callback(struct _adapter *padapter, ...@@ -910,7 +910,7 @@ void r8712_createbss_cmd_callback(struct _adapter *padapter,
if (pcmd->res != H2C_SUCCESS) if (pcmd->res != H2C_SUCCESS)
mod_timer(&pmlmepriv->assoc_timer, mod_timer(&pmlmepriv->assoc_timer,
jiffies + msecs_to_jiffies(1)); jiffies + msecs_to_jiffies(1));
del_timer_sync(&pmlmepriv->assoc_timer); del_timer(&pmlmepriv->assoc_timer);
#ifdef __BIG_ENDIAN #ifdef __BIG_ENDIAN
/* endian_convert */ /* endian_convert */
pnetwork->Length = le32_to_cpu(pnetwork->Length); pnetwork->Length = le32_to_cpu(pnetwork->Length);
......
...@@ -582,7 +582,7 @@ void r8712_surveydone_event_callback(struct _adapter *adapter, u8 *pbuf) ...@@ -582,7 +582,7 @@ void r8712_surveydone_event_callback(struct _adapter *adapter, u8 *pbuf)
spin_lock_irqsave(&pmlmepriv->lock, irqL); spin_lock_irqsave(&pmlmepriv->lock, irqL);
if (check_fwstate(pmlmepriv, _FW_UNDER_SURVEY) == true) { if (check_fwstate(pmlmepriv, _FW_UNDER_SURVEY) == true) {
del_timer_sync(&pmlmepriv->scan_to_timer); del_timer(&pmlmepriv->scan_to_timer);
_clr_fwstate_(pmlmepriv, _FW_UNDER_SURVEY); _clr_fwstate_(pmlmepriv, _FW_UNDER_SURVEY);
} }
...@@ -696,7 +696,7 @@ void r8712_ind_disconnect(struct _adapter *padapter) ...@@ -696,7 +696,7 @@ void r8712_ind_disconnect(struct _adapter *padapter)
} }
if (padapter->pwrctrlpriv.pwr_mode != if (padapter->pwrctrlpriv.pwr_mode !=
padapter->registrypriv.power_mgnt) { padapter->registrypriv.power_mgnt) {
del_timer_sync(&pmlmepriv->dhcp_timer); del_timer(&pmlmepriv->dhcp_timer);
r8712_set_ps_mode(padapter, padapter->registrypriv.power_mgnt, r8712_set_ps_mode(padapter, padapter->registrypriv.power_mgnt,
padapter->registrypriv.smart_ps); padapter->registrypriv.smart_ps);
} }
...@@ -910,7 +910,7 @@ void r8712_joinbss_event_callback(struct _adapter *adapter, u8 *pbuf) ...@@ -910,7 +910,7 @@ void r8712_joinbss_event_callback(struct _adapter *adapter, u8 *pbuf)
if (check_fwstate(pmlmepriv, WIFI_STATION_STATE) if (check_fwstate(pmlmepriv, WIFI_STATION_STATE)
== true) == true)
r8712_indicate_connect(adapter); r8712_indicate_connect(adapter);
del_timer_sync(&pmlmepriv->assoc_timer); del_timer(&pmlmepriv->assoc_timer);
} else } else
goto ignore_joinbss_callback; goto ignore_joinbss_callback;
} else { } else {
......
...@@ -103,7 +103,7 @@ void r8712_cpwm_int_hdl(struct _adapter *padapter, ...@@ -103,7 +103,7 @@ void r8712_cpwm_int_hdl(struct _adapter *padapter,
if (pwrpriv->cpwm_tog == ((preportpwrstate->state) & 0x80)) if (pwrpriv->cpwm_tog == ((preportpwrstate->state) & 0x80))
return; return;
del_timer_sync(&padapter->pwrctrlpriv.rpwm_check_timer); del_timer(&padapter->pwrctrlpriv.rpwm_check_timer);
_enter_pwrlock(&pwrpriv->lock); _enter_pwrlock(&pwrpriv->lock);
pwrpriv->cpwm = (preportpwrstate->state) & 0xf; pwrpriv->cpwm = (preportpwrstate->state) & 0xf;
if (pwrpriv->cpwm >= PS_STATE_S2) { if (pwrpriv->cpwm >= PS_STATE_S2) {
......
...@@ -198,7 +198,7 @@ void r8712_free_stainfo(struct _adapter *padapter, struct sta_info *psta) ...@@ -198,7 +198,7 @@ void r8712_free_stainfo(struct _adapter *padapter, struct sta_info *psta)
* cancel reordering_ctrl_timer */ * cancel reordering_ctrl_timer */
for (i = 0; i < 16; i++) { for (i = 0; i < 16; i++) {
preorder_ctrl = &psta->recvreorder_ctrl[i]; preorder_ctrl = &psta->recvreorder_ctrl[i];
del_timer_sync(&preorder_ctrl->reordering_ctrl_timer); del_timer(&preorder_ctrl->reordering_ctrl_timer);
} }
spin_lock(&(pfree_sta_queue->lock)); spin_lock(&(pfree_sta_queue->lock));
/* insert into free_sta_queue; 20061114 */ /* insert into free_sta_queue; 20061114 */
......
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