Subject: Re: [PATCH net-next v2 1/3] sfc: allow more flexible way of adding filters for PTP

From: kernel test robot <[email-masked]>
Date: Sat, 20 Aug 2022 05:19:57 +0800

Hi "Íñigo,

Thank you for the patch! Perhaps something to improve:

[auto build test WARNING on net-next/master]

url:    https://github.com/intel-lab-lkp/linux/commits/igo-Huguet/sfc-allow-more-flexible-way-of-adding-filters-for-PTP/20220819-172020
base:   https://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next.git 268603d79cc48dba671e9caf108fab32315b86a2
config: sparc-randconfig-s043-20220820 (https://download.01.org/0day-ci/archive/20220820/[email-masked]/config)
compiler: sparc-linux-gcc (GCC) 12.1.0
reproduce:
        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://github.com/intel-lab-lkp/linux/commit/b2ecd6ff1d511bc31dbb222211226ce141b0852b
        git remote add linux-review https://github.com/intel-lab-lkp/linux
        git fetch --no-tags linux-review igo-Huguet/sfc-allow-more-flexible-way-of-adding-filters-for-PTP/20220819-172020
        git checkout b2ecd6ff1d511bc31dbb222211226ce141b0852b
        # save the config file
        mkdir build_dir && cp config build_dir/.config
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=sparc SHELL=/bin/bash drivers/net/ethernet/sfc/

If you fix the issue, kindly add following tag where applicable
Reported-by: kernel test robot <[email-masked]>

sparse warnings: (new ones prefixed by >>)
>> drivers/net/ethernet/sfc/ptp.c:1636:39: sparse: sparse: cast from restricted __be16
>> drivers/net/ethernet/sfc/ptp.c:1697:58: sparse: sparse: restricted __be16 degrades to integer
   drivers/net/ethernet/sfc/ptp.c:1736:36: sparse: sparse: cast from restricted __be16

vim +1636 drivers/net/ethernet/sfc/ptp.c

7c236c43b838221 Stuart Hodgson  2012-09-03  1620  
7c236c43b838221 Stuart Hodgson  2012-09-03  1621  /* Determine whether this packet should be processed by the PTP module
7c236c43b838221 Stuart Hodgson  2012-09-03  1622   * or transmitted conventionally.
7c236c43b838221 Stuart Hodgson  2012-09-03  1623   */
7c236c43b838221 Stuart Hodgson  2012-09-03  1624  bool efx_ptp_is_ptp_tx(struct efx_nic *efx, struct sk_buff *skb)
7c236c43b838221 Stuart Hodgson  2012-09-03  1625  {
7c236c43b838221 Stuart Hodgson  2012-09-03  1626  	return efx->ptp_data &&
7c236c43b838221 Stuart Hodgson  2012-09-03  1627  		efx->ptp_data->enabled &&
7c236c43b838221 Stuart Hodgson  2012-09-03  1628  		skb->len >= PTP_MIN_LENGTH &&
7c236c43b838221 Stuart Hodgson  2012-09-03  1629  		skb->len <= MC_CMD_PTP_IN_TRANSMIT_PACKET_MAXNUM &&
7c236c43b838221 Stuart Hodgson  2012-09-03  1630  		likely(skb->protocol == htons(ETH_P_IP)) &&
e5a498e943fbc49 Ben Hutchings   2013-12-06  1631  		skb_transport_header_was_set(skb) &&
e5a498e943fbc49 Ben Hutchings   2013-12-06  1632  		skb_network_header_len(skb) >= sizeof(struct iphdr) &&
7c236c43b838221 Stuart Hodgson  2012-09-03  1633  		ip_hdr(skb)->protocol == IPPROTO_UDP &&
e5a498e943fbc49 Ben Hutchings   2013-12-06  1634  		skb_headlen(skb) >=
e5a498e943fbc49 Ben Hutchings   2013-12-06  1635  		skb_transport_offset(skb) + sizeof(struct udphdr) &&
7c236c43b838221 Stuart Hodgson  2012-09-03 @1636  		udp_hdr(skb)->dest == htons(PTP_EVENT_PORT);
7c236c43b838221 Stuart Hodgson  2012-09-03  1637  }
7c236c43b838221 Stuart Hodgson  2012-09-03  1638  
7c236c43b838221 Stuart Hodgson  2012-09-03  1639  /* Receive a PTP packet.  Packets are queued until the arrival of
7c236c43b838221 Stuart Hodgson  2012-09-03  1640   * the receive timestamp from the MC - this will probably occur after the
7c236c43b838221 Stuart Hodgson  2012-09-03  1641   * packet arrival because of the processing in the MC.
7c236c43b838221 Stuart Hodgson  2012-09-03  1642   */
4a74dc65e3ad825 Ben Hutchings   2013-03-05  1643  static bool efx_ptp_rx(struct efx_channel *channel, struct sk_buff *skb)
7c236c43b838221 Stuart Hodgson  2012-09-03  1644  {
7c236c43b838221 Stuart Hodgson  2012-09-03  1645  	struct efx_nic *efx = channel->efx;
7c236c43b838221 Stuart Hodgson  2012-09-03  1646  	struct efx_ptp_data *ptp = efx->ptp_data;
7c236c43b838221 Stuart Hodgson  2012-09-03  1647  	struct efx_ptp_match *match = (struct efx_ptp_match *)skb->cb;
c939a316459783e Laurence Evans  2012-11-15  1648  	u8 *match_data_012, *match_data_345;
7c236c43b838221 Stuart Hodgson  2012-09-03  1649  	unsigned int version;
ce320f44d677549 Ben Hutchings   2014-02-12  1650  	u8 *data;
7c236c43b838221 Stuart Hodgson  2012-09-03  1651  
7c236c43b838221 Stuart Hodgson  2012-09-03  1652  	match->expiry = jiffies + msecs_to_jiffies(PKT_EVENT_LIFETIME_MS);
7c236c43b838221 Stuart Hodgson  2012-09-03  1653  
7c236c43b838221 Stuart Hodgson  2012-09-03  1654  	/* Correct version? */
7c236c43b838221 Stuart Hodgson  2012-09-03  1655  	if (ptp->mode == MC_CMD_PTP_MODE_V1) {
97d48a10c670f87 Alexandre Rames 2013-01-11  1656  		if (!pskb_may_pull(skb, PTP_V1_MIN_LENGTH)) {
4a74dc65e3ad825 Ben Hutchings   2013-03-05  1657  			return false;
7c236c43b838221 Stuart Hodgson  2012-09-03  1658  		}
ce320f44d677549 Ben Hutchings   2014-02-12  1659  		data = skb->data;
ce320f44d677549 Ben Hutchings   2014-02-12  1660  		version = ntohs(*(__be16 *)&data[PTP_V1_VERSION_OFFSET]);
7c236c43b838221 Stuart Hodgson  2012-09-03  1661  		if (version != PTP_VERSION_V1) {
4a74dc65e3ad825 Ben Hutchings   2013-03-05  1662  			return false;
7c236c43b838221 Stuart Hodgson  2012-09-03  1663  		}
c939a316459783e Laurence Evans  2012-11-15  1664  
c939a316459783e Laurence Evans  2012-11-15  1665  		/* PTP V1 uses all six bytes of the UUID to match the packet
c939a316459783e Laurence Evans  2012-11-15  1666  		 * to the timestamp
c939a316459783e Laurence Evans  2012-11-15  1667  		 */
ce320f44d677549 Ben Hutchings   2014-02-12  1668  		match_data_012 = data + PTP_V1_UUID_OFFSET;
ce320f44d677549 Ben Hutchings   2014-02-12  1669  		match_data_345 = data + PTP_V1_UUID_OFFSET + 3;
7c236c43b838221 Stuart Hodgson  2012-09-03  1670  	} else {
97d48a10c670f87 Alexandre Rames 2013-01-11  1671  		if (!pskb_may_pull(skb, PTP_V2_MIN_LENGTH)) {
4a74dc65e3ad825 Ben Hutchings   2013-03-05  1672  			return false;
7c236c43b838221 Stuart Hodgson  2012-09-03  1673  		}
ce320f44d677549 Ben Hutchings   2014-02-12  1674  		data = skb->data;
ce320f44d677549 Ben Hutchings   2014-02-12  1675  		version = data[PTP_V2_VERSION_OFFSET];
7c236c43b838221 Stuart Hodgson  2012-09-03  1676  		if ((version & PTP_VERSION_V2_MASK) != PTP_VERSION_V2) {
4a74dc65e3ad825 Ben Hutchings   2013-03-05  1677  			return false;
7c236c43b838221 Stuart Hodgson  2012-09-03  1678  		}
c939a316459783e Laurence Evans  2012-11-15  1679  
c939a316459783e Laurence Evans  2012-11-15  1680  		/* The original V2 implementation uses bytes 2-7 of
c939a316459783e Laurence Evans  2012-11-15  1681  		 * the UUID to match the packet to the timestamp. This
c939a316459783e Laurence Evans  2012-11-15  1682  		 * discards two of the bytes of the MAC address used
c939a316459783e Laurence Evans  2012-11-15  1683  		 * to create the UUID (SF bug 33070).  The PTP V2
c939a316459783e Laurence Evans  2012-11-15  1684  		 * enhanced mode fixes this issue and uses bytes 0-2
c939a316459783e Laurence Evans  2012-11-15  1685  		 * and byte 5-7 of the UUID.
c939a316459783e Laurence Evans  2012-11-15  1686  		 */
ce320f44d677549 Ben Hutchings   2014-02-12  1687  		match_data_345 = data + PTP_V2_UUID_OFFSET + 5;
c939a316459783e Laurence Evans  2012-11-15  1688  		if (ptp->mode == MC_CMD_PTP_MODE_V2) {
ce320f44d677549 Ben Hutchings   2014-02-12  1689  			match_data_012 = data + PTP_V2_UUID_OFFSET + 2;
c939a316459783e Laurence Evans  2012-11-15  1690  		} else {
ce320f44d677549 Ben Hutchings   2014-02-12  1691  			match_data_012 = data + PTP_V2_UUID_OFFSET + 0;
c939a316459783e Laurence Evans  2012-11-15  1692  			BUG_ON(ptp->mode != MC_CMD_PTP_MODE_V2_ENHANCED);
c939a316459783e Laurence Evans  2012-11-15  1693  		}
7c236c43b838221 Stuart Hodgson  2012-09-03  1694  	}
7c236c43b838221 Stuart Hodgson  2012-09-03  1695  
7c236c43b838221 Stuart Hodgson  2012-09-03  1696  	/* Does this packet require timestamping? */
ce320f44d677549 Ben Hutchings   2014-02-12 @1697  	if (ntohs(*(__be16 *)&data[PTP_DPORT_OFFSET]) == PTP_EVENT_PORT) {
7c236c43b838221 Stuart Hodgson  2012-09-03  1698  		match->state = PTP_PACKET_STATE_UNMATCHED;
7c236c43b838221 Stuart Hodgson  2012-09-03  1699  
c939a316459783e Laurence Evans  2012-11-15  1700  		/* We expect the sequence number to be in the same position in
c939a316459783e Laurence Evans  2012-11-15  1701  		 * the packet for PTP V1 and V2
c939a316459783e Laurence Evans  2012-11-15  1702  		 */
c939a316459783e Laurence Evans  2012-11-15  1703  		BUILD_BUG_ON(PTP_V1_SEQUENCE_OFFSET != PTP_V2_SEQUENCE_OFFSET);
c939a316459783e Laurence Evans  2012-11-15  1704  		BUILD_BUG_ON(PTP_V1_SEQUENCE_LENGTH != PTP_V2_SEQUENCE_LENGTH);
c939a316459783e Laurence Evans  2012-11-15  1705  
7c236c43b838221 Stuart Hodgson  2012-09-03  1706  		/* Extract UUID/Sequence information */
c939a316459783e Laurence Evans  2012-11-15  1707  		match->words[0] = (match_data_012[0]         |
c939a316459783e Laurence Evans  2012-11-15  1708  				   (match_data_012[1] << 8)  |
c939a316459783e Laurence Evans  2012-11-15  1709  				   (match_data_012[2] << 16) |
c939a316459783e Laurence Evans  2012-11-15  1710  				   (match_data_345[0] << 24));
c939a316459783e Laurence Evans  2012-11-15  1711  		match->words[1] = (match_data_345[1]         |
c939a316459783e Laurence Evans  2012-11-15  1712  				   (match_data_345[2] << 8)  |
ce320f44d677549 Ben Hutchings   2014-02-12  1713  				   (data[PTP_V1_SEQUENCE_OFFSET +
7c236c43b838221 Stuart Hodgson  2012-09-03  1714  					 PTP_V1_SEQUENCE_LENGTH - 1] <<
7c236c43b838221 Stuart Hodgson  2012-09-03  1715  				    16));
7c236c43b838221 Stuart Hodgson  2012-09-03  1716  	} else {
7c236c43b838221 Stuart Hodgson  2012-09-03  1717  		match->state = PTP_PACKET_STATE_MATCH_UNWANTED;
7c236c43b838221 Stuart Hodgson  2012-09-03  1718  	}
7c236c43b838221 Stuart Hodgson  2012-09-03  1719  
7c236c43b838221 Stuart Hodgson  2012-09-03  1720  	skb_queue_tail(&ptp->rxq, skb);
7c236c43b838221 Stuart Hodgson  2012-09-03  1721  	queue_work(ptp->workwq, &ptp->work);
4a74dc65e3ad825 Ben Hutchings   2013-03-05  1722  
4a74dc65e3ad825 Ben Hutchings   2013-03-05  1723  	return true;
7c236c43b838221 Stuart Hodgson  2012-09-03  1724  }
7c236c43b838221 Stuart Hodgson  2012-09-03  1725  

-- 
0-DAY CI Kernel Test Service
https://01.org/lkp