Lines Matching refs:devlink_rate
421 devlink_rate_is_leaf(struct devlink_rate *devlink_rate) in devlink_rate_is_leaf() argument
423 return devlink_rate->type == DEVLINK_RATE_TYPE_LEAF; in devlink_rate_is_leaf()
427 devlink_rate_is_node(struct devlink_rate *devlink_rate) in devlink_rate_is_node() argument
429 return devlink_rate->type == DEVLINK_RATE_TYPE_NODE; in devlink_rate_is_node()
432 static struct devlink_rate *
435 struct devlink_rate *devlink_rate; in devlink_rate_leaf_get_from_info() local
441 devlink_rate = devlink_port->devlink_rate; in devlink_rate_leaf_get_from_info()
442 return devlink_rate ?: ERR_PTR(-ENODEV); in devlink_rate_leaf_get_from_info()
445 static struct devlink_rate *
448 static struct devlink_rate *devlink_rate; in devlink_rate_node_get_by_name() local
450 list_for_each_entry(devlink_rate, &devlink->rate_list, list) { in devlink_rate_node_get_by_name()
451 if (devlink_rate_is_node(devlink_rate) && in devlink_rate_node_get_by_name()
452 !strcmp(node_name, devlink_rate->name)) in devlink_rate_node_get_by_name()
453 return devlink_rate; in devlink_rate_node_get_by_name()
458 static struct devlink_rate *
475 static struct devlink_rate *
481 static struct devlink_rate *
797 struct devlink_rate *devlink_rate; in devlink_nl_pre_doit() local
799 devlink_rate = devlink_rate_get_from_info(devlink, info); in devlink_nl_pre_doit()
800 if (IS_ERR(devlink_rate)) { in devlink_nl_pre_doit()
801 err = PTR_ERR(devlink_rate); in devlink_nl_pre_doit()
804 info->user_ptr[1] = devlink_rate; in devlink_nl_pre_doit()
806 struct devlink_rate *rate_node; in devlink_nl_pre_doit()
1152 struct devlink_rate *devlink_rate, in devlink_nl_rate_fill() argument
1156 struct devlink *devlink = devlink_rate->devlink; in devlink_nl_rate_fill()
1166 if (nla_put_u16(msg, DEVLINK_ATTR_RATE_TYPE, devlink_rate->type)) in devlink_nl_rate_fill()
1169 if (devlink_rate_is_leaf(devlink_rate)) { in devlink_nl_rate_fill()
1171 devlink_rate->devlink_port->index)) in devlink_nl_rate_fill()
1173 } else if (devlink_rate_is_node(devlink_rate)) { in devlink_nl_rate_fill()
1175 devlink_rate->name)) in devlink_nl_rate_fill()
1180 devlink_rate->tx_share, DEVLINK_ATTR_PAD)) in devlink_nl_rate_fill()
1184 devlink_rate->tx_max, DEVLINK_ATTR_PAD)) in devlink_nl_rate_fill()
1187 if (devlink_rate->parent) in devlink_nl_rate_fill()
1189 devlink_rate->parent->name)) in devlink_nl_rate_fill()
1371 static void devlink_rate_notify(struct devlink_rate *devlink_rate, in devlink_rate_notify() argument
1374 struct devlink *devlink = devlink_rate->devlink; in devlink_rate_notify()
1387 err = devlink_nl_rate_fill(msg, devlink_rate, cmd, 0, 0, 0, NULL); in devlink_rate_notify()
1400 struct devlink_rate *devlink_rate; in devlink_nl_cmd_rate_get_dumpit() local
1409 list_for_each_entry(devlink_rate, &devlink->rate_list, list) { in devlink_nl_cmd_rate_get_dumpit()
1417 err = devlink_nl_rate_fill(msg, devlink_rate, cmd, id, in devlink_nl_cmd_rate_get_dumpit()
1441 struct devlink_rate *devlink_rate = info->user_ptr[1]; in devlink_nl_cmd_rate_get_doit() local
1449 err = devlink_nl_rate_fill(msg, devlink_rate, DEVLINK_CMD_RATE_NEW, in devlink_nl_cmd_rate_get_doit()
1461 devlink_rate_is_parent_node(struct devlink_rate *devlink_rate, in devlink_rate_is_parent_node() argument
1462 struct devlink_rate *parent) in devlink_rate_is_parent_node()
1465 if (parent == devlink_rate) in devlink_rate_is_parent_node()
1858 devlink_nl_rate_parent_node_set(struct devlink_rate *devlink_rate, in devlink_nl_rate_parent_node_set() argument
1862 struct devlink *devlink = devlink_rate->devlink; in devlink_nl_rate_parent_node_set()
1866 struct devlink_rate *parent; in devlink_nl_rate_parent_node_set()
1869 parent = devlink_rate->parent; in devlink_nl_rate_parent_node_set()
1874 if (devlink_rate_is_leaf(devlink_rate)) in devlink_nl_rate_parent_node_set()
1875 err = ops->rate_leaf_parent_set(devlink_rate, NULL, in devlink_nl_rate_parent_node_set()
1876 devlink_rate->priv, NULL, in devlink_nl_rate_parent_node_set()
1878 else if (devlink_rate_is_node(devlink_rate)) in devlink_nl_rate_parent_node_set()
1879 err = ops->rate_node_parent_set(devlink_rate, NULL, in devlink_nl_rate_parent_node_set()
1880 devlink_rate->priv, NULL, in devlink_nl_rate_parent_node_set()
1886 devlink_rate->parent = NULL; in devlink_nl_rate_parent_node_set()
1892 if (parent == devlink_rate) { in devlink_nl_rate_parent_node_set()
1897 if (devlink_rate_is_node(devlink_rate) && in devlink_nl_rate_parent_node_set()
1898 devlink_rate_is_parent_node(devlink_rate, parent->parent)) { in devlink_nl_rate_parent_node_set()
1903 if (devlink_rate_is_leaf(devlink_rate)) in devlink_nl_rate_parent_node_set()
1904 err = ops->rate_leaf_parent_set(devlink_rate, parent, in devlink_nl_rate_parent_node_set()
1905 devlink_rate->priv, parent->priv, in devlink_nl_rate_parent_node_set()
1907 else if (devlink_rate_is_node(devlink_rate)) in devlink_nl_rate_parent_node_set()
1908 err = ops->rate_node_parent_set(devlink_rate, parent, in devlink_nl_rate_parent_node_set()
1909 devlink_rate->priv, parent->priv, in devlink_nl_rate_parent_node_set()
1915 devlink_rate->parent = parent; in devlink_nl_rate_parent_node_set()
1921 static int devlink_nl_rate_set(struct devlink_rate *devlink_rate, in devlink_nl_rate_set() argument
1931 if (devlink_rate_is_leaf(devlink_rate)) in devlink_nl_rate_set()
1932 err = ops->rate_leaf_tx_share_set(devlink_rate, devlink_rate->priv, in devlink_nl_rate_set()
1934 else if (devlink_rate_is_node(devlink_rate)) in devlink_nl_rate_set()
1935 err = ops->rate_node_tx_share_set(devlink_rate, devlink_rate->priv, in devlink_nl_rate_set()
1939 devlink_rate->tx_share = rate; in devlink_nl_rate_set()
1944 if (devlink_rate_is_leaf(devlink_rate)) in devlink_nl_rate_set()
1945 err = ops->rate_leaf_tx_max_set(devlink_rate, devlink_rate->priv, in devlink_nl_rate_set()
1947 else if (devlink_rate_is_node(devlink_rate)) in devlink_nl_rate_set()
1948 err = ops->rate_node_tx_max_set(devlink_rate, devlink_rate->priv, in devlink_nl_rate_set()
1952 devlink_rate->tx_max = rate; in devlink_nl_rate_set()
1957 err = devlink_nl_rate_parent_node_set(devlink_rate, info, in devlink_nl_rate_set()
2011 struct devlink_rate *devlink_rate = info->user_ptr[1]; in devlink_nl_cmd_rate_set_doit() local
2012 struct devlink *devlink = devlink_rate->devlink; in devlink_nl_cmd_rate_set_doit()
2016 if (!ops || !devlink_rate_set_ops_supported(ops, info, devlink_rate->type)) in devlink_nl_cmd_rate_set_doit()
2019 err = devlink_nl_rate_set(devlink_rate, ops, info); in devlink_nl_cmd_rate_set_doit()
2022 devlink_rate_notify(devlink_rate, DEVLINK_CMD_RATE_NEW); in devlink_nl_cmd_rate_set_doit()
2030 struct devlink_rate *rate_node; in devlink_nl_cmd_rate_new_doit()
2086 struct devlink_rate *rate_node = info->user_ptr[1]; in devlink_nl_cmd_rate_del_doit()
3287 struct devlink_rate *devlink_rate; in devlink_rate_nodes_check() local
3289 list_for_each_entry(devlink_rate, &devlink->rate_list, list) in devlink_rate_nodes_check()
3290 if (devlink_rate_is_node(devlink_rate)) { in devlink_rate_nodes_check()
9688 struct devlink_rate *rate_node; in devlink_notify_register()
9727 struct devlink_rate *rate_node; in devlink_notify_unregister()
10223 struct devlink_rate *devlink_rate; in devl_rate_leaf_create() local
10227 if (WARN_ON(devlink_port->devlink_rate)) in devl_rate_leaf_create()
10230 devlink_rate = kzalloc(sizeof(*devlink_rate), GFP_KERNEL); in devl_rate_leaf_create()
10231 if (!devlink_rate) in devl_rate_leaf_create()
10234 devlink_rate->type = DEVLINK_RATE_TYPE_LEAF; in devl_rate_leaf_create()
10235 devlink_rate->devlink = devlink; in devl_rate_leaf_create()
10236 devlink_rate->devlink_port = devlink_port; in devl_rate_leaf_create()
10237 devlink_rate->priv = priv; in devl_rate_leaf_create()
10238 list_add_tail(&devlink_rate->list, &devlink->rate_list); in devl_rate_leaf_create()
10239 devlink_port->devlink_rate = devlink_rate; in devl_rate_leaf_create()
10240 devlink_rate_notify(devlink_rate, DEVLINK_CMD_RATE_NEW); in devl_rate_leaf_create()
10255 struct devlink_rate *devlink_rate = devlink_port->devlink_rate; in devl_rate_leaf_destroy() local
10258 if (!devlink_rate) in devl_rate_leaf_destroy()
10261 devlink_rate_notify(devlink_rate, DEVLINK_CMD_RATE_DEL); in devl_rate_leaf_destroy()
10262 if (devlink_rate->parent) in devl_rate_leaf_destroy()
10263 refcount_dec(&devlink_rate->parent->refcnt); in devl_rate_leaf_destroy()
10264 list_del(&devlink_rate->list); in devl_rate_leaf_destroy()
10265 devlink_port->devlink_rate = NULL; in devl_rate_leaf_destroy()
10266 kfree(devlink_rate); in devl_rate_leaf_destroy()
10279 static struct devlink_rate *devlink_rate, *tmp; in devl_rate_nodes_destroy() local
10284 list_for_each_entry(devlink_rate, &devlink->rate_list, list) { in devl_rate_nodes_destroy()
10285 if (!devlink_rate->parent) in devl_rate_nodes_destroy()
10288 refcount_dec(&devlink_rate->parent->refcnt); in devl_rate_nodes_destroy()
10289 if (devlink_rate_is_leaf(devlink_rate)) in devl_rate_nodes_destroy()
10290 ops->rate_leaf_parent_set(devlink_rate, NULL, devlink_rate->priv, in devl_rate_nodes_destroy()
10292 else if (devlink_rate_is_node(devlink_rate)) in devl_rate_nodes_destroy()
10293 ops->rate_node_parent_set(devlink_rate, NULL, devlink_rate->priv, in devl_rate_nodes_destroy()
10296 list_for_each_entry_safe(devlink_rate, tmp, &devlink->rate_list, list) { in devl_rate_nodes_destroy()
10297 if (devlink_rate_is_node(devlink_rate)) { in devl_rate_nodes_destroy()
10298 ops->rate_node_del(devlink_rate, devlink_rate->priv, NULL); in devl_rate_nodes_destroy()
10299 list_del(&devlink_rate->list); in devl_rate_nodes_destroy()
10300 kfree(devlink_rate->name); in devl_rate_nodes_destroy()
10301 kfree(devlink_rate); in devl_rate_nodes_destroy()