Lines Matching refs:rate_node
167 struct devlink_rate *rate_node; in devlink_rates_notify_register() local
169 list_for_each_entry(rate_node, &devlink->rate_list, list) in devlink_rates_notify_register()
170 devlink_rate_notify(rate_node, DEVLINK_CMD_RATE_NEW); in devlink_rates_notify_register()
175 struct devlink_rate *rate_node; in devlink_rates_notify_unregister() local
177 list_for_each_entry_reverse(rate_node, &devlink->rate_list, list) in devlink_rates_notify_unregister()
178 devlink_rate_notify(rate_node, DEVLINK_CMD_RATE_DEL); in devlink_rates_notify_unregister()
485 struct devlink_rate *rate_node; in devlink_nl_rate_new_doit() local
498 rate_node = devlink_rate_node_get_from_attrs(devlink, info->attrs); in devlink_nl_rate_new_doit()
499 if (!IS_ERR(rate_node)) in devlink_nl_rate_new_doit()
501 else if (rate_node == ERR_PTR(-EINVAL)) in devlink_nl_rate_new_doit()
504 rate_node = kzalloc(sizeof(*rate_node), GFP_KERNEL); in devlink_nl_rate_new_doit()
505 if (!rate_node) in devlink_nl_rate_new_doit()
508 rate_node->devlink = devlink; in devlink_nl_rate_new_doit()
509 rate_node->type = DEVLINK_RATE_TYPE_NODE; in devlink_nl_rate_new_doit()
510 rate_node->name = nla_strdup(info->attrs[DEVLINK_ATTR_RATE_NODE_NAME], GFP_KERNEL); in devlink_nl_rate_new_doit()
511 if (!rate_node->name) { in devlink_nl_rate_new_doit()
516 err = ops->rate_node_new(rate_node, &rate_node->priv, info->extack); in devlink_nl_rate_new_doit()
520 err = devlink_nl_rate_set(rate_node, ops, info); in devlink_nl_rate_new_doit()
524 refcount_set(&rate_node->refcnt, 1); in devlink_nl_rate_new_doit()
525 list_add(&rate_node->list, &devlink->rate_list); in devlink_nl_rate_new_doit()
526 devlink_rate_notify(rate_node, DEVLINK_CMD_RATE_NEW); in devlink_nl_rate_new_doit()
530 ops->rate_node_del(rate_node, rate_node->priv, info->extack); in devlink_nl_rate_new_doit()
532 kfree(rate_node->name); in devlink_nl_rate_new_doit()
534 kfree(rate_node); in devlink_nl_rate_new_doit()
541 struct devlink_rate *rate_node; in devlink_nl_rate_del_doit() local
544 rate_node = devlink_rate_node_get_from_info(devlink, info); in devlink_nl_rate_del_doit()
545 if (IS_ERR(rate_node)) in devlink_nl_rate_del_doit()
546 return PTR_ERR(rate_node); in devlink_nl_rate_del_doit()
548 if (refcount_read(&rate_node->refcnt) > 1) { in devlink_nl_rate_del_doit()
553 devlink_rate_notify(rate_node, DEVLINK_CMD_RATE_DEL); in devlink_nl_rate_del_doit()
554 err = devlink->ops->rate_node_del(rate_node, rate_node->priv, in devlink_nl_rate_del_doit()
556 if (rate_node->parent) in devlink_nl_rate_del_doit()
557 refcount_dec(&rate_node->parent->refcnt); in devlink_nl_rate_del_doit()
558 list_del(&rate_node->list); in devlink_nl_rate_del_doit()
559 kfree(rate_node->name); in devlink_nl_rate_del_doit()
560 kfree(rate_node); in devlink_nl_rate_del_doit()
590 struct devlink_rate *rate_node; in devl_rate_node_create() local
592 rate_node = devlink_rate_node_get_by_name(devlink, node_name); in devl_rate_node_create()
593 if (!IS_ERR(rate_node)) in devl_rate_node_create()
596 rate_node = kzalloc(sizeof(*rate_node), GFP_KERNEL); in devl_rate_node_create()
597 if (!rate_node) in devl_rate_node_create()
601 rate_node->parent = parent; in devl_rate_node_create()
602 refcount_inc(&rate_node->parent->refcnt); in devl_rate_node_create()
605 rate_node->type = DEVLINK_RATE_TYPE_NODE; in devl_rate_node_create()
606 rate_node->devlink = devlink; in devl_rate_node_create()
607 rate_node->priv = priv; in devl_rate_node_create()
609 rate_node->name = kstrdup(node_name, GFP_KERNEL); in devl_rate_node_create()
610 if (!rate_node->name) { in devl_rate_node_create()
611 kfree(rate_node); in devl_rate_node_create()
615 refcount_set(&rate_node->refcnt, 1); in devl_rate_node_create()
616 list_add(&rate_node->list, &devlink->rate_list); in devl_rate_node_create()
617 devlink_rate_notify(rate_node, DEVLINK_CMD_RATE_NEW); in devl_rate_node_create()
618 return rate_node; in devl_rate_node_create()