netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH net-next 0/4] mlx5: Support setting a parent for a devlink rate node
@ 2025-03-10 21:26 Tariq Toukan
  2025-03-10 21:26 ` [PATCH net-next 1/4] net/mlx5: Rename devlink rate parent set function for leaf nodes Tariq Toukan
                   ` (5 more replies)
  0 siblings, 6 replies; 8+ messages in thread
From: Tariq Toukan @ 2025-03-10 21:26 UTC (permalink / raw)
  To: David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
	Andrew Lunn
  Cc: Gal Pressman, Mark Bloch, Moshe Shemesh, Saeed Mahameed,
	Leon Romanovsky, Tariq Toukan, netdev, linux-rdma, linux-kernel,
	Carolina Jubran, Cosmin Ratiu, Dragos Tatulea

Hi,

This series by Carolina adds mlx5 support for the setting of a parent to
devlink rate nodes.

By introducing a hierarchical level to scheduling nodes, these changes
allow for more granular control over bandwidth allocation and isolation
of Virtual Functions.

Function renaming for parent setting on leafs:
- net/mlx5: Rename devlink rate parent set function for leaf nodes

Add support for hierarchy level tracking:
- net/mlx5: Introduce hierarchy level tracking on scheduling nodes
- net/mlx5: Preserve rate settings when creating a rate node

Support setting parent for rate nodes:
- net/mlx5: Add support for setting parent of nodes

Regards,
Tariq

Carolina Jubran (4):
  net/mlx5: Rename devlink rate parent set function for leaf nodes
  net/mlx5: Introduce hierarchy level tracking on scheduling nodes
  net/mlx5: Preserve rate settings when creating a rate node
  net/mlx5: Add support for setting parent of nodes

 .../net/ethernet/mellanox/mlx5/core/devlink.c |   3 +-
 .../net/ethernet/mellanox/mlx5/core/esw/qos.c | 146 ++++++++++++++++--
 .../net/ethernet/mellanox/mlx5/core/esw/qos.h |  12 +-
 3 files changed, 143 insertions(+), 18 deletions(-)


base-commit: 8ef890df4031121a94407c84659125cbccd3fdbe
-- 
2.31.1


^ permalink raw reply	[flat|nested] 8+ messages in thread

* [PATCH net-next 1/4] net/mlx5: Rename devlink rate parent set function for leaf nodes
  2025-03-10 21:26 [PATCH net-next 0/4] mlx5: Support setting a parent for a devlink rate node Tariq Toukan
@ 2025-03-10 21:26 ` Tariq Toukan
  2025-03-10 21:26 ` [PATCH net-next 2/4] net/mlx5: Introduce hierarchy level tracking on scheduling nodes Tariq Toukan
                   ` (4 subsequent siblings)
  5 siblings, 0 replies; 8+ messages in thread
From: Tariq Toukan @ 2025-03-10 21:26 UTC (permalink / raw)
  To: David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
	Andrew Lunn
  Cc: Gal Pressman, Mark Bloch, Moshe Shemesh, Saeed Mahameed,
	Leon Romanovsky, Tariq Toukan, netdev, linux-rdma, linux-kernel,
	Carolina Jubran, Cosmin Ratiu, Dragos Tatulea

From: Carolina Jubran <cjubran@nvidia.com>

Rename `mlx5_esw_devlink_rate_parent_set()` to
`mlx5_esw_devlink_rate_leaf_parent_set()` to distinguish setting a
parent for leafs from nodes, which is not yet supported.

Signed-off-by: Carolina Jubran <cjubran@nvidia.com>
Reviewed-by: Cosmin Ratiu <cratiu@nvidia.com>
Reviewed-by: Dragos Tatulea <dtatulea@nvidia.com>
Signed-off-by: Tariq Toukan <tariqt@nvidia.com>
---
 drivers/net/ethernet/mellanox/mlx5/core/devlink.c | 2 +-
 drivers/net/ethernet/mellanox/mlx5/core/esw/qos.c | 8 ++++----
 drivers/net/ethernet/mellanox/mlx5/core/esw/qos.h | 8 ++++----
 3 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/devlink.c b/drivers/net/ethernet/mellanox/mlx5/core/devlink.c
index 98d4306929f3..39202540a142 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/devlink.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/devlink.c
@@ -324,7 +324,7 @@ static const struct devlink_ops mlx5_devlink_ops = {
 	.rate_node_tx_max_set = mlx5_esw_devlink_rate_node_tx_max_set,
 	.rate_node_new = mlx5_esw_devlink_rate_node_new,
 	.rate_node_del = mlx5_esw_devlink_rate_node_del,
-	.rate_leaf_parent_set = mlx5_esw_devlink_rate_parent_set,
+	.rate_leaf_parent_set = mlx5_esw_devlink_rate_leaf_parent_set,
 #endif
 #ifdef CONFIG_MLX5_SF_MANAGER
 	.port_new = mlx5_devlink_sf_port_new,
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/esw/qos.c b/drivers/net/ethernet/mellanox/mlx5/core/esw/qos.c
index 823c1ba456cd..c56027838a57 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/esw/qos.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/esw/qos.c
@@ -986,10 +986,10 @@ int mlx5_esw_qos_vport_update_parent(struct mlx5_vport *vport, struct mlx5_esw_s
 	return err;
 }
 
-int mlx5_esw_devlink_rate_parent_set(struct devlink_rate *devlink_rate,
-				     struct devlink_rate *parent,
-				     void *priv, void *parent_priv,
-				     struct netlink_ext_ack *extack)
+int mlx5_esw_devlink_rate_leaf_parent_set(struct devlink_rate *devlink_rate,
+					  struct devlink_rate *parent,
+					  void *priv, void *parent_priv,
+					  struct netlink_ext_ack *extack)
 {
 	struct mlx5_esw_sched_node *node;
 	struct mlx5_vport *vport = priv;
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/esw/qos.h b/drivers/net/ethernet/mellanox/mlx5/core/esw/qos.h
index 6eb8f6a648c8..43a40bda7d19 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/esw/qos.h
+++ b/drivers/net/ethernet/mellanox/mlx5/core/esw/qos.h
@@ -29,10 +29,10 @@ int mlx5_esw_devlink_rate_node_new(struct devlink_rate *rate_node, void **priv,
 				   struct netlink_ext_ack *extack);
 int mlx5_esw_devlink_rate_node_del(struct devlink_rate *rate_node, void *priv,
 				   struct netlink_ext_ack *extack);
-int mlx5_esw_devlink_rate_parent_set(struct devlink_rate *devlink_rate,
-				     struct devlink_rate *parent,
-				     void *priv, void *parent_priv,
-				     struct netlink_ext_ack *extack);
+int mlx5_esw_devlink_rate_leaf_parent_set(struct devlink_rate *devlink_rate,
+					  struct devlink_rate *parent,
+					  void *priv, void *parent_priv,
+					  struct netlink_ext_ack *extack);
 #endif
 
 #endif
-- 
2.31.1


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH net-next 2/4] net/mlx5: Introduce hierarchy level tracking on scheduling nodes
  2025-03-10 21:26 [PATCH net-next 0/4] mlx5: Support setting a parent for a devlink rate node Tariq Toukan
  2025-03-10 21:26 ` [PATCH net-next 1/4] net/mlx5: Rename devlink rate parent set function for leaf nodes Tariq Toukan
@ 2025-03-10 21:26 ` Tariq Toukan
  2025-03-10 21:26 ` [PATCH net-next 3/4] net/mlx5: Preserve rate settings when creating a rate node Tariq Toukan
                   ` (3 subsequent siblings)
  5 siblings, 0 replies; 8+ messages in thread
From: Tariq Toukan @ 2025-03-10 21:26 UTC (permalink / raw)
  To: David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
	Andrew Lunn
  Cc: Gal Pressman, Mark Bloch, Moshe Shemesh, Saeed Mahameed,
	Leon Romanovsky, Tariq Toukan, netdev, linux-rdma, linux-kernel,
	Carolina Jubran, Cosmin Ratiu, Dragos Tatulea

From: Carolina Jubran <cjubran@nvidia.com>

Add a `level` field to `mlx5_esw_sched_node` to track the hierarchy
depth of each scheduling node. This allows enforcement of the
scheduling depth constraints based on `log_esw_max_sched_depth`.

Modify `esw_qos_node_set_parent()` and `__esw_qos_alloc_node()` to
correctly assign hierarchy levels. Ensure that nodes inherit their
parent’s level incrementally.

Signed-off-by: Carolina Jubran <cjubran@nvidia.com>
Reviewed-by: Cosmin Ratiu <cratiu@nvidia.com>
Reviewed-by: Dragos Tatulea <dtatulea@nvidia.com>
Signed-off-by: Tariq Toukan <tariqt@nvidia.com>
---
 .../net/ethernet/mellanox/mlx5/core/esw/qos.c | 19 ++++++++++++++++---
 1 file changed, 16 insertions(+), 3 deletions(-)

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/esw/qos.c b/drivers/net/ethernet/mellanox/mlx5/core/esw/qos.c
index c56027838a57..959e4446327d 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/esw/qos.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/esw/qos.c
@@ -90,8 +90,22 @@ struct mlx5_esw_sched_node {
 	struct list_head children;
 	/* Valid only if this node is associated with a vport. */
 	struct mlx5_vport *vport;
+	/* Level in the hierarchy. The root node level is 1. */
+	u8 level;
 };
 
+static void esw_qos_node_attach_to_parent(struct mlx5_esw_sched_node *node)
+{
+	if (!node->parent) {
+		/* Root children are assigned a depth level of 2. */
+		node->level = 2;
+		list_add_tail(&node->entry, &node->esw->qos.domain->nodes);
+	} else {
+		node->level = node->parent->level + 1;
+		list_add_tail(&node->entry, &node->parent->children);
+	}
+}
+
 static void
 esw_qos_node_set_parent(struct mlx5_esw_sched_node *node, struct mlx5_esw_sched_node *parent)
 {
@@ -99,6 +113,7 @@ esw_qos_node_set_parent(struct mlx5_esw_sched_node *node, struct mlx5_esw_sched_
 	node->parent = parent;
 	list_add_tail(&node->entry, &parent->children);
 	node->esw = parent->esw;
+	node->level = parent->level + 1;
 }
 
 void mlx5_esw_qos_vport_qos_free(struct mlx5_vport *vport)
@@ -358,7 +373,6 @@ static struct mlx5_esw_sched_node *
 __esw_qos_alloc_node(struct mlx5_eswitch *esw, u32 tsar_ix, enum sched_node_type type,
 		     struct mlx5_esw_sched_node *parent)
 {
-	struct list_head *parent_children;
 	struct mlx5_esw_sched_node *node;
 
 	node = kzalloc(sizeof(*node), GFP_KERNEL);
@@ -370,8 +384,7 @@ __esw_qos_alloc_node(struct mlx5_eswitch *esw, u32 tsar_ix, enum sched_node_type
 	node->type = type;
 	node->parent = parent;
 	INIT_LIST_HEAD(&node->children);
-	parent_children = parent ? &parent->children : &esw->qos.domain->nodes;
-	list_add_tail(&node->entry, parent_children);
+	esw_qos_node_attach_to_parent(node);
 
 	return node;
 }
-- 
2.31.1


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH net-next 3/4] net/mlx5: Preserve rate settings when creating a rate node
  2025-03-10 21:26 [PATCH net-next 0/4] mlx5: Support setting a parent for a devlink rate node Tariq Toukan
  2025-03-10 21:26 ` [PATCH net-next 1/4] net/mlx5: Rename devlink rate parent set function for leaf nodes Tariq Toukan
  2025-03-10 21:26 ` [PATCH net-next 2/4] net/mlx5: Introduce hierarchy level tracking on scheduling nodes Tariq Toukan
@ 2025-03-10 21:26 ` Tariq Toukan
  2025-03-10 21:26 ` [PATCH net-next 4/4] net/mlx5: Add support for setting parent of nodes Tariq Toukan
                   ` (2 subsequent siblings)
  5 siblings, 0 replies; 8+ messages in thread
From: Tariq Toukan @ 2025-03-10 21:26 UTC (permalink / raw)
  To: David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
	Andrew Lunn
  Cc: Gal Pressman, Mark Bloch, Moshe Shemesh, Saeed Mahameed,
	Leon Romanovsky, Tariq Toukan, netdev, linux-rdma, linux-kernel,
	Carolina Jubran, Cosmin Ratiu, Dragos Tatulea

From: Carolina Jubran <cjubran@nvidia.com>

Modify `esw_qos_create_node_sched_elem()` to receive max_rate and
bw_share values while maintaining the previous configuration.

This change is essential for the upcoming patch that will modify rate
nodes and requires the existing settings to be preserved unless
explicitly changed.

Signed-off-by: Carolina Jubran <cjubran@nvidia.com>
Reviewed-by: Dragos Tatulea <dtatulea@nvidia.com>
Signed-off-by: Tariq Toukan <tariqt@nvidia.com>
---
 drivers/net/ethernet/mellanox/mlx5/core/esw/qos.c | 13 +++++++++----
 1 file changed, 9 insertions(+), 4 deletions(-)

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/esw/qos.c b/drivers/net/ethernet/mellanox/mlx5/core/esw/qos.c
index 959e4446327d..3c850efb4ca3 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/esw/qos.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/esw/qos.c
@@ -320,8 +320,9 @@ static int esw_qos_set_node_min_rate(struct mlx5_esw_sched_node *node,
 	return 0;
 }
 
-static int esw_qos_create_node_sched_elem(struct mlx5_core_dev *dev, u32 parent_element_id,
-					  u32 *tsar_ix)
+static int
+esw_qos_create_node_sched_elem(struct mlx5_core_dev *dev, u32 parent_element_id,
+			       u32 max_rate, u32 bw_share, u32 *tsar_ix)
 {
 	u32 tsar_ctx[MLX5_ST_SZ_DW(scheduling_context)] = {};
 	void *attr;
@@ -338,6 +339,8 @@ static int esw_qos_create_node_sched_elem(struct mlx5_core_dev *dev, u32 parent_
 		 SCHEDULING_CONTEXT_ELEMENT_TYPE_TSAR);
 	MLX5_SET(scheduling_context, tsar_ctx, parent_element_id,
 		 parent_element_id);
+	MLX5_SET(scheduling_context, tsar_ctx, max_average_bw, max_rate);
+	MLX5_SET(scheduling_context, tsar_ctx, bw_share, bw_share);
 	attr = MLX5_ADDR_OF(scheduling_context, tsar_ctx, element_attributes);
 	MLX5_SET(tsar_element, attr, tsar_type, TSAR_ELEMENT_TSAR_TYPE_DWRR);
 
@@ -409,7 +412,8 @@ __esw_qos_create_vports_sched_node(struct mlx5_eswitch *esw, struct mlx5_esw_sch
 	u32 tsar_ix;
 	int err;
 
-	err = esw_qos_create_node_sched_elem(esw->dev, esw->qos.root_tsar_ix, &tsar_ix);
+	err = esw_qos_create_node_sched_elem(esw->dev, esw->qos.root_tsar_ix, 0,
+					     0, &tsar_ix);
 	if (err) {
 		NL_SET_ERR_MSG_MOD(extack, "E-Switch create TSAR for node failed");
 		return ERR_PTR(err);
@@ -476,7 +480,8 @@ static int esw_qos_create(struct mlx5_eswitch *esw, struct netlink_ext_ack *exta
 	if (!MLX5_CAP_GEN(dev, qos) || !MLX5_CAP_QOS(dev, esw_scheduling))
 		return -EOPNOTSUPP;
 
-	err = esw_qos_create_node_sched_elem(esw->dev, 0, &esw->qos.root_tsar_ix);
+	err = esw_qos_create_node_sched_elem(esw->dev, 0, 0, 0,
+					     &esw->qos.root_tsar_ix);
 	if (err) {
 		esw_warn(dev, "E-Switch create root TSAR failed (%d)\n", err);
 		return err;
-- 
2.31.1


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH net-next 4/4] net/mlx5: Add support for setting parent of nodes
  2025-03-10 21:26 [PATCH net-next 0/4] mlx5: Support setting a parent for a devlink rate node Tariq Toukan
                   ` (2 preceding siblings ...)
  2025-03-10 21:26 ` [PATCH net-next 3/4] net/mlx5: Preserve rate settings when creating a rate node Tariq Toukan
@ 2025-03-10 21:26 ` Tariq Toukan
  2025-03-18  9:36   ` Paolo Abeni
  2025-03-13 22:27 ` [PATCH net-next 0/4] mlx5: Support setting a parent for a devlink rate node Jacob Keller
  2025-03-18 10:00 ` patchwork-bot+netdevbpf
  5 siblings, 1 reply; 8+ messages in thread
From: Tariq Toukan @ 2025-03-10 21:26 UTC (permalink / raw)
  To: David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
	Andrew Lunn
  Cc: Gal Pressman, Mark Bloch, Moshe Shemesh, Saeed Mahameed,
	Leon Romanovsky, Tariq Toukan, netdev, linux-rdma, linux-kernel,
	Carolina Jubran, Cosmin Ratiu, Dragos Tatulea

From: Carolina Jubran <cjubran@nvidia.com>

Introduce `mlx5_esw_devlink_rate_node_parent_set()` to allow assigning
a parent to scheduling nodes.
Implement `mlx5_esw_qos_node_update_parent()` and
`mlx5_esw_qos_node_validate_set_parent()` to enforce constraints on
node reassignment.

Don't allow reassignment of nodes with active rate objects.

Update `esw_qos_node_set_parent()` to handle cases where
the parent is NULL. A NULL parent indicates that the scheduling element
is attached to the root scheduling element, and since only rate nodes
can be connected to the root, this update is now necessary.

Signed-off-by: Carolina Jubran <cjubran@nvidia.com>
Reviewed-by: Cosmin Ratiu <cratiu@nvidia.com>
Reviewed-by: Dragos Tatulea <dtatulea@nvidia.com>
Signed-off-by: Tariq Toukan <tariqt@nvidia.com>
---
 .../net/ethernet/mellanox/mlx5/core/devlink.c |   1 +
 .../net/ethernet/mellanox/mlx5/core/esw/qos.c | 108 +++++++++++++++++-
 .../net/ethernet/mellanox/mlx5/core/esw/qos.h |   4 +
 3 files changed, 110 insertions(+), 3 deletions(-)

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/devlink.c b/drivers/net/ethernet/mellanox/mlx5/core/devlink.c
index 39202540a142..df5a2e717ddd 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/devlink.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/devlink.c
@@ -325,6 +325,7 @@ static const struct devlink_ops mlx5_devlink_ops = {
 	.rate_node_new = mlx5_esw_devlink_rate_node_new,
 	.rate_node_del = mlx5_esw_devlink_rate_node_del,
 	.rate_leaf_parent_set = mlx5_esw_devlink_rate_leaf_parent_set,
+	.rate_node_parent_set = mlx5_esw_devlink_rate_node_parent_set,
 #endif
 #ifdef CONFIG_MLX5_SF_MANAGER
 	.port_new = mlx5_devlink_sf_port_new,
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/esw/qos.c b/drivers/net/ethernet/mellanox/mlx5/core/esw/qos.c
index 3c850efb4ca3..b6ae384396b3 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/esw/qos.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/esw/qos.c
@@ -111,9 +111,9 @@ esw_qos_node_set_parent(struct mlx5_esw_sched_node *node, struct mlx5_esw_sched_
 {
 	list_del_init(&node->entry);
 	node->parent = parent;
-	list_add_tail(&node->entry, &parent->children);
-	node->esw = parent->esw;
-	node->level = parent->level + 1;
+	if (parent)
+		node->esw = parent->esw;
+	esw_qos_node_attach_to_parent(node);
 }
 
 void mlx5_esw_qos_vport_qos_free(struct mlx5_vport *vport)
@@ -1018,3 +1018,105 @@ int mlx5_esw_devlink_rate_leaf_parent_set(struct devlink_rate *devlink_rate,
 	node = parent_priv;
 	return mlx5_esw_qos_vport_update_parent(vport, node, extack);
 }
+
+static int
+mlx5_esw_qos_node_validate_set_parent(struct mlx5_esw_sched_node *node,
+				      struct mlx5_esw_sched_node *parent,
+				      struct netlink_ext_ack *extack)
+{
+	u8 new_level, max_level;
+
+	if (parent && parent->esw != node->esw) {
+		NL_SET_ERR_MSG_MOD(extack,
+				   "Cannot assign node to another E-Switch");
+		return -EOPNOTSUPP;
+	}
+
+	if (!list_empty(&node->children)) {
+		NL_SET_ERR_MSG_MOD(extack,
+				   "Cannot reassign a node that contains rate objects");
+		return -EOPNOTSUPP;
+	}
+
+	new_level = parent ? parent->level + 1 : 2;
+	max_level = 1 << MLX5_CAP_QOS(node->esw->dev, log_esw_max_sched_depth);
+	if (new_level > max_level) {
+		NL_SET_ERR_MSG_MOD(extack,
+				   "Node hierarchy depth exceeds the maximum supported level");
+		return -EOPNOTSUPP;
+	}
+
+	return 0;
+}
+
+static int esw_qos_vports_node_update_parent(struct mlx5_esw_sched_node *node,
+					     struct mlx5_esw_sched_node *parent,
+					     struct netlink_ext_ack *extack)
+{
+	struct mlx5_esw_sched_node *curr_parent = node->parent;
+	struct mlx5_eswitch *esw = node->esw;
+	u32 parent_ix;
+	int err;
+
+	parent_ix = parent ? parent->ix : node->esw->qos.root_tsar_ix;
+	mlx5_destroy_scheduling_element_cmd(esw->dev,
+					    SCHEDULING_HIERARCHY_E_SWITCH,
+					    node->ix);
+	err = esw_qos_create_node_sched_elem(esw->dev, parent_ix,
+					     node->max_rate, 0, &node->ix);
+	if (err) {
+		NL_SET_ERR_MSG_MOD(extack,
+				   "Failed to create a node under the new hierarchy.");
+		if (esw_qos_create_node_sched_elem(esw->dev, curr_parent->ix,
+						   node->max_rate,
+						   node->bw_share,
+						   &node->ix))
+			esw_warn(esw->dev, "Node restore QoS failed\n");
+
+		return err;
+	}
+	esw_qos_node_set_parent(node, parent);
+
+	return 0;
+}
+
+static int mlx5_esw_qos_node_update_parent(struct mlx5_esw_sched_node *node,
+					   struct mlx5_esw_sched_node *parent,
+					   struct netlink_ext_ack *extack)
+{
+	struct mlx5_esw_sched_node *curr_parent;
+	struct mlx5_eswitch *esw = node->esw;
+	int err;
+
+	err = mlx5_esw_qos_node_validate_set_parent(node, parent, extack);
+	if (err)
+		return err;
+
+	esw_qos_lock(esw);
+	curr_parent = node->parent;
+	err = esw_qos_vports_node_update_parent(node, parent, extack);
+	if (err)
+		goto out;
+
+	esw_qos_normalize_min_rate(esw, curr_parent, extack);
+	esw_qos_normalize_min_rate(esw, parent, extack);
+
+out:
+	esw_qos_unlock(esw);
+
+	return err;
+}
+
+int mlx5_esw_devlink_rate_node_parent_set(struct devlink_rate *devlink_rate,
+					  struct devlink_rate *parent,
+					  void *priv, void *parent_priv,
+					  struct netlink_ext_ack *extack)
+{
+	struct mlx5_esw_sched_node *node = priv, *parent_node;
+
+	if (!parent)
+		return mlx5_esw_qos_node_update_parent(node, NULL, extack);
+
+	parent_node = parent_priv;
+	return mlx5_esw_qos_node_update_parent(node, parent_node, extack);
+}
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/esw/qos.h b/drivers/net/ethernet/mellanox/mlx5/core/esw/qos.h
index 43a40bda7d19..ed40ec8f027e 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/esw/qos.h
+++ b/drivers/net/ethernet/mellanox/mlx5/core/esw/qos.h
@@ -33,6 +33,10 @@ int mlx5_esw_devlink_rate_leaf_parent_set(struct devlink_rate *devlink_rate,
 					  struct devlink_rate *parent,
 					  void *priv, void *parent_priv,
 					  struct netlink_ext_ack *extack);
+int mlx5_esw_devlink_rate_node_parent_set(struct devlink_rate *devlink_rate,
+					  struct devlink_rate *parent,
+					  void *priv, void *parent_priv,
+					  struct netlink_ext_ack *extack);
 #endif
 
 #endif
-- 
2.31.1


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH net-next 0/4] mlx5: Support setting a parent for a devlink rate node
  2025-03-10 21:26 [PATCH net-next 0/4] mlx5: Support setting a parent for a devlink rate node Tariq Toukan
                   ` (3 preceding siblings ...)
  2025-03-10 21:26 ` [PATCH net-next 4/4] net/mlx5: Add support for setting parent of nodes Tariq Toukan
@ 2025-03-13 22:27 ` Jacob Keller
  2025-03-18 10:00 ` patchwork-bot+netdevbpf
  5 siblings, 0 replies; 8+ messages in thread
From: Jacob Keller @ 2025-03-13 22:27 UTC (permalink / raw)
  To: Tariq Toukan, David S. Miller, Eric Dumazet, Jakub Kicinski,
	Paolo Abeni, Andrew Lunn
  Cc: Gal Pressman, Mark Bloch, Moshe Shemesh, Saeed Mahameed,
	Leon Romanovsky, netdev, linux-rdma, linux-kernel,
	Carolina Jubran, Cosmin Ratiu, Dragos Tatulea



On 3/10/2025 2:26 PM, Tariq Toukan wrote:
> Hi,
> 
> This series by Carolina adds mlx5 support for the setting of a parent to
> devlink rate nodes.
> 
> By introducing a hierarchical level to scheduling nodes, these changes
> allow for more granular control over bandwidth allocation and isolation
> of Virtual Functions.
> 
> Function renaming for parent setting on leafs:
> - net/mlx5: Rename devlink rate parent set function for leaf nodes
> 
> Add support for hierarchy level tracking:
> - net/mlx5: Introduce hierarchy level tracking on scheduling nodes
> - net/mlx5: Preserve rate settings when creating a rate node
> 
> Support setting parent for rate nodes:
> - net/mlx5: Add support for setting parent of nodes
> 
> Regards,
> Tariq
> 
> Carolina Jubran (4):
>   net/mlx5: Rename devlink rate parent set function for leaf nodes
>   net/mlx5: Introduce hierarchy level tracking on scheduling nodes
>   net/mlx5: Preserve rate settings when creating a rate node
>   net/mlx5: Add support for setting parent of nodes
> 

Nice work. The whole series was a pleasant read.

Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>

>  .../net/ethernet/mellanox/mlx5/core/devlink.c |   3 +-
>  .../net/ethernet/mellanox/mlx5/core/esw/qos.c | 146 ++++++++++++++++--
>  .../net/ethernet/mellanox/mlx5/core/esw/qos.h |  12 +-
>  3 files changed, 143 insertions(+), 18 deletions(-)
> 
> 
> base-commit: 8ef890df4031121a94407c84659125cbccd3fdbe


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH net-next 4/4] net/mlx5: Add support for setting parent of nodes
  2025-03-10 21:26 ` [PATCH net-next 4/4] net/mlx5: Add support for setting parent of nodes Tariq Toukan
@ 2025-03-18  9:36   ` Paolo Abeni
  0 siblings, 0 replies; 8+ messages in thread
From: Paolo Abeni @ 2025-03-18  9:36 UTC (permalink / raw)
  To: Tariq Toukan, David S. Miller, Eric Dumazet, Jakub Kicinski,
	Andrew Lunn
  Cc: Gal Pressman, Mark Bloch, Moshe Shemesh, Saeed Mahameed,
	Leon Romanovsky, netdev, linux-rdma, linux-kernel,
	Carolina Jubran, Cosmin Ratiu, Dragos Tatulea

On 3/10/25 10:26 PM, Tariq Toukan wrote:
> @@ -1018,3 +1018,105 @@ int mlx5_esw_devlink_rate_leaf_parent_set(struct devlink_rate *devlink_rate,
>  	node = parent_priv;
>  	return mlx5_esw_qos_vport_update_parent(vport, node, extack);
>  }
> +
> +static int
> +mlx5_esw_qos_node_validate_set_parent(struct mlx5_esw_sched_node *node,
> +				      struct mlx5_esw_sched_node *parent,
> +				      struct netlink_ext_ack *extack)
> +{
> +	u8 new_level, max_level;
> +
> +	if (parent && parent->esw != node->esw) {
> +		NL_SET_ERR_MSG_MOD(extack,
> +				   "Cannot assign node to another E-Switch");
> +		return -EOPNOTSUPP;
> +	}
> +
> +	if (!list_empty(&node->children)) {
> +		NL_SET_ERR_MSG_MOD(extack,
> +				   "Cannot reassign a node that contains rate objects");
> +		return -EOPNOTSUPP;
> +	}
> +
> +	new_level = parent ? parent->level + 1 : 2;
> +	max_level = 1 << MLX5_CAP_QOS(node->esw->dev, log_esw_max_sched_depth);
> +	if (new_level > max_level) {
> +		NL_SET_ERR_MSG_MOD(extack,
> +				   "Node hierarchy depth exceeds the maximum supported level");

Minor nit for a possible small follow-up: it could be possibly useful to
add to the extact the current and max level.

/P


^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH net-next 0/4] mlx5: Support setting a parent for a devlink rate node
  2025-03-10 21:26 [PATCH net-next 0/4] mlx5: Support setting a parent for a devlink rate node Tariq Toukan
                   ` (4 preceding siblings ...)
  2025-03-13 22:27 ` [PATCH net-next 0/4] mlx5: Support setting a parent for a devlink rate node Jacob Keller
@ 2025-03-18 10:00 ` patchwork-bot+netdevbpf
  5 siblings, 0 replies; 8+ messages in thread
From: patchwork-bot+netdevbpf @ 2025-03-18 10:00 UTC (permalink / raw)
  To: Tariq Toukan
  Cc: davem, edumazet, kuba, pabeni, andrew+netdev, gal, mbloch, moshe,
	saeedm, leon, netdev, linux-rdma, linux-kernel, cjubran, cratiu,
	dtatulea

Hello:

This series was applied to netdev/net-next.git (main)
by Paolo Abeni <pabeni@redhat.com>:

On Mon, 10 Mar 2025 23:26:52 +0200 you wrote:
> Hi,
> 
> This series by Carolina adds mlx5 support for the setting of a parent to
> devlink rate nodes.
> 
> By introducing a hierarchical level to scheduling nodes, these changes
> allow for more granular control over bandwidth allocation and isolation
> of Virtual Functions.
> 
> [...]

Here is the summary with links:
  - [net-next,1/4] net/mlx5: Rename devlink rate parent set function for leaf nodes
    https://git.kernel.org/netdev/net-next/c/b407b4b804cd
  - [net-next,2/4] net/mlx5: Introduce hierarchy level tracking on scheduling nodes
    https://git.kernel.org/netdev/net-next/c/498bd79cb92b
  - [net-next,3/4] net/mlx5: Preserve rate settings when creating a rate node
    https://git.kernel.org/netdev/net-next/c/f88c349c75e3
  - [net-next,4/4] net/mlx5: Add support for setting parent of nodes
    https://git.kernel.org/netdev/net-next/c/9c7bbf4c3304

You are awesome, thank you!
-- 
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html



^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2025-03-18  9:59 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-03-10 21:26 [PATCH net-next 0/4] mlx5: Support setting a parent for a devlink rate node Tariq Toukan
2025-03-10 21:26 ` [PATCH net-next 1/4] net/mlx5: Rename devlink rate parent set function for leaf nodes Tariq Toukan
2025-03-10 21:26 ` [PATCH net-next 2/4] net/mlx5: Introduce hierarchy level tracking on scheduling nodes Tariq Toukan
2025-03-10 21:26 ` [PATCH net-next 3/4] net/mlx5: Preserve rate settings when creating a rate node Tariq Toukan
2025-03-10 21:26 ` [PATCH net-next 4/4] net/mlx5: Add support for setting parent of nodes Tariq Toukan
2025-03-18  9:36   ` Paolo Abeni
2025-03-13 22:27 ` [PATCH net-next 0/4] mlx5: Support setting a parent for a devlink rate node Jacob Keller
2025-03-18 10:00 ` patchwork-bot+netdevbpf

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).