Lines Matching defs:devlink
46 devlink_reload_action_is_supported(struct devlink *devlink, enum devlink_reload_action action)
48 return test_bit(action, &devlink->ops->reload_actions);
52 devlink_reload_limit_is_supported(struct devlink *devlink, enum devlink_reload_limit limit)
54 return test_bit(limit, &devlink->ops->reload_limits);
78 devlink_reload_stats_put(struct sk_buff *msg, struct devlink *devlink, bool is_remote)
94 !devlink_reload_action_is_supported(devlink, i)) ||
114 !devlink_reload_limit_is_supported(devlink, j)) ||
120 value = devlink->stats.reload_stats[stat_idx];
122 value = devlink->stats.remote_reload_stats[stat_idx];
141 static int devlink_nl_fill(struct sk_buff *msg, struct devlink *devlink,
152 if (devlink_nl_put_handle(msg, devlink))
154 if (nla_put_u8(msg, DEVLINK_ATTR_RELOAD_FAILED, devlink->reload_failed))
161 if (devlink_reload_stats_put(msg, devlink, false))
163 if (devlink_reload_stats_put(msg, devlink, true))
177 static void devlink_notify(struct devlink *devlink, enum devlink_command cmd)
183 WARN_ON(!xa_get_mark(&devlinks, devlink->index, DEVLINK_REGISTERED));
189 err = devlink_nl_fill(msg, devlink, cmd, 0, 0, 0);
195 genlmsg_multicast_netns(&devlink_nl_family, devlink_net(devlink),
201 struct devlink *devlink = info->user_ptr[0];
209 err = devlink_nl_fill(msg, devlink, DEVLINK_CMD_NEW,
220 devlink_nl_get_dump_one(struct sk_buff *msg, struct devlink *devlink,
223 return devlink_nl_fill(msg, devlink, DEVLINK_CMD_NEW,
233 void devlink_notify_register(struct devlink *devlink)
235 devlink_notify(devlink, DEVLINK_CMD_NEW);
236 devlink_linecards_notify_register(devlink);
237 devlink_ports_notify_register(devlink);
238 devlink_trap_policers_notify_register(devlink);
239 devlink_trap_groups_notify_register(devlink);
240 devlink_traps_notify_register(devlink);
241 devlink_rates_notify_register(devlink);
242 devlink_regions_notify_register(devlink);
243 devlink_params_notify_register(devlink);
246 void devlink_notify_unregister(struct devlink *devlink)
248 devlink_params_notify_unregister(devlink);
249 devlink_regions_notify_unregister(devlink);
250 devlink_rates_notify_unregister(devlink);
251 devlink_traps_notify_unregister(devlink);
252 devlink_trap_groups_notify_unregister(devlink);
253 devlink_trap_policers_notify_unregister(devlink);
254 devlink_ports_notify_unregister(devlink);
255 devlink_linecards_notify_unregister(devlink);
256 devlink_notify(devlink, DEVLINK_CMD_DEL);
259 static void devlink_reload_failed_set(struct devlink *devlink,
262 if (devlink->reload_failed == reload_failed)
264 devlink->reload_failed = reload_failed;
265 devlink_notify(devlink, DEVLINK_CMD_NEW);
268 bool devlink_is_reload_failed(const struct devlink *devlink)
270 return devlink->reload_failed;
275 __devlink_reload_stats_update(struct devlink *devlink, u32 *reload_stats,
286 devlink_notify(devlink, DEVLINK_CMD_NEW);
290 devlink_reload_stats_update(struct devlink *devlink, enum devlink_reload_limit limit,
293 __devlink_reload_stats_update(devlink, devlink->stats.reload_stats, limit,
298 * devlink_remote_reload_actions_performed - Update devlink on reload actions
299 * performed which are not a direct result of devlink reload call.
302 * a result of devlink reload call. For example fw_activate was performed as a result
303 * of devlink reload triggered fw_activate on another host.
305 * function whether it was done due to direct devlink reload call or not.
307 * @devlink: devlink
311 void devlink_remote_reload_actions_performed(struct devlink *devlink,
321 __devlink_reload_stats_update(devlink, devlink->stats.remote_reload_stats, limit,
363 static void devlink_reload_netns_change(struct devlink *devlink,
367 /* Userspace needs to be notified about devlink objects
369 * The rest of the devlink objects are re-created during
372 devlink_notify_unregister(devlink);
373 write_pnet(&devlink->_net, dest_net);
374 devlink_notify_register(devlink);
377 int devlink_reload(struct devlink *devlink, struct net *dest_net,
386 memcpy(remote_reload_stats, devlink->stats.remote_reload_stats,
389 err = devlink->ops->reload_down(devlink, !!dest_net, action, limit, extack);
393 curr_net = devlink_net(devlink);
395 devlink_reload_netns_change(devlink, curr_net, dest_net);
398 devlink_params_driverinit_load_new(devlink);
400 err = devlink->ops->reload_up(devlink, action, limit, actions_performed, extack);
401 devlink_reload_failed_set(devlink, !!err);
406 /* Catch driver on updating the remote action within devlink reload */
407 WARN_ON(memcmp(remote_reload_stats, devlink->stats.remote_reload_stats,
409 devlink_reload_stats_update(devlink, limit, *actions_performed);
414 devlink_nl_reload_actions_performed_snd(struct devlink *devlink, u32 actions_performed,
428 if (devlink_nl_put_handle(msg, devlink))
447 struct devlink *devlink = info->user_ptr[0];
454 err = devlink_resources_validate(devlink, NULL, info);
465 if (!devlink_reload_action_is_supported(devlink, action)) {
489 if (!devlink_reload_limit_is_supported(devlink, limit)) {
504 if (!net_eq(dest_net, devlink_net(devlink)) &&
512 err = devlink_reload(devlink, dest_net, action, limit, &actions_performed, info->extack);
523 return devlink_nl_reload_actions_performed_snd(devlink, actions_performed,
556 static int devlink_nl_eswitch_fill(struct sk_buff *msg, struct devlink *devlink,
560 const struct devlink_ops *ops = devlink->ops;
571 err = devlink_nl_put_handle(msg, devlink);
576 err = ops->eswitch_mode_get(devlink, &mode);
585 err = ops->eswitch_inline_mode_get(devlink, &inline_mode);
595 err = ops->eswitch_encap_mode_get(devlink, &encap_mode);
613 struct devlink *devlink = info->user_ptr[0];
621 err = devlink_nl_eswitch_fill(msg, devlink, DEVLINK_CMD_ESWITCH_GET,
634 struct devlink *devlink = info->user_ptr[0];
635 const struct devlink_ops *ops = devlink->ops;
645 err = devlink_rate_nodes_check(devlink, mode, info->extack);
648 err = ops->eswitch_mode_set(devlink, mode, info->extack);
657 err = ops->eswitch_inline_mode_set(devlink, inline_mode,
667 err = ops->eswitch_encap_mode_set(devlink, encap_mode,
798 devlink_nl_info_fill(struct sk_buff *msg, struct devlink *devlink,
802 struct device *dev = devlink_to_dev(devlink);
812 if (devlink_nl_put_handle(msg, devlink))
816 if (devlink->ops->info_get) {
817 err = devlink->ops->info_get(devlink, &req, extack);
836 struct devlink *devlink = info->user_ptr[0];
844 err = devlink_nl_info_fill(msg, devlink, DEVLINK_CMD_INFO_GET,
856 devlink_nl_info_get_dump_one(struct sk_buff *msg, struct devlink *devlink,
861 err = devlink_nl_info_fill(msg, devlink, DEVLINK_CMD_INFO_GET,
876 struct devlink *devlink,
886 if (devlink_nl_put_handle(msg, devlink))
919 static void __devlink_flash_update_notify(struct devlink *devlink,
930 if (!xa_get_mark(&devlinks, devlink->index, DEVLINK_REGISTERED))
937 err = devlink_nl_flash_update_fill(msg, devlink, cmd, params);
941 genlmsg_multicast_netns(&devlink_nl_family, devlink_net(devlink),
949 static void devlink_flash_update_begin_notify(struct devlink *devlink)
953 __devlink_flash_update_notify(devlink,
958 static void devlink_flash_update_end_notify(struct devlink *devlink)
962 __devlink_flash_update_notify(devlink,
967 void devlink_flash_update_status_notify(struct devlink *devlink,
980 __devlink_flash_update_notify(devlink,
986 void devlink_flash_update_timeout_notify(struct devlink *devlink,
997 __devlink_flash_update_notify(devlink,
1023 static int devlink_flash_component_get(struct devlink *devlink,
1038 if (!devlink->ops->info_get) {
1048 ret = devlink->ops->info_get(devlink, &req, NULL);
1065 struct devlink *devlink = info->user_ptr[0];
1070 if (!devlink->ops->flash_update)
1076 ret = devlink_flash_component_get(devlink,
1082 supported_params = devlink->ops->supported_flash_update_params;
1099 ret = request_firmware(¶ms.fw, file_name, devlink->dev);
1106 devlink_flash_update_begin_notify(devlink);
1107 ret = devlink->ops->flash_update(devlink, ¶ms, info->extack);
1108 devlink_flash_update_end_notify(devlink);
1115 static void __devlink_compat_running_version(struct devlink *devlink,
1128 err = devlink->ops->info_get(devlink, &req, NULL);
1151 void devlink_compat_running_version(struct devlink *devlink,
1154 if (!devlink->ops->info_get)
1157 devl_lock(devlink);
1158 if (devl_is_registered(devlink))
1159 __devlink_compat_running_version(devlink, buf, len);
1160 devl_unlock(devlink);
1163 int devlink_compat_flash_update(struct devlink *devlink, const char *file_name)
1168 devl_lock(devlink);
1169 if (!devl_is_registered(devlink)) {
1174 if (!devlink->ops->flash_update) {
1179 ret = request_firmware(¶ms.fw, file_name, devlink->dev);
1183 devlink_flash_update_begin_notify(devlink);
1184 ret = devlink->ops->flash_update(devlink, ¶ms, NULL);
1185 devlink_flash_update_end_notify(devlink);
1189 devl_unlock(devlink);
1195 devlink_nl_selftests_fill(struct sk_buff *msg, struct devlink *devlink,
1210 if (devlink_nl_put_handle(msg, devlink))
1219 if (devlink->ops->selftest_check(devlink, i, extack)) {
1237 struct devlink *devlink = info->user_ptr[0];
1241 if (!devlink->ops->selftest_check)
1248 err = devlink_nl_selftests_fill(msg, devlink, info->snd_portid,
1259 struct devlink *devlink,
1263 if (!devlink->ops->selftest_check)
1266 return devlink_nl_selftests_fill(msg, devlink,
1307 struct devlink *devlink = info->user_ptr[0];
1314 if (!devlink->ops->selftest_run || !devlink->ops->selftest_check)
1337 if (devlink_nl_put_handle(msg, devlink))
1349 if (!devlink->ops->selftest_check(devlink, i,
1357 test_status = devlink->ops->selftest_run(devlink, i,