Hi Jose,

I love your patch! Perhaps something to improve:

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

url:    
https://github.com/0day-ci/linux/commits/Jose-Abreu/net-stmmac-Add-support-for-U32-TC-filter-using-Flexible-RX-Parser/20180504-164205
reproduce:
        # apt-get install sparse
        make ARCH=x86_64 allmodconfig
        make C=1 CF=-D__CHECK_ENDIAN__


sparse warnings: (new ones prefixed by >>)

>> drivers/net/ethernet/stmicro/stmmac/stmmac_tc.c:104:14: sparse: incorrect 
>> type in assignment (different base types) @@    expected unsigned int 
>> [unsigned] [usertype] data @@    got ed int [unsigned] [usertype] data @@
   drivers/net/ethernet/stmicro/stmmac/stmmac_tc.c:104:14:    expected unsigned 
int [unsigned] [usertype] data
   drivers/net/ethernet/stmicro/stmmac/stmmac_tc.c:104:14:    got restricted 
__be32 [usertype] val
>> drivers/net/ethernet/stmicro/stmmac/stmmac_tc.c:105:14: sparse: incorrect 
>> type in assignment (different base types) @@    expected unsigned int 
>> [unsigned] [usertype] mask @@    got ed int [unsigned] [usertype] mask @@
   drivers/net/ethernet/stmicro/stmmac/stmmac_tc.c:105:14:    expected unsigned 
int [unsigned] [usertype] mask
   drivers/net/ethernet/stmicro/stmmac/stmmac_tc.c:105:14:    got restricted 
__be32 [usertype] mask

vim +104 drivers/net/ethernet/stmicro/stmmac/stmmac_tc.c

    89  
    90  static int tc_fill_entry(struct stmmac_priv *priv,
    91                  struct tc_cls_u32_offload *cls)
    92  {
    93          struct stmmac_tc_entry *entry, *frag = NULL;
    94          struct tc_u32_sel *sel = cls->knode.sel;
    95          u32 off, data, mask, real_off, rem;
    96          u32 prio = cls->common.prio;
    97          int ret;
    98  
    99          /* Only 1 match per entry */
   100          if (sel->nkeys <= 0 || sel->nkeys > 1)
   101                  return -EINVAL;
   102  
   103          off = sel->keys[0].off << sel->offshift;
 > 104          data = sel->keys[0].val;
 > 105          mask = sel->keys[0].mask;
   106  
   107          switch (ntohs(cls->common.protocol)) {
   108          case ETH_P_ALL:
   109                  break;
   110          case ETH_P_IP:
   111                  off += ETH_HLEN;
   112                  break;
   113          default:
   114                  return -EINVAL;
   115          }
   116  
   117          if (off > priv->tc_off_max)
   118                  return -EINVAL;
   119  
   120          real_off = off / 4;
   121          rem = off % 4;
   122  
   123          entry = tc_find_entry(priv, cls, true);
   124          if (!entry)
   125                  return -EINVAL;
   126  
   127          if (rem) {
   128                  frag = tc_find_entry(priv, cls, true);
   129                  if (!frag) {
   130                          ret = -EINVAL;
   131                          goto err_unuse;
   132                  }
   133  
   134                  entry->frag_ptr = frag;
   135                  entry->val.match_en = (mask << (rem * 8)) &
   136                          GENMASK(31, rem * 8);
   137                  entry->val.match_data = (data << (rem * 8)) &
   138                          GENMASK(31, rem * 8);
   139                  entry->val.frame_offset = real_off;
   140                  entry->prio = prio;
   141  
   142                  frag->val.match_en = (mask >> (rem * 8)) &
   143                          GENMASK(rem * 8 - 1, 0);
   144                  frag->val.match_data = (data >> (rem * 8)) &
   145                          GENMASK(rem * 8 - 1, 0);
   146                  frag->val.frame_offset = real_off + 1;
   147                  frag->prio = prio;
   148                  frag->is_frag = true;
   149          } else {
   150                  entry->frag_ptr = NULL;
   151                  entry->val.match_en = mask;
   152                  entry->val.match_data = data;
   153                  entry->val.frame_offset = real_off;
   154                  entry->prio = prio;
   155          }
   156  
   157          ret = tc_fill_actions(entry, frag, cls);
   158          if (ret)
   159                  goto err_unuse;
   160  
   161          return 0;
   162  
   163  err_unuse:
   164          if (frag)
   165                  frag->in_use = false;
   166          entry->in_use = false;
   167          return ret;
   168  }
   169  

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

Reply via email to