Lines Matching full:devlink
21 devlink_rate_leaf_get_from_info(struct devlink *devlink, struct genl_info *info) in devlink_rate_leaf_get_from_info() argument
26 devlink_port = devlink_port_get_from_attrs(devlink, info->attrs); in devlink_rate_leaf_get_from_info()
33 /* Repeatedly walks the nested devlink chain while cross device rate nodes are
36 * When cross device rate nodes aren't supported the original devlink instance
39 static struct devlink *devl_rate_lock(struct devlink *devlink) in devl_rate_lock() argument
41 struct devlink *rate_devlink = devlink, *parent; in devl_rate_lock()
43 devl_assert_locked(devlink); in devl_rate_lock()
50 if (rate_devlink != devlink) { in devl_rate_lock()
60 /* Unlocks and puts 'rate devlink' if different than 'devlink'. */
61 static void devl_rate_unlock(struct devlink *devlink, in devl_rate_unlock() argument
62 struct devlink *rate_devlink) in devl_rate_unlock()
64 if (devlink == rate_devlink) in devl_rate_unlock()
72 devlink_rate_node_get_by_name(struct devlink *rate_devlink, in devlink_rate_node_get_by_name()
73 struct devlink *devlink, const char *node_name) in devlink_rate_node_get_by_name() argument
78 if (devlink_rate->devlink == devlink && in devlink_rate_node_get_by_name()
87 devlink_rate_node_get_from_attrs(struct devlink *rate_devlink, in devlink_rate_node_get_from_attrs()
88 struct devlink *devlink, struct nlattr **attrs) in devlink_rate_node_get_from_attrs() argument
101 return devlink_rate_node_get_by_name(rate_devlink, devlink, in devlink_rate_node_get_from_attrs()
106 devlink_rate_node_get_from_info(struct devlink *rate_devlink, in devlink_rate_node_get_from_info()
107 struct devlink *devlink, in devlink_rate_node_get_from_info() argument
110 return devlink_rate_node_get_from_attrs(rate_devlink, devlink, in devlink_rate_node_get_from_info()
115 devlink_rate_get_from_info(struct devlink *rate_devlink, in devlink_rate_get_from_info()
116 struct devlink *devlink, struct genl_info *info) in devlink_rate_get_from_info() argument
121 return devlink_rate_leaf_get_from_info(devlink, info); in devlink_rate_get_from_info()
123 return devlink_rate_node_get_from_info(rate_devlink, devlink, in devlink_rate_get_from_info()
156 struct devlink *devlink = parent->devlink; in devlink_nl_rate_parent_fill() local
162 if (devlink != devlink_rate->devlink && in devlink_nl_rate_parent_fill()
164 devlink_net(devlink_rate->devlink), in devlink_nl_rate_parent_fill()
165 devlink, DEVLINK_ATTR_PARENT_DEV)) in devlink_nl_rate_parent_fill()
176 struct devlink *devlink = devlink_rate->devlink; in devlink_nl_rate_fill() local
183 if (devlink_nl_put_handle(msg, devlink)) in devlink_nl_rate_fill()
233 struct devlink *devlink = devlink_rate->devlink; in devlink_rate_notify() local
239 if (!devl_is_registered(devlink) || !devlink_nl_notify_need(devlink)) in devlink_rate_notify()
252 devlink_nl_notify_send(devlink, msg); in devlink_rate_notify()
255 void devlink_rates_notify_register(struct devlink *devlink) in devlink_rates_notify_register() argument
258 struct devlink *rate_devlink; in devlink_rates_notify_register()
260 rate_devlink = devl_rate_lock(devlink); in devlink_rates_notify_register()
262 if (rate_node->devlink == devlink) in devlink_rates_notify_register()
264 devl_rate_unlock(devlink, rate_devlink); in devlink_rates_notify_register()
267 void devlink_rates_notify_unregister(struct devlink *devlink) in devlink_rates_notify_unregister() argument
270 struct devlink *rate_devlink; in devlink_rates_notify_unregister()
272 rate_devlink = devl_rate_lock(devlink); in devlink_rates_notify_unregister()
274 if (rate_node->devlink == devlink) in devlink_rates_notify_unregister()
276 devl_rate_unlock(devlink, rate_devlink); in devlink_rates_notify_unregister()
280 devlink_nl_rate_get_dump_one(struct sk_buff *msg, struct devlink *devlink, in devlink_nl_rate_get_dump_one() argument
285 struct devlink *rate_devlink; in devlink_nl_rate_get_dump_one()
289 rate_devlink = devl_rate_lock(devlink); in devlink_nl_rate_get_dump_one()
294 if (idx < state->idx || devlink_rate->devlink != devlink) { in devlink_nl_rate_get_dump_one()
307 devl_rate_unlock(devlink, rate_devlink); in devlink_nl_rate_get_dump_one()
319 struct devlink *rate_devlink, *devlink = devlink_nl_ctx(info)->devlink; in devlink_nl_rate_get_doit() local
324 rate_devlink = devl_rate_lock(devlink); in devlink_nl_rate_get_doit()
325 devlink_rate = devlink_rate_get_from_info(rate_devlink, devlink, info); in devlink_nl_rate_get_doit()
343 devl_rate_unlock(devlink, rate_devlink); in devlink_nl_rate_get_doit()
349 devl_rate_unlock(devlink, rate_devlink); in devlink_nl_rate_get_doit()
367 struct devlink *rate_devlink, in devlink_nl_rate_parent_node_set()
371 struct devlink *devlink = devlink_rate->devlink, *parent_devlink; in devlink_nl_rate_parent_node_set() local
373 const struct devlink_ops *ops = devlink->ops; in devlink_nl_rate_parent_node_set()
378 parent_devlink = devlink_nl_ctx(info)->parent_devlink ? : devlink; in devlink_nl_rate_parent_node_set()
396 /* parent_devlink (when different than devlink) isn't locked, in devlink_nl_rate_parent_node_set()
397 * but the rate node devlink instance is, so nobody from the in devlink_nl_rate_parent_node_set()
483 struct devlink *devlink = devlink_rate->devlink; in devlink_nl_rate_tc_bw_set() local
484 const struct devlink_ops *ops = devlink->ops; in devlink_nl_rate_tc_bw_set()
522 struct devlink *rate_devlink, in devlink_nl_rate_set()
690 struct devlink *devlink = ctx->devlink; in devlink_nl_rate_set_doit() local
693 struct devlink *rate_devlink; in devlink_nl_rate_set_doit()
696 rate_devlink = devl_rate_lock(devlink); in devlink_nl_rate_set_doit()
697 devlink_rate = devlink_rate_get_from_info(rate_devlink, devlink, info); in devlink_nl_rate_set_doit()
703 ops = devlink->ops; in devlink_nl_rate_set_doit()
710 if (ctx->parent_devlink && ctx->parent_devlink != devlink && in devlink_nl_rate_set_doit()
723 devl_rate_unlock(devlink, rate_devlink); in devlink_nl_rate_set_doit()
730 struct devlink *devlink = ctx->devlink; in devlink_nl_rate_new_doit() local
733 struct devlink *rate_devlink; in devlink_nl_rate_new_doit()
736 ops = devlink->ops; in devlink_nl_rate_new_doit()
745 if (ctx->parent_devlink && ctx->parent_devlink != devlink && in devlink_nl_rate_new_doit()
752 rate_devlink = devl_rate_lock(devlink); in devlink_nl_rate_new_doit()
753 rate_node = devlink_rate_node_get_from_attrs(rate_devlink, devlink, in devlink_nl_rate_new_doit()
769 rate_node->devlink = devlink; in devlink_nl_rate_new_doit()
788 devl_rate_unlock(devlink, rate_devlink); in devlink_nl_rate_new_doit()
798 devl_rate_unlock(devlink, rate_devlink); in devlink_nl_rate_new_doit()
804 struct devlink *rate_devlink, *devlink = devlink_nl_ctx(info)->devlink; in devlink_nl_rate_del_doit() local
808 rate_devlink = devl_rate_lock(devlink); in devlink_nl_rate_del_doit()
809 rate_node = devlink_rate_node_get_from_info(rate_devlink, devlink, in devlink_nl_rate_del_doit()
823 err = devlink->ops->rate_node_del(rate_node, rate_node->priv, in devlink_nl_rate_del_doit()
831 devl_rate_unlock(devlink, rate_devlink); in devlink_nl_rate_del_doit()
835 int devlink_rates_check(struct devlink *devlink, in devlink_rates_check() argument
840 struct devlink *rate_devlink; in devlink_rates_check()
843 rate_devlink = devl_rate_lock(devlink); in devlink_rates_check()
845 if (devlink_rate->devlink == devlink && in devlink_rates_check()
852 devl_rate_unlock(devlink, rate_devlink); in devlink_rates_check()
857 * devl_rate_node_create - create devlink rate node
858 * @devlink: devlink instance
863 * Create devlink rate object of type node
866 devl_rate_node_create(struct devlink *devlink, void *priv, char *node_name, in devl_rate_node_create() argument
870 struct devlink *rate_devlink; in devl_rate_node_create()
872 rate_devlink = devl_rate_lock(devlink); in devl_rate_node_create()
873 rate_node = devlink_rate_node_get_by_name(rate_devlink, devlink, in devl_rate_node_create()
887 rate_node->devlink = devlink; in devl_rate_node_create()
906 devl_rate_unlock(devlink, rate_devlink); in devl_rate_node_create()
912 * devl_rate_leaf_create - create devlink rate leaf
913 * @devlink_port: devlink port object to create rate object on
917 * Create devlink rate object of type leaf on provided @devlink_port.
922 struct devlink *rate_devlink, *devlink = devlink_port->devlink; in devl_rate_leaf_create() local
925 devl_assert_locked(devlink); in devl_rate_leaf_create()
934 rate_devlink = devl_rate_lock(devlink); in devl_rate_leaf_create()
941 devlink_rate->devlink = devlink; in devl_rate_leaf_create()
947 devl_rate_unlock(devlink, rate_devlink); in devl_rate_leaf_create()
954 * devl_rate_leaf_destroy - destroy devlink rate leaf
956 * @devlink_port: devlink port linked to the rate object
958 * Destroy the devlink rate object of type leaf on provided @devlink_port.
963 struct devlink *rate_devlink, *devlink = devlink_port->devlink; in devl_rate_leaf_destroy() local
965 devl_assert_locked(devlink); in devl_rate_leaf_destroy()
969 rate_devlink = devl_rate_lock(devlink); in devl_rate_leaf_destroy()
975 devl_rate_unlock(devlink, rate_devlink); in devl_rate_leaf_destroy()
981 * devl_rate_nodes_destroy - destroy all devlink rate nodes on device
982 * @devlink: devlink instance
987 void devl_rate_nodes_destroy(struct devlink *devlink) in devl_rate_nodes_destroy() argument
991 struct devlink *rate_devlink; in devl_rate_nodes_destroy()
993 devl_assert_locked(devlink); in devl_rate_nodes_destroy()
994 rate_devlink = devl_rate_lock(devlink); in devl_rate_nodes_destroy()
998 (devlink_rate->devlink != devlink && in devl_rate_nodes_destroy()
999 devlink_rate->parent->devlink != devlink)) in devl_rate_nodes_destroy()
1005 * other concurrent rate operations on devlink_rate->devlink. in devl_rate_nodes_destroy()
1007 ops = devlink_rate->devlink->ops; in devl_rate_nodes_destroy()
1018 ops = devlink->ops; in devl_rate_nodes_destroy()
1021 if (devlink_rate->devlink == devlink && in devl_rate_nodes_destroy()
1029 devl_rate_unlock(devlink, rate_devlink); in devl_rate_nodes_destroy()