drivers/staging/rtl8723bs/core/rtw_xmit.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
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 with `4096u` makes the wrap-around logic
explicit and easier to understand. It clearly signals that the sequence
number cycles though a range of 4096 values.
The use of `4096u` also guarantees that the modulo operation is performed
with unsigned arithmetic, preventing potential issues with signed types.
Suggested-by: Andy Shevchenko <andy@kernel.org>
David Laight <david.laight.linux@gmail.com>
Signed-off-by: Abraham Samuel Adekunle <abrahamadekunle50@gmail.com>
---
Changes in v2:
- Changed the commit message to a more descriptive message which
makes it clear why the patch does the change.
- Changed the subject title to include `4096u` to show that an unsigned
module is used.
Changes in v1:
- Added more patch recipients.
drivers/staging/rtl8723bs/core/rtw_xmit.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/drivers/staging/rtl8723bs/core/rtw_xmit.c b/drivers/staging/rtl8723bs/core/rtw_xmit.c
index 297c93d65315..f534bf2448c3 100644
--- a/drivers/staging/rtl8723bs/core/rtw_xmit.c
+++ b/drivers/staging/rtl8723bs/core/rtw_xmit.c
@@ -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);
@@ -963,11 +963,11 @@ s32 rtw_make_wlanhdr(struct adapter *padapter, u8 *hdr, struct pkt_attrib *pattr
if (SN_LESS(pattrib->seqnum, tx_seq)) {
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;
+ psta->BA_starting_seqctrl[pattrib->priority & 0x0f] = (tx_seq+1)&4096u;
pattrib->ampdu_en = true;/* AGG EN */
} else {
- psta->BA_starting_seqctrl[pattrib->priority & 0x0f] = (pattrib->seqnum+1)&0xfff;
+ psta->BA_starting_seqctrl[pattrib->priority & 0x0f] = (pattrib->seqnum+1)&4096u;
pattrib->ampdu_en = true;/* AGG EN */
}
}
--
2.34.1
On Mon, Apr 07, 2025 at 12:27:53AM +0000, Abraham Samuel Adekunle wrote: > 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 with `4096u` makes the wrap-around logic > explicit and easier to understand. It clearly signals that the sequence > number cycles though a range of 4096 values. > > The use of `4096u` also guarantees that the modulo operation is performed > with unsigned arithmetic, preventing potential issues with signed types. > > Suggested-by: Andy Shevchenko <andy@kernel.org> > David Laight <david.laight.linux@gmail.com> > > Signed-off-by: Abraham Samuel Adekunle <abrahamadekunle50@gmail.com> > --- > Changes in v2: > - Changed the commit message to a more descriptive message which > makes it clear why the patch does the change. > - Changed the subject title to include `4096u` to show that an unsigned > module is used. > Changes in v1: > - Added more patch recipients. > > drivers/staging/rtl8723bs/core/rtw_xmit.c | 6 +++--- Any specific reason you did not include the staging mailing list like scripts/get_maintainers.pl asks you to? thanks, greg k-h
On Mon, Apr 7, 2025 at 6:10 AM Greg Kroah-Hartman <gregkh@linuxfoundation.org> wrote: > > On Mon, Apr 07, 2025 at 12:27:53AM +0000, Abraham Samuel Adekunle wrote: > > 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 with `4096u` makes the wrap-around logic > > explicit and easier to understand. It clearly signals that the sequence > > number cycles though a range of 4096 values. > > > > The use of `4096u` also guarantees that the modulo operation is performed > > with unsigned arithmetic, preventing potential issues with signed types. > > > > Suggested-by: Andy Shevchenko <andy@kernel.org> > > David Laight <david.laight.linux@gmail.com> > > > > Signed-off-by: Abraham Samuel Adekunle <abrahamadekunle50@gmail.com> > > --- > > Changes in v2: > > - Changed the commit message to a more descriptive message which > > makes it clear why the patch does the change. > > - Changed the subject title to include `4096u` to show that an unsigned > > module is used. > > Changes in v1: > > - Added more patch recipients. > > > > drivers/staging/rtl8723bs/core/rtw_xmit.c | 6 +++--- > > Any specific reason you did not include the staging mailing list like > scripts/get_maintainers.pl asks you to? Thank you, Greg. I have sent an updated patch. Adekunle
On Mon, Apr 7, 2025 at 3:27 AM Abraham Samuel Adekunle <abrahamadekunle50@gmail.com> wrote: > > 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 with `4096u` makes the wrap-around logic > explicit and easier to understand. It clearly signals that the sequence > number cycles though a range of 4096 values. > > The use of `4096u` also guarantees that the modulo operation is performed > with unsigned arithmetic, preventing potential issues with signed types. Also there are a couple of important things about modulo vs. AND: The modulo use for wrapping around is making code robust against potential changes of the upper range, especially when it becomes non-power-of-2 value, the AND works solely for power-of-2 values. The modulo in case of power-of-2 is optimised by the compiler to the same or equivalent code. > Suggested-by: Andy Shevchenko <andy@kernel.org> > David Laight <david.laight.linux@gmail.com> Not sure what tag David's name is meant for. > This blank line shouldn't be here. It's a tag block where we don't put blank lines. > Signed-off-by: Abraham Samuel Adekunle <abrahamadekunle50@gmail.com> -- With Best Regards, Andy Shevchenko
© 2016 - 2026 Red Hat, Inc.