Introduce mlx5_get_send_to_kernel_priority() function which returns value of priority which must be used to jump back to table 0 in order to send traffic to kernel. This function returns lowest priority.
Signed-off-by: Michael Savisko <michael...@nvidia.com> --- drivers/net/mlx5/mlx5_flow.c | 33 +++++++++++++++++++++++++++++++++ drivers/net/mlx5/mlx5_flow.h | 1 + 2 files changed, 34 insertions(+) diff --git a/drivers/net/mlx5/mlx5_flow.c b/drivers/net/mlx5/mlx5_flow.c index 8c93a3f2e5..c9e2b68957 100644 --- a/drivers/net/mlx5/mlx5_flow.c +++ b/drivers/net/mlx5/mlx5_flow.c @@ -10968,6 +10968,39 @@ mlx5_flow_adjust_priority(struct rte_eth_dev *dev, int32_t priority, return res; } +/** + * Get the priority for sending traffic to kernel table. + * + * @param[in] dev + * Pointer to the Ethernet device structure. + * + * @return + * On success: the value of priority for sending traffic to kernel table + * On failure: -1 + */ +uint32_t +mlx5_get_send_to_kernel_priority(struct rte_eth_dev *dev) +{ + struct mlx5_priv *priv = dev->data->dev_private; + uint32_t res; + + switch (priv->sh->flow_max_priority) { + case RTE_DIM(priority_map_5): + res = 15; + break; + case RTE_DIM(priority_map_3): + res = 7; + break; + default: + DRV_LOG(ERR, + "port %u maximum priority: %d expected 8/16", + dev->data->port_id, priv->sh->flow_max_priority); + res = (uint32_t)-1; + } + + return res; +} + /** * Get the E-Switch Manager vport id. * diff --git a/drivers/net/mlx5/mlx5_flow.h b/drivers/net/mlx5/mlx5_flow.h index 860c6cd2ad..f4228a5549 100644 --- a/drivers/net/mlx5/mlx5_flow.h +++ b/drivers/net/mlx5/mlx5_flow.h @@ -1750,6 +1750,7 @@ uint32_t mlx5_get_lowest_priority(struct rte_eth_dev *dev, uint16_t mlx5_get_matcher_priority(struct rte_eth_dev *dev, const struct rte_flow_attr *attr, uint32_t subpriority, bool external); +uint32_t mlx5_get_send_to_kernel_priority(struct rte_eth_dev *dev); int mlx5_flow_get_reg_id(struct rte_eth_dev *dev, enum mlx5_feature_name feature, uint32_t id, -- 2.27.0