From: Suanming Mou Date: Wed, 28 Oct 2020 09:33:32 +0000 (+0800) Subject: net/mlx5: add flow table tunnel offload attribute X-Git-Url: http://git.droids-corp.org/?a=commitdiff_plain;h=eeca57902713fd5b89290c645808faf8c4f74b5b;p=dpdk.git net/mlx5: add flow table tunnel offload attribute As flow table is shared between the ports in the same shared IB device, flow table may be created by one port and released by other port. Currently, the tunnel offloading active check in flow table release is based on the port which release the flow table. Since the flow table create port and release port may have different tunnel offloading configuration, it will cause invalid tunnel offloading release or tunnel offloading resource leaks. Add the flow table tunnel offloading attribute to indicate the flow table has tunnel offloading resource or not to avoid wrong tunnel offloading operation. Signed-off-by: Suanming Mou Acked-by: Matan Azrad --- diff --git a/drivers/net/mlx5/mlx5_flow.h b/drivers/net/mlx5/mlx5_flow.h index 6867bfd830..8253c8cd61 100644 --- a/drivers/net/mlx5/mlx5_flow.h +++ b/drivers/net/mlx5/mlx5_flow.h @@ -538,6 +538,7 @@ struct mlx5_flow_tbl_data_entry { const struct mlx5_flow_tunnel *tunnel; uint32_t group_id; bool external; + bool tunnel_offload; /* Tunnel offlod table or not. */ }; /* Sub rdma-core actions list. */ diff --git a/drivers/net/mlx5/mlx5_flow_dv.c b/drivers/net/mlx5/mlx5_flow_dv.c index 13bc46d512..0b4b7fff8e 100644 --- a/drivers/net/mlx5/mlx5_flow_dv.c +++ b/drivers/net/mlx5/mlx5_flow_dv.c @@ -7986,6 +7986,7 @@ flow_dv_tbl_resource_get(struct rte_eth_dev *dev, tbl_data->tunnel = tunnel; tbl_data->group_id = group_id; tbl_data->external = external; + tbl_data->tunnel_offload = is_tunnel_offload_active(dev); tbl = &tbl_data->tbl; pos = &tbl_data->entry; if (transfer) @@ -8061,7 +8062,7 @@ flow_dv_tbl_resource_release(struct rte_eth_dev *dev, mlx5_flow_os_destroy_flow_tbl(tbl->obj); tbl->obj = NULL; - if (is_tunnel_offload_active(dev) && tbl_data->external) { + if (tbl_data->tunnel_offload && tbl_data->external) { struct mlx5_hlist_entry *he; struct mlx5_hlist *tunnel_grp_hash; struct mlx5_flow_tunnel_hub *thub =