Lines Matching refs:devlink_rate
195 devlink_rate_is_leaf(struct devlink_rate *devlink_rate) in devlink_rate_is_leaf() argument
197 return devlink_rate->type == DEVLINK_RATE_TYPE_LEAF; in devlink_rate_is_leaf()
201 devlink_rate_is_node(struct devlink_rate *devlink_rate) in devlink_rate_is_node() argument
203 return devlink_rate->type == DEVLINK_RATE_TYPE_NODE; in devlink_rate_is_node()
206 static struct devlink_rate *
209 struct devlink_rate *devlink_rate; in devlink_rate_leaf_get_from_info() local
215 devlink_rate = devlink_port->devlink_rate; in devlink_rate_leaf_get_from_info()
216 return devlink_rate ?: ERR_PTR(-ENODEV); in devlink_rate_leaf_get_from_info()
219 static struct devlink_rate *
222 static struct devlink_rate *devlink_rate; in devlink_rate_node_get_by_name() local
224 list_for_each_entry(devlink_rate, &devlink->rate_list, list) { in devlink_rate_node_get_by_name()
225 if (devlink_rate_is_node(devlink_rate) && in devlink_rate_node_get_by_name()
226 !strcmp(node_name, devlink_rate->name)) in devlink_rate_node_get_by_name()
227 return devlink_rate; in devlink_rate_node_get_by_name()
232 static struct devlink_rate *
249 static struct devlink_rate *
255 static struct devlink_rate *
523 struct devlink_rate *devlink_rate; in devlink_nl_pre_doit() local
525 devlink_rate = devlink_rate_get_from_info(devlink, info); in devlink_nl_pre_doit()
526 if (IS_ERR(devlink_rate)) { in devlink_nl_pre_doit()
527 err = PTR_ERR(devlink_rate); in devlink_nl_pre_doit()
530 info->user_ptr[1] = devlink_rate; in devlink_nl_pre_doit()
532 struct devlink_rate *rate_node; in devlink_nl_pre_doit()
851 struct devlink_rate *devlink_rate, in devlink_nl_rate_fill() argument
855 struct devlink *devlink = devlink_rate->devlink; in devlink_nl_rate_fill()
865 if (nla_put_u16(msg, DEVLINK_ATTR_RATE_TYPE, devlink_rate->type)) in devlink_nl_rate_fill()
868 if (devlink_rate_is_leaf(devlink_rate)) { in devlink_nl_rate_fill()
870 devlink_rate->devlink_port->index)) in devlink_nl_rate_fill()
872 } else if (devlink_rate_is_node(devlink_rate)) { in devlink_nl_rate_fill()
874 devlink_rate->name)) in devlink_nl_rate_fill()
879 devlink_rate->tx_share, DEVLINK_ATTR_PAD)) in devlink_nl_rate_fill()
883 devlink_rate->tx_max, DEVLINK_ATTR_PAD)) in devlink_nl_rate_fill()
886 if (devlink_rate->parent) in devlink_nl_rate_fill()
888 devlink_rate->parent->name)) in devlink_nl_rate_fill()
1063 static void devlink_rate_notify(struct devlink_rate *devlink_rate, in devlink_rate_notify() argument
1075 err = devlink_nl_rate_fill(msg, devlink_rate, cmd, 0, 0, 0, NULL); in devlink_rate_notify()
1082 devlink_net(devlink_rate->devlink), msg, 0, in devlink_rate_notify()
1089 struct devlink_rate *devlink_rate; in devlink_nl_cmd_rate_get_dumpit() local
1105 list_for_each_entry(devlink_rate, &devlink->rate_list, list) { in devlink_nl_cmd_rate_get_dumpit()
1113 err = devlink_nl_rate_fill(msg, devlink_rate, cmd, id, in devlink_nl_cmd_rate_get_dumpit()
1139 struct devlink_rate *devlink_rate = info->user_ptr[1]; in devlink_nl_cmd_rate_get_doit() local
1147 err = devlink_nl_rate_fill(msg, devlink_rate, DEVLINK_CMD_RATE_NEW, in devlink_nl_cmd_rate_get_doit()
1159 devlink_rate_is_parent_node(struct devlink_rate *devlink_rate, in devlink_rate_is_parent_node() argument
1160 struct devlink_rate *parent) in devlink_rate_is_parent_node()
1163 if (parent == devlink_rate) in devlink_rate_is_parent_node()
1605 devlink_nl_rate_parent_node_set(struct devlink_rate *devlink_rate, in devlink_nl_rate_parent_node_set() argument
1609 struct devlink *devlink = devlink_rate->devlink; in devlink_nl_rate_parent_node_set()
1613 struct devlink_rate *parent; in devlink_nl_rate_parent_node_set()
1616 parent = devlink_rate->parent; in devlink_nl_rate_parent_node_set()
1621 if (devlink_rate_is_leaf(devlink_rate)) in devlink_nl_rate_parent_node_set()
1622 err = ops->rate_leaf_parent_set(devlink_rate, NULL, in devlink_nl_rate_parent_node_set()
1623 devlink_rate->priv, NULL, in devlink_nl_rate_parent_node_set()
1625 else if (devlink_rate_is_node(devlink_rate)) in devlink_nl_rate_parent_node_set()
1626 err = ops->rate_node_parent_set(devlink_rate, NULL, in devlink_nl_rate_parent_node_set()
1627 devlink_rate->priv, NULL, in devlink_nl_rate_parent_node_set()
1633 devlink_rate->parent = NULL; in devlink_nl_rate_parent_node_set()
1639 if (parent == devlink_rate) { in devlink_nl_rate_parent_node_set()
1644 if (devlink_rate_is_node(devlink_rate) && in devlink_nl_rate_parent_node_set()
1645 devlink_rate_is_parent_node(devlink_rate, parent->parent)) { in devlink_nl_rate_parent_node_set()
1650 if (devlink_rate_is_leaf(devlink_rate)) in devlink_nl_rate_parent_node_set()
1651 err = ops->rate_leaf_parent_set(devlink_rate, parent, in devlink_nl_rate_parent_node_set()
1652 devlink_rate->priv, parent->priv, in devlink_nl_rate_parent_node_set()
1654 else if (devlink_rate_is_node(devlink_rate)) in devlink_nl_rate_parent_node_set()
1655 err = ops->rate_node_parent_set(devlink_rate, parent, in devlink_nl_rate_parent_node_set()
1656 devlink_rate->priv, parent->priv, in devlink_nl_rate_parent_node_set()
1662 devlink_rate->parent = parent; in devlink_nl_rate_parent_node_set()
1668 static int devlink_nl_rate_set(struct devlink_rate *devlink_rate, in devlink_nl_rate_set() argument
1678 if (devlink_rate_is_leaf(devlink_rate)) in devlink_nl_rate_set()
1679 err = ops->rate_leaf_tx_share_set(devlink_rate, devlink_rate->priv, in devlink_nl_rate_set()
1681 else if (devlink_rate_is_node(devlink_rate)) in devlink_nl_rate_set()
1682 err = ops->rate_node_tx_share_set(devlink_rate, devlink_rate->priv, in devlink_nl_rate_set()
1686 devlink_rate->tx_share = rate; in devlink_nl_rate_set()
1691 if (devlink_rate_is_leaf(devlink_rate)) in devlink_nl_rate_set()
1692 err = ops->rate_leaf_tx_max_set(devlink_rate, devlink_rate->priv, in devlink_nl_rate_set()
1694 else if (devlink_rate_is_node(devlink_rate)) in devlink_nl_rate_set()
1695 err = ops->rate_node_tx_max_set(devlink_rate, devlink_rate->priv, in devlink_nl_rate_set()
1699 devlink_rate->tx_max = rate; in devlink_nl_rate_set()
1704 err = devlink_nl_rate_parent_node_set(devlink_rate, info, in devlink_nl_rate_set()
1758 struct devlink_rate *devlink_rate = info->user_ptr[1]; in devlink_nl_cmd_rate_set_doit() local
1759 struct devlink *devlink = devlink_rate->devlink; in devlink_nl_cmd_rate_set_doit()
1763 if (!ops || !devlink_rate_set_ops_supported(ops, info, devlink_rate->type)) in devlink_nl_cmd_rate_set_doit()
1766 err = devlink_nl_rate_set(devlink_rate, ops, info); in devlink_nl_cmd_rate_set_doit()
1769 devlink_rate_notify(devlink_rate, DEVLINK_CMD_RATE_NEW); in devlink_nl_cmd_rate_set_doit()
1777 struct devlink_rate *rate_node; in devlink_nl_cmd_rate_new_doit()
1833 struct devlink_rate *rate_node = info->user_ptr[1]; in devlink_nl_cmd_rate_del_doit()
2755 struct devlink_rate *devlink_rate; in devlink_rate_nodes_check() local
2759 list_for_each_entry(devlink_rate, &devlink->rate_list, list) in devlink_rate_nodes_check()
2760 if (devlink_rate_is_node(devlink_rate)) { in devlink_rate_nodes_check()
9384 struct devlink_rate *devlink_rate; in devlink_rate_leaf_create() local
9386 devlink_rate = kzalloc(sizeof(*devlink_rate), GFP_KERNEL); in devlink_rate_leaf_create()
9387 if (!devlink_rate) in devlink_rate_leaf_create()
9391 WARN_ON(devlink_port->devlink_rate); in devlink_rate_leaf_create()
9392 devlink_rate->type = DEVLINK_RATE_TYPE_LEAF; in devlink_rate_leaf_create()
9393 devlink_rate->devlink = devlink; in devlink_rate_leaf_create()
9394 devlink_rate->devlink_port = devlink_port; in devlink_rate_leaf_create()
9395 devlink_rate->priv = priv; in devlink_rate_leaf_create()
9396 list_add_tail(&devlink_rate->list, &devlink->rate_list); in devlink_rate_leaf_create()
9397 devlink_port->devlink_rate = devlink_rate; in devlink_rate_leaf_create()
9398 devlink_rate_notify(devlink_rate, DEVLINK_CMD_RATE_NEW); in devlink_rate_leaf_create()
9414 struct devlink_rate *devlink_rate = devlink_port->devlink_rate; in devlink_rate_leaf_destroy() local
9417 if (!devlink_rate) in devlink_rate_leaf_destroy()
9421 devlink_rate_notify(devlink_rate, DEVLINK_CMD_RATE_DEL); in devlink_rate_leaf_destroy()
9422 if (devlink_rate->parent) in devlink_rate_leaf_destroy()
9423 refcount_dec(&devlink_rate->parent->refcnt); in devlink_rate_leaf_destroy()
9424 list_del(&devlink_rate->list); in devlink_rate_leaf_destroy()
9425 devlink_port->devlink_rate = NULL; in devlink_rate_leaf_destroy()
9427 kfree(devlink_rate); in devlink_rate_leaf_destroy()
9443 static struct devlink_rate *devlink_rate, *tmp; in devlink_rate_nodes_destroy() local
9447 list_for_each_entry(devlink_rate, &devlink->rate_list, list) { in devlink_rate_nodes_destroy()
9448 if (!devlink_rate->parent) in devlink_rate_nodes_destroy()
9451 refcount_dec(&devlink_rate->parent->refcnt); in devlink_rate_nodes_destroy()
9452 if (devlink_rate_is_leaf(devlink_rate)) in devlink_rate_nodes_destroy()
9453 ops->rate_leaf_parent_set(devlink_rate, NULL, devlink_rate->priv, in devlink_rate_nodes_destroy()
9455 else if (devlink_rate_is_node(devlink_rate)) in devlink_rate_nodes_destroy()
9456 ops->rate_node_parent_set(devlink_rate, NULL, devlink_rate->priv, in devlink_rate_nodes_destroy()
9459 list_for_each_entry_safe(devlink_rate, tmp, &devlink->rate_list, list) { in devlink_rate_nodes_destroy()
9460 if (devlink_rate_is_node(devlink_rate)) { in devlink_rate_nodes_destroy()
9461 ops->rate_node_del(devlink_rate, devlink_rate->priv, NULL); in devlink_rate_nodes_destroy()
9462 list_del(&devlink_rate->list); in devlink_rate_nodes_destroy()
9463 kfree(devlink_rate->name); in devlink_rate_nodes_destroy()
9464 kfree(devlink_rate); in devlink_rate_nodes_destroy()