Skip to contentSkip to conversation

drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2803:26: sparse: invalid assignment: |=

DISCUSSION Fengguang Wu 3 participants 3 messages Oct 3, 2012

Subsystems (3)
lore
Share & tools
lore
#0 lore raw

Hi Yuval,

FYI, there are new sparse warnings show up in

commit: 96bed4b954fd5ef69e32f3c1d2c7c6bdda181316 bnx2x,cnic: use FW 7.8.2

drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:3072:48: sparse: incorrect type in argument 1 (different base types)
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:3072:48: expected unsigned short [usertype] *fw_hi
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:3072:48: got restricted __le16 *<noident>
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:3073:48: sparse: incorrect type in argument 2 (different base types)
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:3073:48: expected unsigned short [usertype] *fw_mid
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:3073:48: got restricted __le16 *<noident>
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:3074:48: sparse: incorrect type in argument 3 (different base types)
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:3074:48: expected unsigned short [usertype] *fw_lo
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:3074:48: got restricted __le16 *<noident>
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:3076:48: sparse: incorrect type in argument 1 (different base types)
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:3076:48: expected unsigned short [usertype] *fw_hi
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:3076:48: got restricted __le16 *<noident>
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:3077:48: sparse: incorrect type in argument 2 (different base types)
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:3077:48: expected unsigned short [usertype] *fw_mid
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:3077:48: got restricted __le16 *<noident>
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:3078:48: sparse: incorrect type in argument 3 (different base types)
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:3078:48: expected unsigned short [usertype] *fw_lo
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:3078:48: got restricted __le16 *<noident>
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2869:26: sparse: incorrect type in assignment (different base types)
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2869:26: expected restricted __le16 [usertype] global_data
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2869:26: got int
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2888:40: sparse: cast from restricted __sum16 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2888:40: sparse: incorrect type in argument 1 (different base types)
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2888:40: expected unsigned short [unsigned] [usertype] val
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2888:40: got restricted __sum16 [usertype] check
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2888:40: sparse: cast from restricted __sum16 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2888:40: sparse: cast from restricted __sum16 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2888:38: sparse: incorrect type in assignment (different base types)
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2888:38: expected restricted __le16 [usertype] tcp_pseudo_csum
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2888:38: got int
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2646:50: sparse: incorrect type in argument 1 (different base types)
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2646:50: expected restricted __wsum [usertype] csum
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2646:50: got unsigned short [unsigned] [usertype] csum
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2646:25: sparse: cast from restricted __sum16 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2650:50: sparse: incorrect type in argument 1 (different base types)
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2650:50: expected restricted __wsum [usertype] csum
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2650:50: got unsigned short [unsigned] [assigned] [usertype] csum
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2650:25: sparse: cast from restricted __sum16 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2898:38: sparse: incorrect type in assignment (different base types)
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2898:38: expected restricted __le16 [usertype] tcp_pseudo_csum
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2898:38: got unsigned short
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2787:29: sparse: cast from restricted __be32 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2787:29: sparse: incorrect type in argument 1 (different base types)
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2787:29: expected unsigned int [unsigned] [usertype] val
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2787:29: got restricted __be32 [usertype] seq
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2787:29: sparse: cast from restricted __be32 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2787:29: sparse: cast from restricted __be32 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2787:29: sparse: cast from restricted __be32 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2787:29: sparse: cast from restricted __be32 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2787:27: sparse: incorrect type in assignment (different base types)
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2787:27: expected restricted __le32 [usertype] tcp_send_seq
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2787:27: got unsigned int
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2791:30: sparse: cast from restricted __be16 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2791:30: sparse: incorrect type in argument 1 (different base types)
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2791:30: expected unsigned short [unsigned] [usertype] val
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2791:30: got restricted __be16 [usertype] id
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2791:30: sparse: cast from restricted __be16 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2791:30: sparse: cast from restricted __be16 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2791:28: sparse: incorrect type in assignment (different base types)
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2791:28: expected restricted __le16 [usertype] ip_id
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2791:28: got int
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2793:25: sparse: cast from restricted __sum16 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2793:25: sparse: incorrect type in argument 1 (different base types)
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2793:25: expected unsigned short [unsigned] [usertype] val
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2793:25: got fouled restricted __sum16
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2793:25: sparse: cast from restricted __sum16 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2793:25: sparse: cast from restricted __sum16 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2792:38: sparse: incorrect type in assignment (different base types)
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2792:38: expected restricted __le16 [usertype] tcp_pseudo_csum
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2792:38: got int
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2799:25: sparse: cast from restricted __sum16 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2799:25: sparse: incorrect type in argument 1 (different base types)
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2799:25: expected unsigned short [unsigned] [usertype] val
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2799:25: got fouled restricted __sum16
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2799:25: sparse: cast from restricted __sum16 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2799:25: sparse: cast from restricted __sum16 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2798:38: sparse: incorrect type in assignment (different base types)
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2798:38: expected restricted __le16 [usertype] tcp_pseudo_csum
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2798:38: got int
+ drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2803:26: sparse: invalid assignment: | drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2803:26: left side has type restricted __le16
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2803:26: right side has type int

vim +2803 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c

f2e0899f drivers/net/bnx2x/bnx2x_cmn.c (Dmitry Kravkov 2010-10-06 2802)
f2e0899f drivers/net/bnx2x/bnx2x_cmn.c (Dmitry Kravkov 2010-10-06 @2803) pbd->global_data |= ETH_TX_PARSE_BD_E1X_PSEUDO_CS_WITHOUT_LEN;
f2e0899f drivers/net/bnx2x/bnx2x_cmn.c (Dmitry Kravkov 2010-10-06 2804) }

The code at line 2803 was first introduced by commit:
f2e0899 bnx2x: Add 57712 support

---
0-DAY kernel build testing backend Open Source Technology Centre
Fengguang Wu, Yuanhan Liu Intel Corporation

#1 lore raw
Quoted 74 lines

drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:3072:48: sparse: incorrect type in argument 1 (different base types)
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:3072:48: expected unsigned short [usertype] *fw_hi
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:3072:48: got restricted __le16 *<noident>
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:3073:48: sparse: incorrect type in argument 2 (different base types)
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:3073:48: expected unsigned short [usertype] *fw_mid
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:3073:48: got restricted __le16 *<noident>
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:3074:48: sparse: incorrect type in argument 3 (different base types)
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:3074:48: expected unsigned short [usertype] *fw_lo
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:3074:48: got restricted __le16 *<noident>
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:3076:48: sparse: incorrect type in argument 1 (different base types)
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:3076:48: expected unsigned short [usertype] *fw_hi
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:3076:48: got restricted __le16 *<noident>
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:3077:48: sparse: incorrect type in argument 2 (different base types)
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:3077:48: expected unsigned short [usertype] *fw_mid
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:3077:48: got restricted __le16 *<noident>
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:3078:48: sparse: incorrect type in argument 3 (different base types)
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:3078:48: expected unsigned short [usertype] *fw_lo
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:3078:48: got restricted __le16 *<noident>
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2869:26: sparse: incorrect type in assignment (different base types)
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2869:26: expected restricted __le16 [usertype] global_data
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2869:26: got int
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2888:40: sparse: cast from restricted __sum16 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2888:40: sparse: incorrect type in argument 1 (different base types)
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2888:40: expected unsigned short [unsigned] [usertype] val
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2888:40: got restricted __sum16 [usertype] check
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2888:40: sparse: cast from restricted __sum16 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2888:40: sparse: cast from restricted __sum16 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2888:38: sparse: incorrect type in assignment (different base types)
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2888:38: expected restricted __le16 [usertype] tcp_pseudo_csum
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2888:38: got int
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2646:50: sparse: incorrect type in argument 1 (different base types)
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2646:50: expected restricted __wsum [usertype] csum
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2646:50: got unsigned short [unsigned] [usertype] csum
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2646:25: sparse: cast from restricted __sum16 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2650:50: sparse: incorrect type in argument 1 (different base types)
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2650:50: expected restricted __wsum [usertype] csum
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2650:50: got unsigned short [unsigned] [assigned] [usertype] csum
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2650:25: sparse: cast from restricted __sum16 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2898:38: sparse: incorrect type in assignment (different base types)
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2898:38: expected restricted __le16 [usertype] tcp_pseudo_csum
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2898:38: got unsigned short
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2787:29: sparse: cast from restricted __be32 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2787:29: sparse: incorrect type in argument 1 (different base types)
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2787:29: expected unsigned int [unsigned] [usertype] val
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2787:29: got restricted __be32 [usertype] seq
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2787:29: sparse: cast from restricted __be32 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2787:29: sparse: cast from restricted __be32 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2787:29: sparse: cast from restricted __be32 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2787:29: sparse: cast from restricted __be32 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2787:27: sparse: incorrect type in assignment (different base types)
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2787:27: expected restricted __le32 [usertype] tcp_send_seq
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2787:27: got unsigned int
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2791:30: sparse: cast from restricted __be16 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2791:30: sparse: incorrect type in argument 1 (different base types)
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2791:30: expected unsigned short [unsigned] [usertype] val
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2791:30: got restricted __be16 [usertype] id
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2791:30: sparse: cast from restricted __be16 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2791:30: sparse: cast from restricted __be16 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2791:28: sparse: incorrect type in assignment (different base types)
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2791:28: expected restricted __le16 [usertype] ip_id
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2791:28: got int
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2793:25: sparse: cast from restricted __sum16 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2793:25: sparse: incorrect type in argument 1 (different base types)
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2793:25: expected unsigned short [unsigned] [usertype] val
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2793:25: got fouled restricted __sum16
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2793:25: sparse: cast from restricted __sum16 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2793:25: sparse: cast from restricted __sum16 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2792:38: sparse: incorrect type in assignment (different base types)
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2792:38: expected restricted __le16 [usertype] tcp_pseudo_csum
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2792:38: got int
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2799:25: sparse: cast from restricted __sum16 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2799:25: sparse: incorrect type in argument 1 (different base types)
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2799:25: expected unsigned short [unsigned] [usertype] val
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2799:25: got fouled restricted __sum16

Quoted 8 lines

drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2799:25: sparse: cast from restricted __sum16 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2799:25: sparse: cast from restricted __sum16 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2798:38: sparse: incorrect type in assignment (different base types)
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2798:38: expected restricted __le16 [usertype] tcp_pseudo_csum
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2798:38: got int
+ drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2803:26: sparse: invalid assignment: |=
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2803:26: left side has type restricted __le16
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c:2803:26: right side has type int

As you can see, this new warning is not alone in the field - there are multiple warnings which already appeared when you compiled bnx2x using sparse.

I'm currently working on a patch (attached) to solve all those compilation warnings, yet even though it solves said issue it still lacks finesse.

It will be sent properly once net-next is re-opened and hopefully solve this new warning as well as ~98% of the other sparse warnings.

Thanks,
Yuval

From eb78cb1ab12a017a9336922b689281a36d949c21 Mon Sep 17 00:00:00 2001
From: Yuval Mintz <[email protected]>
Date: Wed, 3 Oct 2012 08:33:37 +0200
Subject: [PATCH net-next 1/1] bnx2x: Fix various `sparse' warnings

Solves almost all warnings that are currently received when compiling the driver with `C=2 CF=-D__CHECK_ENDIAN__'.

---
 drivers/net/ethernet/broadcom/bnx2x/bnx2x.h        |    4 +-
 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c    |   27 +++--
 drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.h    |    4 +-
 drivers/net/ethernet/broadcom/bnx2x/bnx2x_hsi.h    |   27 +++--
 .../net/ethernet/broadcom/bnx2x/bnx2x_init_ops.h   |    2 +-
 drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c   |   22 ++--
 drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c   |  135 +++++++++++---------
 drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.c     |   78 ++++++------
 drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.h     |   17 ++-
 drivers/net/ethernet/broadcom/bnx2x/bnx2x_stats.c  |   20 ++--
 drivers/net/ethernet/broadcom/bnx2x/bnx2x_stats.h  |   11 +-
 11 files changed, 190 insertions(+), 157 deletions(-)
drivers/net/ethernet/broadcom/bnx2x/bnx2x.h +2 -2
index 72897c4..41425e5 100644
@@ -142,8 +142,8 @@ do {						\
 #define bnx2x_mc_addr(ha)      ((ha)->addr)
 #define bnx2x_uc_addr(ha)      ((ha)->addr)
 
-#define U64_LO(x)			(u32)(((u64)(x)) & 0xffffffff)
-#define U64_HI(x)			(u32)(((u64)(x)) >> 32)
+#define U64_LO(x)			((u32)(((u64)(x)) & 0xffffffff))
+#define U64_HI(x)			((u32)(((u64)(x)) >> 32))
 #define HILO_U64(hi, lo)		((((u64)(hi)) << 32) + (lo))
 
 
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.c +16 -11
index 30f04a3..be351e5 100644
@@ -2640,17 +2640,20 @@ static noinline u16 bnx2x_tx_split(struct bnx2x *bp,
 	return bd_prod;
 }
 
-static inline u16 bnx2x_csum_fix(unsigned char *t_header, u16 csum, s8 fix)
+#define bswab32(b32) ((__force __le32) swab32((__force __u32) (b32)))
+#define bswab16(b16) ((__force __le16) swab16((__force __u16) (b16)))
+static inline __le16 bnx2x_csum_fix(unsigned char *t_header, u16 csum, s8 fix)
 {
+	__sum16 tsum = (__force __sum16) csum;
 	if (fix > 0)
-		csum = (u16) ~csum_fold(csum_sub(csum,
+		tsum = ~csum_fold(csum_sub((__force __wsum) csum,
 				csum_partial(t_header - fix, fix, 0)));
 
 	else if (fix < 0)
-		csum = (u16) ~csum_fold(csum_add(csum,
+		tsum = ~csum_fold(csum_add((__force __wsum) csum,
 				csum_partial(t_header, -fix, 0)));
 
-	return swab16(csum);
+	return bswab16(tsum);
 }
 
 static inline u32 bnx2x_xmit_type(struct bnx2x *bp, struct sk_buff *skb)
@@ -2784,23 +2787,24 @@ static inline void bnx2x_set_pbd_gso(struct sk_buff *skb,
 				     u32 xmit_type)
 {
 	pbd->lso_mss = cpu_to_le16(skb_shinfo(skb)->gso_size);
-	pbd->tcp_send_seq = swab32(tcp_hdr(skb)->seq);
+	pbd->tcp_send_seq = bswab32(tcp_hdr(skb)->seq);
 	pbd->tcp_flags = pbd_tcp_flags(skb);
 
 	if (xmit_type & XMIT_GSO_V4) {
-		pbd->ip_id = swab16(ip_hdr(skb)->id);
+		pbd->ip_id = bswab16(ip_hdr(skb)->id);
 		pbd->tcp_pseudo_csum =
-			swab16(~csum_tcpudp_magic(ip_hdr(skb)->saddr,
+			bswab16(~csum_tcpudp_magic(ip_hdr(skb)->saddr,
 						  ip_hdr(skb)->daddr,
 						  0, IPPROTO_TCP, 0));
 
 	} else
 		pbd->tcp_pseudo_csum =
-			swab16(~csum_ipv6_magic(&ipv6_hdr(skb)->saddr,
+			bswab16(~csum_ipv6_magic(&ipv6_hdr(skb)->saddr,
 						&ipv6_hdr(skb)->daddr,
 						0, IPPROTO_TCP, 0));
 
-	pbd->global_data |= ETH_TX_PARSE_BD_E1X_PSEUDO_CS_WITHOUT_LEN;
+	pbd->global_data |=
+		cpu_to_le16(ETH_TX_PARSE_BD_E1X_PSEUDO_CS_WITHOUT_LEN);
 }
 
 /**
@@ -2867,7 +2871,8 @@ static inline u8 bnx2x_set_pbd_csum(struct bnx2x *bp, struct sk_buff *skb,
 
 	/* for now NS flag is not used in Linux */
 	pbd->global_data =
-		(hlen | ((skb->protocol == cpu_to_be16(ETH_P_8021Q)) <<
+		cpu_to_le16(hlen |
+			    ((skb->protocol == cpu_to_be16(ETH_P_8021Q)) <<
 			 ETH_TX_PARSE_BD_E1X_LLC_SNAP_EN_SHIFT));
 
 	pbd->ip_hlen_w = (skb_transport_header(skb) -
@@ -2885,7 +2890,7 @@ static inline u8 bnx2x_set_pbd_csum(struct bnx2x *bp, struct sk_buff *skb,
 	hlen = hlen*2;
 
 	if (xmit_type & XMIT_CSUM_TCP) {
-		pbd->tcp_pseudo_csum = swab16(tcp_hdr(skb)->check);
+		pbd->tcp_pseudo_csum = bswab16(tcp_hdr(skb)->check);
 
 	} else {
 		s8 fix = SKB_CS_OFF(skb); /* signed! */
drivers/net/ethernet/broadcom/bnx2x/bnx2x_cmn.h +2 -2
index 9c5ea6c..82fccd7 100644
@@ -932,8 +932,8 @@ static inline int bnx2x_func_start(struct bnx2x *bp)
  * @fw_lo:	pointer to lower part
  * @mac:	pointer to MAC address
  */
-static inline void bnx2x_set_fw_mac_addr(u16 *fw_hi, u16 *fw_mid, u16 *fw_lo,
-					 u8 *mac)
+static inline void bnx2x_set_fw_mac_addr(__le16 *fw_hi, __le16 *fw_mid,
+					  __le16 *fw_lo, u8 *mac)
 {
 	((u8 *)fw_hi)[0]  = mac[1];
 	((u8 *)fw_hi)[1]  = mac[0];
drivers/net/ethernet/broadcom/bnx2x/bnx2x_hsi.h +16 -11
index 1870492..81ffc55 100644
@@ -3348,6 +3348,11 @@ struct regpair {
 };
 
 
+struct regpair_native {
+	u32 lo;
+	u32 hi;
+};
+
 /*
  * Classify rule opcodes in E2/E3
  */
@@ -4373,13 +4378,13 @@ struct tstorm_eth_function_common_config {
  * MAC filtering configuration parameters per port in Tstorm
  */
 struct tstorm_eth_mac_filter_config {
-	__le32 ucast_drop_all;
-	__le32 ucast_accept_all;
-	__le32 mcast_drop_all;
-	__le32 mcast_accept_all;
-	__le32 bcast_accept_all;
-	__le32 vlan_filter[2];
-	__le32 unmatched_unicast;
+	u32 ucast_drop_all;
+	u32 ucast_accept_all;
+	u32 mcast_drop_all;
+	u32 mcast_accept_all;
+	u32 bcast_accept_all;
+	u32 vlan_filter[2];
+	u32 unmatched_unicast;
 };
 
 
@@ -4862,7 +4867,7 @@ union event_data {
  * per PF event ring data
  */
 struct event_ring_data {
-	struct regpair base_addr;
+	struct regpair_native base_addr;
 #if defined(__BIG_ENDIAN)
 	u8 index_id;
 	u8 sb_id;
@@ -5093,7 +5098,7 @@ struct pci_entity {
  * The fast-path status block meta-data, common to all chips
  */
 struct hc_sb_data {
-	struct regpair host_sb_addr;
+	struct regpair_native host_sb_addr;
 	struct hc_status_block_sm state_machine[HC_SB_MAX_SM];
 	struct pci_entity p_func;
 #if defined(__BIG_ENDIAN)
@@ -5107,7 +5112,7 @@ struct hc_sb_data {
 	u8 state;
 	u8 rsrv0;
 #endif
-	struct regpair rsrv1[2];
+	struct regpair_native rsrv1[2];
 };
 
 
@@ -5125,7 +5130,7 @@ enum hc_segment {
  * The fast-path status block meta-data
  */
 struct hc_sp_status_block_data {
-	struct regpair host_sb_addr;
+	struct regpair_native host_sb_addr;
 #if defined(__BIG_ENDIAN)
 	u8 rsrv1;
 	u8 state;
drivers/net/ethernet/broadcom/bnx2x/bnx2x_init_ops.h +1 -1
index fe66d90..ea453fc 100644
@@ -218,7 +218,7 @@ static void bnx2x_init_wr_zp(struct bnx2x *bp, u32 addr, u32 len,
 	/* gunzip_outlen is in dwords */
 	len = GUNZIP_OUTLEN(bp);
 	for (i = 0; i < len; i++)
-		((u32 *)GUNZIP_BUF(bp))[i] =
+		((u32 *)GUNZIP_BUF(bp))[i] = (__force u32)
 				cpu_to_le32(((u32 *)GUNZIP_BUF(bp))[i]);
 
 	bnx2x_write_big_buf_wb(bp, addr, len);
drivers/net/ethernet/broadcom/bnx2x/bnx2x_link.c +11 -11
index e2e45ee..832c42d 100644
@@ -11866,8 +11866,8 @@ int bnx2x_phy_probe(struct link_params *params)
 	return 0;
 }
 
-void bnx2x_init_bmac_loopback(struct link_params *params,
-			      struct link_vars *vars)
+static void bnx2x_init_bmac_loopback(struct link_params *params,
+				     struct link_vars *vars)
 {
 	struct bnx2x *bp = params->bp;
 		vars->link_up = 1;
@@ -11886,8 +11886,8 @@ void bnx2x_init_bmac_loopback(struct link_params *params,
 		REG_WR(bp, NIG_REG_EGRESS_DRAIN0_MODE + params->port*4, 0);
 }
 
-void bnx2x_init_emac_loopback(struct link_params *params,
-			      struct link_vars *vars)
+static void bnx2x_init_emac_loopback(struct link_params *params,
+				     struct link_vars *vars)
 {
 	struct bnx2x *bp = params->bp;
 		vars->link_up = 1;
@@ -11905,8 +11905,8 @@ void bnx2x_init_emac_loopback(struct link_params *params,
 		REG_WR(bp, NIG_REG_EGRESS_DRAIN0_MODE + params->port*4, 0);
 }
 
-void bnx2x_init_xmac_loopback(struct link_params *params,
-			      struct link_vars *vars)
+static void bnx2x_init_xmac_loopback(struct link_params *params,
+				     struct link_vars *vars)
 {
 	struct bnx2x *bp = params->bp;
 	vars->link_up = 1;
@@ -11931,8 +11931,8 @@ void bnx2x_init_xmac_loopback(struct link_params *params,
 	REG_WR(bp, NIG_REG_EGRESS_DRAIN0_MODE + params->port*4, 0);
 }
 
-void bnx2x_init_umac_loopback(struct link_params *params,
-			      struct link_vars *vars)
+static void bnx2x_init_umac_loopback(struct link_params *params,
+				     struct link_vars *vars)
 {
 	struct bnx2x *bp = params->bp;
 	vars->link_up = 1;
@@ -11946,8 +11946,8 @@ void bnx2x_init_umac_loopback(struct link_params *params,
 	REG_WR(bp, NIG_REG_EGRESS_DRAIN0_MODE + params->port*4, 0);
 }
 
-void bnx2x_init_xgxs_loopback(struct link_params *params,
-			      struct link_vars *vars)
+static void bnx2x_init_xgxs_loopback(struct link_params *params,
+				     struct link_vars *vars)
 {
 	struct bnx2x *bp = params->bp;
 		vars->link_up = 1;
@@ -12747,7 +12747,7 @@ static int bnx2x_84833_pre_init_phy(struct bnx2x *bp,
 	return 0;
 }
 
-int bnx2x_pre_init_phy(struct bnx2x *bp,
+static int bnx2x_pre_init_phy(struct bnx2x *bp,
 				  u32 shmem_base,
 				  u32 shmem2_base,
 				  u32 chip_id)
drivers/net/ethernet/broadcom/bnx2x/bnx2x_main.c +73 -62

218 lines not on this page · raw message

drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.c +41 -37

242 lines not on this page · raw message

drivers/net/ethernet/broadcom/bnx2x/bnx2x_sp.h +11 -6
index acf2fe4..f359cc2 100644
@@ -518,7 +518,7 @@ struct bnx2x_mcast_ramrod_params {
 	int mcast_list_len;
 };
 
-enum {
+enum bnx2x_mcast_cmd {
 	BNX2X_MCAST_CMD_ADD,
 	BNX2X_MCAST_CMD_CONT,
 	BNX2X_MCAST_CMD_DEL,
@@ -567,7 +567,8 @@ struct bnx2x_mcast_obj {
 	 * @param cmd command to execute (BNX2X_MCAST_CMD_X, see above)
 	 */
 	int (*config_mcast)(struct bnx2x *bp,
-				struct bnx2x_mcast_ramrod_params *p, int cmd);
+				struct bnx2x_mcast_ramrod_params *p,
+				enum bnx2x_mcast_cmd cmd);
 
 	/**
 	 * Fills the ramrod data during the RESTORE flow.
@@ -584,11 +585,13 @@ struct bnx2x_mcast_obj {
 			   int start_bin, int *rdata_idx);
 
 	int (*enqueue_cmd)(struct bnx2x *bp, struct bnx2x_mcast_obj *o,
-			   struct bnx2x_mcast_ramrod_params *p, int cmd);
+			   struct bnx2x_mcast_ramrod_params *p,
+			   enum bnx2x_mcast_cmd cmd);
 
 	void (*set_one_rule)(struct bnx2x *bp,
 			     struct bnx2x_mcast_obj *o, int idx,
-			     union bnx2x_mcast_config_data *cfg_data, int cmd);
+			     union bnx2x_mcast_config_data *cfg_data,
+				 enum bnx2x_mcast_cmd cmd);
 
 	/** Checks if there are more mcast MACs to be set or a previous
 	 *  command is still pending.
@@ -611,7 +614,8 @@ struct bnx2x_mcast_obj {
 	 * feasible.
 	 */
 	int (*validate)(struct bnx2x *bp,
-			struct bnx2x_mcast_ramrod_params *p, int cmd);
+			struct bnx2x_mcast_ramrod_params *p,
+			enum bnx2x_mcast_cmd cmd);
 
 	/**
 	 * Restore the values of internal counters in case of a failure.
@@ -1326,7 +1330,8 @@ void bnx2x_init_mcast_obj(struct bnx2x *bp,
  *         completions.
  */
 int bnx2x_config_mcast(struct bnx2x *bp,
-		       struct bnx2x_mcast_ramrod_params *p, int cmd);
+		       struct bnx2x_mcast_ramrod_params *p,
+			   enum bnx2x_mcast_cmd cmd);
 
 /****************** CREDIT POOL ****************/
 void bnx2x_init_mac_credit_pool(struct bnx2x *bp,
drivers/net/ethernet/broadcom/bnx2x/bnx2x_stats.c +10 -10
index 348ed02..1d29570 100644
@@ -953,8 +953,8 @@ static int bnx2x_storm_stats_update(struct bnx2x *bp)
 		UPDATE_EXTEND_TSTAT(rcv_bcast_pkts,
 					total_broadcast_packets_received);
 		UPDATE_EXTEND_E_TSTAT(pkts_too_big_discard,
-				      etherstatsoverrsizepkts);
-		UPDATE_EXTEND_E_TSTAT(no_buff_discard, no_buff_discard);
+				      etherstatsoverrsizepkts, 32);
+		UPDATE_EXTEND_E_TSTAT(no_buff_discard, no_buff_discard, 16);
 
 		SUB_EXTEND_USTAT(ucast_no_buff_pkts,
 					total_unicast_packets_received);
@@ -1033,15 +1033,15 @@ static int bnx2x_storm_stats_update(struct bnx2x *bp)
 	       estats->total_bytes_received_lo,
 	       estats->rx_stat_ifhcinbadoctets_lo);
 
-	ADD_64(estats->total_bytes_received_hi,
-	       le32_to_cpu(tfunc->rcv_error_bytes.hi),
-	       estats->total_bytes_received_lo,
-	       le32_to_cpu(tfunc->rcv_error_bytes.lo));
+	ADD_64_LE(estats->total_bytes_received_hi,
+		  tfunc->rcv_error_bytes.hi,
+		  estats->total_bytes_received_lo,
+		  tfunc->rcv_error_bytes.lo);
 
-	ADD_64(estats->error_bytes_received_hi,
-	       le32_to_cpu(tfunc->rcv_error_bytes.hi),
-	       estats->error_bytes_received_lo,
-	       le32_to_cpu(tfunc->rcv_error_bytes.lo));
+	ADD_64_LE(estats->error_bytes_received_hi,
+		  tfunc->rcv_error_bytes.hi,
+		  estats->error_bytes_received_lo,
+		  tfunc->rcv_error_bytes.lo);
 
 	UPDATE_ESTAT(etherstatsoverrsizepkts, rx_stat_dot3statsframestoolong);
 
drivers/net/ethernet/broadcom/bnx2x/bnx2x_stats.h +7 -4
index 24b8e50..200265a 100644
@@ -418,16 +418,19 @@ struct bnx2x_fw_port_stats_old {
 			      new->s); \
 	} while (0)
 
-#define UPDATE_EXTEND_TSTAT(s, t) \
+#define UPDATE_EXTEND_TSTAT_X(s, t, size) \
 	do { \
-		diff = le32_to_cpu(tclient->s) - le32_to_cpu(old_tclient->s); \
+		diff = le##size##_to_cpu(tclient->s) - \
+		       le##size##_to_cpu(old_tclient->s); \
 		old_tclient->s = tclient->s; \
 		ADD_EXTEND_64(qstats->t##_hi, qstats->t##_lo, diff); \
 	} while (0)
 
-#define UPDATE_EXTEND_E_TSTAT(s, t) \
+#define UPDATE_EXTEND_TSTAT(s, t) UPDATE_EXTEND_TSTAT_X(s, t, 32)
+
+#define UPDATE_EXTEND_E_TSTAT(s, t, size) \
 	do { \
-		UPDATE_EXTEND_TSTAT(s, t); \
+		UPDATE_EXTEND_TSTAT_X(s, t, size); \
 		ADD_EXTEND_64(estats->t##_hi, estats->t##_lo, diff); \
 	} while (0)
 
Signature · 1 line
1.7.9.rc2
#2 lore raw
In reply to Fengguang Wu
Quoted 3 lines · Yuval Mintz

As you can see, this new warning is not alone in the field - there are multiple warnings which already appeared when you compiled bnx2x using sparse.

It's better to report new bugs anyway. Even if it looks hopeless, someone might decide to address it. I considered reporting these earlier when I sent my patches for this file, but I took the other approach and gave into despair...

regards,
dan carpenter