On 06/01/2016 06:50 PM, Jakub Kicinski wrote:
Add hardware cls_bpf offload on our smart NICs.  Detect if
capable firmware is loaded and use it to load the code JITed
with just added translator onto programmable engines.

Signed-off-by: Jakub Kicinski <jakub.kicin...@netronome.com>
Reviewed-by: Dinan Gunawardena <dgunaward...@netronome.com>
Reviewed-by: Simon Horman <simon.hor...@netronome.com>

[...]
@@ -2386,6 +2387,21 @@ static struct rtnl_link_stats64 *nfp_net_stat64(struct 
net_device *netdev,
        return stats;
  }

+static int
+nfp_net_setup_tc(struct net_device *netdev, u32 handle, __be16 proto,
+                struct tc_to_netdev *tc)
+{
+       struct nfp_net *nn = netdev_priv(netdev);
+
+       if (TC_H_MAJ(handle) != TC_H_MAJ(TC_H_INGRESS))
+               return -EINVAL;

General question (maybe also to John, since this construct is used elsewhere 
too),
does this handle the case with sch_clsact since they share the same major code?
F.e. I have the subclass with minor number TC_H_MIN_INGRESS offloaded, but can 
still
use TC_H_MIN_EGRESS part in SW at the same time? Do we make sure to separate 
that?
If not, should this info be passed via tc_to_netdev?

+       if (tc->type == TC_SETUP_CLSBPF && nn->cap & NFP_NET_CFG_CTRL_BPF)
+               return nfp_net_bpf_offload(nn, handle, proto, tc->cls_bpf);
+
+       return -EINVAL;
+}
+
  static int nfp_net_set_features(struct net_device *netdev,
                                netdev_features_t features)
  {
@@ -2440,6 +2456,11 @@ static int nfp_net_set_features(struct net_device 
*netdev,
                        new_ctrl &= ~NFP_NET_CFG_CTRL_GATHER;
        }

+       if (changed & NETIF_F_HW_TC && nn->ctrl & NFP_NET_CFG_CTRL_BPF) {
+               nn_err(nn, "Cannot disable HW TC offload while in use\n");
+               return -EBUSY;
+       }
+

Reply via email to