From: Dekel Peled Date: Tue, 22 Jan 2019 08:21:55 +0000 (+0200) Subject: net/mlx5: allow port start with zero Rx queue X-Git-Url: http://git.droids-corp.org/?a=commitdiff_plain;h=ff160dbcba6274bfcb22bbb05155c80c011f996d;p=dpdk.git net/mlx5: allow port start with zero Rx queue During port start, function mlx5_ctrl_flow_vlan() is called to create default ingress flow rules. For specific use-cases, a port can be used for Tx only. In such case, number of Rx queues can be set to 0 to save resources, hence the default ingress rules are irrelevant. This patch modifies function mlx5_ctrl_flow_vlan() to avoid the creation of the default ingress rules when number of Rx queues is 0. It also includes update of validation functions for relevant actions, mlx5_flow_validate_action_queue() and mlx5_flow_validate_action_rss(), to prevent creation of flow rules with these actions when number of Rx queues is 0. Signed-off-by: Dekel Peled Acked-by: Shahaf Shuler --- diff --git a/drivers/net/mlx5/mlx5_flow.c b/drivers/net/mlx5/mlx5_flow.c index 0fd6ed515e..f91aecdc0c 100644 --- a/drivers/net/mlx5/mlx5_flow.c +++ b/drivers/net/mlx5/mlx5_flow.c @@ -846,6 +846,10 @@ mlx5_flow_validate_action_queue(const struct rte_flow_action *action, RTE_FLOW_ERROR_TYPE_ACTION, NULL, "can't have 2 fate actions in" " same flow"); + if (!priv->rxqs_n) + return rte_flow_error_set(error, EINVAL, + RTE_FLOW_ERROR_TYPE_ACTION_CONF, + NULL, "No Rx queues configured"); if (queue->index >= priv->rxqs_n) return rte_flow_error_set(error, EINVAL, RTE_FLOW_ERROR_TYPE_ACTION_CONF, @@ -939,6 +943,10 @@ mlx5_flow_validate_action_rss(const struct rte_flow_action *action, &rss->types, "some RSS protocols are not" " supported"); + if (!priv->rxqs_n) + return rte_flow_error_set(error, EINVAL, + RTE_FLOW_ERROR_TYPE_ACTION_CONF, + NULL, "No Rx queues configured"); for (i = 0; i != rss->queue_num; ++i) { if (!(*priv->rxqs)[rss->queue[i]]) return rte_flow_error_set @@ -2325,8 +2333,7 @@ mlx5_ctrl_flow_vlan(struct rte_eth_dev *dev, unsigned int i; if (!priv->reta_idx_n || !priv->rxqs_n) { - rte_errno = EINVAL; - return -rte_errno; + return 0; } for (i = 0; i != priv->reta_idx_n; ++i) queue[i] = (*priv->reta_idx)[i];