Lines Matching refs:devlink
95 static struct net *devlink_net(const struct devlink *devlink) in devlink_net() argument
97 return read_pnet(&devlink->_net); in devlink_net()
100 static void devlink_net_set(struct devlink *devlink, struct net *net) in devlink_net_set() argument
102 write_pnet(&devlink->_net, net); in devlink_net_set()
105 static struct devlink *devlink_get_from_attrs(struct net *net, in devlink_get_from_attrs()
108 struct devlink *devlink; in devlink_get_from_attrs() local
118 list_for_each_entry(devlink, &devlink_list, list) { in devlink_get_from_attrs()
119 if (strcmp(devlink->dev->bus->name, busname) == 0 && in devlink_get_from_attrs()
120 strcmp(dev_name(devlink->dev), devname) == 0 && in devlink_get_from_attrs()
121 net_eq(devlink_net(devlink), net)) in devlink_get_from_attrs()
122 return devlink; in devlink_get_from_attrs()
128 static struct devlink *devlink_get_from_info(struct genl_info *info) in devlink_get_from_info()
133 static struct devlink_port *devlink_port_get_by_index(struct devlink *devlink, in devlink_port_get_by_index() argument
138 list_for_each_entry(devlink_port, &devlink->port_list, list) { in devlink_port_get_by_index()
145 static bool devlink_port_index_exists(struct devlink *devlink, int port_index) in devlink_port_index_exists() argument
147 return devlink_port_get_by_index(devlink, port_index); in devlink_port_index_exists()
150 static struct devlink_port *devlink_port_get_from_attrs(struct devlink *devlink, in devlink_port_get_from_attrs() argument
157 devlink_port = devlink_port_get_by_index(devlink, port_index); in devlink_port_get_from_attrs()
165 static struct devlink_port *devlink_port_get_from_info(struct devlink *devlink, in devlink_port_get_from_info() argument
168 return devlink_port_get_from_attrs(devlink, info->attrs); in devlink_port_get_from_info()
186 static struct devlink_sb *devlink_sb_get_by_index(struct devlink *devlink, in devlink_sb_get_by_index() argument
191 list_for_each_entry(devlink_sb, &devlink->sb_list, list) { in devlink_sb_get_by_index()
198 static bool devlink_sb_index_exists(struct devlink *devlink, in devlink_sb_index_exists() argument
201 return devlink_sb_get_by_index(devlink, sb_index); in devlink_sb_index_exists()
204 static struct devlink_sb *devlink_sb_get_from_attrs(struct devlink *devlink, in devlink_sb_get_from_attrs() argument
211 devlink_sb = devlink_sb_get_by_index(devlink, sb_index); in devlink_sb_get_from_attrs()
219 static struct devlink_sb *devlink_sb_get_from_info(struct devlink *devlink, in devlink_sb_get_from_info() argument
222 return devlink_sb_get_from_attrs(devlink, info->attrs); in devlink_sb_get_from_info()
330 struct devlink *devlink; member
349 devlink_region_get_by_name(struct devlink *devlink, const char *region_name) in devlink_region_get_by_name() argument
353 list_for_each_entry(region, &devlink->region_list, list) in devlink_region_get_by_name()
393 struct devlink *devlink; in devlink_nl_pre_doit() local
397 devlink = devlink_get_from_info(info); in devlink_nl_pre_doit()
398 if (IS_ERR(devlink)) { in devlink_nl_pre_doit()
400 return PTR_ERR(devlink); in devlink_nl_pre_doit()
403 mutex_lock(&devlink->lock); in devlink_nl_pre_doit()
405 info->user_ptr[0] = devlink; in devlink_nl_pre_doit()
409 devlink_port = devlink_port_get_from_info(devlink, info); in devlink_nl_pre_doit()
419 devlink_sb = devlink_sb_get_from_info(devlink, info); in devlink_nl_pre_doit()
430 mutex_unlock(&devlink->lock); in devlink_nl_pre_doit()
438 struct devlink *devlink; in devlink_nl_post_doit() local
440 devlink = devlink_get_from_info(info); in devlink_nl_post_doit()
442 mutex_unlock(&devlink->lock); in devlink_nl_post_doit()
456 static int devlink_nl_put_handle(struct sk_buff *msg, struct devlink *devlink) in devlink_nl_put_handle() argument
458 if (nla_put_string(msg, DEVLINK_ATTR_BUS_NAME, devlink->dev->bus->name)) in devlink_nl_put_handle()
460 if (nla_put_string(msg, DEVLINK_ATTR_DEV_NAME, dev_name(devlink->dev))) in devlink_nl_put_handle()
465 static int devlink_nl_fill(struct sk_buff *msg, struct devlink *devlink, in devlink_nl_fill() argument
475 if (devlink_nl_put_handle(msg, devlink)) in devlink_nl_fill()
486 static void devlink_notify(struct devlink *devlink, enum devlink_command cmd) in devlink_notify() argument
497 err = devlink_nl_fill(msg, devlink, cmd, 0, 0, 0); in devlink_notify()
503 genlmsg_multicast_netns(&devlink_nl_family, devlink_net(devlink), in devlink_notify()
528 static int devlink_nl_port_fill(struct sk_buff *msg, struct devlink *devlink, in devlink_nl_port_fill() argument
539 if (devlink_nl_put_handle(msg, devlink)) in devlink_nl_port_fill()
581 struct devlink *devlink = devlink_port->devlink; in devlink_port_notify() local
594 err = devlink_nl_port_fill(msg, devlink, devlink_port, cmd, 0, 0, 0); in devlink_port_notify()
600 genlmsg_multicast_netns(&devlink_nl_family, devlink_net(devlink), in devlink_port_notify()
606 struct devlink *devlink = info->user_ptr[0]; in devlink_nl_cmd_get_doit() local
614 err = devlink_nl_fill(msg, devlink, DEVLINK_CMD_NEW, in devlink_nl_cmd_get_doit()
627 struct devlink *devlink; in devlink_nl_cmd_get_dumpit() local
633 list_for_each_entry(devlink, &devlink_list, list) { in devlink_nl_cmd_get_dumpit()
634 if (!net_eq(devlink_net(devlink), sock_net(msg->sk))) in devlink_nl_cmd_get_dumpit()
640 err = devlink_nl_fill(msg, devlink, DEVLINK_CMD_NEW, in devlink_nl_cmd_get_dumpit()
658 struct devlink *devlink = devlink_port->devlink; in devlink_nl_cmd_port_get_doit() local
666 err = devlink_nl_port_fill(msg, devlink, devlink_port, in devlink_nl_cmd_port_get_doit()
680 struct devlink *devlink; in devlink_nl_cmd_port_get_dumpit() local
687 list_for_each_entry(devlink, &devlink_list, list) { in devlink_nl_cmd_port_get_dumpit()
688 if (!net_eq(devlink_net(devlink), sock_net(msg->sk))) in devlink_nl_cmd_port_get_dumpit()
690 mutex_lock(&devlink->lock); in devlink_nl_cmd_port_get_dumpit()
691 list_for_each_entry(devlink_port, &devlink->port_list, list) { in devlink_nl_cmd_port_get_dumpit()
696 err = devlink_nl_port_fill(msg, devlink, devlink_port, in devlink_nl_cmd_port_get_dumpit()
702 mutex_unlock(&devlink->lock); in devlink_nl_cmd_port_get_dumpit()
707 mutex_unlock(&devlink->lock); in devlink_nl_cmd_port_get_dumpit()
716 static int devlink_port_type_set(struct devlink *devlink, in devlink_port_type_set() argument
723 if (devlink->ops && devlink->ops->port_type_set) { in devlink_port_type_set()
728 err = devlink->ops->port_type_set(devlink_port, port_type); in devlink_port_type_set()
742 struct devlink *devlink = devlink_port->devlink; in devlink_nl_cmd_port_set_doit() local
749 err = devlink_port_type_set(devlink, devlink_port, port_type); in devlink_nl_cmd_port_set_doit()
756 static int devlink_port_split(struct devlink *devlink, u32 port_index, in devlink_port_split() argument
760 if (devlink->ops && devlink->ops->port_split) in devlink_port_split()
761 return devlink->ops->port_split(devlink, port_index, count, in devlink_port_split()
769 struct devlink *devlink = info->user_ptr[0]; in devlink_nl_cmd_port_split_doit() local
779 return devlink_port_split(devlink, port_index, count, info->extack); in devlink_nl_cmd_port_split_doit()
782 static int devlink_port_unsplit(struct devlink *devlink, u32 port_index, in devlink_port_unsplit() argument
786 if (devlink->ops && devlink->ops->port_unsplit) in devlink_port_unsplit()
787 return devlink->ops->port_unsplit(devlink, port_index, extack); in devlink_port_unsplit()
794 struct devlink *devlink = info->user_ptr[0]; in devlink_nl_cmd_port_unsplit_doit() local
801 return devlink_port_unsplit(devlink, port_index, info->extack); in devlink_nl_cmd_port_unsplit_doit()
804 static int devlink_nl_sb_fill(struct sk_buff *msg, struct devlink *devlink, in devlink_nl_sb_fill() argument
815 if (devlink_nl_put_handle(msg, devlink)) in devlink_nl_sb_fill()
845 struct devlink *devlink = info->user_ptr[0]; in devlink_nl_cmd_sb_get_doit() local
854 err = devlink_nl_sb_fill(msg, devlink, devlink_sb, in devlink_nl_cmd_sb_get_doit()
868 struct devlink *devlink; in devlink_nl_cmd_sb_get_dumpit() local
875 list_for_each_entry(devlink, &devlink_list, list) { in devlink_nl_cmd_sb_get_dumpit()
876 if (!net_eq(devlink_net(devlink), sock_net(msg->sk))) in devlink_nl_cmd_sb_get_dumpit()
878 mutex_lock(&devlink->lock); in devlink_nl_cmd_sb_get_dumpit()
879 list_for_each_entry(devlink_sb, &devlink->sb_list, list) { in devlink_nl_cmd_sb_get_dumpit()
884 err = devlink_nl_sb_fill(msg, devlink, devlink_sb, in devlink_nl_cmd_sb_get_dumpit()
890 mutex_unlock(&devlink->lock); in devlink_nl_cmd_sb_get_dumpit()
895 mutex_unlock(&devlink->lock); in devlink_nl_cmd_sb_get_dumpit()
904 static int devlink_nl_sb_pool_fill(struct sk_buff *msg, struct devlink *devlink, in devlink_nl_sb_pool_fill() argument
913 err = devlink->ops->sb_pool_get(devlink, devlink_sb->index, in devlink_nl_sb_pool_fill()
922 if (devlink_nl_put_handle(msg, devlink)) in devlink_nl_sb_pool_fill()
947 struct devlink *devlink = info->user_ptr[0]; in devlink_nl_cmd_sb_pool_get_doit() local
958 if (!devlink->ops || !devlink->ops->sb_pool_get) in devlink_nl_cmd_sb_pool_get_doit()
965 err = devlink_nl_sb_pool_fill(msg, devlink, devlink_sb, pool_index, in devlink_nl_cmd_sb_pool_get_doit()
977 struct devlink *devlink, in __sb_pool_get_dumpit() argument
990 err = devlink_nl_sb_pool_fill(msg, devlink, in __sb_pool_get_dumpit()
1005 struct devlink *devlink; in devlink_nl_cmd_sb_pool_get_dumpit() local
1012 list_for_each_entry(devlink, &devlink_list, list) { in devlink_nl_cmd_sb_pool_get_dumpit()
1013 if (!net_eq(devlink_net(devlink), sock_net(msg->sk)) || in devlink_nl_cmd_sb_pool_get_dumpit()
1014 !devlink->ops || !devlink->ops->sb_pool_get) in devlink_nl_cmd_sb_pool_get_dumpit()
1016 mutex_lock(&devlink->lock); in devlink_nl_cmd_sb_pool_get_dumpit()
1017 list_for_each_entry(devlink_sb, &devlink->sb_list, list) { in devlink_nl_cmd_sb_pool_get_dumpit()
1018 err = __sb_pool_get_dumpit(msg, start, &idx, devlink, in devlink_nl_cmd_sb_pool_get_dumpit()
1023 mutex_unlock(&devlink->lock); in devlink_nl_cmd_sb_pool_get_dumpit()
1027 mutex_unlock(&devlink->lock); in devlink_nl_cmd_sb_pool_get_dumpit()
1036 static int devlink_sb_pool_set(struct devlink *devlink, unsigned int sb_index, in devlink_sb_pool_set() argument
1041 const struct devlink_ops *ops = devlink->ops; in devlink_sb_pool_set()
1044 return ops->sb_pool_set(devlink, sb_index, pool_index, in devlink_sb_pool_set()
1052 struct devlink *devlink = info->user_ptr[0]; in devlink_nl_cmd_sb_pool_set_doit() local
1072 return devlink_sb_pool_set(devlink, devlink_sb->index, in devlink_nl_cmd_sb_pool_set_doit()
1077 struct devlink *devlink, in devlink_nl_sb_port_pool_fill() argument
1084 const struct devlink_ops *ops = devlink->ops; in devlink_nl_sb_port_pool_fill()
1098 if (devlink_nl_put_handle(msg, devlink)) in devlink_nl_sb_port_pool_fill()
1137 struct devlink *devlink = devlink_port->devlink; in devlink_nl_cmd_sb_port_pool_get_doit() local
1148 if (!devlink->ops || !devlink->ops->sb_port_pool_get) in devlink_nl_cmd_sb_port_pool_get_doit()
1155 err = devlink_nl_sb_port_pool_fill(msg, devlink, devlink_port, in devlink_nl_cmd_sb_port_pool_get_doit()
1168 struct devlink *devlink, in __sb_port_pool_get_dumpit() argument
1177 list_for_each_entry(devlink_port, &devlink->port_list, list) { in __sb_port_pool_get_dumpit()
1183 err = devlink_nl_sb_port_pool_fill(msg, devlink, in __sb_port_pool_get_dumpit()
1201 struct devlink *devlink; in devlink_nl_cmd_sb_port_pool_get_dumpit() local
1208 list_for_each_entry(devlink, &devlink_list, list) { in devlink_nl_cmd_sb_port_pool_get_dumpit()
1209 if (!net_eq(devlink_net(devlink), sock_net(msg->sk)) || in devlink_nl_cmd_sb_port_pool_get_dumpit()
1210 !devlink->ops || !devlink->ops->sb_port_pool_get) in devlink_nl_cmd_sb_port_pool_get_dumpit()
1212 mutex_lock(&devlink->lock); in devlink_nl_cmd_sb_port_pool_get_dumpit()
1213 list_for_each_entry(devlink_sb, &devlink->sb_list, list) { in devlink_nl_cmd_sb_port_pool_get_dumpit()
1215 devlink, devlink_sb, in devlink_nl_cmd_sb_port_pool_get_dumpit()
1219 mutex_unlock(&devlink->lock); in devlink_nl_cmd_sb_port_pool_get_dumpit()
1223 mutex_unlock(&devlink->lock); in devlink_nl_cmd_sb_port_pool_get_dumpit()
1237 const struct devlink_ops *ops = devlink_port->devlink->ops; in devlink_sb_port_pool_set()
1268 devlink_nl_sb_tc_pool_bind_fill(struct sk_buff *msg, struct devlink *devlink, in devlink_nl_sb_tc_pool_bind_fill() argument
1275 const struct devlink_ops *ops = devlink->ops; in devlink_nl_sb_tc_pool_bind_fill()
1291 if (devlink_nl_put_handle(msg, devlink)) in devlink_nl_sb_tc_pool_bind_fill()
1336 struct devlink *devlink = devlink_port->devlink; in devlink_nl_cmd_sb_tc_pool_bind_get_doit() local
1352 if (!devlink->ops || !devlink->ops->sb_tc_pool_bind_get) in devlink_nl_cmd_sb_tc_pool_bind_get_doit()
1359 err = devlink_nl_sb_tc_pool_bind_fill(msg, devlink, devlink_port, in devlink_nl_cmd_sb_tc_pool_bind_get_doit()
1374 struct devlink *devlink, in __sb_tc_pool_bind_get_dumpit() argument
1382 list_for_each_entry(devlink_port, &devlink->port_list, list) { in __sb_tc_pool_bind_get_dumpit()
1389 err = devlink_nl_sb_tc_pool_bind_fill(msg, devlink, in __sb_tc_pool_bind_get_dumpit()
1407 err = devlink_nl_sb_tc_pool_bind_fill(msg, devlink, in __sb_tc_pool_bind_get_dumpit()
1427 struct devlink *devlink; in devlink_nl_cmd_sb_tc_pool_bind_get_dumpit() local
1434 list_for_each_entry(devlink, &devlink_list, list) { in devlink_nl_cmd_sb_tc_pool_bind_get_dumpit()
1435 if (!net_eq(devlink_net(devlink), sock_net(msg->sk)) || in devlink_nl_cmd_sb_tc_pool_bind_get_dumpit()
1436 !devlink->ops || !devlink->ops->sb_tc_pool_bind_get) in devlink_nl_cmd_sb_tc_pool_bind_get_dumpit()
1439 mutex_lock(&devlink->lock); in devlink_nl_cmd_sb_tc_pool_bind_get_dumpit()
1440 list_for_each_entry(devlink_sb, &devlink->sb_list, list) { in devlink_nl_cmd_sb_tc_pool_bind_get_dumpit()
1442 devlink, in devlink_nl_cmd_sb_tc_pool_bind_get_dumpit()
1447 mutex_unlock(&devlink->lock); in devlink_nl_cmd_sb_tc_pool_bind_get_dumpit()
1451 mutex_unlock(&devlink->lock); in devlink_nl_cmd_sb_tc_pool_bind_get_dumpit()
1466 const struct devlink_ops *ops = devlink_port->devlink->ops; in devlink_sb_tc_pool_bind_set()
1512 struct devlink *devlink = info->user_ptr[0]; in devlink_nl_cmd_sb_occ_snapshot_doit() local
1514 const struct devlink_ops *ops = devlink->ops; in devlink_nl_cmd_sb_occ_snapshot_doit()
1517 return ops->sb_occ_snapshot(devlink, devlink_sb->index); in devlink_nl_cmd_sb_occ_snapshot_doit()
1524 struct devlink *devlink = info->user_ptr[0]; in devlink_nl_cmd_sb_occ_max_clear_doit() local
1526 const struct devlink_ops *ops = devlink->ops; in devlink_nl_cmd_sb_occ_max_clear_doit()
1529 return ops->sb_occ_max_clear(devlink, devlink_sb->index); in devlink_nl_cmd_sb_occ_max_clear_doit()
1533 static int devlink_nl_eswitch_fill(struct sk_buff *msg, struct devlink *devlink, in devlink_nl_eswitch_fill() argument
1537 const struct devlink_ops *ops = devlink->ops; in devlink_nl_eswitch_fill()
1547 err = devlink_nl_put_handle(msg, devlink); in devlink_nl_eswitch_fill()
1552 err = ops->eswitch_mode_get(devlink, &mode); in devlink_nl_eswitch_fill()
1561 err = ops->eswitch_inline_mode_get(devlink, &inline_mode); in devlink_nl_eswitch_fill()
1571 err = ops->eswitch_encap_mode_get(devlink, &encap_mode); in devlink_nl_eswitch_fill()
1590 struct devlink *devlink = info->user_ptr[0]; in devlink_nl_cmd_eswitch_get_doit() local
1591 const struct devlink_ops *ops = devlink->ops; in devlink_nl_cmd_eswitch_get_doit()
1602 err = devlink_nl_eswitch_fill(msg, devlink, DEVLINK_CMD_ESWITCH_GET, in devlink_nl_cmd_eswitch_get_doit()
1616 struct devlink *devlink = info->user_ptr[0]; in devlink_nl_cmd_eswitch_set_doit() local
1617 const struct devlink_ops *ops = devlink->ops; in devlink_nl_cmd_eswitch_set_doit()
1629 err = ops->eswitch_mode_set(devlink, mode); in devlink_nl_cmd_eswitch_set_doit()
1639 err = ops->eswitch_inline_mode_set(devlink, inline_mode); in devlink_nl_cmd_eswitch_set_doit()
1648 err = ops->eswitch_encap_mode_set(devlink, encap_mode); in devlink_nl_cmd_eswitch_set_doit()
1811 struct devlink *devlink = info->user_ptr[0]; in devlink_dpipe_tables_fill() local
1835 if (devlink_nl_put_handle(skb, devlink)) in devlink_dpipe_tables_fill()
1889 struct devlink *devlink = info->user_ptr[0]; in devlink_nl_cmd_dpipe_table_get() local
1896 &devlink->dpipe_table_list, in devlink_nl_cmd_dpipe_table_get()
2061 struct devlink *devlink; in devlink_dpipe_entry_ctx_prepare() local
2077 devlink = dump_ctx->info->user_ptr[0]; in devlink_dpipe_entry_ctx_prepare()
2078 if (devlink_nl_put_handle(dump_ctx->skb, devlink)) in devlink_dpipe_entry_ctx_prepare()
2162 struct devlink *devlink = info->user_ptr[0]; in devlink_nl_cmd_dpipe_entries_get() local
2170 table = devlink_dpipe_table_find(&devlink->dpipe_table_list, in devlink_nl_cmd_dpipe_entries_get()
2247 struct devlink *devlink = info->user_ptr[0]; in devlink_dpipe_headers_fill() local
2268 if (devlink_nl_put_handle(skb, devlink)) in devlink_dpipe_headers_fill()
2310 struct devlink *devlink = info->user_ptr[0]; in devlink_nl_cmd_dpipe_headers_get() local
2312 if (!devlink->dpipe_headers) in devlink_nl_cmd_dpipe_headers_get()
2315 0, devlink->dpipe_headers); in devlink_nl_cmd_dpipe_headers_get()
2318 static int devlink_dpipe_table_counters_set(struct devlink *devlink, in devlink_dpipe_table_counters_set() argument
2324 table = devlink_dpipe_table_find(&devlink->dpipe_table_list, in devlink_dpipe_table_counters_set()
2344 struct devlink *devlink = info->user_ptr[0]; in devlink_nl_cmd_dpipe_table_counters_set() local
2355 return devlink_dpipe_table_counters_set(devlink, table_name, in devlink_nl_cmd_dpipe_table_counters_set()
2360 devlink_resource_find(struct devlink *devlink, in devlink_resource_find() argument
2368 resource_list = &devlink->resource_list; in devlink_resource_find()
2376 child_resource = devlink_resource_find(devlink, resource, in devlink_resource_find()
2432 struct devlink *devlink = info->user_ptr[0]; in devlink_nl_cmd_resource_set() local
2443 resource = devlink_resource_find(devlink, NULL, resource_id); in devlink_nl_cmd_resource_set()
2487 static int devlink_resource_put(struct devlink *devlink, struct sk_buff *skb, in devlink_resource_put() argument
2523 if (devlink_resource_put(devlink, skb, child_resource)) in devlink_resource_put()
2542 struct devlink *devlink = info->user_ptr[0]; in devlink_resource_fill() local
2552 resource = list_first_entry(&devlink->resource_list, in devlink_resource_fill()
2566 if (devlink_nl_put_handle(skb, devlink)) in devlink_resource_fill()
2575 list_for_each_entry_from(resource, &devlink->resource_list, list) { in devlink_resource_fill()
2576 err = devlink_resource_put(devlink, skb, resource); in devlink_resource_fill()
2610 struct devlink *devlink = info->user_ptr[0]; in devlink_nl_cmd_resource_dump() local
2612 if (list_empty(&devlink->resource_list)) in devlink_nl_cmd_resource_dump()
2619 devlink_resources_validate(struct devlink *devlink, in devlink_resources_validate() argument
2629 resource_list = &devlink->resource_list; in devlink_resources_validate()
2634 err = devlink_resources_validate(devlink, resource, info); in devlink_resources_validate()
2643 struct devlink *devlink = info->user_ptr[0]; in devlink_nl_cmd_reload() local
2646 if (!devlink->ops->reload) in devlink_nl_cmd_reload()
2649 err = devlink_resources_validate(devlink, NULL, info); in devlink_nl_cmd_reload()
2654 return devlink->ops->reload(devlink, info->extack); in devlink_nl_cmd_reload()
2737 static int devlink_param_get(struct devlink *devlink, in devlink_param_get() argument
2743 return param->get(devlink, param->id, ctx); in devlink_param_get()
2746 static int devlink_param_set(struct devlink *devlink, in devlink_param_set() argument
2752 return param->set(devlink, param->id, ctx); in devlink_param_set()
2823 static int devlink_nl_param_fill(struct sk_buff *msg, struct devlink *devlink, in devlink_nl_param_fill() argument
2848 err = devlink_param_get(devlink, param, &ctx); in devlink_nl_param_fill()
2859 if (devlink_nl_put_handle(msg, devlink)) in devlink_nl_param_fill()
2902 static void devlink_param_notify(struct devlink *devlink, in devlink_param_notify() argument
2914 err = devlink_nl_param_fill(msg, devlink, param_item, cmd, 0, 0, 0); in devlink_param_notify()
2920 genlmsg_multicast_netns(&devlink_nl_family, devlink_net(devlink), in devlink_param_notify()
2928 struct devlink *devlink; in devlink_nl_cmd_param_get_dumpit() local
2934 list_for_each_entry(devlink, &devlink_list, list) { in devlink_nl_cmd_param_get_dumpit()
2935 if (!net_eq(devlink_net(devlink), sock_net(msg->sk))) in devlink_nl_cmd_param_get_dumpit()
2937 mutex_lock(&devlink->lock); in devlink_nl_cmd_param_get_dumpit()
2938 list_for_each_entry(param_item, &devlink->param_list, list) { in devlink_nl_cmd_param_get_dumpit()
2943 err = devlink_nl_param_fill(msg, devlink, param_item, in devlink_nl_cmd_param_get_dumpit()
2949 mutex_unlock(&devlink->lock); in devlink_nl_cmd_param_get_dumpit()
2954 mutex_unlock(&devlink->lock); in devlink_nl_cmd_param_get_dumpit()
3032 devlink_param_get_from_info(struct devlink *devlink, in devlink_param_get_from_info() argument
3041 return devlink_param_find_by_name(&devlink->param_list, param_name); in devlink_param_get_from_info()
3047 struct devlink *devlink = info->user_ptr[0]; in devlink_nl_cmd_param_get_doit() local
3052 param_item = devlink_param_get_from_info(devlink, info); in devlink_nl_cmd_param_get_doit()
3060 err = devlink_nl_param_fill(msg, devlink, param_item, in devlink_nl_cmd_param_get_doit()
3074 struct devlink *devlink = info->user_ptr[0]; in devlink_nl_cmd_param_set_doit() local
3083 param_item = devlink_param_get_from_info(devlink, info); in devlink_nl_cmd_param_set_doit()
3096 err = param->validate(devlink, param->id, value, info->extack); in devlink_nl_cmd_param_set_doit()
3118 err = devlink_param_set(devlink, param, &ctx); in devlink_nl_cmd_param_set_doit()
3123 devlink_param_notify(devlink, param_item, DEVLINK_CMD_PARAM_NEW); in devlink_nl_cmd_param_set_doit()
3127 static int devlink_param_register_one(struct devlink *devlink, in devlink_param_register_one() argument
3132 if (devlink_param_find_by_name(&devlink->param_list, in devlink_param_register_one()
3146 list_add_tail(¶m_item->list, &devlink->param_list); in devlink_param_register_one()
3147 devlink_param_notify(devlink, param_item, DEVLINK_CMD_PARAM_NEW); in devlink_param_register_one()
3151 static void devlink_param_unregister_one(struct devlink *devlink, in devlink_param_unregister_one() argument
3156 param_item = devlink_param_find_by_name(&devlink->param_list, in devlink_param_unregister_one()
3159 devlink_param_notify(devlink, param_item, DEVLINK_CMD_PARAM_DEL); in devlink_param_unregister_one()
3165 struct devlink *devlink, in devlink_nl_region_snapshot_id_put() argument
3188 struct devlink *devlink, in devlink_nl_region_snapshots_id_put() argument
3200 err = devlink_nl_region_snapshot_id_put(msg, devlink, snapshot); in devlink_nl_region_snapshots_id_put()
3213 static int devlink_nl_region_fill(struct sk_buff *msg, struct devlink *devlink, in devlink_nl_region_fill() argument
3225 err = devlink_nl_put_handle(msg, devlink); in devlink_nl_region_fill()
3239 err = devlink_nl_region_snapshots_id_put(msg, devlink, region); in devlink_nl_region_fill()
3255 struct devlink *devlink = region->devlink; in devlink_nl_region_notify() local
3270 err = devlink_nl_put_handle(msg, devlink); in devlink_nl_region_notify()
3292 genlmsg_multicast_netns(&devlink_nl_family, devlink_net(devlink), in devlink_nl_region_notify()
3306 struct devlink *devlink = info->user_ptr[0]; in devlink_nl_cmd_region_get_doit() local
3316 region = devlink_region_get_by_name(devlink, region_name); in devlink_nl_cmd_region_get_doit()
3324 err = devlink_nl_region_fill(msg, devlink, DEVLINK_CMD_REGION_GET, in devlink_nl_cmd_region_get_doit()
3339 struct devlink *devlink; in devlink_nl_cmd_region_get_dumpit() local
3345 list_for_each_entry(devlink, &devlink_list, list) { in devlink_nl_cmd_region_get_dumpit()
3346 if (!net_eq(devlink_net(devlink), sock_net(msg->sk))) in devlink_nl_cmd_region_get_dumpit()
3349 mutex_lock(&devlink->lock); in devlink_nl_cmd_region_get_dumpit()
3350 list_for_each_entry(region, &devlink->region_list, list) { in devlink_nl_cmd_region_get_dumpit()
3355 err = devlink_nl_region_fill(msg, devlink, in devlink_nl_cmd_region_get_dumpit()
3361 mutex_unlock(&devlink->lock); in devlink_nl_cmd_region_get_dumpit()
3366 mutex_unlock(&devlink->lock); in devlink_nl_cmd_region_get_dumpit()
3377 struct devlink *devlink = info->user_ptr[0]; in devlink_nl_cmd_region_del() local
3390 region = devlink_region_get_by_name(devlink, region_name); in devlink_nl_cmd_region_del()
3404 struct devlink *devlink, in devlink_nl_cmd_region_read_chunk_fill() argument
3435 struct devlink *devlink, in devlink_nl_region_read_snapshot_fill() argument
3468 err = devlink_nl_cmd_region_read_chunk_fill(skb, devlink, in devlink_nl_region_read_snapshot_fill()
3490 struct devlink *devlink; in devlink_nl_cmd_region_read_dumpit() local
3502 devlink = devlink_get_from_attrs(sock_net(cb->skb->sk), attrs); in devlink_nl_cmd_region_read_dumpit()
3503 if (IS_ERR(devlink)) in devlink_nl_cmd_region_read_dumpit()
3507 mutex_lock(&devlink->lock); in devlink_nl_cmd_region_read_dumpit()
3514 region = devlink_region_get_by_name(devlink, region_name); in devlink_nl_cmd_region_read_dumpit()
3524 err = devlink_nl_put_handle(skb, devlink); in devlink_nl_cmd_region_read_dumpit()
3547 err = devlink_nl_region_read_snapshot_fill(skb, devlink, in devlink_nl_cmd_region_read_dumpit()
3564 mutex_unlock(&devlink->lock); in devlink_nl_cmd_region_read_dumpit()
3572 mutex_unlock(&devlink->lock); in devlink_nl_cmd_region_read_dumpit()
3848 struct devlink *devlink_alloc(const struct devlink_ops *ops, size_t priv_size) in devlink_alloc()
3850 struct devlink *devlink; in devlink_alloc() local
3852 devlink = kzalloc(sizeof(*devlink) + priv_size, GFP_KERNEL); in devlink_alloc()
3853 if (!devlink) in devlink_alloc()
3855 devlink->ops = ops; in devlink_alloc()
3856 devlink_net_set(devlink, &init_net); in devlink_alloc()
3857 INIT_LIST_HEAD(&devlink->port_list); in devlink_alloc()
3858 INIT_LIST_HEAD(&devlink->sb_list); in devlink_alloc()
3859 INIT_LIST_HEAD_RCU(&devlink->dpipe_table_list); in devlink_alloc()
3860 INIT_LIST_HEAD(&devlink->resource_list); in devlink_alloc()
3861 INIT_LIST_HEAD(&devlink->param_list); in devlink_alloc()
3862 INIT_LIST_HEAD(&devlink->region_list); in devlink_alloc()
3863 mutex_init(&devlink->lock); in devlink_alloc()
3864 return devlink; in devlink_alloc()
3873 int devlink_register(struct devlink *devlink, struct device *dev) in devlink_register() argument
3876 devlink->dev = dev; in devlink_register()
3877 list_add_tail(&devlink->list, &devlink_list); in devlink_register()
3878 devlink_notify(devlink, DEVLINK_CMD_NEW); in devlink_register()
3889 void devlink_unregister(struct devlink *devlink) in devlink_unregister() argument
3892 devlink_notify(devlink, DEVLINK_CMD_DEL); in devlink_unregister()
3893 list_del(&devlink->list); in devlink_unregister()
3903 void devlink_free(struct devlink *devlink) in devlink_free() argument
3905 kfree(devlink); in devlink_free()
3922 int devlink_port_register(struct devlink *devlink, in devlink_port_register() argument
3926 mutex_lock(&devlink->lock); in devlink_port_register()
3927 if (devlink_port_index_exists(devlink, port_index)) { in devlink_port_register()
3928 mutex_unlock(&devlink->lock); in devlink_port_register()
3931 devlink_port->devlink = devlink; in devlink_port_register()
3934 list_add_tail(&devlink_port->list, &devlink->port_list); in devlink_port_register()
3935 mutex_unlock(&devlink->lock); in devlink_port_register()
3948 struct devlink *devlink = devlink_port->devlink; in devlink_port_unregister() local
3951 mutex_lock(&devlink->lock); in devlink_port_unregister()
3953 mutex_unlock(&devlink->lock); in devlink_port_unregister()
4066 int devlink_sb_register(struct devlink *devlink, unsigned int sb_index, in devlink_sb_register() argument
4074 mutex_lock(&devlink->lock); in devlink_sb_register()
4075 if (devlink_sb_index_exists(devlink, sb_index)) { in devlink_sb_register()
4091 list_add_tail(&devlink_sb->list, &devlink->sb_list); in devlink_sb_register()
4093 mutex_unlock(&devlink->lock); in devlink_sb_register()
4098 void devlink_sb_unregister(struct devlink *devlink, unsigned int sb_index) in devlink_sb_unregister() argument
4102 mutex_lock(&devlink->lock); in devlink_sb_unregister()
4103 devlink_sb = devlink_sb_get_by_index(devlink, sb_index); in devlink_sb_unregister()
4106 mutex_unlock(&devlink->lock); in devlink_sb_unregister()
4119 int devlink_dpipe_headers_register(struct devlink *devlink, in devlink_dpipe_headers_register() argument
4122 mutex_lock(&devlink->lock); in devlink_dpipe_headers_register()
4123 devlink->dpipe_headers = dpipe_headers; in devlink_dpipe_headers_register()
4124 mutex_unlock(&devlink->lock); in devlink_dpipe_headers_register()
4136 void devlink_dpipe_headers_unregister(struct devlink *devlink) in devlink_dpipe_headers_unregister() argument
4138 mutex_lock(&devlink->lock); in devlink_dpipe_headers_unregister()
4139 devlink->dpipe_headers = NULL; in devlink_dpipe_headers_unregister()
4140 mutex_unlock(&devlink->lock); in devlink_dpipe_headers_unregister()
4158 bool devlink_dpipe_table_counter_enabled(struct devlink *devlink, in devlink_dpipe_table_counter_enabled() argument
4165 table = devlink_dpipe_table_find(&devlink->dpipe_table_list, in devlink_dpipe_table_counter_enabled()
4184 int devlink_dpipe_table_register(struct devlink *devlink, in devlink_dpipe_table_register() argument
4191 if (devlink_dpipe_table_find(&devlink->dpipe_table_list, table_name)) in devlink_dpipe_table_register()
4206 mutex_lock(&devlink->lock); in devlink_dpipe_table_register()
4207 list_add_tail_rcu(&table->list, &devlink->dpipe_table_list); in devlink_dpipe_table_register()
4208 mutex_unlock(&devlink->lock); in devlink_dpipe_table_register()
4219 void devlink_dpipe_table_unregister(struct devlink *devlink, in devlink_dpipe_table_unregister() argument
4224 mutex_lock(&devlink->lock); in devlink_dpipe_table_unregister()
4225 table = devlink_dpipe_table_find(&devlink->dpipe_table_list, in devlink_dpipe_table_unregister()
4230 mutex_unlock(&devlink->lock); in devlink_dpipe_table_unregister()
4234 mutex_unlock(&devlink->lock); in devlink_dpipe_table_unregister()
4251 int devlink_resource_register(struct devlink *devlink, in devlink_resource_register() argument
4265 mutex_lock(&devlink->lock); in devlink_resource_register()
4266 resource = devlink_resource_find(devlink, NULL, resource_id); in devlink_resource_register()
4279 resource_list = &devlink->resource_list; in devlink_resource_register()
4283 parent_resource = devlink_resource_find(devlink, NULL, in devlink_resource_register()
4305 mutex_unlock(&devlink->lock); in devlink_resource_register()
4316 void devlink_resources_unregister(struct devlink *devlink, in devlink_resources_unregister() argument
4325 resource_list = &devlink->resource_list; in devlink_resources_unregister()
4328 mutex_lock(&devlink->lock); in devlink_resources_unregister()
4331 devlink_resources_unregister(devlink, child_resource); in devlink_resources_unregister()
4337 mutex_unlock(&devlink->lock); in devlink_resources_unregister()
4348 int devlink_resource_size_get(struct devlink *devlink, in devlink_resource_size_get() argument
4355 mutex_lock(&devlink->lock); in devlink_resource_size_get()
4356 resource = devlink_resource_find(devlink, NULL, resource_id); in devlink_resource_size_get()
4364 mutex_unlock(&devlink->lock); in devlink_resource_size_get()
4377 int devlink_dpipe_table_resource_set(struct devlink *devlink, in devlink_dpipe_table_resource_set() argument
4384 mutex_lock(&devlink->lock); in devlink_dpipe_table_resource_set()
4385 table = devlink_dpipe_table_find(&devlink->dpipe_table_list, in devlink_dpipe_table_resource_set()
4395 mutex_unlock(&devlink->lock); in devlink_dpipe_table_resource_set()
4408 void devlink_resource_occ_get_register(struct devlink *devlink, in devlink_resource_occ_get_register() argument
4415 mutex_lock(&devlink->lock); in devlink_resource_occ_get_register()
4416 resource = devlink_resource_find(devlink, NULL, resource_id); in devlink_resource_occ_get_register()
4424 mutex_unlock(&devlink->lock); in devlink_resource_occ_get_register()
4434 void devlink_resource_occ_get_unregister(struct devlink *devlink, in devlink_resource_occ_get_unregister() argument
4439 mutex_lock(&devlink->lock); in devlink_resource_occ_get_unregister()
4440 resource = devlink_resource_find(devlink, NULL, resource_id); in devlink_resource_occ_get_unregister()
4448 mutex_unlock(&devlink->lock); in devlink_resource_occ_get_unregister()
4461 int devlink_params_register(struct devlink *devlink, in devlink_params_register() argument
4469 mutex_lock(&devlink->lock); in devlink_params_register()
4484 err = devlink_param_register_one(devlink, param); in devlink_params_register()
4489 mutex_unlock(&devlink->lock); in devlink_params_register()
4496 devlink_param_unregister_one(devlink, param); in devlink_params_register()
4498 mutex_unlock(&devlink->lock); in devlink_params_register()
4509 void devlink_params_unregister(struct devlink *devlink, in devlink_params_unregister() argument
4516 mutex_lock(&devlink->lock); in devlink_params_unregister()
4518 devlink_param_unregister_one(devlink, param); in devlink_params_unregister()
4519 mutex_unlock(&devlink->lock); in devlink_params_unregister()
4534 int devlink_param_driverinit_value_get(struct devlink *devlink, u32 param_id, in devlink_param_driverinit_value_get() argument
4539 if (!devlink->ops || !devlink->ops->reload) in devlink_param_driverinit_value_get()
4542 param_item = devlink_param_find_by_id(&devlink->param_list, param_id); in devlink_param_driverinit_value_get()
4572 int devlink_param_driverinit_value_set(struct devlink *devlink, u32 param_id, in devlink_param_driverinit_value_set() argument
4577 param_item = devlink_param_find_by_id(&devlink->param_list, param_id); in devlink_param_driverinit_value_set()
4591 devlink_param_notify(devlink, param_item, DEVLINK_CMD_PARAM_NEW); in devlink_param_driverinit_value_set()
4609 void devlink_param_value_changed(struct devlink *devlink, u32 param_id) in devlink_param_value_changed() argument
4613 param_item = devlink_param_find_by_id(&devlink->param_list, param_id); in devlink_param_value_changed()
4616 devlink_param_notify(devlink, param_item, DEVLINK_CMD_PARAM_NEW); in devlink_param_value_changed()
4645 struct devlink_region *devlink_region_create(struct devlink *devlink, in devlink_region_create() argument
4653 mutex_lock(&devlink->lock); in devlink_region_create()
4655 if (devlink_region_get_by_name(devlink, region_name)) { in devlink_region_create()
4666 region->devlink = devlink; in devlink_region_create()
4671 list_add_tail(®ion->list, &devlink->region_list); in devlink_region_create()
4674 mutex_unlock(&devlink->lock); in devlink_region_create()
4678 mutex_unlock(&devlink->lock); in devlink_region_create()
4690 struct devlink *devlink = region->devlink; in devlink_region_destroy() local
4693 mutex_lock(&devlink->lock); in devlink_region_destroy()
4702 mutex_unlock(&devlink->lock); in devlink_region_destroy()
4716 u32 devlink_region_shapshot_id_get(struct devlink *devlink) in devlink_region_shapshot_id_get() argument
4720 mutex_lock(&devlink->lock); in devlink_region_shapshot_id_get()
4721 id = ++devlink->snapshot_id; in devlink_region_shapshot_id_get()
4722 mutex_unlock(&devlink->lock); in devlink_region_shapshot_id_get()
4746 struct devlink *devlink = region->devlink; in devlink_region_snapshot_create() local
4750 mutex_lock(&devlink->lock); in devlink_region_snapshot_create()
4780 mutex_unlock(&devlink->lock); in devlink_region_snapshot_create()
4784 mutex_unlock(&devlink->lock); in devlink_region_snapshot_create()