Message ID | 20250409154356.423512-10-visitorckw@gmail.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | Introduce parity_odd() and refactor redundant parity code | expand |
On Wed, Apr 09, 2025 at 11:43:52PM +0800, Kuan-Wei Chiu wrote: > Refactor parity calculations to use the standard parity_odd() helper. > This change eliminates redundant implementations. > > Co-developed-by: Yu-Chun Lin <eleanor15x@gmail.com> > Signed-off-by: Yu-Chun Lin <eleanor15x@gmail.com> > Signed-off-by: Kuan-Wei Chiu <visitorckw@gmail.com> > Acked-by: Arend van Spriel <arend.vanspriel@broadcom.com> > --- > .../wireless/broadcom/brcm80211/brcmsmac/dma.c | 18 ++---------------- > 1 file changed, 2 insertions(+), 16 deletions(-) > > diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmsmac/dma.c b/drivers/net/wireless/broadcom/brcm80211/brcmsmac/dma.c > index 80c35027787a..5d7500ee2d3b 100644 > --- a/drivers/net/wireless/broadcom/brcm80211/brcmsmac/dma.c > +++ b/drivers/net/wireless/broadcom/brcm80211/brcmsmac/dma.c > @@ -17,6 +17,7 @@ > #include <linux/slab.h> > #include <linux/delay.h> > #include <linux/pci.h> > +#include <linux/bitops.h> > #include <net/cfg80211.h> > #include <net/mac80211.h> > > @@ -283,24 +284,9 @@ struct dma_info { > bool aligndesc_4k; > }; > > -/* Check for odd number of 1's */ > -static u32 parity32(__le32 data) > -{ > - /* no swap needed for counting 1's */ > - u32 par_data = *(u32 *)&data; > - > - par_data ^= par_data >> 16; > - par_data ^= par_data >> 8; > - par_data ^= par_data >> 4; > - par_data ^= par_data >> 2; > - par_data ^= par_data >> 1; > - > - return par_data & 1; > -} > - > static bool dma64_dd_parity(struct dma64desc *dd) > { > - return parity32(dd->addrlow ^ dd->addrhigh ^ dd->ctrl1 ^ dd->ctrl2); > + return parity_odd(dd->addrlow ^ dd->addrhigh ^ dd->ctrl1 ^ dd->ctrl2); > } parity32 expected a little-endian integer as it's argument while parity_odd expects a host byte order value. I realise that the existing code just casts-away the endianness annotation, but this patch adds a Sparse warning. .../brcmsmac/dma.c:289:66: warning: incorrect type in argument 1 (different base types) .../brcmsmac/dma.c:289:66: expected unsigned long long [usertype] val .../brcmsmac/dma.c:289:66: got restricted __le32 > > /* descriptor bumping functions */ > -- > 2.34.1 > >
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmsmac/dma.c b/drivers/net/wireless/broadcom/brcm80211/brcmsmac/dma.c index 80c35027787a..5d7500ee2d3b 100644 --- a/drivers/net/wireless/broadcom/brcm80211/brcmsmac/dma.c +++ b/drivers/net/wireless/broadcom/brcm80211/brcmsmac/dma.c @@ -17,6 +17,7 @@ #include <linux/slab.h> #include <linux/delay.h> #include <linux/pci.h> +#include <linux/bitops.h> #include <net/cfg80211.h> #include <net/mac80211.h> @@ -283,24 +284,9 @@ struct dma_info { bool aligndesc_4k; }; -/* Check for odd number of 1's */ -static u32 parity32(__le32 data) -{ - /* no swap needed for counting 1's */ - u32 par_data = *(u32 *)&data; - - par_data ^= par_data >> 16; - par_data ^= par_data >> 8; - par_data ^= par_data >> 4; - par_data ^= par_data >> 2; - par_data ^= par_data >> 1; - - return par_data & 1; -} - static bool dma64_dd_parity(struct dma64desc *dd) { - return parity32(dd->addrlow ^ dd->addrhigh ^ dd->ctrl1 ^ dd->ctrl2); + return parity_odd(dd->addrlow ^ dd->addrhigh ^ dd->ctrl1 ^ dd->ctrl2); } /* descriptor bumping functions */