diff options
author | Kumar Sanghvi <kumaras@chelsio.com> | 2017-11-01 08:53:05 +0530 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2017-11-01 22:06:03 +0900 |
commit | 3eb8b62d5a260fcd9683b0ce89beb3b28b12a304 (patch) | |
tree | 34e7457bd0d02482779407d5088d9e2fce1fb9c2 /drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_flower.c | |
parent | 79e6d46a65abfd721de378bf496833a04ea10afe (diff) |
cxgb4: add support to create hash-filters via tc-flower offload
Determine whether the flow classifies as exact-match with respect to
4-tuple and configured tuple mask in hw. If successfully classified
as exact-match, offload the flow as hash-filter in hw.
Signed-off-by: Kumar Sanghvi <kumaras@chelsio.com>
Signed-off-by: Rahul Lakkireddy <rahul.lakkireddy@chelsio.com>
Signed-off-by: Ganesh Goudar <ganeshgr@chelsio.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_flower.c')
-rw-r--r-- | drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_flower.c | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_flower.c b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_flower.c index 3953bc1fdc20..d4a548a6a55c 100644 --- a/drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_flower.c +++ b/drivers/net/ethernet/chelsio/cxgb4/cxgb4_tc_flower.c @@ -38,6 +38,7 @@ #include <net/tc_act/tc_vlan.h> #include "cxgb4.h" +#include "cxgb4_filter.h" #include "cxgb4_tc_flower.h" #define STATS_CHECK_PERIOD (HZ / 2) @@ -672,11 +673,16 @@ int cxgb4_tc_flower_replace(struct net_device *dev, cxgb4_process_flow_match(dev, cls, fs); cxgb4_process_flow_actions(dev, cls, fs); - fidx = cxgb4_get_free_ftid(dev, fs->type ? PF_INET6 : PF_INET); - if (fidx < 0) { - netdev_err(dev, "%s: No fidx for offload.\n", __func__); - ret = -ENOMEM; - goto free_entry; + fs->hash = is_filter_exact_match(adap, fs); + if (fs->hash) { + fidx = 0; + } else { + fidx = cxgb4_get_free_ftid(dev, fs->type ? PF_INET6 : PF_INET); + if (fidx < 0) { + netdev_err(dev, "%s: No fidx for offload.\n", __func__); + ret = -ENOMEM; + goto free_entry; + } } init_completion(&ctx.completion); |