Hi Richard,

I love your patch! Perhaps something to improve:

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

url:    
https://github.com/0day-ci/linux/commits/Richard-Cochran/Peer-to-Peer-One-Step-time-stamping/20190531-200348
reproduce:
        # apt-get install sparse
        # sparse version: v0.6.1-rc1-7-g2b96cd8-dirty
        make ARCH=x86_64 allmodconfig
        make C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__'

If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <l...@intel.com>


sparse warnings: (new ones prefixed by >>)

>> drivers/ptp/ptp_ines.c:490:13: sparse: sparse: restricted __be64 degrades to 
>> integer
>> drivers/ptp/ptp_ines.c:495:28: sparse: sparse: cast to restricted __be16
>> drivers/ptp/ptp_ines.c:495:28: sparse: sparse: cast to restricted __be16
>> drivers/ptp/ptp_ines.c:495:28: sparse: sparse: cast to restricted __be16
>> drivers/ptp/ptp_ines.c:495:28: sparse: sparse: cast to restricted __be16
   drivers/ptp/ptp_ines.c:496:17: sparse: sparse: cast to restricted __be16
   drivers/ptp/ptp_ines.c:496:17: sparse: sparse: cast to restricted __be16
   drivers/ptp/ptp_ines.c:496:17: sparse: sparse: cast to restricted __be16
   drivers/ptp/ptp_ines.c:496:17: sparse: sparse: cast to restricted __be16
   drivers/ptp/ptp_ines.c:500:26: sparse: sparse: cast to restricted __be16
   drivers/ptp/ptp_ines.c:500:26: sparse: sparse: cast to restricted __be16
   drivers/ptp/ptp_ines.c:500:26: sparse: sparse: cast to restricted __be16
   drivers/ptp/ptp_ines.c:500:26: sparse: sparse: cast to restricted __be16
   drivers/ptp/ptp_ines.c:501:17: sparse: sparse: cast to restricted __be16
   drivers/ptp/ptp_ines.c:501:17: sparse: sparse: cast to restricted __be16
   drivers/ptp/ptp_ines.c:501:17: sparse: sparse: cast to restricted __be16
   drivers/ptp/ptp_ines.c:501:17: sparse: sparse: cast to restricted __be16
>> drivers/ptp/ptp_ines.c:543:28: sparse: sparse: incorrect type in argument 1 
>> (different address spaces) @@    expected void const volatile [noderef] 
>> <asn:2> *addr @@    got ref] <asn:2> *addr @@
>> drivers/ptp/ptp_ines.c:543:28: sparse:    expected void const volatile 
>> [noderef] <asn:2> *addr
>> drivers/ptp/ptp_ines.c:543:28: sparse:    got unsigned int *
   drivers/ptp/ptp_ines.c:547:30: sparse: sparse: incorrect type in argument 1 
(different address spaces) @@    expected void const volatile [noderef] <asn:2> 
*addr @@    got ref] <asn:2> *addr @@
   drivers/ptp/ptp_ines.c:547:30: sparse:    expected void const volatile 
[noderef] <asn:2> *addr
   drivers/ptp/ptp_ines.c:547:30: sparse:    got unsigned int *
   drivers/ptp/ptp_ines.c:557:31: sparse: sparse: incorrect type in argument 1 
(different address spaces) @@    expected void const volatile [noderef] <asn:2> 
*addr @@    got ref] <asn:2> *addr @@
   drivers/ptp/ptp_ines.c:557:31: sparse:    expected void const volatile 
[noderef] <asn:2> *addr
   drivers/ptp/ptp_ines.c:557:31: sparse:    got unsigned int *
   drivers/ptp/ptp_ines.c:561:31: sparse: sparse: incorrect type in argument 1 
(different address spaces) @@    expected void const volatile [noderef] <asn:2> 
*addr @@    got ref] <asn:2> *addr @@
   drivers/ptp/ptp_ines.c:561:31: sparse:    expected void const volatile 
[noderef] <asn:2> *addr
   drivers/ptp/ptp_ines.c:561:31: sparse:    got unsigned int *
   drivers/ptp/ptp_ines.c:562:31: sparse: sparse: incorrect type in argument 1 
(different address spaces) @@    expected void const volatile [noderef] <asn:2> 
*addr @@    got ref] <asn:2> *addr @@
   drivers/ptp/ptp_ines.c:562:31: sparse:    expected void const volatile 
[noderef] <asn:2> *addr
   drivers/ptp/ptp_ines.c:562:31: sparse:    got unsigned int *
   drivers/ptp/ptp_ines.c:579:16: sparse: sparse: incorrect type in argument 1 
(different address spaces) @@    expected void const volatile [noderef] <asn:2> 
*addr @@    got ref] <asn:2> *addr @@
   drivers/ptp/ptp_ines.c:579:16: sparse:    expected void const volatile 
[noderef] <asn:2> *addr
   drivers/ptp/ptp_ines.c:579:16: sparse:    got unsigned int *
   drivers/ptp/ptp_ines.c:583:24: sparse: sparse: incorrect type in argument 1 
(different address spaces) @@    expected void const volatile [noderef] <asn:2> 
*addr @@    got ref] <asn:2> *addr @@
   drivers/ptp/ptp_ines.c:583:24: sparse:    expected void const volatile 
[noderef] <asn:2> *addr
   drivers/ptp/ptp_ines.c:583:24: sparse:    got unsigned int *
   drivers/ptp/ptp_ines.c:626:16: sparse: sparse: incorrect type in argument 1 
(different address spaces) @@    expected void const volatile [noderef] <asn:2> 
*addr @@    got ref] <asn:2> *addr @@
   drivers/ptp/ptp_ines.c:626:16: sparse:    expected void const volatile 
[noderef] <asn:2> *addr
   drivers/ptp/ptp_ines.c:626:16: sparse:    got unsigned int *
   drivers/ptp/ptp_ines.c:630:24: sparse: sparse: incorrect type in argument 1 
(different address spaces) @@    expected void const volatile [noderef] <asn:2> 
*addr @@    got ref] <asn:2> *addr @@
   drivers/ptp/ptp_ines.c:630:24: sparse:    expected void const volatile 
[noderef] <asn:2> *addr
   drivers/ptp/ptp_ines.c:630:24: sparse:    got unsigned int *
>> drivers/ptp/ptp_ines.c:208:21: sparse: sparse: incorrect type in assignment 
>> (different address spaces) @@    expected struct ines_global_registers *regs 
>> @@    got  ines_global_registers *regs @@
>> drivers/ptp/ptp_ines.c:208:21: sparse:    expected struct 
>> ines_global_registers *regs
>> drivers/ptp/ptp_ines.c:208:21: sparse:    got void [noderef] <asn:2> *base
>> drivers/ptp/ptp_ines.c:225:9: sparse: sparse: incorrect type in argument 2 
>> (different address spaces) @@    expected void volatile [noderef] <asn:2> 
>> *addr @@    got ref] <asn:2> *addr @@
>> drivers/ptp/ptp_ines.c:225:9: sparse:    expected void volatile [noderef] 
>> <asn:2> *addr
   drivers/ptp/ptp_ines.c:225:9: sparse:    got unsigned int *
   drivers/ptp/ptp_ines.c:226:9: sparse: sparse: incorrect type in argument 2 
(different address spaces) @@    expected void volatile [noderef] <asn:2> *addr 
@@    got ref] <asn:2> *addr @@
   drivers/ptp/ptp_ines.c:226:9: sparse:    expected void volatile [noderef] 
<asn:2> *addr
   drivers/ptp/ptp_ines.c:226:9: sparse:    got unsigned int *
   drivers/ptp/ptp_ines.c:228:9: sparse: sparse: incorrect type in argument 1 
(different address spaces) @@    expected void const volatile [noderef] <asn:2> 
*addr @@    got ref] <asn:2> *addr @@
   drivers/ptp/ptp_ines.c:228:9: sparse:    expected void const volatile 
[noderef] <asn:2> *addr
   drivers/ptp/ptp_ines.c:228:9: sparse:    got unsigned int *
   drivers/ptp/ptp_ines.c:229:9: sparse: sparse: incorrect type in argument 1 
(different address spaces) @@    expected void const volatile [noderef] <asn:2> 
*addr @@    got ref] <asn:2> *addr @@
   drivers/ptp/ptp_ines.c:229:9: sparse:    expected void const volatile 
[noderef] <asn:2> *addr
   drivers/ptp/ptp_ines.c:229:9: sparse:    got unsigned int *
   drivers/ptp/ptp_ines.c:230:9: sparse: sparse: incorrect type in argument 1 
(different address spaces) @@    expected void const volatile [noderef] <asn:2> 
*addr @@    got ref] <asn:2> *addr @@
   drivers/ptp/ptp_ines.c:230:9: sparse:    expected void const volatile 
[noderef] <asn:2> *addr
   drivers/ptp/ptp_ines.c:230:9: sparse:    got unsigned int *
   drivers/ptp/ptp_ines.c:231:9: sparse: sparse: incorrect type in argument 1 
(different address spaces) @@    expected void const volatile [noderef] <asn:2> 
*addr @@    got ref] <asn:2> *addr @@
   drivers/ptp/ptp_ines.c:231:9: sparse:    expected void const volatile 
[noderef] <asn:2> *addr
   drivers/ptp/ptp_ines.c:231:9: sparse:    got unsigned int *
   drivers/ptp/ptp_ines.c:235:17: sparse: sparse: incorrect type in argument 2 
(different address spaces) @@    expected void volatile [noderef] <asn:2> *addr 
@@    got ref] <asn:2> *addr @@
   drivers/ptp/ptp_ines.c:235:17: sparse:    expected void volatile [noderef] 
<asn:2> *addr
   drivers/ptp/ptp_ines.c:235:17: sparse:    got unsigned int *
   drivers/ptp/ptp_ines.c:313:28: sparse: sparse: incorrect type in argument 1 
(different address spaces) @@    expected void const volatile [noderef] <asn:2> 
*addr @@    got ref] <asn:2> *addr @@
   drivers/ptp/ptp_ines.c:313:28: sparse:    expected void const volatile 
[noderef] <asn:2> *addr
   drivers/ptp/ptp_ines.c:313:28: sparse:    got unsigned int *
   drivers/ptp/ptp_ines.c:318:30: sparse: sparse: incorrect type in argument 1 
(different address spaces) @@    expected void const volatile [noderef] <asn:2> 
*addr @@    got ref] <asn:2> *addr @@
   drivers/ptp/ptp_ines.c:318:30: sparse:    expected void const volatile 
[noderef] <asn:2> *addr
   drivers/ptp/ptp_ines.c:318:30: sparse:    got unsigned int *
   drivers/ptp/ptp_ines.c:326:30: sparse: sparse: incorrect type in argument 1 
(different address spaces) @@    expected void const volatile [noderef] <asn:2> 
*addr @@    got ref] <asn:2> *addr @@
   drivers/ptp/ptp_ines.c:326:30: sparse:    expected void const volatile 
[noderef] <asn:2> *addr
   drivers/ptp/ptp_ines.c:326:30: sparse:    got unsigned int *
   drivers/ptp/ptp_ines.c:330:30: sparse: sparse: incorrect type in argument 1 
(different address spaces) @@    expected void const volatile [noderef] <asn:2> 
*addr @@    got ref] <asn:2> *addr @@
   drivers/ptp/ptp_ines.c:330:30: sparse:    expected void const volatile 
[noderef] <asn:2> *addr
   drivers/ptp/ptp_ines.c:330:30: sparse:    got unsigned int *
   drivers/ptp/ptp_ines.c:331:30: sparse: sparse: incorrect type in argument 1 
(different address spaces) @@    expected void const volatile [noderef] <asn:2> 
*addr @@    got ref] <asn:2> *addr @@
   drivers/ptp/ptp_ines.c:331:30: sparse:    expected void const volatile 
[noderef] <asn:2> *addr
   drivers/ptp/ptp_ines.c:331:30: sparse:    got unsigned int *
   drivers/ptp/ptp_ines.c:401:21: sparse: sparse: incorrect type in argument 1 
(different address spaces) @@    expected void const volatile [noderef] <asn:2> 
*addr @@    got ref] <asn:2> *addr @@
   drivers/ptp/ptp_ines.c:401:21: sparse:    expected void const volatile 
[noderef] <asn:2> *addr
   drivers/ptp/ptp_ines.c:401:21: sparse:    got unsigned int *
   drivers/ptp/ptp_ines.c:405:9: sparse: sparse: incorrect type in argument 2 
(different address spaces) @@    expected void volatile [noderef] <asn:2> *addr 
@@    got ref] <asn:2> *addr @@
   drivers/ptp/ptp_ines.c:405:9: sparse:    expected void volatile [noderef] 
<asn:2> *addr
   drivers/ptp/ptp_ines.c:405:9: sparse:    got unsigned int *
   drivers/ptp/ptp_ines.c:406:9: sparse: sparse: incorrect type in argument 2 
(different address spaces) @@    expected void volatile [noderef] <asn:2> *addr 
@@    got ref] <asn:2> *addr @@
   drivers/ptp/ptp_ines.c:406:9: sparse:    expected void volatile [noderef] 
<asn:2> *addr
   drivers/ptp/ptp_ines.c:406:9: sparse:    got unsigned int *
   drivers/ptp/ptp_ines.c:407:9: sparse: sparse: incorrect type in argument 2 
(different address spaces) @@    expected void volatile [noderef] <asn:2> *addr 
@@    got ref] <asn:2> *addr @@
   drivers/ptp/ptp_ines.c:407:9: sparse:    expected void volatile [noderef] 
<asn:2> *addr
   drivers/ptp/ptp_ines.c:407:9: sparse:    got unsigned int *
   drivers/ptp/ptp_ines.c:440:21: sparse: sparse: incorrect type in argument 1 
(different address spaces) @@    expected void const volatile [noderef] <asn:2> 
*addr @@    got ref] <asn:2> *addr @@
   drivers/ptp/ptp_ines.c:440:21: sparse:    expected void const volatile 
[noderef] <asn:2> *addr
   drivers/ptp/ptp_ines.c:440:21: sparse:    got unsigned int *
   drivers/ptp/ptp_ines.c:444:9: sparse: sparse: incorrect type in argument 2 
(different address spaces) @@    expected void volatile [noderef] <asn:2> *addr 
@@    got ref] <asn:2> *addr @@
   drivers/ptp/ptp_ines.c:444:9: sparse:    expected void volatile [noderef] 
<asn:2> *addr
   drivers/ptp/ptp_ines.c:444:9: sparse:    got unsigned int *
   drivers/ptp/ptp_ines.c:643:21: sparse: sparse: incorrect type in argument 1 
(different address spaces) @@    expected void const volatile [noderef] <asn:2> 
*addr @@    got ref] <asn:2> *addr @@
   drivers/ptp/ptp_ines.c:643:21: sparse:    expected void const volatile 
[noderef] <asn:2> *addr
   drivers/ptp/ptp_ines.c:643:21: sparse:    got unsigned int *
>> drivers/ptp/ptp_ines.c:756:24: sparse: sparse: symbol 
>> 'ines_ptp_probe_channel' was not declared. Should it be static?
>> drivers/ptp/ptp_ines.c:785:30: sparse: sparse: symbol 'ines_ctrl' was not 
>> declared. Should it be static?

Please review and possibly fold the followup patch.

vim +490 drivers/ptp/ptp_ines.c

   416  
   417  static void ines_link_state(struct mii_timestamper *mii_ts,
   418                              struct phy_device *phydev)
   419  {
   420          struct ines_port *port = container_of(mii_ts, struct ines_port, 
mii_ts);
   421          u32 port_conf, speed_conf;
   422          unsigned long flags;
   423  
   424          switch (phydev->speed) {
   425          case SPEED_10:
   426                  speed_conf = PHY_SPEED_10 << PHY_SPEED_SHIFT;
   427                  break;
   428          case SPEED_100:
   429                  speed_conf = PHY_SPEED_100 << PHY_SPEED_SHIFT;
   430                  break;
   431          case SPEED_1000:
   432                  speed_conf = PHY_SPEED_1000 << PHY_SPEED_SHIFT;
   433                  break;
   434          default:
   435                  pr_err("bad speed: %d\n", phydev->speed);
   436                  return;
   437          }
   438          spin_lock_irqsave(&port->lock, flags);
   439  
 > 440          port_conf = ines_read32(port, port_conf);
   441          port_conf &= ~(0x3 << PHY_SPEED_SHIFT);
   442          port_conf |= speed_conf;
   443  
   444          ines_write32(port, port_conf, port_conf);
   445  
   446          spin_unlock_irqrestore(&port->lock, flags);
   447  }
   448  
   449  static bool ines_match(struct sk_buff *skb, unsigned int ptp_class,
   450                         struct ines_timestamp *ts)
   451  {
   452          u8 *msgtype, *data = skb_mac_header(skb);
   453          unsigned int offset = 0;
   454          u16 *portn, *seqid;
   455          u64 *clkid;
   456  
   457          if (unlikely(ptp_class & PTP_CLASS_V1))
   458                  return false;
   459  
   460          if (ptp_class & PTP_CLASS_VLAN)
   461                  offset += VLAN_HLEN;
   462  
   463          switch (ptp_class & PTP_CLASS_PMASK) {
   464          case PTP_CLASS_IPV4:
   465                  offset += ETH_HLEN + IPV4_HLEN(data + offset) + 
UDP_HLEN;
   466                  break;
   467          case PTP_CLASS_IPV6:
   468                  offset += ETH_HLEN + IP6_HLEN + UDP_HLEN;
   469                  break;
   470          case PTP_CLASS_L2:
   471                  offset += ETH_HLEN;
   472                  break;
   473          default:
   474                  return false;
   475          }
   476  
   477          if (skb->len + ETH_HLEN < offset + OFF_PTP_SEQUENCE_ID + 
sizeof(*seqid))
   478                  return false;
   479  
   480          msgtype = data + offset;
   481          clkid = (u64 *)(data + offset + OFF_PTP_CLOCK_ID);
   482          portn = (u16 *)(data + offset + OFF_PTP_PORT_NUM);
   483          seqid = (u16 *)(data + offset + OFF_PTP_SEQUENCE_ID);
   484  
   485          if (tag_to_msgtype(ts->tag & 0x7) != (*msgtype & 0xf)) {
   486                  pr_debug("msgtype mismatch ts %hhu != skb %hhu\n",
   487                           tag_to_msgtype(ts->tag & 0x7), *msgtype & 0xf);
   488                  return false;
   489          }
 > 490          if (cpu_to_be64(ts->clkid) != *clkid) {
   491                  pr_debug("clkid mismatch ts %llx != skb %llx\n",
   492                           cpu_to_be64(ts->clkid), *clkid);
   493                  return false;
   494          }
 > 495          if (ts->portnum != ntohs(*portn)) {
 > 496                  pr_debug("portn mismatch ts %hu != skb %hu\n",
   497                           ts->portnum, ntohs(*portn));
   498                  return false;
   499          }
 > 500          if (ts->seqid != ntohs(*seqid)) {
   501                  pr_debug("seqid mismatch ts %hu != skb %hu\n",
   502                           ts->seqid, ntohs(*seqid));
   503                  return false;
   504          }
   505  
   506          return true;
   507  }
   508  
   509  static bool ines_rxtstamp(struct mii_timestamper *mii_ts,
   510                            struct sk_buff *skb, int type)
   511  {
   512          struct ines_port *port = container_of(mii_ts, struct ines_port, 
mii_ts);
   513          struct skb_shared_hwtstamps *ssh;
   514          u64 ns;
   515  
   516          if (!port->rxts_enabled)
   517                  return false;
   518  
   519          ns = ines_find_rxts(port, skb, type);
   520          if (!ns)
   521                  return false;
   522  
   523          ssh = skb_hwtstamps(skb);
   524          ssh->hwtstamp = ns_to_ktime(ns);
   525          netif_rx(skb);
   526  
   527          return true;
   528  }
   529  
   530  static int ines_rxfifo_read(struct ines_port *port)
   531  {
   532          u32 data_rd_pos, buf_stat, mask, ts_stat_rx;
   533          struct ines_timestamp *ts;
   534          unsigned int i;
   535  
   536          mask = RX_FIFO_NE_1 << port->index;
   537  
   538          for (i = 0; i < INES_FIFO_DEPTH; i++) {
   539                  if (list_empty(&port->pool)) {
   540                          pr_err("event pool is empty\n");
   541                          return -1;
   542                  }
 > 543                  buf_stat = ines_read32(port->clock, buf_stat);
   544                  if (!(buf_stat & mask))
   545                          break;
   546  
   547                  ts_stat_rx = ines_read32(port, ts_stat_rx);
   548                  data_rd_pos = (ts_stat_rx >> DATA_READ_POS_SHIFT) &
   549                          DATA_READ_POS_MASK;
   550                  if (data_rd_pos) {
   551                          pr_err("unexpected Rx read pos %u\n", 
data_rd_pos);
   552                          break;
   553                  }
   554  
   555                  ts = list_first_entry(&port->pool, struct 
ines_timestamp, list);
   556                  ts->tmo     = jiffies + HZ;
   557                  ts->tag     = ines_read32(port, ts_rx);
   558                  ts->sec     = ines_rxts64(port, 3);
   559                  ts->nsec    = ines_rxts64(port, 2);
   560                  ts->clkid   = ines_rxts64(port, 4);
   561                  ts->portnum = ines_read32(port, ts_rx);
   562                  ts->seqid   = ines_read32(port, ts_rx);
   563  
   564                  ines_dump_ts("Rx", ts);
   565  
   566                  list_del_init(&ts->list);
   567                  list_add_tail(&ts->list, &port->events);
   568          }
   569  
   570          return 0;
   571  }
   572  
   573  static u64 ines_rxts64(struct ines_port *port, unsigned int words)
   574  {
   575          unsigned int i;
   576          u64 result;
   577          u16 word;
   578  
   579          word = ines_read32(port, ts_rx);
   580          result = word;
   581          words--;
   582          for (i = 0; i < words; i++) {
 > 583                  word = ines_read32(port, ts_rx);
   584                  result <<= 16;
   585                  result |= word;
   586          }
   587          return result;
   588  }
   589  
   590  static bool ines_timestamp_expired(struct ines_timestamp *ts)
   591  {
   592          return time_after(jiffies, ts->tmo);
   593  }
   594  
   595  static int ines_ts_info(struct mii_timestamper *mii_ts,
   596                          struct ethtool_ts_info *info)
   597  {
   598          info->so_timestamping =
   599                  SOF_TIMESTAMPING_TX_HARDWARE |
   600                  SOF_TIMESTAMPING_TX_SOFTWARE |
   601                  SOF_TIMESTAMPING_RX_HARDWARE |
   602                  SOF_TIMESTAMPING_RX_SOFTWARE |
   603                  SOF_TIMESTAMPING_SOFTWARE |
   604                  SOF_TIMESTAMPING_RAW_HARDWARE;
   605  
   606          info->phc_index = -1;
   607  
   608          info->tx_types =
   609                  (1 << HWTSTAMP_TX_OFF) |
   610                  (1 << HWTSTAMP_TX_ON) |
   611                  (1 << HWTSTAMP_TX_ONESTEP_P2P);
   612  
   613          info->rx_filters =
   614                  (1 << HWTSTAMP_FILTER_NONE) |
   615                  (1 << HWTSTAMP_FILTER_PTP_V2_EVENT);
   616  
   617          return 0;
   618  }
   619  
   620  static u64 ines_txts64(struct ines_port *port, unsigned int words)
   621  {
   622          unsigned int i;
   623          u64 result;
   624          u16 word;
   625  
 > 626          word = ines_read32(port, ts_tx);
   627          result = word;
   628          words--;
   629          for (i = 0; i < words; i++) {
   630                  word = ines_read32(port, ts_tx);
   631                  result <<= 16;
   632                  result |= word;
   633          }
   634          return result;
   635  }
   636  

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

Reply via email to