From: kernel test robot <lkp@intel.com>
To: oe-kbuild@lists.linux.dev
Cc: lkp@intel.com
Subject: drivers/net/ethernet/sgi/ioc3-eth.c:1017:59: sparse: sparse: incorrect type in argument 5 (different base types)
Date: Mon, 5 Jun 2023 20:52:33 +0800 [thread overview]
Message-ID: <202306052019.1UdM5oXV-lkp@intel.com> (raw)
::::::
:::::: Manual check reason: "low confidence bisect report"
::::::
BCC: lkp@intel.com
CC: oe-kbuild-all@lists.linux.dev
CC: linux-kernel@vger.kernel.org
TO: "Maciej W. Rozycki" <macro@orcam.me.uk>
CC: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
Hi Maciej,
First bad commit (maybe != root cause):
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: 9561de3a55bed6bdd44a12820ba81ec416e705a7
commit: 84aa85108b1b8af0d1d310e76975f421c5975e66 MIPS: Rewrite `csum_tcpudp_nofold' in plain C
date: 1 year ago
:::::: branch date: 19 hours ago
:::::: commit date: 1 year ago
config: mips-randconfig-s053-20230605 (https://download.01.org/0day-ci/archive/20230605/202306052019.1UdM5oXV-lkp@intel.com/config)
compiler: mips64el-linux-gcc (GCC) 12.3.0
reproduce:
mkdir -p ~/bin
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# apt-get install sparse
# sparse version: v0.6.4-39-gce1a6720-dirty
# https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=84aa85108b1b8af0d1d310e76975f421c5975e66
git remote add linus https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
git fetch --no-tags linus master
git checkout 84aa85108b1b8af0d1d310e76975f421c5975e66
# save the config file
mkdir build_dir && cp config build_dir/.config
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.3.0 ~/bin/make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=mips olddefconfig
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.3.0 ~/bin/make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=mips SHELL=/bin/bash drivers/net/ethernet/sgi/
If you fix the issue, kindly add following tag where applicable
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/r/202306052019.1UdM5oXV-lkp@intel.com/
sparse warnings: (new ones prefixed by >>)
drivers/net/ethernet/sgi/ioc3-eth.c:1247:35: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *mem @@ got unsigned int * @@
drivers/net/ethernet/sgi/ioc3-eth.c:1247:35: sparse: expected void volatile [noderef] __iomem *mem
drivers/net/ethernet/sgi/ioc3-eth.c:1247:35: sparse: got unsigned int *
drivers/net/ethernet/sgi/ioc3-eth.c:1248:24: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *mem @@ got unsigned int * @@
drivers/net/ethernet/sgi/ioc3-eth.c:1248:24: sparse: expected void const volatile [noderef] __iomem *mem
drivers/net/ethernet/sgi/ioc3-eth.c:1248:24: sparse: got unsigned int *
drivers/net/ethernet/sgi/ioc3-eth.c:1251:35: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *mem @@ got unsigned int * @@
drivers/net/ethernet/sgi/ioc3-eth.c:1251:35: sparse: expected void volatile [noderef] __iomem *mem
drivers/net/ethernet/sgi/ioc3-eth.c:1251:35: sparse: got unsigned int *
drivers/net/ethernet/sgi/ioc3-eth.c:1252:24: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *mem @@ got unsigned int * @@
drivers/net/ethernet/sgi/ioc3-eth.c:1252:24: sparse: expected void const volatile [noderef] __iomem *mem
drivers/net/ethernet/sgi/ioc3-eth.c:1252:24: sparse: got unsigned int *
drivers/net/ethernet/sgi/ioc3-eth.c:1269:37: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *mem @@ got unsigned int * @@
drivers/net/ethernet/sgi/ioc3-eth.c:1269:37: sparse: expected void volatile [noderef] __iomem *mem
drivers/net/ethernet/sgi/ioc3-eth.c:1269:37: sparse: got unsigned int *
drivers/net/ethernet/sgi/ioc3-eth.c:1270:37: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *mem @@ got unsigned int * @@
drivers/net/ethernet/sgi/ioc3-eth.c:1270:37: sparse: expected void volatile [noderef] __iomem *mem
drivers/net/ethernet/sgi/ioc3-eth.c:1270:37: sparse: got unsigned int *
drivers/net/ethernet/sgi/ioc3-eth.c:999:35: sparse: sparse: cast to restricted __be16
drivers/net/ethernet/sgi/ioc3-eth.c:1016:45: sparse: sparse: restricted __be16 degrades to integer
drivers/net/ethernet/sgi/ioc3-eth.c:1017:60: sparse: sparse: incorrect type in argument 1 (different base types) @@ expected restricted __wsum [usertype] csum @@ got unsigned int [assigned] [usertype] ehsum @@
drivers/net/ethernet/sgi/ioc3-eth.c:1017:60: sparse: expected restricted __wsum [usertype] csum
drivers/net/ethernet/sgi/ioc3-eth.c:1017:60: sparse: got unsigned int [assigned] [usertype] ehsum
>> drivers/net/ethernet/sgi/ioc3-eth.c:1017:59: sparse: sparse: incorrect type in argument 5 (different base types) @@ expected restricted __wsum [usertype] isum @@ got restricted __sum16 @@
drivers/net/ethernet/sgi/ioc3-eth.c:1017:59: sparse: expected restricted __wsum [usertype] isum
drivers/net/ethernet/sgi/ioc3-eth.c:1017:59: sparse: got restricted __sum16
drivers/net/ethernet/sgi/ioc3-eth.c:1015:22: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned int [usertype] csum @@ got restricted __wsum @@
drivers/net/ethernet/sgi/ioc3-eth.c:1015:22: sparse: expected unsigned int [usertype] csum
drivers/net/ethernet/sgi/ioc3-eth.c:1015:22: sparse: got restricted __wsum
drivers/net/ethernet/sgi/ioc3-eth.c:1025:45: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __sum16 [usertype] check @@ got unsigned int [assigned] [usertype] csum @@
drivers/net/ethernet/sgi/ioc3-eth.c:1025:45: sparse: expected restricted __sum16 [usertype] check
drivers/net/ethernet/sgi/ioc3-eth.c:1025:45: sparse: got unsigned int [assigned] [usertype] csum
drivers/net/ethernet/sgi/ioc3-eth.c:1029:45: sparse: sparse: incorrect type in assignment (different base types) @@ expected restricted __sum16 [usertype] check @@ got unsigned int [assigned] [usertype] csum @@
drivers/net/ethernet/sgi/ioc3-eth.c:1029:45: sparse: expected restricted __sum16 [usertype] check
drivers/net/ethernet/sgi/ioc3-eth.c:1029:45: sparse: got unsigned int [assigned] [usertype] csum
drivers/net/ethernet/sgi/ioc3-eth.c:1051:27: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned int [usertype] cmd @@ got restricted __be32 [usertype] @@
drivers/net/ethernet/sgi/ioc3-eth.c:1051:27: sparse: expected unsigned int [usertype] cmd
drivers/net/ethernet/sgi/ioc3-eth.c:1051:27: sparse: got restricted __be32 [usertype]
drivers/net/ethernet/sgi/ioc3-eth.c:1052:30: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned int [usertype] bufcnt @@ got restricted __be32 [usertype] @@
drivers/net/ethernet/sgi/ioc3-eth.c:1052:30: sparse: expected unsigned int [usertype] bufcnt
drivers/net/ethernet/sgi/ioc3-eth.c:1052:30: sparse: got restricted __be32 [usertype]
drivers/net/ethernet/sgi/ioc3-eth.c:1059:30: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned int [usertype] cmd @@ got restricted __be32 [usertype] @@
drivers/net/ethernet/sgi/ioc3-eth.c:1059:30: sparse: expected unsigned int [usertype] cmd
drivers/net/ethernet/sgi/ioc3-eth.c:1059:30: sparse: got restricted __be32 [usertype]
drivers/net/ethernet/sgi/ioc3-eth.c:1061:30: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned int [usertype] bufcnt @@ got restricted __be32 [usertype] @@
drivers/net/ethernet/sgi/ioc3-eth.c:1061:30: sparse: expected unsigned int [usertype] bufcnt
drivers/net/ethernet/sgi/ioc3-eth.c:1061:30: sparse: got restricted __be32 [usertype]
drivers/net/ethernet/sgi/ioc3-eth.c:1071:30: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned long long [usertype] p1 @@ got restricted __be64 [usertype] @@
drivers/net/ethernet/sgi/ioc3-eth.c:1071:30: sparse: expected unsigned long long [usertype] p1
drivers/net/ethernet/sgi/ioc3-eth.c:1071:30: sparse: got restricted __be64 [usertype]
drivers/net/ethernet/sgi/ioc3-eth.c:1072:30: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned long long [usertype] p2 @@ got restricted __be64 [usertype] @@
drivers/net/ethernet/sgi/ioc3-eth.c:1072:30: sparse: expected unsigned long long [usertype] p2
drivers/net/ethernet/sgi/ioc3-eth.c:1072:30: sparse: got restricted __be64 [usertype]
drivers/net/ethernet/sgi/ioc3-eth.c:1077:27: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned int [usertype] cmd @@ got restricted __be32 [usertype] @@
drivers/net/ethernet/sgi/ioc3-eth.c:1077:27: sparse: expected unsigned int [usertype] cmd
drivers/net/ethernet/sgi/ioc3-eth.c:1077:27: sparse: got restricted __be32 [usertype]
drivers/net/ethernet/sgi/ioc3-eth.c:1078:30: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned int [usertype] bufcnt @@ got restricted __be32 [usertype] @@
drivers/net/ethernet/sgi/ioc3-eth.c:1078:30: sparse: expected unsigned int [usertype] bufcnt
drivers/net/ethernet/sgi/ioc3-eth.c:1078:30: sparse: got restricted __be32 [usertype]
drivers/net/ethernet/sgi/ioc3-eth.c:1082:30: sparse: sparse: incorrect type in assignment (different base types) @@ expected unsigned long long [usertype] p1 @@ got restricted __be64 [usertype] @@
drivers/net/ethernet/sgi/ioc3-eth.c:1082:30: sparse: expected unsigned long long [usertype] p1
drivers/net/ethernet/sgi/ioc3-eth.c:1082:30: sparse: got restricted __be64 [usertype]
drivers/net/ethernet/sgi/ioc3-eth.c:1090:33: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *mem @@ got unsigned int * @@
drivers/net/ethernet/sgi/ioc3-eth.c:1090:33: sparse: expected void volatile [noderef] __iomem *mem
drivers/net/ethernet/sgi/ioc3-eth.c:1090:33: sparse: got unsigned int *
drivers/net/ethernet/sgi/ioc3-eth.c:747:29: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *mem @@ got unsigned int * @@
drivers/net/ethernet/sgi/ioc3-eth.c:747:29: sparse: expected void volatile [noderef] __iomem *mem
drivers/net/ethernet/sgi/ioc3-eth.c:747:29: sparse: got unsigned int *
drivers/net/ethernet/sgi/ioc3-eth.c:748:36: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *mem @@ got unsigned int * @@
drivers/net/ethernet/sgi/ioc3-eth.c:748:36: sparse: expected void volatile [noderef] __iomem *mem
drivers/net/ethernet/sgi/ioc3-eth.c:748:36: sparse: got unsigned int *
drivers/net/ethernet/sgi/ioc3-eth.c:749:33: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *mem @@ got unsigned int * @@
drivers/net/ethernet/sgi/ioc3-eth.c:749:33: sparse: expected void volatile [noderef] __iomem *mem
drivers/net/ethernet/sgi/ioc3-eth.c:749:33: sparse: got unsigned int *
drivers/net/ethernet/sgi/ioc3-eth.c:750:47: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *mem @@ got unsigned int * @@
drivers/net/ethernet/sgi/ioc3-eth.c:750:47: sparse: expected void volatile [noderef] __iomem *mem
drivers/net/ethernet/sgi/ioc3-eth.c:750:47: sparse: got unsigned int *
drivers/net/ethernet/sgi/ioc3-eth.c:757:29: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *mem @@ got unsigned int * @@
drivers/net/ethernet/sgi/ioc3-eth.c:757:29: sparse: expected void volatile [noderef] __iomem *mem
drivers/net/ethernet/sgi/ioc3-eth.c:757:29: sparse: got unsigned int *
drivers/net/ethernet/sgi/ioc3-eth.c:758:36: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *mem @@ got unsigned int * @@
drivers/net/ethernet/sgi/ioc3-eth.c:758:36: sparse: expected void volatile [noderef] __iomem *mem
drivers/net/ethernet/sgi/ioc3-eth.c:758:36: sparse: got unsigned int *
drivers/net/ethernet/sgi/ioc3-eth.c:759:33: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *mem @@ got unsigned int * @@
drivers/net/ethernet/sgi/ioc3-eth.c:759:33: sparse: expected void volatile [noderef] __iomem *mem
drivers/net/ethernet/sgi/ioc3-eth.c:759:33: sparse: got unsigned int *
drivers/net/ethernet/sgi/ioc3-eth.c:760:33: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *mem @@ got unsigned int * @@
drivers/net/ethernet/sgi/ioc3-eth.c:760:33: sparse: expected void volatile [noderef] __iomem *mem
drivers/net/ethernet/sgi/ioc3-eth.c:760:33: sparse: got unsigned int *
drivers/net/ethernet/sgi/ioc3-eth.c:761:16: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *mem @@ got unsigned int * @@
drivers/net/ethernet/sgi/ioc3-eth.c:761:16: sparse: expected void const volatile [noderef] __iomem *mem
drivers/net/ethernet/sgi/ioc3-eth.c:761:16: sparse: got unsigned int *
drivers/net/ethernet/sgi/ioc3-eth.c:765:27: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *mem @@ got unsigned int * @@
drivers/net/ethernet/sgi/ioc3-eth.c:765:27: sparse: expected void volatile [noderef] __iomem *mem
drivers/net/ethernet/sgi/ioc3-eth.c:765:27: sparse: got unsigned int *
drivers/net/ethernet/sgi/ioc3-eth.c:768:50: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *mem @@ got unsigned int * @@
drivers/net/ethernet/sgi/ioc3-eth.c:768:50: sparse: expected void volatile [noderef] __iomem *mem
drivers/net/ethernet/sgi/ioc3-eth.c:768:50: sparse: got unsigned int *
drivers/net/ethernet/sgi/ioc3-eth.c:769:16: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *mem @@ got unsigned int * @@
drivers/net/ethernet/sgi/ioc3-eth.c:769:16: sparse: expected void const volatile [noderef] __iomem *mem
drivers/net/ethernet/sgi/ioc3-eth.c:769:16: sparse: got unsigned int *
drivers/net/ethernet/sgi/ioc3-eth.c:723:27: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *mem @@ got unsigned int * @@
drivers/net/ethernet/sgi/ioc3-eth.c:723:27: sparse: expected void volatile [noderef] __iomem *mem
drivers/net/ethernet/sgi/ioc3-eth.c:723:27: sparse: got unsigned int *
drivers/net/ethernet/sgi/ioc3-eth.c:724:16: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *mem @@ got unsigned int * @@
drivers/net/ethernet/sgi/ioc3-eth.c:724:16: sparse: expected void const volatile [noderef] __iomem *mem
drivers/net/ethernet/sgi/ioc3-eth.c:724:16: sparse: got unsigned int *
drivers/net/ethernet/sgi/ioc3-eth.c:726:20: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *mem @@ got unsigned int * @@
drivers/net/ethernet/sgi/ioc3-eth.c:726:20: sparse: expected void volatile [noderef] __iomem *mem
drivers/net/ethernet/sgi/ioc3-eth.c:726:20: sparse: got unsigned int *
drivers/net/ethernet/sgi/ioc3-eth.c:727:16: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *mem @@ got unsigned int * @@
drivers/net/ethernet/sgi/ioc3-eth.c:727:16: sparse: expected void const volatile [noderef] __iomem *mem
drivers/net/ethernet/sgi/ioc3-eth.c:727:16: sparse: got unsigned int *
drivers/net/ethernet/sgi/ioc3-eth.c:730:28: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *mem @@ got unsigned int * @@
drivers/net/ethernet/sgi/ioc3-eth.c:730:28: sparse: expected void volatile [noderef] __iomem *mem
drivers/net/ethernet/sgi/ioc3-eth.c:730:28: sparse: got unsigned int *
drivers/net/ethernet/sgi/ioc3-eth.c:731:16: sparse: sparse: incorrect type in argument 1 (different address spaces) @@ expected void const volatile [noderef] __iomem *mem @@ got unsigned int * @@
drivers/net/ethernet/sgi/ioc3-eth.c:731:16: sparse: expected void const volatile [noderef] __iomem *mem
drivers/net/ethernet/sgi/ioc3-eth.c:731:16: sparse: got unsigned int *
drivers/net/ethernet/sgi/ioc3-eth.c:732:21: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *mem @@ got unsigned int * @@
drivers/net/ethernet/sgi/ioc3-eth.c:732:21: sparse: expected void volatile [noderef] __iomem *mem
drivers/net/ethernet/sgi/ioc3-eth.c:732:21: sparse: got unsigned int *
drivers/net/ethernet/sgi/ioc3-eth.c:733:20: sparse: sparse: incorrect type in argument 2 (different address spaces) @@ expected void volatile [noderef] __iomem *mem @@ got unsigned int * @@
drivers/net/ethernet/sgi/ioc3-eth.c:733:20: sparse: expected void volatile [noderef] __iomem *mem
vim +1017 drivers/net/ethernet/sgi/ioc3-eth.c
^1da177e4c3f41 drivers/net/ioc3-eth.c Linus Torvalds 2005-04-16 979
^1da177e4c3f41 drivers/net/ioc3-eth.c Linus Torvalds 2005-04-16 980
28d304efb88f18 drivers/net/ethernet/sgi/ioc3-eth.c YueHaibing 2018-09-21 981 static netdev_tx_t ioc3_start_xmit(struct sk_buff *skb, struct net_device *dev)
^1da177e4c3f41 drivers/net/ioc3-eth.c Linus Torvalds 2005-04-16 982 {
^1da177e4c3f41 drivers/net/ioc3-eth.c Linus Torvalds 2005-04-16 983 struct ioc3_private *ip = netdev_priv(dev);
^1da177e4c3f41 drivers/net/ioc3-eth.c Linus Torvalds 2005-04-16 984 struct ioc3_etxd *desc;
cbe7d51745f933 drivers/net/ethernet/sgi/ioc3-eth.c Thomas Bogendoerfer 2019-08-30 985 unsigned long data;
cbe7d51745f933 drivers/net/ethernet/sgi/ioc3-eth.c Thomas Bogendoerfer 2019-08-30 986 unsigned int len;
^1da177e4c3f41 drivers/net/ioc3-eth.c Linus Torvalds 2005-04-16 987 int produce;
c1b6a3d85d3f2a drivers/net/ethernet/sgi/ioc3-eth.c Thomas Bogendoerfer 2019-08-30 988 u32 w0 = 0;
^1da177e4c3f41 drivers/net/ioc3-eth.c Linus Torvalds 2005-04-16 989
c1b6a3d85d3f2a drivers/net/ethernet/sgi/ioc3-eth.c Thomas Bogendoerfer 2019-08-30 990 /* IOC3 has a fairly simple minded checksumming hardware which simply
^1da177e4c3f41 drivers/net/ioc3-eth.c Linus Torvalds 2005-04-16 991 * adds up the 1's complement checksum for the entire packet and
^1da177e4c3f41 drivers/net/ioc3-eth.c Linus Torvalds 2005-04-16 992 * inserts it at an offset which can be specified in the descriptor
^1da177e4c3f41 drivers/net/ioc3-eth.c Linus Torvalds 2005-04-16 993 * into the transmit packet. This means we have to compensate for the
^1da177e4c3f41 drivers/net/ioc3-eth.c Linus Torvalds 2005-04-16 994 * MAC header which should not be summed and the TCP/UDP pseudo headers
^1da177e4c3f41 drivers/net/ioc3-eth.c Linus Torvalds 2005-04-16 995 * manually.
^1da177e4c3f41 drivers/net/ioc3-eth.c Linus Torvalds 2005-04-16 996 */
84fa7933a33f80 drivers/net/ioc3-eth.c Patrick McHardy 2006-08-29 997 if (skb->ip_summed == CHECKSUM_PARTIAL) {
eddc9ec53be2ec drivers/net/ioc3-eth.c Arnaldo Carvalho de Melo 2007-04-20 998 const struct iphdr *ih = ip_hdr(skb);
eddc9ec53be2ec drivers/net/ioc3-eth.c Arnaldo Carvalho de Melo 2007-04-20 999 const int proto = ntohs(ih->protocol);
^1da177e4c3f41 drivers/net/ioc3-eth.c Linus Torvalds 2005-04-16 1000 unsigned int csoff;
c1b6a3d85d3f2a drivers/net/ethernet/sgi/ioc3-eth.c Thomas Bogendoerfer 2019-08-30 1001 u32 csum, ehsum;
c1b6a3d85d3f2a drivers/net/ethernet/sgi/ioc3-eth.c Thomas Bogendoerfer 2019-08-30 1002 u16 *eh;
^1da177e4c3f41 drivers/net/ioc3-eth.c Linus Torvalds 2005-04-16 1003
^1da177e4c3f41 drivers/net/ioc3-eth.c Linus Torvalds 2005-04-16 1004 /* The MAC header. skb->mac seem the logic approach
c1b6a3d85d3f2a drivers/net/ethernet/sgi/ioc3-eth.c Thomas Bogendoerfer 2019-08-30 1005 * to find the MAC header - except it's a NULL pointer ...
c1b6a3d85d3f2a drivers/net/ethernet/sgi/ioc3-eth.c Thomas Bogendoerfer 2019-08-30 1006 */
c1b6a3d85d3f2a drivers/net/ethernet/sgi/ioc3-eth.c Thomas Bogendoerfer 2019-08-30 1007 eh = (u16 *)skb->data;
^1da177e4c3f41 drivers/net/ioc3-eth.c Linus Torvalds 2005-04-16 1008
^1da177e4c3f41 drivers/net/ioc3-eth.c Linus Torvalds 2005-04-16 1009 /* Sum up dest addr, src addr and protocol */
^1da177e4c3f41 drivers/net/ioc3-eth.c Linus Torvalds 2005-04-16 1010 ehsum = eh[0] + eh[1] + eh[2] + eh[3] + eh[4] + eh[5] + eh[6];
^1da177e4c3f41 drivers/net/ioc3-eth.c Linus Torvalds 2005-04-16 1011
^1da177e4c3f41 drivers/net/ioc3-eth.c Linus Torvalds 2005-04-16 1012 /* Skip IP header; it's sum is always zero and was
c1b6a3d85d3f2a drivers/net/ethernet/sgi/ioc3-eth.c Thomas Bogendoerfer 2019-08-30 1013 * already filled in by ip_output.c
c1b6a3d85d3f2a drivers/net/ethernet/sgi/ioc3-eth.c Thomas Bogendoerfer 2019-08-30 1014 */
^1da177e4c3f41 drivers/net/ioc3-eth.c Linus Torvalds 2005-04-16 1015 csum = csum_tcpudp_nofold(ih->saddr, ih->daddr,
^1da177e4c3f41 drivers/net/ioc3-eth.c Linus Torvalds 2005-04-16 1016 ih->tot_len - (ih->ihl << 2),
8dff19a6dcb8bc drivers/net/ethernet/sgi/ioc3-eth.c Thomas Bogendoerfer 2019-08-30 @1017 proto, csum_fold(ehsum));
^1da177e4c3f41 drivers/net/ioc3-eth.c Linus Torvalds 2005-04-16 1018
^1da177e4c3f41 drivers/net/ioc3-eth.c Linus Torvalds 2005-04-16 1019 csum = (csum & 0xffff) + (csum >> 16); /* Fold again */
^1da177e4c3f41 drivers/net/ioc3-eth.c Linus Torvalds 2005-04-16 1020 csum = (csum & 0xffff) + (csum >> 16);
^1da177e4c3f41 drivers/net/ioc3-eth.c Linus Torvalds 2005-04-16 1021
^1da177e4c3f41 drivers/net/ioc3-eth.c Linus Torvalds 2005-04-16 1022 csoff = ETH_HLEN + (ih->ihl << 2);
^1da177e4c3f41 drivers/net/ioc3-eth.c Linus Torvalds 2005-04-16 1023 if (proto == IPPROTO_UDP) {
^1da177e4c3f41 drivers/net/ioc3-eth.c Linus Torvalds 2005-04-16 1024 csoff += offsetof(struct udphdr, check);
4bedb45203eab9 drivers/net/ioc3-eth.c Arnaldo Carvalho de Melo 2007-03-13 1025 udp_hdr(skb)->check = csum;
^1da177e4c3f41 drivers/net/ioc3-eth.c Linus Torvalds 2005-04-16 1026 }
^1da177e4c3f41 drivers/net/ioc3-eth.c Linus Torvalds 2005-04-16 1027 if (proto == IPPROTO_TCP) {
^1da177e4c3f41 drivers/net/ioc3-eth.c Linus Torvalds 2005-04-16 1028 csoff += offsetof(struct tcphdr, check);
aa8223c7bb0b05 drivers/net/ioc3-eth.c Arnaldo Carvalho de Melo 2007-04-10 1029 tcp_hdr(skb)->check = csum;
^1da177e4c3f41 drivers/net/ioc3-eth.c Linus Torvalds 2005-04-16 1030 }
^1da177e4c3f41 drivers/net/ioc3-eth.c Linus Torvalds 2005-04-16 1031
^1da177e4c3f41 drivers/net/ioc3-eth.c Linus Torvalds 2005-04-16 1032 w0 = ETXD_DOCHECKSUM | (csoff << ETXD_CHKOFF_SHIFT);
^1da177e4c3f41 drivers/net/ioc3-eth.c Linus Torvalds 2005-04-16 1033 }
^1da177e4c3f41 drivers/net/ioc3-eth.c Linus Torvalds 2005-04-16 1034
^1da177e4c3f41 drivers/net/ioc3-eth.c Linus Torvalds 2005-04-16 1035 spin_lock_irq(&ip->ioc3_lock);
^1da177e4c3f41 drivers/net/ioc3-eth.c Linus Torvalds 2005-04-16 1036
^1da177e4c3f41 drivers/net/ioc3-eth.c Linus Torvalds 2005-04-16 1037 data = (unsigned long)skb->data;
^1da177e4c3f41 drivers/net/ioc3-eth.c Linus Torvalds 2005-04-16 1038 len = skb->len;
^1da177e4c3f41 drivers/net/ioc3-eth.c Linus Torvalds 2005-04-16 1039
^1da177e4c3f41 drivers/net/ioc3-eth.c Linus Torvalds 2005-04-16 1040 produce = ip->tx_pi;
^1da177e4c3f41 drivers/net/ioc3-eth.c Linus Torvalds 2005-04-16 1041 desc = &ip->txr[produce];
^1da177e4c3f41 drivers/net/ioc3-eth.c Linus Torvalds 2005-04-16 1042
^1da177e4c3f41 drivers/net/ioc3-eth.c Linus Torvalds 2005-04-16 1043 if (len <= 104) {
^1da177e4c3f41 drivers/net/ioc3-eth.c Linus Torvalds 2005-04-16 1044 /* Short packet, let's copy it directly into the ring. */
d626f62b11e00c drivers/net/ioc3-eth.c Arnaldo Carvalho de Melo 2007-03-27 1045 skb_copy_from_linear_data(skb, desc->data, skb->len);
^1da177e4c3f41 drivers/net/ioc3-eth.c Linus Torvalds 2005-04-16 1046 if (len < ETH_ZLEN) {
^1da177e4c3f41 drivers/net/ioc3-eth.c Linus Torvalds 2005-04-16 1047 /* Very short packet, pad with zeros at the end. */
^1da177e4c3f41 drivers/net/ioc3-eth.c Linus Torvalds 2005-04-16 1048 memset(desc->data + len, 0, ETH_ZLEN - len);
^1da177e4c3f41 drivers/net/ioc3-eth.c Linus Torvalds 2005-04-16 1049 len = ETH_ZLEN;
^1da177e4c3f41 drivers/net/ioc3-eth.c Linus Torvalds 2005-04-16 1050 }
^1da177e4c3f41 drivers/net/ioc3-eth.c Linus Torvalds 2005-04-16 1051 desc->cmd = cpu_to_be32(len | ETXD_INTWHENDONE | ETXD_D0V | w0);
^1da177e4c3f41 drivers/net/ioc3-eth.c Linus Torvalds 2005-04-16 1052 desc->bufcnt = cpu_to_be32(len);
^1da177e4c3f41 drivers/net/ioc3-eth.c Linus Torvalds 2005-04-16 1053 } else if ((data ^ (data + len - 1)) & 0x4000) {
^1da177e4c3f41 drivers/net/ioc3-eth.c Linus Torvalds 2005-04-16 1054 unsigned long b2 = (data | 0x3fffUL) + 1UL;
^1da177e4c3f41 drivers/net/ioc3-eth.c Linus Torvalds 2005-04-16 1055 unsigned long s1 = b2 - data;
^1da177e4c3f41 drivers/net/ioc3-eth.c Linus Torvalds 2005-04-16 1056 unsigned long s2 = data + len - b2;
ed870f6a7aa212 drivers/net/ethernet/sgi/ioc3-eth.c Thomas Bogendoerfer 2019-08-30 1057 dma_addr_t d1, d2;
^1da177e4c3f41 drivers/net/ioc3-eth.c Linus Torvalds 2005-04-16 1058
^1da177e4c3f41 drivers/net/ioc3-eth.c Linus Torvalds 2005-04-16 1059 desc->cmd = cpu_to_be32(len | ETXD_INTWHENDONE |
^1da177e4c3f41 drivers/net/ioc3-eth.c Linus Torvalds 2005-04-16 1060 ETXD_B1V | ETXD_B2V | w0);
^1da177e4c3f41 drivers/net/ioc3-eth.c Linus Torvalds 2005-04-16 1061 desc->bufcnt = cpu_to_be32((s1 << ETXD_B1CNT_SHIFT) |
^1da177e4c3f41 drivers/net/ioc3-eth.c Linus Torvalds 2005-04-16 1062 (s2 << ETXD_B2CNT_SHIFT));
ed870f6a7aa212 drivers/net/ethernet/sgi/ioc3-eth.c Thomas Bogendoerfer 2019-08-30 1063 d1 = dma_map_single(ip->dma_dev, skb->data, s1, DMA_TO_DEVICE);
ed870f6a7aa212 drivers/net/ethernet/sgi/ioc3-eth.c Thomas Bogendoerfer 2019-08-30 1064 if (dma_mapping_error(ip->dma_dev, d1))
ed870f6a7aa212 drivers/net/ethernet/sgi/ioc3-eth.c Thomas Bogendoerfer 2019-08-30 1065 goto drop_packet;
ed870f6a7aa212 drivers/net/ethernet/sgi/ioc3-eth.c Thomas Bogendoerfer 2019-08-30 1066 d2 = dma_map_single(ip->dma_dev, (void *)b2, s1, DMA_TO_DEVICE);
ed870f6a7aa212 drivers/net/ethernet/sgi/ioc3-eth.c Thomas Bogendoerfer 2019-08-30 1067 if (dma_mapping_error(ip->dma_dev, d2)) {
ed870f6a7aa212 drivers/net/ethernet/sgi/ioc3-eth.c Thomas Bogendoerfer 2019-08-30 1068 dma_unmap_single(ip->dma_dev, d1, len, DMA_TO_DEVICE);
ed870f6a7aa212 drivers/net/ethernet/sgi/ioc3-eth.c Thomas Bogendoerfer 2019-08-30 1069 goto drop_packet;
ed870f6a7aa212 drivers/net/ethernet/sgi/ioc3-eth.c Thomas Bogendoerfer 2019-08-30 1070 }
ed870f6a7aa212 drivers/net/ethernet/sgi/ioc3-eth.c Thomas Bogendoerfer 2019-08-30 1071 desc->p1 = cpu_to_be64(ioc3_map(d1, PCI64_ATTR_PREF));
ed870f6a7aa212 drivers/net/ethernet/sgi/ioc3-eth.c Thomas Bogendoerfer 2019-08-30 1072 desc->p2 = cpu_to_be64(ioc3_map(d2, PCI64_ATTR_PREF));
^1da177e4c3f41 drivers/net/ioc3-eth.c Linus Torvalds 2005-04-16 1073 } else {
ed870f6a7aa212 drivers/net/ethernet/sgi/ioc3-eth.c Thomas Bogendoerfer 2019-08-30 1074 dma_addr_t d;
ed870f6a7aa212 drivers/net/ethernet/sgi/ioc3-eth.c Thomas Bogendoerfer 2019-08-30 1075
^1da177e4c3f41 drivers/net/ioc3-eth.c Linus Torvalds 2005-04-16 1076 /* Normal sized packet that doesn't cross a page boundary. */
^1da177e4c3f41 drivers/net/ioc3-eth.c Linus Torvalds 2005-04-16 1077 desc->cmd = cpu_to_be32(len | ETXD_INTWHENDONE | ETXD_B1V | w0);
^1da177e4c3f41 drivers/net/ioc3-eth.c Linus Torvalds 2005-04-16 1078 desc->bufcnt = cpu_to_be32(len << ETXD_B1CNT_SHIFT);
ed870f6a7aa212 drivers/net/ethernet/sgi/ioc3-eth.c Thomas Bogendoerfer 2019-08-30 1079 d = dma_map_single(ip->dma_dev, skb->data, len, DMA_TO_DEVICE);
ed870f6a7aa212 drivers/net/ethernet/sgi/ioc3-eth.c Thomas Bogendoerfer 2019-08-30 1080 if (dma_mapping_error(ip->dma_dev, d))
ed870f6a7aa212 drivers/net/ethernet/sgi/ioc3-eth.c Thomas Bogendoerfer 2019-08-30 1081 goto drop_packet;
ed870f6a7aa212 drivers/net/ethernet/sgi/ioc3-eth.c Thomas Bogendoerfer 2019-08-30 1082 desc->p1 = cpu_to_be64(ioc3_map(d, PCI64_ATTR_PREF));
^1da177e4c3f41 drivers/net/ioc3-eth.c Linus Torvalds 2005-04-16 1083 }
^1da177e4c3f41 drivers/net/ioc3-eth.c Linus Torvalds 2005-04-16 1084
c1b6a3d85d3f2a drivers/net/ethernet/sgi/ioc3-eth.c Thomas Bogendoerfer 2019-08-30 1085 mb(); /* make sure all descriptor changes are visible */
^1da177e4c3f41 drivers/net/ioc3-eth.c Linus Torvalds 2005-04-16 1086
^1da177e4c3f41 drivers/net/ioc3-eth.c Linus Torvalds 2005-04-16 1087 ip->tx_skbs[produce] = skb; /* Remember skb */
141a7dbb886f39 drivers/net/ethernet/sgi/ioc3-eth.c Thomas Bogendoerfer 2019-08-30 1088 produce = (produce + 1) & TX_RING_MASK;
^1da177e4c3f41 drivers/net/ioc3-eth.c Linus Torvalds 2005-04-16 1089 ip->tx_pi = produce;
cbe7d51745f933 drivers/net/ethernet/sgi/ioc3-eth.c Thomas Bogendoerfer 2019-08-30 1090 writel(produce << 7, &ip->regs->etpir); /* Fire ... */
^1da177e4c3f41 drivers/net/ioc3-eth.c Linus Torvalds 2005-04-16 1091
^1da177e4c3f41 drivers/net/ioc3-eth.c Linus Torvalds 2005-04-16 1092 ip->txqlen++;
^1da177e4c3f41 drivers/net/ioc3-eth.c Linus Torvalds 2005-04-16 1093
141a7dbb886f39 drivers/net/ethernet/sgi/ioc3-eth.c Thomas Bogendoerfer 2019-08-30 1094 if (ip->txqlen >= (TX_RING_ENTRIES - 1))
^1da177e4c3f41 drivers/net/ioc3-eth.c Linus Torvalds 2005-04-16 1095 netif_stop_queue(dev);
^1da177e4c3f41 drivers/net/ioc3-eth.c Linus Torvalds 2005-04-16 1096
^1da177e4c3f41 drivers/net/ioc3-eth.c Linus Torvalds 2005-04-16 1097 spin_unlock_irq(&ip->ioc3_lock);
^1da177e4c3f41 drivers/net/ioc3-eth.c Linus Torvalds 2005-04-16 1098
ed870f6a7aa212 drivers/net/ethernet/sgi/ioc3-eth.c Thomas Bogendoerfer 2019-08-30 1099 return NETDEV_TX_OK;
ed870f6a7aa212 drivers/net/ethernet/sgi/ioc3-eth.c Thomas Bogendoerfer 2019-08-30 1100
ed870f6a7aa212 drivers/net/ethernet/sgi/ioc3-eth.c Thomas Bogendoerfer 2019-08-30 1101 drop_packet:
ed870f6a7aa212 drivers/net/ethernet/sgi/ioc3-eth.c Thomas Bogendoerfer 2019-08-30 1102 dev_kfree_skb_any(skb);
ed870f6a7aa212 drivers/net/ethernet/sgi/ioc3-eth.c Thomas Bogendoerfer 2019-08-30 1103 dev->stats.tx_dropped++;
ed870f6a7aa212 drivers/net/ethernet/sgi/ioc3-eth.c Thomas Bogendoerfer 2019-08-30 1104
ed870f6a7aa212 drivers/net/ethernet/sgi/ioc3-eth.c Thomas Bogendoerfer 2019-08-30 1105 spin_unlock_irq(&ip->ioc3_lock);
ed870f6a7aa212 drivers/net/ethernet/sgi/ioc3-eth.c Thomas Bogendoerfer 2019-08-30 1106
6ed106549d1747 drivers/net/ioc3-eth.c Patrick McHardy 2009-06-23 1107 return NETDEV_TX_OK;
^1da177e4c3f41 drivers/net/ioc3-eth.c Linus Torvalds 2005-04-16 1108 }
^1da177e4c3f41 drivers/net/ioc3-eth.c Linus Torvalds 2005-04-16 1109
:::::: The code at line 1017 was first introduced by commit
:::::: 8dff19a6dcb8bcab8bed86e60c8033aaf0a13646 net: sgi: ioc3-eth: use csum_fold
:::::: TO: Thomas Bogendoerfer <tbogendoerfer@suse.de>
:::::: CC: David S. Miller <davem@davemloft.net>
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
next reply other threads:[~2023-06-05 12:53 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-06-05 12:52 kernel test robot [this message]
-- strict thread matches above, loose matches on Subject: below --
2023-03-25 22:02 drivers/net/ethernet/sgi/ioc3-eth.c:1017:59: sparse: sparse: incorrect type in argument 5 (different base types) kernel test robot
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=202306052019.1UdM5oXV-lkp@intel.com \
--to=lkp@intel.com \
--cc=oe-kbuild@lists.linux.dev \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.