Re: [PATCH net-next v2 5/6] net: qualcomm: rmnet: don't use C bit-fields in rmnet checksum trailer

From: Alex Elder
Date: Mon Mar 08 2021 - 08:40:26 EST


On 3/8/21 4:13 AM, David Laight wrote:
From: Alex Elder
Sent: 06 March 2021 03:16

Replace the use of C bit-fields in the rmnet_map_dl_csum_trailer
structure with a single one-byte field, using constant field masks
to encode or get at embedded values.

Signed-off-by: Alex Elder <elder@xxxxxxxxxx>
Reviewed-by: Bjorn Andersson <bjorn.andersson@xxxxxxxxxx>
---
.../ethernet/qualcomm/rmnet/rmnet_map_data.c | 2 +-
include/linux/if_rmnet.h | 17 +++++++----------
2 files changed, 8 insertions(+), 11 deletions(-)

diff --git a/drivers/net/ethernet/qualcomm/rmnet/rmnet_map_data.c
b/drivers/net/ethernet/qualcomm/rmnet/rmnet_map_data.c
index 3291f252d81b0..29d485b868a65 100644
--- a/drivers/net/ethernet/qualcomm/rmnet/rmnet_map_data.c
+++ b/drivers/net/ethernet/qualcomm/rmnet/rmnet_map_data.c
@@ -365,7 +365,7 @@ int rmnet_map_checksum_downlink_packet(struct sk_buff *skb, u16 len)

csum_trailer = (struct rmnet_map_dl_csum_trailer *)(skb->data + len);

- if (!csum_trailer->valid) {
+ if (!u8_get_bits(csum_trailer->flags, MAP_CSUM_DL_VALID_FMASK)) {

Is that just an overcomplicated way of saying:
if (!(csum_trailer->flags & MAP_CSUM_DL_VALID_FMASK)) {

Yes it is. I defined and used all the field masks in a
consistent way, but I do think it will read better the
way you suggest. Bjorn also asked me privately whether
GENMASK(15, 15) was just the same as BIT(15) (it is).

I will post version 3 of the series, identifying which
fields are single bit/Boolean. For those I will define
the value using BIT() and will set/extract using simple
AND/OR operators. I won't use the _FMASK suffix on such
fields.

Thanks a lot for your comment/question/suggestion. I
like it.

-Alex

David

-
Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes, MK1 1PT, UK
Registration No: 1397386 (Wales)