Lines Matching refs:node

36 	struct mlx5e_qos_node *node = NULL;  in mlx5e_htb_enumerate_leaves()  local
39 hash_for_each(htb->qos_tc2node, bkt, node, hnode) { in mlx5e_htb_enumerate_leaves()
40 if (node->qid == MLX5E_QOS_QID_INNER) in mlx5e_htb_enumerate_leaves()
42 err = callback(data, node->qid, node->hw_id); in mlx5e_htb_enumerate_leaves()
73 struct mlx5e_qos_node *node; in mlx5e_htb_node_create_leaf() local
75 node = kzalloc(sizeof(*node), GFP_KERNEL); in mlx5e_htb_node_create_leaf()
76 if (!node) in mlx5e_htb_node_create_leaf()
79 node->parent = parent; in mlx5e_htb_node_create_leaf()
81 node->qid = qid; in mlx5e_htb_node_create_leaf()
84 node->classid = classid; in mlx5e_htb_node_create_leaf()
85 hash_add_rcu(htb->qos_tc2node, &node->hnode, classid); in mlx5e_htb_node_create_leaf()
89 return node; in mlx5e_htb_node_create_leaf()
94 struct mlx5e_qos_node *node; in mlx5e_htb_node_create_root() local
96 node = kzalloc(sizeof(*node), GFP_KERNEL); in mlx5e_htb_node_create_root()
97 if (!node) in mlx5e_htb_node_create_root()
100 node->qid = MLX5E_QOS_QID_INNER; in mlx5e_htb_node_create_root()
101 node->classid = MLX5E_HTB_CLASSID_ROOT; in mlx5e_htb_node_create_root()
102 hash_add_rcu(htb->qos_tc2node, &node->hnode, node->classid); in mlx5e_htb_node_create_root()
104 return node; in mlx5e_htb_node_create_root()
109 struct mlx5e_qos_node *node = NULL; in mlx5e_htb_node_find() local
111 hash_for_each_possible(htb->qos_tc2node, node, hnode, classid) { in mlx5e_htb_node_find()
112 if (node->classid == classid) in mlx5e_htb_node_find()
116 return node; in mlx5e_htb_node_find()
121 struct mlx5e_qos_node *node = NULL; in mlx5e_htb_node_find_rcu() local
123 hash_for_each_possible_rcu(htb->qos_tc2node, node, hnode, classid) { in mlx5e_htb_node_find_rcu()
124 if (node->classid == classid) in mlx5e_htb_node_find_rcu()
128 return node; in mlx5e_htb_node_find_rcu()
131 static void mlx5e_htb_node_delete(struct mlx5e_htb *htb, struct mlx5e_qos_node *node) in mlx5e_htb_node_delete() argument
133 hash_del_rcu(&node->hnode); in mlx5e_htb_node_delete()
134 if (node->qid != MLX5E_QOS_QID_INNER) { in mlx5e_htb_node_delete()
135 __clear_bit(node->qid, htb->qos_used_qids); in mlx5e_htb_node_delete()
142 kfree(node); in mlx5e_htb_node_delete()
149 struct mlx5e_qos_node *node; in mlx5e_htb_get_txq_by_classid() local
155 node = mlx5e_htb_node_find_rcu(htb, classid); in mlx5e_htb_get_txq_by_classid()
156 if (!node) { in mlx5e_htb_get_txq_by_classid()
160 qid = READ_ONCE(node->qid); in mlx5e_htb_get_txq_by_classid()
290 struct mlx5e_qos_node *node, *parent; in mlx5e_htb_leaf_alloc_queue() local
308 node = mlx5e_htb_node_create_leaf(htb, classid, qid, parent); in mlx5e_htb_leaf_alloc_queue()
309 if (IS_ERR(node)) in mlx5e_htb_leaf_alloc_queue()
310 return PTR_ERR(node); in mlx5e_htb_leaf_alloc_queue()
312 node->rate = rate; in mlx5e_htb_leaf_alloc_queue()
313 mlx5e_htb_convert_rate(htb, rate, node->parent, &node->bw_share); in mlx5e_htb_leaf_alloc_queue()
314 mlx5e_htb_convert_ceil(htb, ceil, &node->max_average_bw); in mlx5e_htb_leaf_alloc_queue()
316 err = mlx5_qos_create_leaf_node(htb->mdev, node->parent->hw_id, in mlx5e_htb_leaf_alloc_queue()
317 node->bw_share, node->max_average_bw, in mlx5e_htb_leaf_alloc_queue()
318 &node->hw_id); in mlx5e_htb_leaf_alloc_queue()
323 mlx5e_htb_node_delete(htb, node); in mlx5e_htb_leaf_alloc_queue()
328 err = mlx5e_open_qos_sq(priv, &priv->channels, node->qid, node->hw_id); in mlx5e_htb_leaf_alloc_queue()
334 mlx5e_activate_qos_sq(priv, node->qid, node->hw_id); in mlx5e_htb_leaf_alloc_queue()
338 return mlx5e_qid_from_qos(&priv->channels, node->qid); in mlx5e_htb_leaf_alloc_queue()
345 struct mlx5e_qos_node *node, *child; in mlx5e_htb_leaf_to_inner() local
354 node = mlx5e_htb_node_find(htb, classid); in mlx5e_htb_leaf_to_inner()
355 if (!node) in mlx5e_htb_leaf_to_inner()
358 err = mlx5_qos_create_inner_node(htb->mdev, node->parent->hw_id, in mlx5e_htb_leaf_to_inner()
359 node->bw_share, node->max_average_bw, in mlx5e_htb_leaf_to_inner()
369 child = mlx5e_htb_node_create_leaf(htb, child_classid, node->qid, node); in mlx5e_htb_leaf_to_inner()
376 mlx5e_htb_convert_rate(htb, rate, node, &child->bw_share); in mlx5e_htb_leaf_to_inner()
390 qid = node->qid; in mlx5e_htb_leaf_to_inner()
392 WRITE_ONCE(node->qid, MLX5E_QOS_QID_INNER); in mlx5e_htb_leaf_to_inner()
399 err = mlx5_qos_destroy_node(htb->mdev, node->hw_id); in mlx5e_htb_leaf_to_inner()
402 node->hw_id, classid, err); in mlx5e_htb_leaf_to_inner()
404 node->hw_id = new_hw_id; in mlx5e_htb_leaf_to_inner()
433 struct mlx5e_qos_node *node = NULL; in mlx5e_htb_node_find_by_qid() local
436 hash_for_each(htb->qos_tc2node, bkt, node, hnode) in mlx5e_htb_node_find_by_qid()
437 if (node->qid == qid) in mlx5e_htb_node_find_by_qid()
440 return node; in mlx5e_htb_node_find_by_qid()
447 struct mlx5e_qos_node *node; in mlx5e_htb_leaf_del() local
455 node = mlx5e_htb_node_find(htb, *classid); in mlx5e_htb_leaf_del()
456 if (!node) in mlx5e_htb_leaf_del()
460 qid = node->qid; in mlx5e_htb_leaf_del()
470 err = mlx5_qos_destroy_node(htb->mdev, node->hw_id); in mlx5e_htb_leaf_del()
473 node->hw_id, *classid, err); in mlx5e_htb_leaf_del()
475 mlx5e_htb_node_delete(htb, node); in mlx5e_htb_leaf_del()
499 node = mlx5e_htb_node_find_by_qid(htb, moved_qid); in mlx5e_htb_leaf_del()
500 WARN(!node, "Could not find a node with qid %u to move to queue %u", in mlx5e_htb_leaf_del()
504 WRITE_ONCE(node->qid, MLX5E_QOS_QID_INNER); in mlx5e_htb_leaf_del()
518 WRITE_ONCE(node->qid, qid); in mlx5e_htb_leaf_del()
521 err = mlx5e_open_qos_sq(priv, &priv->channels, node->qid, node->hw_id); in mlx5e_htb_leaf_del()
525 node->classid, moved_qid, qid, err); in mlx5e_htb_leaf_del()
527 mlx5e_activate_qos_sq(priv, node->qid, node->hw_id); in mlx5e_htb_leaf_del()
535 *classid = node->classid; in mlx5e_htb_leaf_del()
543 struct mlx5e_qos_node *node, *parent; in mlx5e_htb_leaf_del_last() local
552 node = mlx5e_htb_node_find(htb, classid); in mlx5e_htb_leaf_del_last()
553 if (!node) in mlx5e_htb_leaf_del_last()
556 err = mlx5_qos_create_leaf_node(htb->mdev, node->parent->parent->hw_id, in mlx5e_htb_leaf_del_last()
557 node->parent->bw_share, in mlx5e_htb_leaf_del_last()
558 node->parent->max_average_bw, in mlx5e_htb_leaf_del_last()
570 qid = node->qid; in mlx5e_htb_leaf_del_last()
572 WRITE_ONCE(node->qid, MLX5E_QOS_QID_INNER); in mlx5e_htb_leaf_del_last()
582 err = mlx5_qos_destroy_node(htb->mdev, node->hw_id); in mlx5e_htb_leaf_del_last()
585 node->hw_id, classid, err); in mlx5e_htb_leaf_del_last()
587 parent = node->parent; in mlx5e_htb_leaf_del_last()
588 mlx5e_htb_node_delete(htb, node); in mlx5e_htb_leaf_del_last()
590 node = parent; in mlx5e_htb_leaf_del_last()
591 WRITE_ONCE(node->qid, qid); in mlx5e_htb_leaf_del_last()
599 old_hw_id = node->hw_id; in mlx5e_htb_leaf_del_last()
600 node->hw_id = new_hw_id; in mlx5e_htb_leaf_del_last()
603 err = mlx5e_open_qos_sq(priv, &priv->channels, node->qid, node->hw_id); in mlx5e_htb_leaf_del_last()
609 mlx5e_activate_qos_sq(priv, node->qid, node->hw_id); in mlx5e_htb_leaf_del_last()
616 node->hw_id, classid, err); in mlx5e_htb_leaf_del_last()
622 mlx5e_htb_update_children(struct mlx5e_htb *htb, struct mlx5e_qos_node *node, in mlx5e_htb_update_children() argument
633 if (child->parent != node) in mlx5e_htb_update_children()
636 mlx5e_htb_convert_rate(htb, child->rate, node, &child->bw_share); in mlx5e_htb_update_children()
647 node->classid, err); in mlx5e_htb_update_children()
659 struct mlx5e_qos_node *node; in mlx5e_htb_node_modify() local
666 node = mlx5e_htb_node_find(htb, classid); in mlx5e_htb_node_modify()
667 if (!node) in mlx5e_htb_node_modify()
670 node->rate = rate; in mlx5e_htb_node_modify()
671 mlx5e_htb_convert_rate(htb, rate, node->parent, &bw_share); in mlx5e_htb_node_modify()
675 max_average_bw, node->hw_id); in mlx5e_htb_node_modify()
683 if (max_average_bw != node->max_average_bw) in mlx5e_htb_node_modify()
686 node->bw_share = bw_share; in mlx5e_htb_node_modify()
687 node->max_average_bw = max_average_bw; in mlx5e_htb_node_modify()
690 err = mlx5e_htb_update_children(htb, node, extack); in mlx5e_htb_node_modify()