staging: rtl8723bs: Use % 4096 instead of & 0xfff
The sequence number is constrained to a range of [0, 4095], which is a total of 4096 values. The bitmask operation using `& 0xfff` is used to perform this wrap-around. While this is functionally correct, it obscures the intended semantic of a 4096-based wrap. Using a modulo operation `% 4096u` makes the wrap-around logic explicit and easier to understand. It clearly signals that the sequence number cycles through a range of 4096 values. It also makes the code robust against potential changes of the 4096 upper limit, especially when it becomes a non power-of-2 value while the AND(&) works solely for power-of-2 values. The use of `% 4096u` also guarantees that the modulo operation is performed with unsigned arithmetic, preventing potential issues with the signed types. Found by Coccinelle. Suggested-by: Andy Shevchenko <andy@kernel.org> Suggested-by: David Laight <david.laight.linux@gmail.com> Signed-off-by: Abraham Samuel Adekunle <abrahamadekunle50@gmail.com> Reviewed-by: Andy Shevchenko <andy@kernel.org> Link: https://lore.kernel.org/r/e8d515539ba560961003eae15d301d03e6cdd17d.1744966511.git.abrahamadekunle50@gmail.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
28925280ed
commit
a5df13cd7b
@@ -3511,7 +3511,7 @@ void issue_action_BA(struct adapter *padapter, unsigned char *raddr, unsigned ch
|
||||
/* if ((psta = rtw_get_stainfo(pstapriv, pmlmeinfo->network.mac_address)) != NULL) */
|
||||
psta = rtw_get_stainfo(pstapriv, raddr);
|
||||
if (psta) {
|
||||
start_seq = (psta->sta_xmitpriv.txseq_tid[status & 0x07]&0xfff) + 1;
|
||||
start_seq = (psta->sta_xmitpriv.txseq_tid[status & 0x07] % 4096u) + 1;
|
||||
|
||||
psta->BA_starting_seqctrl[status & 0x07] = start_seq;
|
||||
|
||||
|
||||
@@ -1641,7 +1641,7 @@ static int check_indicate_seq(struct recv_reorder_ctrl *preorder_ctrl, u16 seq_n
|
||||
struct dvobj_priv *psdpriv = padapter->dvobj;
|
||||
struct debug_priv *pdbgpriv = &psdpriv->drv_dbg;
|
||||
u8 wsize = preorder_ctrl->wsize_b;
|
||||
u16 wend = (preorder_ctrl->indicate_seq + wsize - 1) & 0xFFF;/* 4096; */
|
||||
u16 wend = (preorder_ctrl->indicate_seq + wsize - 1) % 4096u;
|
||||
|
||||
/* Rx Reorder initialize condition. */
|
||||
if (preorder_ctrl->indicate_seq == 0xFFFF)
|
||||
@@ -1657,7 +1657,7 @@ static int check_indicate_seq(struct recv_reorder_ctrl *preorder_ctrl, u16 seq_n
|
||||
/* 2. Incoming SeqNum is larger than the WinEnd => Window shift N */
|
||||
/* */
|
||||
if (SN_EQUAL(seq_num, preorder_ctrl->indicate_seq)) {
|
||||
preorder_ctrl->indicate_seq = (preorder_ctrl->indicate_seq + 1) & 0xFFF;
|
||||
preorder_ctrl->indicate_seq = (preorder_ctrl->indicate_seq + 1) % 4096u;
|
||||
|
||||
} else if (SN_LESS(wend, seq_num)) {
|
||||
/* boundary situation, when seq_num cross 0xFFF */
|
||||
@@ -1772,7 +1772,7 @@ static int recv_indicatepkts_in_order(struct adapter *padapter, struct recv_reor
|
||||
list_del_init(&(prframe->u.hdr.list));
|
||||
|
||||
if (SN_EQUAL(preorder_ctrl->indicate_seq, pattrib->seq_num))
|
||||
preorder_ctrl->indicate_seq = (preorder_ctrl->indicate_seq + 1) & 0xFFF;
|
||||
preorder_ctrl->indicate_seq = (preorder_ctrl->indicate_seq + 1) % 4096u;
|
||||
|
||||
/* Set this as a lock to make sure that only one thread is indicating packet. */
|
||||
/* pTS->RxIndicateState = RXTS_INDICATE_PROCESSING; */
|
||||
|
||||
@@ -943,7 +943,7 @@ s32 rtw_make_wlanhdr(struct adapter *padapter, u8 *hdr, struct pkt_attrib *pattr
|
||||
|
||||
if (psta) {
|
||||
psta->sta_xmitpriv.txseq_tid[pattrib->priority]++;
|
||||
psta->sta_xmitpriv.txseq_tid[pattrib->priority] &= 0xFFF;
|
||||
psta->sta_xmitpriv.txseq_tid[pattrib->priority] %= 4096u;
|
||||
pattrib->seqnum = psta->sta_xmitpriv.txseq_tid[pattrib->priority];
|
||||
|
||||
SetSeqNum(hdr, pattrib->seqnum);
|
||||
@@ -964,12 +964,12 @@ s32 rtw_make_wlanhdr(struct adapter *padapter, u8 *hdr, struct pkt_attrib *pattr
|
||||
pattrib->ampdu_en = false;/* AGG BK */
|
||||
} else if (SN_EQUAL(pattrib->seqnum, tx_seq)) {
|
||||
psta->BA_starting_seqctrl[pattrib->priority & 0x0f] =
|
||||
(tx_seq + 1) & 0xfff;
|
||||
(tx_seq + 1) % 4096u;
|
||||
|
||||
pattrib->ampdu_en = true;/* AGG EN */
|
||||
} else {
|
||||
psta->BA_starting_seqctrl[pattrib->priority & 0x0f] =
|
||||
(pattrib->seqnum + 1) & 0xfff;
|
||||
(pattrib->seqnum + 1) % 4096u;
|
||||
|
||||
pattrib->ampdu_en = true;/* AGG EN */
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user