Re: [PATCH net-next 05/13] net: stmmac: selftests: Add selftest for L3/L4 Filters

2019-09-02 Thread kbuild test robot
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-Improvements-for-next/20190902-160927
config: mips-allmodconfig (attached as .config)
compiler: mips-linux-gcc (GCC) 7.4.0
reproduce:
wget 
https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O 
~/bin/make.cross
chmod +x ~/bin/make.cross
# save the attached .config to linux build tree
GCC_VERSION=7.4.0 make.cross ARCH=mips 

If you fix the issue, kindly add following tag
Reported-by: kbuild test robot 

All warnings (new ones prefixed by >>):

   drivers/net/ethernet/stmicro/stmmac/stmmac_selftests.c: In function 
'__stmmac_test_l3filt':
>> drivers/net/ethernet/stmicro/stmmac/stmmac_selftests.c:1249:1: warning: the 
>> frame size of 1280 bytes is larger than 1024 bytes [-Wframe-larger-than=]
}
^
   drivers/net/ethernet/stmicro/stmmac/stmmac_selftests.c: In function 
'__stmmac_test_l4filt':
   drivers/net/ethernet/stmicro/stmmac/stmmac_selftests.c:1362:1: warning: the 
frame size of 1280 bytes is larger than 1024 bytes [-Wframe-larger-than=]
}
^

vim +1249 drivers/net/ethernet/stmicro/stmmac/stmmac_selftests.c

  1170  
  1171  #ifdef CONFIG_NET_CLS_ACT
  1172  static int __stmmac_test_l3filt(struct stmmac_priv *priv, u32 dst, u32 
src,
  1173  u32 dst_mask, u32 src_mask)
  1174  {
  1175  struct flow_dissector_key_ipv4_addrs key, mask;
  1176  unsigned long dummy_cookie = 0xdeadbeef;
  1177  struct flow_dissector dissector = { };
  1178  struct stmmac_packet_attrs attr = { };
  1179  struct flow_cls_offload cls = { };
  1180  struct flow_rule *rule;
  1181  int ret;
  1182  
  1183  if (!tc_can_offload(priv->dev))
  1184  return -EOPNOTSUPP;
  1185  if (!priv->dma_cap.l3l4fnum)
  1186  return -EOPNOTSUPP;
  1187  if (priv->rss.enable) {
  1188  struct stmmac_rss rss = { .enable = false, };
  1189  
  1190  stmmac_rss_configure(priv, priv->hw, ,
  1191   priv->plat->rx_queues_to_use);
  1192  }
  1193  
  1194  dissector.used_keys |= (1 << FLOW_DISSECTOR_KEY_IPV4_ADDRS);
  1195  dissector.offset[FLOW_DISSECTOR_KEY_IPV4_ADDRS] = 0;
  1196  
  1197  cls.common.chain_index = 0;
  1198  cls.command = FLOW_CLS_REPLACE;
  1199  cls.cookie = dummy_cookie;
  1200  
  1201  rule = kzalloc(struct_size(rule, action.entries, 1), 
GFP_KERNEL);
  1202  if (!rule) {
  1203  ret = -ENOMEM;
  1204  goto cleanup_rss;
  1205  }
  1206  
  1207  rule->match.dissector = 
  1208  rule->match.key = (void *)
  1209  rule->match.mask = (void *)
  1210  
  1211  key.src = htonl(src);
  1212  key.dst = htonl(dst);
  1213  mask.src = src_mask;
  1214  mask.dst = dst_mask;
  1215  
  1216  cls.rule = rule;
  1217  
  1218  rule->action.entries[0].id = FLOW_ACTION_DROP;
  1219  rule->action.num_entries = 1;
  1220  
  1221  attr.dst = priv->dev->dev_addr;
  1222  attr.ip_dst = dst;
  1223  attr.ip_src = src;
  1224  
  1225  /* Shall receive packet */
  1226  ret = __stmmac_test_loopback(priv, );
  1227  if (ret)
  1228  goto cleanup_rule;
  1229  
  1230  ret = stmmac_tc_setup_cls(priv, priv, );
  1231  if (ret)
  1232  goto cleanup_rule;
  1233  
  1234  /* Shall NOT receive packet */
  1235  ret = __stmmac_test_loopback(priv, );
  1236  ret = ret ? 0 : -EINVAL;
  1237  
  1238  cls.command = FLOW_CLS_DESTROY;
  1239  stmmac_tc_setup_cls(priv, priv, );
  1240  cleanup_rule:
  1241  kfree(rule);
  1242  cleanup_rss:
  1243  if (priv->rss.enable) {
  1244  stmmac_rss_configure(priv, priv->hw, >rss,
  1245   priv->plat->rx_queues_to_use);
  1246  }
  1247  
  1248  return ret;
> 1249  }
  1250  #else
  1251  static int __stmmac_test_l3filt(struct stmmac_priv *priv, u32 dst, u32 
src,
  1252  u32 dst_mask, u32 src_mask)
  1253  {
  1254  return -EOPNOTSUPP;
  1255  }
  1256  #endif
  1257  

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


.config.gz
Description: application/gzip


[PATCH net-next 05/13] net: stmmac: selftests: Add selftest for L3/L4 Filters

2019-09-02 Thread Jose Abreu
Adds the selftests for L3 and L4 filters with DA/SA/DP/SP support.

Signed-off-by: Jose Abreu 

---
Cc: Giuseppe Cavallaro 
Cc: Alexandre Torgue 
Cc: Jose Abreu 
Cc: "David S. Miller" 
Cc: Maxime Coquelin 
Cc: net...@vger.kernel.org
Cc: linux-st...@st-md-mailman.stormreply.com
Cc: linux-arm-ker...@lists.infradead.org
Cc: linux-kernel@vger.kernel.org
---
 .../net/ethernet/stmicro/stmmac/stmmac_selftests.c | 254 -
 1 file changed, 253 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_selftests.c 
b/drivers/net/ethernet/stmicro/stmmac/stmmac_selftests.c
index d3234338a0ca..8e9d0aeda817 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_selftests.c
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_selftests.c
@@ -164,7 +164,7 @@ static struct sk_buff *stmmac_test_get_udp_skb(struct 
stmmac_priv *priv,
iplen += sizeof(*uhdr);
ihdr->tot_len = htons(iplen);
ihdr->frag_off = 0;
-   ihdr->saddr = 0;
+   ihdr->saddr = htonl(attr->ip_src);
ihdr->daddr = htonl(attr->ip_dst);
ihdr->tos = 0;
ihdr->id = 0;
@@ -1168,6 +1168,234 @@ static int stmmac_test_svlanoff(struct stmmac_priv 
*priv)
return stmmac_test_vlanoff_common(priv, true);
 }
 
+#ifdef CONFIG_NET_CLS_ACT
+static int __stmmac_test_l3filt(struct stmmac_priv *priv, u32 dst, u32 src,
+   u32 dst_mask, u32 src_mask)
+{
+   struct flow_dissector_key_ipv4_addrs key, mask;
+   unsigned long dummy_cookie = 0xdeadbeef;
+   struct flow_dissector dissector = { };
+   struct stmmac_packet_attrs attr = { };
+   struct flow_cls_offload cls = { };
+   struct flow_rule *rule;
+   int ret;
+
+   if (!tc_can_offload(priv->dev))
+   return -EOPNOTSUPP;
+   if (!priv->dma_cap.l3l4fnum)
+   return -EOPNOTSUPP;
+   if (priv->rss.enable) {
+   struct stmmac_rss rss = { .enable = false, };
+
+   stmmac_rss_configure(priv, priv->hw, ,
+priv->plat->rx_queues_to_use);
+   }
+
+   dissector.used_keys |= (1 << FLOW_DISSECTOR_KEY_IPV4_ADDRS);
+   dissector.offset[FLOW_DISSECTOR_KEY_IPV4_ADDRS] = 0;
+
+   cls.common.chain_index = 0;
+   cls.command = FLOW_CLS_REPLACE;
+   cls.cookie = dummy_cookie;
+
+   rule = kzalloc(struct_size(rule, action.entries, 1), GFP_KERNEL);
+   if (!rule) {
+   ret = -ENOMEM;
+   goto cleanup_rss;
+   }
+
+   rule->match.dissector = 
+   rule->match.key = (void *)
+   rule->match.mask = (void *)
+
+   key.src = htonl(src);
+   key.dst = htonl(dst);
+   mask.src = src_mask;
+   mask.dst = dst_mask;
+
+   cls.rule = rule;
+
+   rule->action.entries[0].id = FLOW_ACTION_DROP;
+   rule->action.num_entries = 1;
+
+   attr.dst = priv->dev->dev_addr;
+   attr.ip_dst = dst;
+   attr.ip_src = src;
+
+   /* Shall receive packet */
+   ret = __stmmac_test_loopback(priv, );
+   if (ret)
+   goto cleanup_rule;
+
+   ret = stmmac_tc_setup_cls(priv, priv, );
+   if (ret)
+   goto cleanup_rule;
+
+   /* Shall NOT receive packet */
+   ret = __stmmac_test_loopback(priv, );
+   ret = ret ? 0 : -EINVAL;
+
+   cls.command = FLOW_CLS_DESTROY;
+   stmmac_tc_setup_cls(priv, priv, );
+cleanup_rule:
+   kfree(rule);
+cleanup_rss:
+   if (priv->rss.enable) {
+   stmmac_rss_configure(priv, priv->hw, >rss,
+priv->plat->rx_queues_to_use);
+   }
+
+   return ret;
+}
+#else
+static int __stmmac_test_l3filt(struct stmmac_priv *priv, u32 dst, u32 src,
+   u32 dst_mask, u32 src_mask)
+{
+   return -EOPNOTSUPP;
+}
+#endif
+
+static int stmmac_test_l3filt_da(struct stmmac_priv *priv)
+{
+   u32 addr = 0x10203040;
+
+   return __stmmac_test_l3filt(priv, addr, 0, ~0, 0);
+}
+
+static int stmmac_test_l3filt_sa(struct stmmac_priv *priv)
+{
+   u32 addr = 0x10203040;
+
+   return __stmmac_test_l3filt(priv, 0, addr, 0, ~0);
+}
+
+#ifdef CONFIG_NET_CLS_ACT
+static int __stmmac_test_l4filt(struct stmmac_priv *priv, u32 dst, u32 src,
+   u32 dst_mask, u32 src_mask, bool udp)
+{
+   struct {
+   struct flow_dissector_key_basic bkey;
+   struct flow_dissector_key_ports key;
+   } __aligned(BITS_PER_LONG / 8) keys;
+   struct {
+   struct flow_dissector_key_basic bmask;
+   struct flow_dissector_key_ports mask;
+   } __aligned(BITS_PER_LONG / 8) masks;
+   unsigned long dummy_cookie = 0xdeadbeef;
+   struct flow_dissector dissector = { };
+   struct stmmac_packet_attrs attr = { };
+   struct flow_cls_offload cls = { };
+   struct flow_rule *rule;
+   int ret;
+
+   if (!tc_can_offload(priv->dev))
+   return -EOPNOTSUPP;