Revert "staging: rtl8723bs: remove possible deadlock when disconnect"
This reverts commit 78a1614a81
.
There's been attempts to fix this, but it's not quite right yet, so just
remove the original commit.
Link: https://lore.kernel.org/r/20210913130346.2390-1-fabioaiuto83@gmail.com
Cc: Larry Finger <Larry.Finger@lwfinger.net>
Cc: Fabio Aiuto <fabioaiuto83@gmail.com>
Cc: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
cc5e3fff9a
commit
ea2054baad
|
@ -5919,6 +5919,7 @@ u8 chk_bmc_sleepq_hdl(struct adapter *padapter, unsigned char *pbuf)
|
|||
struct sta_info *psta_bmc;
|
||||
struct list_head *xmitframe_plist, *xmitframe_phead, *tmp;
|
||||
struct xmit_frame *pxmitframe = NULL;
|
||||
struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
|
||||
struct sta_priv *pstapriv = &padapter->stapriv;
|
||||
|
||||
/* for BC/MC Frames */
|
||||
|
@ -5929,7 +5930,8 @@ u8 chk_bmc_sleepq_hdl(struct adapter *padapter, unsigned char *pbuf)
|
|||
if ((pstapriv->tim_bitmap&BIT(0)) && (psta_bmc->sleepq_len > 0)) {
|
||||
msleep(10);/* 10ms, ATIM(HIQ) Windows */
|
||||
|
||||
spin_lock_bh(&psta_bmc->sleep_q.lock);
|
||||
/* spin_lock_bh(&psta_bmc->sleep_q.lock); */
|
||||
spin_lock_bh(&pxmitpriv->lock);
|
||||
|
||||
xmitframe_phead = get_list_head(&psta_bmc->sleep_q);
|
||||
list_for_each_safe(xmitframe_plist, tmp, xmitframe_phead) {
|
||||
|
@ -5952,7 +5954,8 @@ u8 chk_bmc_sleepq_hdl(struct adapter *padapter, unsigned char *pbuf)
|
|||
rtw_hal_xmitframe_enqueue(padapter, pxmitframe);
|
||||
}
|
||||
|
||||
spin_unlock_bh(&psta_bmc->sleep_q.lock);
|
||||
/* spin_unlock_bh(&psta_bmc->sleep_q.lock); */
|
||||
spin_unlock_bh(&pxmitpriv->lock);
|
||||
|
||||
/* check hi queue and bmc_sleepq */
|
||||
rtw_chk_hi_queue_cmd(padapter);
|
||||
|
|
|
@ -957,8 +957,10 @@ static signed int validate_recv_ctrl_frame(struct adapter *padapter, union recv_
|
|||
if ((psta->state&WIFI_SLEEP_STATE) && (pstapriv->sta_dz_bitmap&BIT(psta->aid))) {
|
||||
struct list_head *xmitframe_plist, *xmitframe_phead;
|
||||
struct xmit_frame *pxmitframe = NULL;
|
||||
struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
|
||||
|
||||
spin_lock_bh(&psta->sleep_q.lock);
|
||||
/* spin_lock_bh(&psta->sleep_q.lock); */
|
||||
spin_lock_bh(&pxmitpriv->lock);
|
||||
|
||||
xmitframe_phead = get_list_head(&psta->sleep_q);
|
||||
xmitframe_plist = get_next(xmitframe_phead);
|
||||
|
@ -989,10 +991,12 @@ static signed int validate_recv_ctrl_frame(struct adapter *padapter, union recv_
|
|||
update_beacon(padapter, WLAN_EID_TIM, NULL, true);
|
||||
}
|
||||
|
||||
spin_unlock_bh(&psta->sleep_q.lock);
|
||||
/* spin_unlock_bh(&psta->sleep_q.lock); */
|
||||
spin_unlock_bh(&pxmitpriv->lock);
|
||||
|
||||
} else {
|
||||
spin_unlock_bh(&psta->sleep_q.lock);
|
||||
/* spin_unlock_bh(&psta->sleep_q.lock); */
|
||||
spin_unlock_bh(&pxmitpriv->lock);
|
||||
|
||||
if (pstapriv->tim_bitmap&BIT(psta->aid)) {
|
||||
if (psta->sleepq_len == 0) {
|
||||
|
|
|
@ -1797,7 +1797,6 @@ s32 rtw_xmit_classifier(struct adapter *padapter, struct xmit_frame *pxmitframe)
|
|||
struct sta_info *psta;
|
||||
struct tx_servq *ptxservq;
|
||||
struct pkt_attrib *pattrib = &pxmitframe->attrib;
|
||||
struct xmit_priv *xmit_priv = &padapter->xmitpriv;
|
||||
struct hw_xmit *phwxmits = padapter->xmitpriv.hwxmits;
|
||||
signed int res = _SUCCESS;
|
||||
|
||||
|
@ -1815,14 +1814,12 @@ s32 rtw_xmit_classifier(struct adapter *padapter, struct xmit_frame *pxmitframe)
|
|||
|
||||
ptxservq = rtw_get_sta_pending(padapter, psta, pattrib->priority, (u8 *)(&ac_index));
|
||||
|
||||
spin_lock_bh(&xmit_priv->lock);
|
||||
if (list_empty(&ptxservq->tx_pending))
|
||||
list_add_tail(&ptxservq->tx_pending, get_list_head(phwxmits[ac_index].sta_queue));
|
||||
|
||||
list_add_tail(&pxmitframe->list, get_list_head(&ptxservq->sta_pending));
|
||||
ptxservq->qcnt++;
|
||||
phwxmits[ac_index].accnt++;
|
||||
spin_unlock_bh(&xmit_priv->lock);
|
||||
|
||||
exit:
|
||||
|
||||
|
@ -2205,10 +2202,11 @@ void wakeup_sta_to_xmit(struct adapter *padapter, struct sta_info *psta)
|
|||
struct list_head *xmitframe_plist, *xmitframe_phead, *tmp;
|
||||
struct xmit_frame *pxmitframe = NULL;
|
||||
struct sta_priv *pstapriv = &padapter->stapriv;
|
||||
struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
|
||||
|
||||
psta_bmc = rtw_get_bcmc_stainfo(padapter);
|
||||
|
||||
spin_lock_bh(&psta->sleep_q.lock);
|
||||
spin_lock_bh(&pxmitpriv->lock);
|
||||
|
||||
xmitframe_phead = get_list_head(&psta->sleep_q);
|
||||
list_for_each_safe(xmitframe_plist, tmp, xmitframe_phead) {
|
||||
|
@ -2309,7 +2307,7 @@ void wakeup_sta_to_xmit(struct adapter *padapter, struct sta_info *psta)
|
|||
|
||||
_exit:
|
||||
|
||||
spin_unlock_bh(&psta->sleep_q.lock);
|
||||
spin_unlock_bh(&pxmitpriv->lock);
|
||||
|
||||
if (update_mask)
|
||||
update_beacon(padapter, WLAN_EID_TIM, NULL, true);
|
||||
|
@ -2321,8 +2319,9 @@ void xmit_delivery_enabled_frames(struct adapter *padapter, struct sta_info *pst
|
|||
struct list_head *xmitframe_plist, *xmitframe_phead, *tmp;
|
||||
struct xmit_frame *pxmitframe = NULL;
|
||||
struct sta_priv *pstapriv = &padapter->stapriv;
|
||||
struct xmit_priv *pxmitpriv = &padapter->xmitpriv;
|
||||
|
||||
spin_lock_bh(&psta->sleep_q.lock);
|
||||
spin_lock_bh(&pxmitpriv->lock);
|
||||
|
||||
xmitframe_phead = get_list_head(&psta->sleep_q);
|
||||
list_for_each_safe(xmitframe_plist, tmp, xmitframe_phead) {
|
||||
|
@ -2375,7 +2374,7 @@ void xmit_delivery_enabled_frames(struct adapter *padapter, struct sta_info *pst
|
|||
}
|
||||
}
|
||||
|
||||
spin_unlock_bh(&psta->sleep_q.lock);
|
||||
spin_unlock_bh(&pxmitpriv->lock);
|
||||
}
|
||||
|
||||
void enqueue_pending_xmitbuf(struct xmit_priv *pxmitpriv, struct xmit_buf *pxmitbuf)
|
||||
|
|
|
@ -507,7 +507,9 @@ s32 rtl8723bs_hal_xmit(
|
|||
rtw_issue_addbareq_cmd(padapter, pxmitframe);
|
||||
}
|
||||
|
||||
spin_lock_bh(&pxmitpriv->lock);
|
||||
err = rtw_xmitframe_enqueue(padapter, pxmitframe);
|
||||
spin_unlock_bh(&pxmitpriv->lock);
|
||||
if (err != _SUCCESS) {
|
||||
rtw_free_xmitframe(pxmitpriv, pxmitframe);
|
||||
|
||||
|
|
Loading…
Reference in New Issue