[7/8] net/mlx5: fix internal root table flow priroity
Checks
Commit Message
When creating internal transfer flow on root table with lowerest
priority, the flow was created with u32 priority. It was wrong since
the flow is created in kernel and max priority supported is 16.
This patch fixes this by adding internal flow check.
Fixes: 5f8ae44dd454 ("net/mlx5: enlarge maximal flow priority")
Signed-off-by: Xueming Li <xuemingl@nvidia.com>
---
drivers/net/mlx5/mlx5_flow.c | 7 +++++--
drivers/net/mlx5/mlx5_flow.h | 4 ++--
drivers/net/mlx5/mlx5_flow_dv.c | 3 ++-
3 files changed, 9 insertions(+), 5 deletions(-)
@@ -980,13 +980,15 @@ mlx5_get_lowest_priority(struct rte_eth_dev *dev,
* Pointer to device flow rule attributes.
* @param[in] subpriority
* The priority based on the items.
+ * @param[in] external
+ * Flow is user flow.
* @return
* The matcher priority of the flow.
*/
uint16_t
mlx5_get_matcher_priority(struct rte_eth_dev *dev,
const struct rte_flow_attr *attr,
- uint32_t subpriority)
+ uint32_t subpriority, bool external)
{
uint16_t priority = (uint16_t)attr->priority;
struct mlx5_priv *priv = dev->data->dev_private;
@@ -997,7 +999,8 @@ mlx5_get_matcher_priority(struct rte_eth_dev *dev,
return mlx5_os_flow_adjust_priority(dev, priority, subpriority);
}
if (attr->priority == MLX5_FLOW_LOWEST_PRIO_INDICATOR)
- priority = MLX5_NON_ROOT_FLOW_MAX_PRIO;
+ priority = external ?
+ MLX5_NON_ROOT_FLOW_MAX_PRIO : priv->config.flow_prio;
return priority * 3 + subpriority;
}
@@ -1434,8 +1434,8 @@ uint32_t mlx5_flow_adjust_priority(struct rte_eth_dev *dev, int32_t priority,
uint32_t mlx5_get_lowest_priority(struct rte_eth_dev *dev,
const struct rte_flow_attr *attr);
uint16_t mlx5_get_matcher_priority(struct rte_eth_dev *dev,
- const struct rte_flow_attr *attr,
- uint32_t subpriority);
+ const struct rte_flow_attr *attr,
+ uint32_t subpriority, bool external);
int mlx5_flow_get_reg_id(struct rte_eth_dev *dev,
enum mlx5_feature_name feature,
uint32_t id,
@@ -13633,7 +13633,8 @@ flow_dv_translate(struct rte_eth_dev *dev,
matcher.crc = rte_raw_cksum((const void *)matcher.mask.buf,
matcher.mask.size);
matcher.priority = mlx5_get_matcher_priority(dev, attr,
- matcher.priority);
+ matcher.priority,
+ dev_flow->external);
/**
* When creating meter drop flow in drop table, using original
* 5-tuple match, the matcher priority should be lower than