Lines Matching full:devlink
47 devlink_reload_action_is_supported(struct devlink *devlink, enum devlink_reload_action action)
49 return test_bit(action, &devlink->ops->reload_actions);
53 devlink_reload_limit_is_supported(struct devlink *devlink, enum devlink_reload_limit limit)
55 return test_bit(limit, &devlink->ops->reload_limits);
79 devlink_reload_stats_put(struct sk_buff *msg, struct devlink *devlink, bool is_remote)
95 !devlink_reload_action_is_supported(devlink, i)) ||
115 !devlink_reload_limit_is_supported(devlink, j)) ||
121 value = devlink->stats.reload_stats[stat_idx];
123 value = devlink->stats.remote_reload_stats[stat_idx];
142 static int devlink_nl_nested_fill(struct sk_buff *msg, struct devlink *devlink)
148 xa_for_each(&devlink->nested_rels, rel_index, unused) {
149 err = devlink_rel_devlink_handle_put(msg, devlink,
159 static int devlink_nl_fill(struct sk_buff *msg, struct devlink *devlink,
170 if (devlink_nl_put_handle(msg, devlink))
172 if (nla_put_u8(msg, DEVLINK_ATTR_RELOAD_FAILED, devlink->reload_failed))
179 if (devlink_reload_stats_put(msg, devlink, false))
181 if (devlink_reload_stats_put(msg, devlink, true))
186 if (devlink_nl_nested_fill(msg, devlink))
199 static void devlink_notify(struct devlink *devlink, enum devlink_command cmd)
205 WARN_ON(!devl_is_registered(devlink));
207 if (!devlink_nl_notify_need(devlink))
214 err = devlink_nl_fill(msg, devlink, cmd, 0, 0, 0);
220 devlink_nl_notify_send(devlink, msg);
225 struct devlink *devlink = devlink_nl_ctx(info)->devlink;
233 err = devlink_nl_fill(msg, devlink, DEVLINK_CMD_NEW,
244 devlink_nl_get_dump_one(struct sk_buff *msg, struct devlink *devlink,
247 return devlink_nl_fill(msg, devlink, DEVLINK_CMD_NEW,
257 static void devlink_rel_notify_cb(struct devlink *devlink, u32 obj_index)
259 devlink_notify(devlink, DEVLINK_CMD_NEW);
262 static void devlink_rel_cleanup_cb(struct devlink *devlink, u32 obj_index,
265 xa_erase(&devlink->nested_rels, rel_index);
268 int devl_nested_devlink_set(struct devlink *devlink,
269 struct devlink *nested_devlink)
274 err = devlink_rel_nested_in_add(&rel_index, devlink->index, 0,
280 return xa_insert(&devlink->nested_rels, rel_index,
285 void devlink_notify_register(struct devlink *devlink)
287 devlink_notify(devlink, DEVLINK_CMD_NEW);
288 devlink_linecards_notify_register(devlink);
289 devlink_ports_notify_register(devlink);
290 devlink_trap_policers_notify_register(devlink);
291 devlink_trap_groups_notify_register(devlink);
292 devlink_traps_notify_register(devlink);
293 devlink_rates_notify_register(devlink);
294 devlink_regions_notify_register(devlink);
295 devlink_params_notify_register(devlink);
298 void devlink_notify_unregister(struct devlink *devlink)
300 devlink_params_notify_unregister(devlink);
301 devlink_regions_notify_unregister(devlink);
302 devlink_rates_notify_unregister(devlink);
303 devlink_traps_notify_unregister(devlink);
304 devlink_trap_groups_notify_unregister(devlink);
305 devlink_trap_policers_notify_unregister(devlink);
306 devlink_ports_notify_unregister(devlink);
307 devlink_linecards_notify_unregister(devlink);
308 devlink_notify(devlink, DEVLINK_CMD_DEL);
311 static void devlink_reload_failed_set(struct devlink *devlink,
314 if (devlink->reload_failed == reload_failed)
316 devlink->reload_failed = reload_failed;
317 devlink_notify(devlink, DEVLINK_CMD_NEW);
320 bool devlink_is_reload_failed(const struct devlink *devlink)
322 return devlink->reload_failed;
327 __devlink_reload_stats_update(struct devlink *devlink, u32 *reload_stats,
338 devlink_notify(devlink, DEVLINK_CMD_NEW);
342 devlink_reload_stats_update(struct devlink *devlink, enum devlink_reload_limit limit,
345 __devlink_reload_stats_update(devlink, devlink->stats.reload_stats, limit,
350 * devlink_remote_reload_actions_performed - Update devlink on reload actions
351 * performed which are not a direct result of devlink reload call.
354 * a result of devlink reload call. For example fw_activate was performed as a result
355 * of devlink reload triggered fw_activate on another host.
357 * function whether it was done due to direct devlink reload call or not.
359 * @devlink: devlink
363 void devlink_remote_reload_actions_performed(struct devlink *devlink,
373 __devlink_reload_stats_update(devlink, devlink->stats.remote_reload_stats, limit,
415 void devlink_reload_netns_change(struct devlink *devlink,
419 /* Userspace needs to be notified about devlink objects
421 * The rest of the devlink objects are re-created during
424 devlink_notify_unregister(devlink);
425 write_pnet(&devlink->_net, dest_net);
426 devlink_notify_register(devlink);
427 devlink_rel_nested_in_notify(devlink);
430 static void devlink_reload_reinit_sanity_check(struct devlink *devlink)
432 WARN_ON(!list_empty(&devlink->trap_policer_list));
433 WARN_ON(!list_empty(&devlink->trap_group_list));
434 WARN_ON(!list_empty(&devlink->trap_list));
435 WARN_ON(!list_empty(&devlink->dpipe_table_list));
436 WARN_ON(!list_empty(&devlink->sb_list));
437 WARN_ON(devlink_rates_check(devlink, NULL, NULL));
438 WARN_ON(!list_empty(&devlink->linecard_list));
439 WARN_ON(!xa_empty(&devlink->ports));
442 int devlink_reload(struct devlink *devlink, struct net *dest_net,
456 if (devlink->dev)
457 device_lock_assert(devlink->dev);
459 memcpy(remote_reload_stats, devlink->stats.remote_reload_stats,
462 err = devlink->ops->reload_down(devlink, !!dest_net, action, limit, extack);
466 curr_net = devlink_net(devlink);
468 devlink_reload_netns_change(devlink, curr_net, dest_net);
471 devlink_params_driverinit_load_new(devlink);
472 devlink_reload_reinit_sanity_check(devlink);
475 err = devlink->ops->reload_up(devlink, action, limit, actions_performed, extack);
476 devlink_reload_failed_set(devlink, !!err);
481 /* Catch driver on updating the remote action within devlink reload */
482 WARN_ON(memcmp(remote_reload_stats, devlink->stats.remote_reload_stats,
484 devlink_reload_stats_update(devlink, limit, *actions_performed);
489 devlink_nl_reload_actions_performed_snd(struct devlink *devlink, u32 actions_performed,
503 if (devlink_nl_put_handle(msg, devlink))
522 struct devlink *devlink = devlink_nl_ctx(info)->devlink;
529 err = devlink_resources_validate(devlink, NULL, info);
538 if (!devlink_reload_action_is_supported(devlink, action)) {
562 if (!devlink_reload_limit_is_supported(devlink, limit)) {
577 if (!net_eq(dest_net, devlink_net(devlink)) &&
586 err = devlink_reload(devlink, dest_net, action, limit, &actions_performed, info->extack);
597 return devlink_nl_reload_actions_performed_snd(devlink, actions_performed,
630 static int devlink_nl_eswitch_fill(struct sk_buff *msg, struct devlink *devlink,
634 const struct devlink_ops *ops = devlink->ops;
645 err = devlink_nl_put_handle(msg, devlink);
650 err = ops->eswitch_mode_get(devlink, &mode);
659 err = ops->eswitch_inline_mode_get(devlink, &inline_mode);
669 err = ops->eswitch_encap_mode_get(devlink, &encap_mode);
687 struct devlink *devlink = devlink_nl_ctx(info)->devlink;
695 err = devlink_nl_eswitch_fill(msg, devlink, DEVLINK_CMD_ESWITCH_GET,
708 struct devlink *devlink = devlink_nl_ctx(info)->devlink;
709 const struct devlink_ops *ops = devlink->ops;
718 err = devlink_rates_check(devlink, devlink_rate_is_node,
723 err = ops->eswitch_mode_set(devlink, mode, info->extack);
732 err = ops->eswitch_inline_mode_set(devlink, inline_mode,
742 err = ops->eswitch_encap_mode_set(devlink, encap_mode,
873 devlink_nl_info_fill(struct sk_buff *msg, struct devlink *devlink,
886 if (devlink_nl_put_handle(msg, devlink))
890 if (devlink->ops->info_get) {
891 err = devlink->ops->info_get(devlink, &req, extack);
896 err = devlink_nl_driver_info_get(devlink->dev_driver, &req);
910 struct devlink *devlink = devlink_nl_ctx(info)->devlink;
918 err = devlink_nl_info_fill(msg, devlink, DEVLINK_CMD_INFO_GET,
930 devlink_nl_info_get_dump_one(struct sk_buff *msg, struct devlink *devlink,
935 err = devlink_nl_info_fill(msg, devlink, DEVLINK_CMD_INFO_GET,
950 struct devlink *devlink,
960 if (devlink_nl_put_handle(msg, devlink))
993 static void __devlink_flash_update_notify(struct devlink *devlink,
1004 if (!devl_is_registered(devlink) || !devlink_nl_notify_need(devlink))
1011 err = devlink_nl_flash_update_fill(msg, devlink, cmd, params);
1015 devlink_nl_notify_send(devlink, msg);
1022 static void devlink_flash_update_begin_notify(struct devlink *devlink)
1026 __devlink_flash_update_notify(devlink,
1031 static void devlink_flash_update_end_notify(struct devlink *devlink)
1035 __devlink_flash_update_notify(devlink,
1040 void devlink_flash_update_status_notify(struct devlink *devlink,
1053 __devlink_flash_update_notify(devlink,
1059 void devlink_flash_update_timeout_notify(struct devlink *devlink,
1070 __devlink_flash_update_notify(devlink,
1096 static int devlink_flash_component_get(struct devlink *devlink,
1111 if (!devlink->ops->info_get) {
1121 ret = devlink->ops->info_get(devlink, &req, NULL);
1138 struct devlink *devlink = devlink_nl_ctx(info)->devlink;
1143 if (!devlink->ops->flash_update)
1149 ret = devlink_flash_component_get(devlink,
1155 supported_params = devlink->ops->supported_flash_update_params;
1172 ret = request_firmware_direct(¶ms.fw, file_name, devlink->dev);
1179 devlink_flash_update_begin_notify(devlink);
1180 ret = devlink->ops->flash_update(devlink, ¶ms, info->extack);
1181 devlink_flash_update_end_notify(devlink);
1188 static void __devlink_compat_running_version(struct devlink *devlink,
1201 err = devlink->ops->info_get(devlink, &req, NULL);
1220 void devlink_compat_running_version(struct devlink *devlink,
1223 if (!devlink->ops->info_get)
1226 devl_lock(devlink);
1227 if (devl_is_registered(devlink))
1228 __devlink_compat_running_version(devlink, buf, len);
1229 devl_unlock(devlink);
1232 int devlink_compat_flash_update(struct devlink *devlink, const char *file_name)
1237 devl_lock(devlink);
1238 if (!devl_is_registered(devlink)) {
1243 if (!devlink->ops->flash_update) {
1248 ret = request_firmware_direct(¶ms.fw, file_name, devlink->dev);
1252 devlink_flash_update_begin_notify(devlink);
1253 ret = devlink->ops->flash_update(devlink, ¶ms, NULL);
1254 devlink_flash_update_end_notify(devlink);
1258 devl_unlock(devlink);
1264 devlink_nl_selftests_fill(struct sk_buff *msg, struct devlink *devlink,
1279 if (devlink_nl_put_handle(msg, devlink))
1288 if (devlink->ops->selftest_check(devlink, i, extack)) {
1306 struct devlink *devlink = devlink_nl_ctx(info)->devlink;
1310 if (!devlink->ops->selftest_check)
1317 err = devlink_nl_selftests_fill(msg, devlink, info->snd_portid,
1328 struct devlink *devlink,
1332 if (!devlink->ops->selftest_check)
1335 return devlink_nl_selftests_fill(msg, devlink,
1376 struct devlink *devlink = devlink_nl_ctx(info)->devlink;
1383 if (!devlink->ops->selftest_run || !devlink->ops->selftest_check)
1406 if (devlink_nl_put_handle(msg, devlink))
1418 if (!devlink->ops->selftest_check(devlink, i,
1426 test_status = devlink->ops->selftest_run(devlink, i,