Lines Matching refs:devlink_rate
270 devlink_rate_is_leaf(struct devlink_rate *devlink_rate) in devlink_rate_is_leaf() argument
272 return devlink_rate->type == DEVLINK_RATE_TYPE_LEAF; in devlink_rate_is_leaf()
276 devlink_rate_is_node(struct devlink_rate *devlink_rate) in devlink_rate_is_node() argument
278 return devlink_rate->type == DEVLINK_RATE_TYPE_NODE; in devlink_rate_is_node()
281 static struct devlink_rate *
284 struct devlink_rate *devlink_rate; in devlink_rate_leaf_get_from_info() local
290 devlink_rate = devlink_port->devlink_rate; in devlink_rate_leaf_get_from_info()
291 return devlink_rate ?: ERR_PTR(-ENODEV); in devlink_rate_leaf_get_from_info()
294 static struct devlink_rate *
297 static struct devlink_rate *devlink_rate; in devlink_rate_node_get_by_name() local
299 list_for_each_entry(devlink_rate, &devlink->rate_list, list) { in devlink_rate_node_get_by_name()
300 if (devlink_rate_is_node(devlink_rate) && in devlink_rate_node_get_by_name()
301 !strcmp(node_name, devlink_rate->name)) in devlink_rate_node_get_by_name()
302 return devlink_rate; in devlink_rate_node_get_by_name()
307 static struct devlink_rate *
324 static struct devlink_rate *
330 static struct devlink_rate *
598 struct devlink_rate *devlink_rate; in devlink_nl_pre_doit() local
600 devlink_rate = devlink_rate_get_from_info(devlink, info); in devlink_nl_pre_doit()
601 if (IS_ERR(devlink_rate)) { in devlink_nl_pre_doit()
602 err = PTR_ERR(devlink_rate); in devlink_nl_pre_doit()
605 info->user_ptr[1] = devlink_rate; in devlink_nl_pre_doit()
607 struct devlink_rate *rate_node; in devlink_nl_pre_doit()
927 struct devlink_rate *devlink_rate, in devlink_nl_rate_fill() argument
931 struct devlink *devlink = devlink_rate->devlink; in devlink_nl_rate_fill()
941 if (nla_put_u16(msg, DEVLINK_ATTR_RATE_TYPE, devlink_rate->type)) in devlink_nl_rate_fill()
944 if (devlink_rate_is_leaf(devlink_rate)) { in devlink_nl_rate_fill()
946 devlink_rate->devlink_port->index)) in devlink_nl_rate_fill()
948 } else if (devlink_rate_is_node(devlink_rate)) { in devlink_nl_rate_fill()
950 devlink_rate->name)) in devlink_nl_rate_fill()
955 devlink_rate->tx_share, DEVLINK_ATTR_PAD)) in devlink_nl_rate_fill()
959 devlink_rate->tx_max, DEVLINK_ATTR_PAD)) in devlink_nl_rate_fill()
962 if (devlink_rate->parent) in devlink_nl_rate_fill()
964 devlink_rate->parent->name)) in devlink_nl_rate_fill()
1142 static void devlink_rate_notify(struct devlink_rate *devlink_rate, in devlink_rate_notify() argument
1145 struct devlink *devlink = devlink_rate->devlink; in devlink_rate_notify()
1158 err = devlink_nl_rate_fill(msg, devlink_rate, cmd, 0, 0, 0, NULL); in devlink_rate_notify()
1171 struct devlink_rate *devlink_rate; in devlink_nl_cmd_rate_get_dumpit() local
1187 list_for_each_entry(devlink_rate, &devlink->rate_list, list) { in devlink_nl_cmd_rate_get_dumpit()
1195 err = devlink_nl_rate_fill(msg, devlink_rate, cmd, id, in devlink_nl_cmd_rate_get_dumpit()
1221 struct devlink_rate *devlink_rate = info->user_ptr[1]; in devlink_nl_cmd_rate_get_doit() local
1229 err = devlink_nl_rate_fill(msg, devlink_rate, DEVLINK_CMD_RATE_NEW, in devlink_nl_cmd_rate_get_doit()
1241 devlink_rate_is_parent_node(struct devlink_rate *devlink_rate, in devlink_rate_is_parent_node() argument
1242 struct devlink_rate *parent) in devlink_rate_is_parent_node()
1245 if (parent == devlink_rate) in devlink_rate_is_parent_node()
1687 devlink_nl_rate_parent_node_set(struct devlink_rate *devlink_rate, in devlink_nl_rate_parent_node_set() argument
1691 struct devlink *devlink = devlink_rate->devlink; in devlink_nl_rate_parent_node_set()
1695 struct devlink_rate *parent; in devlink_nl_rate_parent_node_set()
1698 parent = devlink_rate->parent; in devlink_nl_rate_parent_node_set()
1703 if (devlink_rate_is_leaf(devlink_rate)) in devlink_nl_rate_parent_node_set()
1704 err = ops->rate_leaf_parent_set(devlink_rate, NULL, in devlink_nl_rate_parent_node_set()
1705 devlink_rate->priv, NULL, in devlink_nl_rate_parent_node_set()
1707 else if (devlink_rate_is_node(devlink_rate)) in devlink_nl_rate_parent_node_set()
1708 err = ops->rate_node_parent_set(devlink_rate, NULL, in devlink_nl_rate_parent_node_set()
1709 devlink_rate->priv, NULL, in devlink_nl_rate_parent_node_set()
1715 devlink_rate->parent = NULL; in devlink_nl_rate_parent_node_set()
1721 if (parent == devlink_rate) { in devlink_nl_rate_parent_node_set()
1726 if (devlink_rate_is_node(devlink_rate) && in devlink_nl_rate_parent_node_set()
1727 devlink_rate_is_parent_node(devlink_rate, parent->parent)) { in devlink_nl_rate_parent_node_set()
1732 if (devlink_rate_is_leaf(devlink_rate)) in devlink_nl_rate_parent_node_set()
1733 err = ops->rate_leaf_parent_set(devlink_rate, parent, in devlink_nl_rate_parent_node_set()
1734 devlink_rate->priv, parent->priv, in devlink_nl_rate_parent_node_set()
1736 else if (devlink_rate_is_node(devlink_rate)) in devlink_nl_rate_parent_node_set()
1737 err = ops->rate_node_parent_set(devlink_rate, parent, in devlink_nl_rate_parent_node_set()
1738 devlink_rate->priv, parent->priv, in devlink_nl_rate_parent_node_set()
1744 devlink_rate->parent = parent; in devlink_nl_rate_parent_node_set()
1750 static int devlink_nl_rate_set(struct devlink_rate *devlink_rate, in devlink_nl_rate_set() argument
1760 if (devlink_rate_is_leaf(devlink_rate)) in devlink_nl_rate_set()
1761 err = ops->rate_leaf_tx_share_set(devlink_rate, devlink_rate->priv, in devlink_nl_rate_set()
1763 else if (devlink_rate_is_node(devlink_rate)) in devlink_nl_rate_set()
1764 err = ops->rate_node_tx_share_set(devlink_rate, devlink_rate->priv, in devlink_nl_rate_set()
1768 devlink_rate->tx_share = rate; in devlink_nl_rate_set()
1773 if (devlink_rate_is_leaf(devlink_rate)) in devlink_nl_rate_set()
1774 err = ops->rate_leaf_tx_max_set(devlink_rate, devlink_rate->priv, in devlink_nl_rate_set()
1776 else if (devlink_rate_is_node(devlink_rate)) in devlink_nl_rate_set()
1777 err = ops->rate_node_tx_max_set(devlink_rate, devlink_rate->priv, in devlink_nl_rate_set()
1781 devlink_rate->tx_max = rate; in devlink_nl_rate_set()
1786 err = devlink_nl_rate_parent_node_set(devlink_rate, info, in devlink_nl_rate_set()
1840 struct devlink_rate *devlink_rate = info->user_ptr[1]; in devlink_nl_cmd_rate_set_doit() local
1841 struct devlink *devlink = devlink_rate->devlink; in devlink_nl_cmd_rate_set_doit()
1845 if (!ops || !devlink_rate_set_ops_supported(ops, info, devlink_rate->type)) in devlink_nl_cmd_rate_set_doit()
1848 err = devlink_nl_rate_set(devlink_rate, ops, info); in devlink_nl_cmd_rate_set_doit()
1851 devlink_rate_notify(devlink_rate, DEVLINK_CMD_RATE_NEW); in devlink_nl_cmd_rate_set_doit()
1859 struct devlink_rate *rate_node; in devlink_nl_cmd_rate_new_doit()
1915 struct devlink_rate *rate_node = info->user_ptr[1]; in devlink_nl_cmd_rate_del_doit()
2837 struct devlink_rate *devlink_rate; in devlink_rate_nodes_check() local
2841 list_for_each_entry(devlink_rate, &devlink->rate_list, list) in devlink_rate_nodes_check()
2842 if (devlink_rate_is_node(devlink_rate)) { in devlink_rate_nodes_check()
9044 struct devlink_rate *rate_node; in devlink_notify_register()
9080 struct devlink_rate *rate_node; in devlink_notify_unregister()
9502 struct devlink_rate *devlink_rate; in devlink_rate_leaf_create() local
9504 devlink_rate = kzalloc(sizeof(*devlink_rate), GFP_KERNEL); in devlink_rate_leaf_create()
9505 if (!devlink_rate) in devlink_rate_leaf_create()
9509 WARN_ON(devlink_port->devlink_rate); in devlink_rate_leaf_create()
9510 devlink_rate->type = DEVLINK_RATE_TYPE_LEAF; in devlink_rate_leaf_create()
9511 devlink_rate->devlink = devlink; in devlink_rate_leaf_create()
9512 devlink_rate->devlink_port = devlink_port; in devlink_rate_leaf_create()
9513 devlink_rate->priv = priv; in devlink_rate_leaf_create()
9514 list_add_tail(&devlink_rate->list, &devlink->rate_list); in devlink_rate_leaf_create()
9515 devlink_port->devlink_rate = devlink_rate; in devlink_rate_leaf_create()
9516 devlink_rate_notify(devlink_rate, DEVLINK_CMD_RATE_NEW); in devlink_rate_leaf_create()
9532 struct devlink_rate *devlink_rate = devlink_port->devlink_rate; in devlink_rate_leaf_destroy() local
9535 if (!devlink_rate) in devlink_rate_leaf_destroy()
9539 devlink_rate_notify(devlink_rate, DEVLINK_CMD_RATE_DEL); in devlink_rate_leaf_destroy()
9540 if (devlink_rate->parent) in devlink_rate_leaf_destroy()
9541 refcount_dec(&devlink_rate->parent->refcnt); in devlink_rate_leaf_destroy()
9542 list_del(&devlink_rate->list); in devlink_rate_leaf_destroy()
9543 devlink_port->devlink_rate = NULL; in devlink_rate_leaf_destroy()
9545 kfree(devlink_rate); in devlink_rate_leaf_destroy()
9561 static struct devlink_rate *devlink_rate, *tmp; in devlink_rate_nodes_destroy() local
9565 list_for_each_entry(devlink_rate, &devlink->rate_list, list) { in devlink_rate_nodes_destroy()
9566 if (!devlink_rate->parent) in devlink_rate_nodes_destroy()
9569 refcount_dec(&devlink_rate->parent->refcnt); in devlink_rate_nodes_destroy()
9570 if (devlink_rate_is_leaf(devlink_rate)) in devlink_rate_nodes_destroy()
9571 ops->rate_leaf_parent_set(devlink_rate, NULL, devlink_rate->priv, in devlink_rate_nodes_destroy()
9573 else if (devlink_rate_is_node(devlink_rate)) in devlink_rate_nodes_destroy()
9574 ops->rate_node_parent_set(devlink_rate, NULL, devlink_rate->priv, in devlink_rate_nodes_destroy()
9577 list_for_each_entry_safe(devlink_rate, tmp, &devlink->rate_list, list) { in devlink_rate_nodes_destroy()
9578 if (devlink_rate_is_node(devlink_rate)) { in devlink_rate_nodes_destroy()
9579 ops->rate_node_del(devlink_rate, devlink_rate->priv, NULL); in devlink_rate_nodes_destroy()
9580 list_del(&devlink_rate->list); in devlink_rate_nodes_destroy()
9581 kfree(devlink_rate->name); in devlink_rate_nodes_destroy()
9582 kfree(devlink_rate); in devlink_rate_nodes_destroy()