OSDN Git Service

net: qualcomm: rmnet: use masks instead of C bit-fields
authorAlex Elder <elder@linaro.org>
Mon, 15 Mar 2021 21:51:49 +0000 (16:51 -0500)
committerDavid S. Miller <davem@davemloft.net>
Tue, 16 Mar 2021 03:41:58 +0000 (20:41 -0700)
commit16653c16d282e768763b2e8cc78f75df8fd53992
tree9045ff0c70cb92e0cbbc2a2a6cb9de54d03787aa
parent9d131d044f89a808f947d49f1a1865815c610158
net: qualcomm: rmnet: use masks instead of C bit-fields

The actual layout of bits defined in C bit-fields (e.g. int foo : 3)
is implementation-defined.  Structures defined in <linux/if_rmnet.h>
address this by specifying all bit-fields twice, to cover two
possible layouts.

I think this pattern is repetitive and noisy, and I find the whole
notion of compiler "bitfield endianness" to be non-intuitive.

Stop using C bit-fields for the command/data flag and the pad length
fields in the rmnet_map structure, and define a single-byte flags
field instead.  Define a mask for the single-bit "command" flag,
and another mask for the encoded pad length.  The content of both
fields can be accessed using a simple bitwise AND operation.

Signed-off-by: Alex Elder <elder@linaro.org>
Reviewed-by: Bjorn Andersson <bjorn.andersson@linaro.org>
Reviewed-by: Alexander Duyck <alexanderduyck@fb.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/qualcomm/rmnet/rmnet_handlers.c
drivers/net/ethernet/qualcomm/rmnet/rmnet_map_data.c
include/linux/if_rmnet.h