Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge branch 'devlink-parama-cleanup'

Jiri Pirko says:

====================
devlink: Cleanup params usage

This patchset takes care of small cleanup of devlink params usage.
Some of the patches (first 2/3) are cosmetic, but I would like to
point couple of interesting ones:

Patch 9 is the main one of this set and introduces devlink instance
locking for params, similar to other devlink objects. That allows params
to be registered/unregistered when devlink instance is registered.

Patches 10-12 change mlx5 code to register non-driverinit params in the
code they are related to, and thanks to patch 8 this might be when
devlink instance is registered - for example during devlink reload.

---
v1->v2:
- Just small fix in the last patch
====================

Signed-off-by: David S. Miller <davem@davemloft.net>

+534 -463
+2 -18
drivers/net/ethernet/intel/ice/ice_devlink.c
··· 1411 1411 int ice_devlink_register_params(struct ice_pf *pf) 1412 1412 { 1413 1413 struct devlink *devlink = priv_to_devlink(pf); 1414 - union devlink_param_value value; 1415 - int err; 1416 1414 1417 - err = devlink_params_register(devlink, ice_devlink_params, 1418 - ARRAY_SIZE(ice_devlink_params)); 1419 - if (err) 1420 - return err; 1421 - 1422 - value.vbool = false; 1423 - devlink_param_driverinit_value_set(devlink, 1424 - DEVLINK_PARAM_GENERIC_ID_ENABLE_IWARP, 1425 - value); 1426 - 1427 - value.vbool = test_bit(ICE_FLAG_RDMA_ENA, pf->flags) ? true : false; 1428 - devlink_param_driverinit_value_set(devlink, 1429 - DEVLINK_PARAM_GENERIC_ID_ENABLE_ROCE, 1430 - value); 1431 - 1432 - return 0; 1415 + return devlink_params_register(devlink, ice_devlink_params, 1416 + ARRAY_SIZE(ice_devlink_params)); 1433 1417 } 1434 1418 1435 1419 void ice_devlink_unregister_params(struct ice_pf *pf)
+40 -40
drivers/net/ethernet/mellanox/mlx4/main.c
··· 265 265 union devlink_param_value value; 266 266 267 267 value.vbool = !!mlx4_internal_err_reset; 268 - devlink_param_driverinit_value_set(devlink, 269 - DEVLINK_PARAM_GENERIC_ID_INT_ERR_RESET, 270 - value); 268 + devl_param_driverinit_value_set(devlink, 269 + DEVLINK_PARAM_GENERIC_ID_INT_ERR_RESET, 270 + value); 271 271 272 272 value.vu32 = 1UL << log_num_mac; 273 - devlink_param_driverinit_value_set(devlink, 274 - DEVLINK_PARAM_GENERIC_ID_MAX_MACS, 275 - value); 273 + devl_param_driverinit_value_set(devlink, 274 + DEVLINK_PARAM_GENERIC_ID_MAX_MACS, 275 + value); 276 276 277 277 value.vbool = enable_64b_cqe_eqe; 278 - devlink_param_driverinit_value_set(devlink, 279 - MLX4_DEVLINK_PARAM_ID_ENABLE_64B_CQE_EQE, 280 - value); 278 + devl_param_driverinit_value_set(devlink, 279 + MLX4_DEVLINK_PARAM_ID_ENABLE_64B_CQE_EQE, 280 + value); 281 281 282 282 value.vbool = enable_4k_uar; 283 - devlink_param_driverinit_value_set(devlink, 284 - MLX4_DEVLINK_PARAM_ID_ENABLE_4K_UAR, 285 - value); 283 + devl_param_driverinit_value_set(devlink, 284 + MLX4_DEVLINK_PARAM_ID_ENABLE_4K_UAR, 285 + value); 286 286 287 287 value.vbool = false; 288 - devlink_param_driverinit_value_set(devlink, 289 - DEVLINK_PARAM_GENERIC_ID_REGION_SNAPSHOT, 290 - value); 288 + devl_param_driverinit_value_set(devlink, 289 + DEVLINK_PARAM_GENERIC_ID_REGION_SNAPSHOT, 290 + value); 291 291 } 292 292 293 293 static inline void mlx4_set_num_reserved_uars(struct mlx4_dev *dev, ··· 3910 3910 union devlink_param_value saved_value; 3911 3911 int err; 3912 3912 3913 - err = devlink_param_driverinit_value_get(devlink, 3914 - DEVLINK_PARAM_GENERIC_ID_INT_ERR_RESET, 3915 - &saved_value); 3913 + err = devl_param_driverinit_value_get(devlink, 3914 + DEVLINK_PARAM_GENERIC_ID_INT_ERR_RESET, 3915 + &saved_value); 3916 3916 if (!err && mlx4_internal_err_reset != saved_value.vbool) { 3917 3917 mlx4_internal_err_reset = saved_value.vbool; 3918 3918 /* Notify on value changed on runtime configuration mode */ 3919 - devlink_param_value_changed(devlink, 3920 - DEVLINK_PARAM_GENERIC_ID_INT_ERR_RESET); 3919 + devl_param_value_changed(devlink, 3920 + DEVLINK_PARAM_GENERIC_ID_INT_ERR_RESET); 3921 3921 } 3922 - err = devlink_param_driverinit_value_get(devlink, 3923 - DEVLINK_PARAM_GENERIC_ID_MAX_MACS, 3924 - &saved_value); 3922 + err = devl_param_driverinit_value_get(devlink, 3923 + DEVLINK_PARAM_GENERIC_ID_MAX_MACS, 3924 + &saved_value); 3925 3925 if (!err) 3926 3926 log_num_mac = order_base_2(saved_value.vu32); 3927 - err = devlink_param_driverinit_value_get(devlink, 3928 - MLX4_DEVLINK_PARAM_ID_ENABLE_64B_CQE_EQE, 3929 - &saved_value); 3927 + err = devl_param_driverinit_value_get(devlink, 3928 + MLX4_DEVLINK_PARAM_ID_ENABLE_64B_CQE_EQE, 3929 + &saved_value); 3930 3930 if (!err) 3931 3931 enable_64b_cqe_eqe = saved_value.vbool; 3932 - err = devlink_param_driverinit_value_get(devlink, 3933 - MLX4_DEVLINK_PARAM_ID_ENABLE_4K_UAR, 3934 - &saved_value); 3932 + err = devl_param_driverinit_value_get(devlink, 3933 + MLX4_DEVLINK_PARAM_ID_ENABLE_4K_UAR, 3934 + &saved_value); 3935 3935 if (!err) 3936 3936 enable_4k_uar = saved_value.vbool; 3937 - err = devlink_param_driverinit_value_get(devlink, 3938 - DEVLINK_PARAM_GENERIC_ID_REGION_SNAPSHOT, 3939 - &saved_value); 3937 + err = devl_param_driverinit_value_get(devlink, 3938 + DEVLINK_PARAM_GENERIC_ID_REGION_SNAPSHOT, 3939 + &saved_value); 3940 3940 if (!err && crdump->snapshot_enable != saved_value.vbool) { 3941 3941 crdump->snapshot_enable = saved_value.vbool; 3942 - devlink_param_value_changed(devlink, 3943 - DEVLINK_PARAM_GENERIC_ID_REGION_SNAPSHOT); 3942 + devl_param_value_changed(devlink, 3943 + DEVLINK_PARAM_GENERIC_ID_REGION_SNAPSHOT); 3944 3944 } 3945 3945 } 3946 3946 ··· 4021 4021 mutex_init(&dev->persist->interface_state_mutex); 4022 4022 mutex_init(&dev->persist->pci_status_mutex); 4023 4023 4024 - ret = devlink_params_register(devlink, mlx4_devlink_params, 4025 - ARRAY_SIZE(mlx4_devlink_params)); 4024 + ret = devl_params_register(devlink, mlx4_devlink_params, 4025 + ARRAY_SIZE(mlx4_devlink_params)); 4026 4026 if (ret) 4027 4027 goto err_devlink_unregister; 4028 4028 mlx4_devlink_set_params_init_values(devlink); ··· 4037 4037 return 0; 4038 4038 4039 4039 err_params_unregister: 4040 - devlink_params_unregister(devlink, mlx4_devlink_params, 4041 - ARRAY_SIZE(mlx4_devlink_params)); 4040 + devl_params_unregister(devlink, mlx4_devlink_params, 4041 + ARRAY_SIZE(mlx4_devlink_params)); 4042 4042 err_devlink_unregister: 4043 4043 kfree(dev->persist); 4044 4044 err_devlink_free: ··· 4181 4181 4182 4182 pci_release_regions(pdev); 4183 4183 mlx4_pci_disable_device(dev); 4184 - devlink_params_unregister(devlink, mlx4_devlink_params, 4185 - ARRAY_SIZE(mlx4_devlink_params)); 4184 + devl_params_unregister(devlink, mlx4_devlink_params, 4185 + ARRAY_SIZE(mlx4_devlink_params)); 4186 4186 kfree(dev->persist); 4187 4187 devl_unlock(devlink); 4188 4188 devlink_free(devlink);
+9 -9
drivers/net/ethernet/mellanox/mlx5/core/dev.c
··· 114 114 union devlink_param_value val; 115 115 int err; 116 116 117 - err = devlink_param_driverinit_value_get(priv_to_devlink(dev), 118 - DEVLINK_PARAM_GENERIC_ID_ENABLE_ETH, 119 - &val); 117 + err = devl_param_driverinit_value_get(priv_to_devlink(dev), 118 + DEVLINK_PARAM_GENERIC_ID_ENABLE_ETH, 119 + &val); 120 120 return err ? false : val.vbool; 121 121 } 122 122 ··· 147 147 union devlink_param_value val; 148 148 int err; 149 149 150 - err = devlink_param_driverinit_value_get(priv_to_devlink(dev), 151 - DEVLINK_PARAM_GENERIC_ID_ENABLE_VNET, 152 - &val); 150 + err = devl_param_driverinit_value_get(priv_to_devlink(dev), 151 + DEVLINK_PARAM_GENERIC_ID_ENABLE_VNET, 152 + &val); 153 153 return err ? false : val.vbool; 154 154 } 155 155 ··· 221 221 union devlink_param_value val; 222 222 int err; 223 223 224 - err = devlink_param_driverinit_value_get(priv_to_devlink(dev), 225 - DEVLINK_PARAM_GENERIC_ID_ENABLE_RDMA, 226 - &val); 224 + err = devl_param_driverinit_value_get(priv_to_devlink(dev), 225 + DEVLINK_PARAM_GENERIC_ID_ENABLE_RDMA, 226 + &val); 227 227 return err ? false : val.vbool; 228 228 } 229 229
+78 -205
drivers/net/ethernet/mellanox/mlx5/core/devlink.c
··· 396 396 devlink_free(devlink); 397 397 } 398 398 399 - static int mlx5_devlink_fs_mode_validate(struct devlink *devlink, u32 id, 400 - union devlink_param_value val, 401 - struct netlink_ext_ack *extack) 402 - { 403 - struct mlx5_core_dev *dev = devlink_priv(devlink); 404 - char *value = val.vstr; 405 - int err = 0; 406 - 407 - if (!strcmp(value, "dmfs")) { 408 - return 0; 409 - } else if (!strcmp(value, "smfs")) { 410 - u8 eswitch_mode; 411 - bool smfs_cap; 412 - 413 - eswitch_mode = mlx5_eswitch_mode(dev); 414 - smfs_cap = mlx5_fs_dr_is_supported(dev); 415 - 416 - if (!smfs_cap) { 417 - err = -EOPNOTSUPP; 418 - NL_SET_ERR_MSG_MOD(extack, 419 - "Software managed steering is not supported by current device"); 420 - } 421 - 422 - else if (eswitch_mode == MLX5_ESWITCH_OFFLOADS) { 423 - NL_SET_ERR_MSG_MOD(extack, 424 - "Software managed steering is not supported when eswitch offloads enabled."); 425 - err = -EOPNOTSUPP; 426 - } 427 - } else { 428 - NL_SET_ERR_MSG_MOD(extack, 429 - "Bad parameter: supported values are [\"dmfs\", \"smfs\"]"); 430 - err = -EINVAL; 431 - } 432 - 433 - return err; 434 - } 435 - 436 - static int mlx5_devlink_fs_mode_set(struct devlink *devlink, u32 id, 437 - struct devlink_param_gset_ctx *ctx) 438 - { 439 - struct mlx5_core_dev *dev = devlink_priv(devlink); 440 - enum mlx5_flow_steering_mode mode; 441 - 442 - if (!strcmp(ctx->val.vstr, "smfs")) 443 - mode = MLX5_FLOW_STEERING_MODE_SMFS; 444 - else 445 - mode = MLX5_FLOW_STEERING_MODE_DMFS; 446 - dev->priv.steering->mode = mode; 447 - 448 - return 0; 449 - } 450 - 451 - static int mlx5_devlink_fs_mode_get(struct devlink *devlink, u32 id, 452 - struct devlink_param_gset_ctx *ctx) 453 - { 454 - struct mlx5_core_dev *dev = devlink_priv(devlink); 455 - 456 - if (dev->priv.steering->mode == MLX5_FLOW_STEERING_MODE_SMFS) 457 - strcpy(ctx->val.vstr, "smfs"); 458 - else 459 - strcpy(ctx->val.vstr, "dmfs"); 460 - return 0; 461 - } 462 - 463 399 static int mlx5_devlink_enable_roce_validate(struct devlink *devlink, u32 id, 464 400 union devlink_param_value val, 465 401 struct netlink_ext_ack *extack) ··· 432 496 return 0; 433 497 } 434 498 435 - static int mlx5_devlink_esw_port_metadata_set(struct devlink *devlink, u32 id, 436 - struct devlink_param_gset_ctx *ctx) 437 - { 438 - struct mlx5_core_dev *dev = devlink_priv(devlink); 439 - 440 - if (!MLX5_ESWITCH_MANAGER(dev)) 441 - return -EOPNOTSUPP; 442 - 443 - return mlx5_esw_offloads_vport_metadata_set(dev->priv.eswitch, ctx->val.vbool); 444 - } 445 - 446 - static int mlx5_devlink_esw_port_metadata_get(struct devlink *devlink, u32 id, 447 - struct devlink_param_gset_ctx *ctx) 448 - { 449 - struct mlx5_core_dev *dev = devlink_priv(devlink); 450 - 451 - if (!MLX5_ESWITCH_MANAGER(dev)) 452 - return -EOPNOTSUPP; 453 - 454 - ctx->val.vbool = mlx5_eswitch_vport_match_metadata_enabled(dev->priv.eswitch); 455 - return 0; 456 - } 457 - 458 - static int mlx5_devlink_esw_port_metadata_validate(struct devlink *devlink, u32 id, 459 - union devlink_param_value val, 460 - struct netlink_ext_ack *extack) 461 - { 462 - struct mlx5_core_dev *dev = devlink_priv(devlink); 463 - u8 esw_mode; 464 - 465 - if (!MLX5_ESWITCH_MANAGER(dev)) { 466 - NL_SET_ERR_MSG_MOD(extack, "E-Switch is unsupported"); 467 - return -EOPNOTSUPP; 468 - } 469 - esw_mode = mlx5_eswitch_mode(dev); 470 - if (esw_mode == MLX5_ESWITCH_OFFLOADS) { 471 - NL_SET_ERR_MSG_MOD(extack, 472 - "E-Switch must either disabled or non switchdev mode"); 473 - return -EBUSY; 474 - } 475 - return 0; 476 - } 477 - 478 499 #endif 479 - 480 - static int mlx5_devlink_enable_remote_dev_reset_set(struct devlink *devlink, u32 id, 481 - struct devlink_param_gset_ctx *ctx) 482 - { 483 - struct mlx5_core_dev *dev = devlink_priv(devlink); 484 - 485 - mlx5_fw_reset_enable_remote_dev_reset_set(dev, ctx->val.vbool); 486 - return 0; 487 - } 488 - 489 - static int mlx5_devlink_enable_remote_dev_reset_get(struct devlink *devlink, u32 id, 490 - struct devlink_param_gset_ctx *ctx) 491 - { 492 - struct mlx5_core_dev *dev = devlink_priv(devlink); 493 - 494 - ctx->val.vbool = mlx5_fw_reset_enable_remote_dev_reset_get(dev); 495 - return 0; 496 - } 497 500 498 501 static int mlx5_devlink_eq_depth_validate(struct devlink *devlink, u32 id, 499 502 union devlink_param_value val, ··· 442 567 } 443 568 444 569 static const struct devlink_param mlx5_devlink_params[] = { 445 - DEVLINK_PARAM_DRIVER(MLX5_DEVLINK_PARAM_ID_FLOW_STEERING_MODE, 446 - "flow_steering_mode", DEVLINK_PARAM_TYPE_STRING, 447 - BIT(DEVLINK_PARAM_CMODE_RUNTIME), 448 - mlx5_devlink_fs_mode_get, mlx5_devlink_fs_mode_set, 449 - mlx5_devlink_fs_mode_validate), 450 570 DEVLINK_PARAM_GENERIC(ENABLE_ROCE, BIT(DEVLINK_PARAM_CMODE_DRIVERINIT), 451 571 NULL, NULL, mlx5_devlink_enable_roce_validate), 452 572 #ifdef CONFIG_MLX5_ESWITCH ··· 450 580 BIT(DEVLINK_PARAM_CMODE_DRIVERINIT), 451 581 NULL, NULL, 452 582 mlx5_devlink_large_group_num_validate), 453 - DEVLINK_PARAM_DRIVER(MLX5_DEVLINK_PARAM_ID_ESW_PORT_METADATA, 454 - "esw_port_metadata", DEVLINK_PARAM_TYPE_BOOL, 455 - BIT(DEVLINK_PARAM_CMODE_RUNTIME), 456 - mlx5_devlink_esw_port_metadata_get, 457 - mlx5_devlink_esw_port_metadata_set, 458 - mlx5_devlink_esw_port_metadata_validate), 459 583 #endif 460 - DEVLINK_PARAM_GENERIC(ENABLE_REMOTE_DEV_RESET, BIT(DEVLINK_PARAM_CMODE_RUNTIME), 461 - mlx5_devlink_enable_remote_dev_reset_get, 462 - mlx5_devlink_enable_remote_dev_reset_set, NULL), 463 584 DEVLINK_PARAM_GENERIC(IO_EQ_SIZE, BIT(DEVLINK_PARAM_CMODE_DRIVERINIT), 464 585 NULL, NULL, mlx5_devlink_eq_depth_validate), 465 586 DEVLINK_PARAM_GENERIC(EVENT_EQ_SIZE, BIT(DEVLINK_PARAM_CMODE_DRIVERINIT), ··· 463 602 union devlink_param_value value; 464 603 465 604 value.vbool = MLX5_CAP_GEN(dev, roce); 466 - devlink_param_driverinit_value_set(devlink, 467 - DEVLINK_PARAM_GENERIC_ID_ENABLE_ROCE, 468 - value); 605 + devl_param_driverinit_value_set(devlink, 606 + DEVLINK_PARAM_GENERIC_ID_ENABLE_ROCE, 607 + value); 469 608 470 609 #ifdef CONFIG_MLX5_ESWITCH 471 610 value.vu32 = ESW_OFFLOADS_DEFAULT_NUM_GROUPS; 472 - devlink_param_driverinit_value_set(devlink, 473 - MLX5_DEVLINK_PARAM_ID_ESW_LARGE_GROUP_NUM, 474 - value); 611 + devl_param_driverinit_value_set(devlink, 612 + MLX5_DEVLINK_PARAM_ID_ESW_LARGE_GROUP_NUM, 613 + value); 475 614 #endif 476 615 477 616 value.vu32 = MLX5_COMP_EQ_SIZE; 478 - devlink_param_driverinit_value_set(devlink, 479 - DEVLINK_PARAM_GENERIC_ID_IO_EQ_SIZE, 480 - value); 617 + devl_param_driverinit_value_set(devlink, 618 + DEVLINK_PARAM_GENERIC_ID_IO_EQ_SIZE, 619 + value); 481 620 482 621 value.vu32 = MLX5_NUM_ASYNC_EQE; 483 - devlink_param_driverinit_value_set(devlink, 484 - DEVLINK_PARAM_GENERIC_ID_EVENT_EQ_SIZE, 485 - value); 622 + devl_param_driverinit_value_set(devlink, 623 + DEVLINK_PARAM_GENERIC_ID_EVENT_EQ_SIZE, 624 + value); 486 625 } 487 626 488 - static const struct devlink_param enable_eth_param = 627 + static const struct devlink_param mlx5_devlink_eth_params[] = { 489 628 DEVLINK_PARAM_GENERIC(ENABLE_ETH, BIT(DEVLINK_PARAM_CMODE_DRIVERINIT), 490 - NULL, NULL, NULL); 629 + NULL, NULL, NULL), 630 + }; 491 631 492 - static int mlx5_devlink_eth_param_register(struct devlink *devlink) 632 + static int mlx5_devlink_eth_params_register(struct devlink *devlink) 493 633 { 494 634 struct mlx5_core_dev *dev = devlink_priv(devlink); 495 635 union devlink_param_value value; ··· 499 637 if (!mlx5_eth_supported(dev)) 500 638 return 0; 501 639 502 - err = devlink_param_register(devlink, &enable_eth_param); 640 + err = devl_params_register(devlink, mlx5_devlink_eth_params, 641 + ARRAY_SIZE(mlx5_devlink_eth_params)); 503 642 if (err) 504 643 return err; 505 644 506 645 value.vbool = true; 507 - devlink_param_driverinit_value_set(devlink, 508 - DEVLINK_PARAM_GENERIC_ID_ENABLE_ETH, 509 - value); 646 + devl_param_driverinit_value_set(devlink, 647 + DEVLINK_PARAM_GENERIC_ID_ENABLE_ETH, 648 + value); 510 649 return 0; 511 650 } 512 651 513 - static void mlx5_devlink_eth_param_unregister(struct devlink *devlink) 652 + static void mlx5_devlink_eth_params_unregister(struct devlink *devlink) 514 653 { 515 654 struct mlx5_core_dev *dev = devlink_priv(devlink); 516 655 517 656 if (!mlx5_eth_supported(dev)) 518 657 return; 519 658 520 - devlink_param_unregister(devlink, &enable_eth_param); 659 + devl_params_unregister(devlink, mlx5_devlink_eth_params, 660 + ARRAY_SIZE(mlx5_devlink_eth_params)); 521 661 } 522 662 523 663 static int mlx5_devlink_enable_rdma_validate(struct devlink *devlink, u32 id, ··· 534 670 return 0; 535 671 } 536 672 537 - static const struct devlink_param enable_rdma_param = 673 + static const struct devlink_param mlx5_devlink_rdma_params[] = { 538 674 DEVLINK_PARAM_GENERIC(ENABLE_RDMA, BIT(DEVLINK_PARAM_CMODE_DRIVERINIT), 539 - NULL, NULL, mlx5_devlink_enable_rdma_validate); 675 + NULL, NULL, mlx5_devlink_enable_rdma_validate), 676 + }; 540 677 541 - static int mlx5_devlink_rdma_param_register(struct devlink *devlink) 678 + static int mlx5_devlink_rdma_params_register(struct devlink *devlink) 542 679 { 543 680 union devlink_param_value value; 544 681 int err; ··· 547 682 if (!IS_ENABLED(CONFIG_MLX5_INFINIBAND)) 548 683 return 0; 549 684 550 - err = devlink_param_register(devlink, &enable_rdma_param); 685 + err = devl_params_register(devlink, mlx5_devlink_rdma_params, 686 + ARRAY_SIZE(mlx5_devlink_rdma_params)); 551 687 if (err) 552 688 return err; 553 689 554 690 value.vbool = true; 555 - devlink_param_driverinit_value_set(devlink, 556 - DEVLINK_PARAM_GENERIC_ID_ENABLE_RDMA, 557 - value); 691 + devl_param_driverinit_value_set(devlink, 692 + DEVLINK_PARAM_GENERIC_ID_ENABLE_RDMA, 693 + value); 558 694 return 0; 559 695 } 560 696 561 - static void mlx5_devlink_rdma_param_unregister(struct devlink *devlink) 697 + static void mlx5_devlink_rdma_params_unregister(struct devlink *devlink) 562 698 { 563 699 if (!IS_ENABLED(CONFIG_MLX5_INFINIBAND)) 564 700 return; 565 701 566 - devlink_param_unregister(devlink, &enable_rdma_param); 702 + devl_params_unregister(devlink, mlx5_devlink_rdma_params, 703 + ARRAY_SIZE(mlx5_devlink_rdma_params)); 567 704 } 568 705 569 - static const struct devlink_param enable_vnet_param = 706 + static const struct devlink_param mlx5_devlink_vnet_params[] = { 570 707 DEVLINK_PARAM_GENERIC(ENABLE_VNET, BIT(DEVLINK_PARAM_CMODE_DRIVERINIT), 571 - NULL, NULL, NULL); 708 + NULL, NULL, NULL), 709 + }; 572 710 573 - static int mlx5_devlink_vnet_param_register(struct devlink *devlink) 711 + static int mlx5_devlink_vnet_params_register(struct devlink *devlink) 574 712 { 575 713 struct mlx5_core_dev *dev = devlink_priv(devlink); 576 714 union devlink_param_value value; ··· 582 714 if (!mlx5_vnet_supported(dev)) 583 715 return 0; 584 716 585 - err = devlink_param_register(devlink, &enable_vnet_param); 717 + err = devl_params_register(devlink, mlx5_devlink_vnet_params, 718 + ARRAY_SIZE(mlx5_devlink_vnet_params)); 586 719 if (err) 587 720 return err; 588 721 589 722 value.vbool = true; 590 - devlink_param_driverinit_value_set(devlink, 591 - DEVLINK_PARAM_GENERIC_ID_ENABLE_VNET, 592 - value); 723 + devl_param_driverinit_value_set(devlink, 724 + DEVLINK_PARAM_GENERIC_ID_ENABLE_VNET, 725 + value); 593 726 return 0; 594 727 } 595 728 596 - static void mlx5_devlink_vnet_param_unregister(struct devlink *devlink) 729 + static void mlx5_devlink_vnet_params_unregister(struct devlink *devlink) 597 730 { 598 731 struct mlx5_core_dev *dev = devlink_priv(devlink); 599 732 600 733 if (!mlx5_vnet_supported(dev)) 601 734 return; 602 735 603 - devlink_param_unregister(devlink, &enable_vnet_param); 736 + devl_params_unregister(devlink, mlx5_devlink_vnet_params, 737 + ARRAY_SIZE(mlx5_devlink_vnet_params)); 604 738 } 605 739 606 740 static int mlx5_devlink_auxdev_params_register(struct devlink *devlink) 607 741 { 608 742 int err; 609 743 610 - err = mlx5_devlink_eth_param_register(devlink); 744 + err = mlx5_devlink_eth_params_register(devlink); 611 745 if (err) 612 746 return err; 613 747 614 - err = mlx5_devlink_rdma_param_register(devlink); 748 + err = mlx5_devlink_rdma_params_register(devlink); 615 749 if (err) 616 750 goto rdma_err; 617 751 618 - err = mlx5_devlink_vnet_param_register(devlink); 752 + err = mlx5_devlink_vnet_params_register(devlink); 619 753 if (err) 620 754 goto vnet_err; 621 755 return 0; 622 756 623 757 vnet_err: 624 - mlx5_devlink_rdma_param_unregister(devlink); 758 + mlx5_devlink_rdma_params_unregister(devlink); 625 759 rdma_err: 626 - mlx5_devlink_eth_param_unregister(devlink); 760 + mlx5_devlink_eth_params_unregister(devlink); 627 761 return err; 628 762 } 629 763 630 764 static void mlx5_devlink_auxdev_params_unregister(struct devlink *devlink) 631 765 { 632 - mlx5_devlink_vnet_param_unregister(devlink); 633 - mlx5_devlink_rdma_param_unregister(devlink); 634 - mlx5_devlink_eth_param_unregister(devlink); 766 + mlx5_devlink_vnet_params_unregister(devlink); 767 + mlx5_devlink_rdma_params_unregister(devlink); 768 + mlx5_devlink_eth_params_unregister(devlink); 635 769 } 636 770 637 771 static int mlx5_devlink_max_uc_list_validate(struct devlink *devlink, u32 id, ··· 661 791 return 0; 662 792 } 663 793 664 - static const struct devlink_param max_uc_list_param = 794 + static const struct devlink_param mlx5_devlink_max_uc_list_params[] = { 665 795 DEVLINK_PARAM_GENERIC(MAX_MACS, BIT(DEVLINK_PARAM_CMODE_DRIVERINIT), 666 - NULL, NULL, mlx5_devlink_max_uc_list_validate); 796 + NULL, NULL, mlx5_devlink_max_uc_list_validate), 797 + }; 667 798 668 - static int mlx5_devlink_max_uc_list_param_register(struct devlink *devlink) 799 + static int mlx5_devlink_max_uc_list_params_register(struct devlink *devlink) 669 800 { 670 801 struct mlx5_core_dev *dev = devlink_priv(devlink); 671 802 union devlink_param_value value; ··· 675 804 if (!MLX5_CAP_GEN_MAX(dev, log_max_current_uc_list_wr_supported)) 676 805 return 0; 677 806 678 - err = devlink_param_register(devlink, &max_uc_list_param); 807 + err = devl_params_register(devlink, mlx5_devlink_max_uc_list_params, 808 + ARRAY_SIZE(mlx5_devlink_max_uc_list_params)); 679 809 if (err) 680 810 return err; 681 811 682 812 value.vu32 = 1 << MLX5_CAP_GEN(dev, log_max_current_uc_list); 683 - devlink_param_driverinit_value_set(devlink, 684 - DEVLINK_PARAM_GENERIC_ID_MAX_MACS, 685 - value); 813 + devl_param_driverinit_value_set(devlink, 814 + DEVLINK_PARAM_GENERIC_ID_MAX_MACS, 815 + value); 686 816 return 0; 687 817 } 688 818 689 819 static void 690 - mlx5_devlink_max_uc_list_param_unregister(struct devlink *devlink) 820 + mlx5_devlink_max_uc_list_params_unregister(struct devlink *devlink) 691 821 { 692 822 struct mlx5_core_dev *dev = devlink_priv(devlink); 693 823 694 824 if (!MLX5_CAP_GEN_MAX(dev, log_max_current_uc_list_wr_supported)) 695 825 return; 696 826 697 - devlink_param_unregister(devlink, &max_uc_list_param); 827 + devl_params_unregister(devlink, mlx5_devlink_max_uc_list_params, 828 + ARRAY_SIZE(mlx5_devlink_max_uc_list_params)); 698 829 } 699 830 700 831 #define MLX5_TRAP_DROP(_id, _group_id) \ ··· 742 869 ARRAY_SIZE(mlx5_trap_groups_arr)); 743 870 } 744 871 745 - int mlx5_devlink_register(struct devlink *devlink) 872 + int mlx5_devlink_params_register(struct devlink *devlink) 746 873 { 747 874 struct mlx5_core_dev *dev = devlink_priv(devlink); 748 875 int err; 749 876 750 - err = devlink_params_register(devlink, mlx5_devlink_params, 751 - ARRAY_SIZE(mlx5_devlink_params)); 877 + err = devl_params_register(devlink, mlx5_devlink_params, 878 + ARRAY_SIZE(mlx5_devlink_params)); 752 879 if (err) 753 880 return err; 754 881 ··· 758 885 if (err) 759 886 goto auxdev_reg_err; 760 887 761 - err = mlx5_devlink_max_uc_list_param_register(devlink); 888 + err = mlx5_devlink_max_uc_list_params_register(devlink); 762 889 if (err) 763 890 goto max_uc_list_err; 764 891 ··· 770 897 max_uc_list_err: 771 898 mlx5_devlink_auxdev_params_unregister(devlink); 772 899 auxdev_reg_err: 773 - devlink_params_unregister(devlink, mlx5_devlink_params, 774 - ARRAY_SIZE(mlx5_devlink_params)); 900 + devl_params_unregister(devlink, mlx5_devlink_params, 901 + ARRAY_SIZE(mlx5_devlink_params)); 775 902 return err; 776 903 } 777 904 778 - void mlx5_devlink_unregister(struct devlink *devlink) 905 + void mlx5_devlink_params_unregister(struct devlink *devlink) 779 906 { 780 - mlx5_devlink_max_uc_list_param_unregister(devlink); 907 + mlx5_devlink_max_uc_list_params_unregister(devlink); 781 908 mlx5_devlink_auxdev_params_unregister(devlink); 782 - devlink_params_unregister(devlink, mlx5_devlink_params, 783 - ARRAY_SIZE(mlx5_devlink_params)); 909 + devl_params_unregister(devlink, mlx5_devlink_params, 910 + ARRAY_SIZE(mlx5_devlink_params)); 784 911 }
+2 -2
drivers/net/ethernet/mellanox/mlx5/core/devlink.h
··· 35 35 36 36 struct devlink *mlx5_devlink_alloc(struct device *dev); 37 37 void mlx5_devlink_free(struct devlink *devlink); 38 - int mlx5_devlink_register(struct devlink *devlink); 39 - void mlx5_devlink_unregister(struct devlink *devlink); 38 + int mlx5_devlink_params_register(struct devlink *devlink); 39 + void mlx5_devlink_params_unregister(struct devlink *devlink); 40 40 41 41 #endif /* __MLX5_DEVLINK_H__ */
+6 -6
drivers/net/ethernet/mellanox/mlx5/core/eq.c
··· 629 629 union devlink_param_value val; 630 630 int err; 631 631 632 - err = devlink_param_driverinit_value_get(devlink, 633 - DEVLINK_PARAM_GENERIC_ID_EVENT_EQ_SIZE, 634 - &val); 632 + err = devl_param_driverinit_value_get(devlink, 633 + DEVLINK_PARAM_GENERIC_ID_EVENT_EQ_SIZE, 634 + &val); 635 635 if (!err) 636 636 return val.vu32; 637 637 mlx5_core_dbg(dev, "Failed to get param. using default. err = %d\n", err); ··· 874 874 union devlink_param_value val; 875 875 int err; 876 876 877 - err = devlink_param_driverinit_value_get(devlink, 878 - DEVLINK_PARAM_GENERIC_ID_IO_EQ_SIZE, 879 - &val); 877 + err = devl_param_driverinit_value_get(devlink, 878 + DEVLINK_PARAM_GENERIC_ID_IO_EQ_SIZE, 879 + &val); 880 880 if (!err) 881 881 return val.vu32; 882 882 mlx5_core_dbg(dev, "Failed to get param. using default. err = %d\n", err);
+5 -5
drivers/net/ethernet/mellanox/mlx5/core/eswitch.c
··· 1190 1190 union devlink_param_value val; 1191 1191 int err; 1192 1192 1193 - err = devlink_param_driverinit_value_get(devlink, 1194 - MLX5_DEVLINK_PARAM_ID_ESW_LARGE_GROUP_NUM, 1195 - &val); 1193 + err = devl_param_driverinit_value_get(devlink, 1194 + MLX5_DEVLINK_PARAM_ID_ESW_LARGE_GROUP_NUM, 1195 + &val); 1196 1196 if (!err) { 1197 1197 esw->params.large_group_num = val.vu32; 1198 1198 } else { ··· 1640 1640 if (err) 1641 1641 goto abort; 1642 1642 1643 - err = esw_offloads_init_reps(esw); 1643 + err = esw_offloads_init(esw); 1644 1644 if (err) 1645 1645 goto reps_err; 1646 1646 ··· 1706 1706 mlx5e_mod_hdr_tbl_destroy(&esw->offloads.mod_hdr); 1707 1707 mutex_destroy(&esw->offloads.encap_tbl_lock); 1708 1708 mutex_destroy(&esw->offloads.decap_tbl_lock); 1709 - esw_offloads_cleanup_reps(esw); 1709 + esw_offloads_cleanup(esw); 1710 1710 mlx5_esw_vports_cleanup(esw); 1711 1711 kfree(esw); 1712 1712 }
+2 -2
drivers/net/ethernet/mellanox/mlx5/core/eswitch.h
··· 346 346 347 347 void esw_offloads_disable(struct mlx5_eswitch *esw); 348 348 int esw_offloads_enable(struct mlx5_eswitch *esw); 349 - void esw_offloads_cleanup_reps(struct mlx5_eswitch *esw); 350 - int esw_offloads_init_reps(struct mlx5_eswitch *esw); 349 + void esw_offloads_cleanup(struct mlx5_eswitch *esw); 350 + int esw_offloads_init(struct mlx5_eswitch *esw); 351 351 352 352 struct mlx5_flow_handle * 353 353 mlx5_eswitch_add_send_to_vport_meta_rule(struct mlx5_eswitch *esw, u16 vport_num);
+90 -2
drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c
··· 2403 2403 kfree(rep); 2404 2404 } 2405 2405 2406 - void esw_offloads_cleanup_reps(struct mlx5_eswitch *esw) 2406 + static void esw_offloads_cleanup_reps(struct mlx5_eswitch *esw) 2407 2407 { 2408 2408 struct mlx5_eswitch_rep *rep; 2409 2409 unsigned long i; ··· 2413 2413 xa_destroy(&esw->offloads.vport_reps); 2414 2414 } 2415 2415 2416 - int esw_offloads_init_reps(struct mlx5_eswitch *esw) 2416 + static int esw_offloads_init_reps(struct mlx5_eswitch *esw) 2417 2417 { 2418 2418 struct mlx5_vport *vport; 2419 2419 unsigned long i; ··· 2431 2431 err: 2432 2432 esw_offloads_cleanup_reps(esw); 2433 2433 return err; 2434 + } 2435 + 2436 + static int esw_port_metadata_set(struct devlink *devlink, u32 id, 2437 + struct devlink_param_gset_ctx *ctx) 2438 + { 2439 + struct mlx5_core_dev *dev = devlink_priv(devlink); 2440 + struct mlx5_eswitch *esw = dev->priv.eswitch; 2441 + int err = 0; 2442 + 2443 + down_write(&esw->mode_lock); 2444 + if (mlx5_esw_is_fdb_created(esw)) { 2445 + err = -EBUSY; 2446 + goto done; 2447 + } 2448 + if (!mlx5_esw_vport_match_metadata_supported(esw)) { 2449 + err = -EOPNOTSUPP; 2450 + goto done; 2451 + } 2452 + if (ctx->val.vbool) 2453 + esw->flags |= MLX5_ESWITCH_VPORT_MATCH_METADATA; 2454 + else 2455 + esw->flags &= ~MLX5_ESWITCH_VPORT_MATCH_METADATA; 2456 + done: 2457 + up_write(&esw->mode_lock); 2458 + return err; 2459 + } 2460 + 2461 + static int esw_port_metadata_get(struct devlink *devlink, u32 id, 2462 + struct devlink_param_gset_ctx *ctx) 2463 + { 2464 + struct mlx5_core_dev *dev = devlink_priv(devlink); 2465 + 2466 + ctx->val.vbool = mlx5_eswitch_vport_match_metadata_enabled(dev->priv.eswitch); 2467 + return 0; 2468 + } 2469 + 2470 + static int esw_port_metadata_validate(struct devlink *devlink, u32 id, 2471 + union devlink_param_value val, 2472 + struct netlink_ext_ack *extack) 2473 + { 2474 + struct mlx5_core_dev *dev = devlink_priv(devlink); 2475 + u8 esw_mode; 2476 + 2477 + esw_mode = mlx5_eswitch_mode(dev); 2478 + if (esw_mode == MLX5_ESWITCH_OFFLOADS) { 2479 + NL_SET_ERR_MSG_MOD(extack, 2480 + "E-Switch must either disabled or non switchdev mode"); 2481 + return -EBUSY; 2482 + } 2483 + return 0; 2484 + } 2485 + 2486 + static const struct devlink_param esw_devlink_params[] = { 2487 + DEVLINK_PARAM_DRIVER(MLX5_DEVLINK_PARAM_ID_ESW_PORT_METADATA, 2488 + "esw_port_metadata", DEVLINK_PARAM_TYPE_BOOL, 2489 + BIT(DEVLINK_PARAM_CMODE_RUNTIME), 2490 + esw_port_metadata_get, 2491 + esw_port_metadata_set, 2492 + esw_port_metadata_validate), 2493 + }; 2494 + 2495 + int esw_offloads_init(struct mlx5_eswitch *esw) 2496 + { 2497 + int err; 2498 + 2499 + err = esw_offloads_init_reps(esw); 2500 + if (err) 2501 + return err; 2502 + 2503 + err = devl_params_register(priv_to_devlink(esw->dev), 2504 + esw_devlink_params, 2505 + ARRAY_SIZE(esw_devlink_params)); 2506 + if (err) 2507 + goto err_params; 2508 + 2509 + return 0; 2510 + 2511 + err_params: 2512 + esw_offloads_cleanup_reps(esw); 2513 + return err; 2514 + } 2515 + 2516 + void esw_offloads_cleanup(struct mlx5_eswitch *esw) 2517 + { 2518 + devl_params_unregister(priv_to_devlink(esw->dev), 2519 + esw_devlink_params, 2520 + ARRAY_SIZE(esw_devlink_params)); 2521 + esw_offloads_cleanup_reps(esw); 2434 2522 } 2435 2523 2436 2524 static void __esw_offloads_unload_rep(struct mlx5_eswitch *esw,
+83 -1
drivers/net/ethernet/mellanox/mlx5/core/fs_core.c
··· 34 34 #include <linux/mlx5/driver.h> 35 35 #include <linux/mlx5/vport.h> 36 36 #include <linux/mlx5/eswitch.h> 37 + #include <net/devlink.h> 37 38 38 39 #include "mlx5_core.h" 39 40 #include "fs_core.h" 40 41 #include "fs_cmd.h" 41 42 #include "fs_ft_pool.h" 42 43 #include "diag/fs_tracepoint.h" 44 + #include "devlink.h" 43 45 44 46 #define INIT_TREE_NODE_ARRAY_SIZE(...) (sizeof((struct init_tree_node[]){__VA_ARGS__}) /\ 45 47 sizeof(struct init_tree_node)) ··· 3145 3143 return err; 3146 3144 } 3147 3145 3146 + static int mlx5_fs_mode_validate(struct devlink *devlink, u32 id, 3147 + union devlink_param_value val, 3148 + struct netlink_ext_ack *extack) 3149 + { 3150 + struct mlx5_core_dev *dev = devlink_priv(devlink); 3151 + char *value = val.vstr; 3152 + int err = 0; 3153 + 3154 + if (!strcmp(value, "dmfs")) { 3155 + return 0; 3156 + } else if (!strcmp(value, "smfs")) { 3157 + u8 eswitch_mode; 3158 + bool smfs_cap; 3159 + 3160 + eswitch_mode = mlx5_eswitch_mode(dev); 3161 + smfs_cap = mlx5_fs_dr_is_supported(dev); 3162 + 3163 + if (!smfs_cap) { 3164 + err = -EOPNOTSUPP; 3165 + NL_SET_ERR_MSG_MOD(extack, 3166 + "Software managed steering is not supported by current device"); 3167 + } 3168 + 3169 + else if (eswitch_mode == MLX5_ESWITCH_OFFLOADS) { 3170 + NL_SET_ERR_MSG_MOD(extack, 3171 + "Software managed steering is not supported when eswitch offloads enabled."); 3172 + err = -EOPNOTSUPP; 3173 + } 3174 + } else { 3175 + NL_SET_ERR_MSG_MOD(extack, 3176 + "Bad parameter: supported values are [\"dmfs\", \"smfs\"]"); 3177 + err = -EINVAL; 3178 + } 3179 + 3180 + return err; 3181 + } 3182 + 3183 + static int mlx5_fs_mode_set(struct devlink *devlink, u32 id, 3184 + struct devlink_param_gset_ctx *ctx) 3185 + { 3186 + struct mlx5_core_dev *dev = devlink_priv(devlink); 3187 + enum mlx5_flow_steering_mode mode; 3188 + 3189 + if (!strcmp(ctx->val.vstr, "smfs")) 3190 + mode = MLX5_FLOW_STEERING_MODE_SMFS; 3191 + else 3192 + mode = MLX5_FLOW_STEERING_MODE_DMFS; 3193 + dev->priv.steering->mode = mode; 3194 + 3195 + return 0; 3196 + } 3197 + 3198 + static int mlx5_fs_mode_get(struct devlink *devlink, u32 id, 3199 + struct devlink_param_gset_ctx *ctx) 3200 + { 3201 + struct mlx5_core_dev *dev = devlink_priv(devlink); 3202 + 3203 + if (dev->priv.steering->mode == MLX5_FLOW_STEERING_MODE_SMFS) 3204 + strcpy(ctx->val.vstr, "smfs"); 3205 + else 3206 + strcpy(ctx->val.vstr, "dmfs"); 3207 + return 0; 3208 + } 3209 + 3210 + static const struct devlink_param mlx5_fs_params[] = { 3211 + DEVLINK_PARAM_DRIVER(MLX5_DEVLINK_PARAM_ID_FLOW_STEERING_MODE, 3212 + "flow_steering_mode", DEVLINK_PARAM_TYPE_STRING, 3213 + BIT(DEVLINK_PARAM_CMODE_RUNTIME), 3214 + mlx5_fs_mode_get, mlx5_fs_mode_set, 3215 + mlx5_fs_mode_validate), 3216 + }; 3217 + 3148 3218 void mlx5_fs_core_cleanup(struct mlx5_core_dev *dev) 3149 3219 { 3150 3220 struct mlx5_flow_steering *steering = dev->priv.steering; ··· 3229 3155 cleanup_root_ns(steering->rdma_rx_root_ns); 3230 3156 cleanup_root_ns(steering->rdma_tx_root_ns); 3231 3157 cleanup_root_ns(steering->egress_root_ns); 3158 + 3159 + devl_params_unregister(priv_to_devlink(dev), mlx5_fs_params, 3160 + ARRAY_SIZE(mlx5_fs_params)); 3232 3161 } 3233 3162 3234 3163 int mlx5_fs_core_init(struct mlx5_core_dev *dev) 3235 3164 { 3236 3165 struct mlx5_flow_steering *steering = dev->priv.steering; 3237 - int err = 0; 3166 + int err; 3167 + 3168 + err = devl_params_register(priv_to_devlink(dev), mlx5_fs_params, 3169 + ARRAY_SIZE(mlx5_fs_params)); 3170 + if (err) 3171 + return err; 3238 3172 3239 3173 if ((((MLX5_CAP_GEN(dev, port_type) == MLX5_CAP_PORT_TYPE_ETH) && 3240 3174 (MLX5_CAP_GEN(dev, nic_flow_table))) ||
+38 -6
drivers/net/ethernet/mellanox/mlx5/core/fw_reset.c
··· 1 1 // SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB 2 2 /* Copyright (c) 2020, Mellanox Technologies inc. All rights reserved. */ 3 3 4 + #include <devlink.h> 5 + 4 6 #include "fw_reset.h" 5 7 #include "diag/fw_tracer.h" 6 8 #include "lib/tout.h" ··· 30 28 int ret; 31 29 }; 32 30 33 - void mlx5_fw_reset_enable_remote_dev_reset_set(struct mlx5_core_dev *dev, bool enable) 31 + static int mlx5_fw_reset_enable_remote_dev_reset_set(struct devlink *devlink, u32 id, 32 + struct devlink_param_gset_ctx *ctx) 34 33 { 35 - struct mlx5_fw_reset *fw_reset = dev->priv.fw_reset; 34 + struct mlx5_core_dev *dev = devlink_priv(devlink); 35 + struct mlx5_fw_reset *fw_reset; 36 36 37 - if (enable) 37 + fw_reset = dev->priv.fw_reset; 38 + 39 + if (ctx->val.vbool) 38 40 clear_bit(MLX5_FW_RESET_FLAGS_NACK_RESET_REQUEST, &fw_reset->reset_flags); 39 41 else 40 42 set_bit(MLX5_FW_RESET_FLAGS_NACK_RESET_REQUEST, &fw_reset->reset_flags); 43 + return 0; 41 44 } 42 45 43 - bool mlx5_fw_reset_enable_remote_dev_reset_get(struct mlx5_core_dev *dev) 46 + static int mlx5_fw_reset_enable_remote_dev_reset_get(struct devlink *devlink, u32 id, 47 + struct devlink_param_gset_ctx *ctx) 44 48 { 45 - struct mlx5_fw_reset *fw_reset = dev->priv.fw_reset; 49 + struct mlx5_core_dev *dev = devlink_priv(devlink); 50 + struct mlx5_fw_reset *fw_reset; 46 51 47 - return !test_bit(MLX5_FW_RESET_FLAGS_NACK_RESET_REQUEST, &fw_reset->reset_flags); 52 + fw_reset = dev->priv.fw_reset; 53 + 54 + ctx->val.vbool = !test_bit(MLX5_FW_RESET_FLAGS_NACK_RESET_REQUEST, 55 + &fw_reset->reset_flags); 56 + return 0; 48 57 } 49 58 50 59 static int mlx5_reg_mfrl_set(struct mlx5_core_dev *dev, u8 reset_level, ··· 530 517 cancel_work_sync(&fw_reset->reset_abort_work); 531 518 } 532 519 520 + static const struct devlink_param mlx5_fw_reset_devlink_params[] = { 521 + DEVLINK_PARAM_GENERIC(ENABLE_REMOTE_DEV_RESET, BIT(DEVLINK_PARAM_CMODE_RUNTIME), 522 + mlx5_fw_reset_enable_remote_dev_reset_get, 523 + mlx5_fw_reset_enable_remote_dev_reset_set, NULL), 524 + }; 525 + 533 526 int mlx5_fw_reset_init(struct mlx5_core_dev *dev) 534 527 { 535 528 struct mlx5_fw_reset *fw_reset = kzalloc(sizeof(*fw_reset), GFP_KERNEL); 529 + int err; 536 530 537 531 if (!fw_reset) 538 532 return -ENOMEM; ··· 551 531 552 532 fw_reset->dev = dev; 553 533 dev->priv.fw_reset = fw_reset; 534 + 535 + err = devl_params_register(priv_to_devlink(dev), 536 + mlx5_fw_reset_devlink_params, 537 + ARRAY_SIZE(mlx5_fw_reset_devlink_params)); 538 + if (err) { 539 + destroy_workqueue(fw_reset->wq); 540 + kfree(fw_reset); 541 + return err; 542 + } 554 543 555 544 INIT_WORK(&fw_reset->fw_live_patch_work, mlx5_fw_live_patch_event); 556 545 INIT_WORK(&fw_reset->reset_request_work, mlx5_sync_reset_request_event); ··· 575 546 { 576 547 struct mlx5_fw_reset *fw_reset = dev->priv.fw_reset; 577 548 549 + devl_params_unregister(priv_to_devlink(dev), 550 + mlx5_fw_reset_devlink_params, 551 + ARRAY_SIZE(mlx5_fw_reset_devlink_params)); 578 552 destroy_workqueue(fw_reset->wq); 579 553 kfree(dev->priv.fw_reset); 580 554 }
-2
drivers/net/ethernet/mellanox/mlx5/core/fw_reset.h
··· 6 6 7 7 #include "mlx5_core.h" 8 8 9 - void mlx5_fw_reset_enable_remote_dev_reset_set(struct mlx5_core_dev *dev, bool enable); 10 - bool mlx5_fw_reset_enable_remote_dev_reset_get(struct mlx5_core_dev *dev); 11 9 int mlx5_fw_reset_query(struct mlx5_core_dev *dev, u8 *reset_level, u8 *reset_type); 12 10 int mlx5_fw_reset_set_reset_sync(struct mlx5_core_dev *dev, u8 reset_type_sel, 13 11 struct netlink_ext_ack *extack);
+11 -11
drivers/net/ethernet/mellanox/mlx5/core/main.c
··· 484 484 union devlink_param_value val; 485 485 int err; 486 486 487 - err = devlink_param_driverinit_value_get(devlink, 488 - DEVLINK_PARAM_GENERIC_ID_MAX_MACS, 489 - &val); 487 + err = devl_param_driverinit_value_get(devlink, 488 + DEVLINK_PARAM_GENERIC_ID_MAX_MACS, 489 + &val); 490 490 if (!err) 491 491 return val.vu32; 492 492 mlx5_core_dbg(dev, "Failed to get param. err = %d\n", err); ··· 499 499 union devlink_param_value val; 500 500 int err; 501 501 502 - err = devlink_param_driverinit_value_get(devlink, 503 - DEVLINK_PARAM_GENERIC_ID_ENABLE_ROCE, 504 - &val); 502 + err = devl_param_driverinit_value_get(devlink, 503 + DEVLINK_PARAM_GENERIC_ID_ENABLE_ROCE, 504 + &val); 505 505 506 506 if (!err) 507 507 return val.vbool; ··· 1390 1390 1391 1391 set_bit(MLX5_INTERFACE_STATE_UP, &dev->intf_state); 1392 1392 1393 - err = mlx5_devlink_register(priv_to_devlink(dev)); 1393 + err = mlx5_devlink_params_register(priv_to_devlink(dev)); 1394 1394 if (err) 1395 - goto err_devlink_reg; 1395 + goto err_devlink_params_reg; 1396 1396 1397 1397 err = mlx5_register_device(dev); 1398 1398 if (err) ··· 1403 1403 return 0; 1404 1404 1405 1405 err_register: 1406 - mlx5_devlink_unregister(priv_to_devlink(dev)); 1407 - err_devlink_reg: 1406 + mlx5_devlink_params_unregister(priv_to_devlink(dev)); 1407 + err_devlink_params_reg: 1408 1408 clear_bit(MLX5_INTERFACE_STATE_UP, &dev->intf_state); 1409 1409 mlx5_unload(dev); 1410 1410 err_load: ··· 1426 1426 mutex_lock(&dev->intf_state_mutex); 1427 1427 1428 1428 mlx5_unregister_device(dev); 1429 - mlx5_devlink_unregister(priv_to_devlink(dev)); 1429 + mlx5_devlink_params_unregister(priv_to_devlink(dev)); 1430 1430 1431 1431 if (!test_bit(MLX5_INTERFACE_STATE_UP, &dev->intf_state)) { 1432 1432 mlx5_core_warn(dev, "%s: interface is down, NOP\n",
+10 -8
drivers/net/ethernet/mellanox/mlxsw/core.c
··· 1243 1243 return 0; 1244 1244 1245 1245 /* Don't check if devlink 'fw_load_policy' param is 'flash' */ 1246 - err = devlink_param_driverinit_value_get(priv_to_devlink(mlxsw_core), 1247 - DEVLINK_PARAM_GENERIC_ID_FW_LOAD_POLICY, 1248 - &value); 1246 + err = devl_param_driverinit_value_get(priv_to_devlink(mlxsw_core), 1247 + DEVLINK_PARAM_GENERIC_ID_FW_LOAD_POLICY, 1248 + &value); 1249 1249 if (err) 1250 1250 return err; 1251 1251 if (value.vu8 == DEVLINK_PARAM_FW_LOAD_POLICY_VALUE_FLASH) ··· 1316 1316 union devlink_param_value value; 1317 1317 int err; 1318 1318 1319 - err = devlink_params_register(devlink, mlxsw_core_fw_devlink_params, 1320 - ARRAY_SIZE(mlxsw_core_fw_devlink_params)); 1319 + err = devl_params_register(devlink, mlxsw_core_fw_devlink_params, 1320 + ARRAY_SIZE(mlxsw_core_fw_devlink_params)); 1321 1321 if (err) 1322 1322 return err; 1323 1323 1324 1324 value.vu8 = DEVLINK_PARAM_FW_LOAD_POLICY_VALUE_DRIVER; 1325 - devlink_param_driverinit_value_set(devlink, DEVLINK_PARAM_GENERIC_ID_FW_LOAD_POLICY, value); 1325 + devl_param_driverinit_value_set(devlink, 1326 + DEVLINK_PARAM_GENERIC_ID_FW_LOAD_POLICY, 1327 + value); 1326 1328 return 0; 1327 1329 } 1328 1330 1329 1331 static void mlxsw_core_fw_params_unregister(struct mlxsw_core *mlxsw_core) 1330 1332 { 1331 - devlink_params_unregister(priv_to_devlink(mlxsw_core), mlxsw_core_fw_devlink_params, 1332 - ARRAY_SIZE(mlxsw_core_fw_devlink_params)); 1333 + devl_params_unregister(priv_to_devlink(mlxsw_core), mlxsw_core_fw_devlink_params, 1334 + ARRAY_SIZE(mlxsw_core_fw_devlink_params)); 1333 1335 } 1334 1336 1335 1337 static void *__dl_port(struct devlink_port *devlink_port)
+8 -8
drivers/net/ethernet/mellanox/mlxsw/spectrum.c
··· 3898 3898 union devlink_param_value value; 3899 3899 int err; 3900 3900 3901 - err = devlink_params_register(devlink, mlxsw_sp2_devlink_params, 3902 - ARRAY_SIZE(mlxsw_sp2_devlink_params)); 3901 + err = devl_params_register(devlink, mlxsw_sp2_devlink_params, 3902 + ARRAY_SIZE(mlxsw_sp2_devlink_params)); 3903 3903 if (err) 3904 3904 return err; 3905 3905 3906 3906 value.vu32 = 0; 3907 - devlink_param_driverinit_value_set(devlink, 3908 - MLXSW_DEVLINK_PARAM_ID_ACL_REGION_REHASH_INTERVAL, 3909 - value); 3907 + devl_param_driverinit_value_set(devlink, 3908 + MLXSW_DEVLINK_PARAM_ID_ACL_REGION_REHASH_INTERVAL, 3909 + value); 3910 3910 return 0; 3911 3911 } 3912 3912 3913 3913 static void mlxsw_sp2_params_unregister(struct mlxsw_core *mlxsw_core) 3914 3914 { 3915 - devlink_params_unregister(priv_to_devlink(mlxsw_core), 3916 - mlxsw_sp2_devlink_params, 3917 - ARRAY_SIZE(mlxsw_sp2_devlink_params)); 3915 + devl_params_unregister(priv_to_devlink(mlxsw_core), 3916 + mlxsw_sp2_devlink_params, 3917 + ARRAY_SIZE(mlxsw_sp2_devlink_params)); 3918 3918 } 3919 3919 3920 3920 static void mlxsw_sp_ptp_transmitted(struct mlxsw_core *mlxsw_core,
+4 -3
drivers/net/ethernet/netronome/nfp/nfp_net_main.c
··· 754 754 if (err) 755 755 goto err_devlink_unreg; 756 756 757 + devl_lock(devlink); 757 758 err = nfp_devlink_params_register(pf); 758 759 if (err) 759 760 goto err_shared_buf_unreg; 760 761 761 - devl_lock(devlink); 762 762 pf->ddir = nfp_net_debugfs_device_add(pf->pdev); 763 763 764 764 /* Allocate the vnics and do basic init */ ··· 791 791 nfp_net_pf_free_vnics(pf); 792 792 err_clean_ddir: 793 793 nfp_net_debugfs_dir_clean(&pf->ddir); 794 - devl_unlock(devlink); 795 794 nfp_devlink_params_unregister(pf); 796 795 err_shared_buf_unreg: 796 + devl_unlock(devlink); 797 797 nfp_shared_buf_unregister(pf); 798 798 err_devlink_unreg: 799 799 cancel_work_sync(&pf->port_refresh_work); ··· 821 821 /* stop app first, to avoid double free of ctrl vNIC's ddir */ 822 822 nfp_net_debugfs_dir_clean(&pf->ddir); 823 823 824 + nfp_devlink_params_unregister(pf); 825 + 824 826 devl_unlock(devlink); 825 827 826 - nfp_devlink_params_unregister(pf); 827 828 nfp_shared_buf_unregister(pf); 828 829 829 830 nfp_net_pf_free_irqs(pf);
-6
drivers/net/ethernet/qlogic/qed/qed_devlink.c
··· 198 198 199 199 struct devlink *qed_devlink_register(struct qed_dev *cdev) 200 200 { 201 - union devlink_param_value value; 202 201 struct qed_devlink *qdevlink; 203 202 struct devlink *dl; 204 203 int rc; ··· 214 215 ARRAY_SIZE(qed_devlink_params)); 215 216 if (rc) 216 217 goto err_unregister; 217 - 218 - value.vbool = false; 219 - devlink_param_driverinit_value_set(dl, 220 - QED_DEVLINK_PARAM_ID_IWARP_CMT, 221 - value); 222 218 223 219 cdev->iwarp_cmt = false; 224 220
+18 -18
drivers/net/netdevsim/dev.c
··· 527 527 union devlink_param_value value; 528 528 529 529 value.vu32 = nsim_dev->max_macs; 530 - devlink_param_driverinit_value_set(devlink, 531 - DEVLINK_PARAM_GENERIC_ID_MAX_MACS, 532 - value); 530 + devl_param_driverinit_value_set(devlink, 531 + DEVLINK_PARAM_GENERIC_ID_MAX_MACS, 532 + value); 533 533 value.vbool = nsim_dev->test1; 534 - devlink_param_driverinit_value_set(devlink, 535 - NSIM_DEVLINK_PARAM_ID_TEST1, 536 - value); 534 + devl_param_driverinit_value_set(devlink, 535 + NSIM_DEVLINK_PARAM_ID_TEST1, 536 + value); 537 537 } 538 538 539 539 static void nsim_devlink_param_load_driverinit_values(struct devlink *devlink) ··· 542 542 union devlink_param_value saved_value; 543 543 int err; 544 544 545 - err = devlink_param_driverinit_value_get(devlink, 546 - DEVLINK_PARAM_GENERIC_ID_MAX_MACS, 547 - &saved_value); 545 + err = devl_param_driverinit_value_get(devlink, 546 + DEVLINK_PARAM_GENERIC_ID_MAX_MACS, 547 + &saved_value); 548 548 if (!err) 549 549 nsim_dev->max_macs = saved_value.vu32; 550 - err = devlink_param_driverinit_value_get(devlink, 551 - NSIM_DEVLINK_PARAM_ID_TEST1, 552 - &saved_value); 550 + err = devl_param_driverinit_value_get(devlink, 551 + NSIM_DEVLINK_PARAM_ID_TEST1, 552 + &saved_value); 553 553 if (!err) 554 554 nsim_dev->test1 = saved_value.vbool; 555 555 } ··· 1564 1564 if (err) 1565 1565 goto err_dl_unregister; 1566 1566 1567 - err = devlink_params_register(devlink, nsim_devlink_params, 1568 - ARRAY_SIZE(nsim_devlink_params)); 1567 + err = devl_params_register(devlink, nsim_devlink_params, 1568 + ARRAY_SIZE(nsim_devlink_params)); 1569 1569 if (err) 1570 1570 goto err_resource_unregister; 1571 1571 nsim_devlink_set_params_init_values(nsim_dev, devlink); ··· 1630 1630 err_dummy_region_exit: 1631 1631 nsim_dev_dummy_region_exit(nsim_dev); 1632 1632 err_params_unregister: 1633 - devlink_params_unregister(devlink, nsim_devlink_params, 1634 - ARRAY_SIZE(nsim_devlink_params)); 1633 + devl_params_unregister(devlink, nsim_devlink_params, 1634 + ARRAY_SIZE(nsim_devlink_params)); 1635 1635 err_resource_unregister: 1636 1636 devl_resources_unregister(devlink); 1637 1637 err_dl_unregister: ··· 1678 1678 1679 1679 nsim_bpf_dev_exit(nsim_dev); 1680 1680 nsim_dev_debugfs_exit(nsim_dev); 1681 - devlink_params_unregister(devlink, nsim_devlink_params, 1682 - ARRAY_SIZE(nsim_devlink_params)); 1681 + devl_params_unregister(devlink, nsim_devlink_params, 1682 + ARRAY_SIZE(nsim_devlink_params)); 1683 1683 devl_resources_unregister(devlink); 1684 1684 devl_unregister(devlink); 1685 1685 kfree(nsim_dev->vfconfigs);
+11 -9
include/net/devlink.h
··· 1767 1767 1768 1768 void devlink_resource_occ_get_unregister(struct devlink *devlink, 1769 1769 u64 resource_id); 1770 + int devl_params_register(struct devlink *devlink, 1771 + const struct devlink_param *params, 1772 + size_t params_count); 1770 1773 int devlink_params_register(struct devlink *devlink, 1774 + const struct devlink_param *params, 1775 + size_t params_count); 1776 + void devl_params_unregister(struct devlink *devlink, 1771 1777 const struct devlink_param *params, 1772 1778 size_t params_count); 1773 1779 void devlink_params_unregister(struct devlink *devlink, 1774 1780 const struct devlink_param *params, 1775 1781 size_t params_count); 1776 - int devlink_param_register(struct devlink *devlink, 1777 - const struct devlink_param *param); 1778 - void devlink_param_unregister(struct devlink *devlink, 1779 - const struct devlink_param *param); 1780 - int devlink_param_driverinit_value_get(struct devlink *devlink, u32 param_id, 1781 - union devlink_param_value *init_val); 1782 - int devlink_param_driverinit_value_set(struct devlink *devlink, u32 param_id, 1783 - union devlink_param_value init_val); 1784 - void devlink_param_value_changed(struct devlink *devlink, u32 param_id); 1782 + int devl_param_driverinit_value_get(struct devlink *devlink, u32 param_id, 1783 + union devlink_param_value *init_val); 1784 + void devl_param_driverinit_value_set(struct devlink *devlink, u32 param_id, 1785 + union devlink_param_value init_val); 1786 + void devl_param_value_changed(struct devlink *devlink, u32 param_id); 1785 1787 struct devlink_region *devl_region_create(struct devlink *devlink, 1786 1788 const struct devlink_region_ops *ops, 1787 1789 u32 region_max_snapshots,
+113 -98
net/devlink/leftover.c
··· 10793 10793 return devlink_param_driver_verify(param); 10794 10794 } 10795 10795 10796 - /** 10797 - * devlink_params_register - register configuration parameters 10798 - * 10799 - * @devlink: devlink 10800 - * @params: configuration parameters array 10801 - * @params_count: number of parameters provided 10802 - * 10803 - * Register the configuration parameters supported by the driver. 10804 - */ 10805 - int devlink_params_register(struct devlink *devlink, 10806 - const struct devlink_param *params, 10807 - size_t params_count) 10808 - { 10809 - const struct devlink_param *param = params; 10810 - int i, err; 10811 - 10812 - for (i = 0; i < params_count; i++, param++) { 10813 - err = devlink_param_register(devlink, param); 10814 - if (err) 10815 - goto rollback; 10816 - } 10817 - return 0; 10818 - 10819 - rollback: 10820 - if (!i) 10821 - return err; 10822 - 10823 - for (param--; i > 0; i--, param--) 10824 - devlink_param_unregister(devlink, param); 10825 - return err; 10826 - } 10827 - EXPORT_SYMBOL_GPL(devlink_params_register); 10828 - 10829 - /** 10830 - * devlink_params_unregister - unregister configuration parameters 10831 - * @devlink: devlink 10832 - * @params: configuration parameters to unregister 10833 - * @params_count: number of parameters provided 10834 - */ 10835 - void devlink_params_unregister(struct devlink *devlink, 10836 - const struct devlink_param *params, 10837 - size_t params_count) 10838 - { 10839 - const struct devlink_param *param = params; 10840 - int i; 10841 - 10842 - for (i = 0; i < params_count; i++, param++) 10843 - devlink_param_unregister(devlink, param); 10844 - } 10845 - EXPORT_SYMBOL_GPL(devlink_params_unregister); 10846 - 10847 - /** 10848 - * devlink_param_register - register one configuration parameter 10849 - * 10850 - * @devlink: devlink 10851 - * @param: one configuration parameter 10852 - * 10853 - * Register the configuration parameter supported by the driver. 10854 - * Return: returns 0 on successful registration or error code otherwise. 10855 - */ 10856 - int devlink_param_register(struct devlink *devlink, 10857 - const struct devlink_param *param) 10796 + static int devlink_param_register(struct devlink *devlink, 10797 + const struct devlink_param *param) 10858 10798 { 10859 10799 struct devlink_param_item *param_item; 10860 10800 ··· 10816 10876 devlink_param_notify(devlink, 0, param_item, DEVLINK_CMD_PARAM_NEW); 10817 10877 return 0; 10818 10878 } 10819 - EXPORT_SYMBOL_GPL(devlink_param_register); 10820 10879 10821 - /** 10822 - * devlink_param_unregister - unregister one configuration parameter 10823 - * @devlink: devlink 10824 - * @param: configuration parameter to unregister 10825 - */ 10826 - void devlink_param_unregister(struct devlink *devlink, 10827 - const struct devlink_param *param) 10880 + static void devlink_param_unregister(struct devlink *devlink, 10881 + const struct devlink_param *param) 10828 10882 { 10829 10883 struct devlink_param_item *param_item; 10830 10884 10831 10885 param_item = 10832 10886 devlink_param_find_by_name(&devlink->param_list, param->name); 10833 - WARN_ON(!param_item); 10887 + if (WARN_ON(!param_item)) 10888 + return; 10834 10889 devlink_param_notify(devlink, 0, param_item, DEVLINK_CMD_PARAM_DEL); 10835 10890 list_del(&param_item->list); 10836 10891 kfree(param_item); 10837 10892 } 10838 - EXPORT_SYMBOL_GPL(devlink_param_unregister); 10839 10893 10840 10894 /** 10841 - * devlink_param_driverinit_value_get - get configuration parameter 10842 - * value for driver initializing 10895 + * devl_params_register - register configuration parameters 10896 + * 10897 + * @devlink: devlink 10898 + * @params: configuration parameters array 10899 + * @params_count: number of parameters provided 10900 + * 10901 + * Register the configuration parameters supported by the driver. 10902 + */ 10903 + int devl_params_register(struct devlink *devlink, 10904 + const struct devlink_param *params, 10905 + size_t params_count) 10906 + { 10907 + const struct devlink_param *param = params; 10908 + int i, err; 10909 + 10910 + lockdep_assert_held(&devlink->lock); 10911 + 10912 + for (i = 0; i < params_count; i++, param++) { 10913 + err = devlink_param_register(devlink, param); 10914 + if (err) 10915 + goto rollback; 10916 + } 10917 + return 0; 10918 + 10919 + rollback: 10920 + if (!i) 10921 + return err; 10922 + 10923 + for (param--; i > 0; i--, param--) 10924 + devlink_param_unregister(devlink, param); 10925 + return err; 10926 + } 10927 + EXPORT_SYMBOL_GPL(devl_params_register); 10928 + 10929 + int devlink_params_register(struct devlink *devlink, 10930 + const struct devlink_param *params, 10931 + size_t params_count) 10932 + { 10933 + int err; 10934 + 10935 + devl_lock(devlink); 10936 + err = devl_params_register(devlink, params, params_count); 10937 + devl_unlock(devlink); 10938 + return err; 10939 + } 10940 + EXPORT_SYMBOL_GPL(devlink_params_register); 10941 + 10942 + /** 10943 + * devl_params_unregister - unregister configuration parameters 10944 + * @devlink: devlink 10945 + * @params: configuration parameters to unregister 10946 + * @params_count: number of parameters provided 10947 + */ 10948 + void devl_params_unregister(struct devlink *devlink, 10949 + const struct devlink_param *params, 10950 + size_t params_count) 10951 + { 10952 + const struct devlink_param *param = params; 10953 + int i; 10954 + 10955 + lockdep_assert_held(&devlink->lock); 10956 + 10957 + for (i = 0; i < params_count; i++, param++) 10958 + devlink_param_unregister(devlink, param); 10959 + } 10960 + EXPORT_SYMBOL_GPL(devl_params_unregister); 10961 + 10962 + void devlink_params_unregister(struct devlink *devlink, 10963 + const struct devlink_param *params, 10964 + size_t params_count) 10965 + { 10966 + devl_lock(devlink); 10967 + devl_params_unregister(devlink, params, params_count); 10968 + devl_unlock(devlink); 10969 + } 10970 + EXPORT_SYMBOL_GPL(devlink_params_unregister); 10971 + 10972 + /** 10973 + * devl_param_driverinit_value_get - get configuration parameter 10974 + * value for driver initializing 10843 10975 * 10844 10976 * @devlink: devlink 10845 10977 * @param_id: parameter ID ··· 10920 10908 * This function should be used by the driver to get driverinit 10921 10909 * configuration for initialization after reload command. 10922 10910 */ 10923 - int devlink_param_driverinit_value_get(struct devlink *devlink, u32 param_id, 10924 - union devlink_param_value *init_val) 10911 + int devl_param_driverinit_value_get(struct devlink *devlink, u32 param_id, 10912 + union devlink_param_value *init_val) 10925 10913 { 10926 10914 struct devlink_param_item *param_item; 10927 10915 10928 - if (!devlink_reload_supported(devlink->ops)) 10916 + lockdep_assert_held(&devlink->lock); 10917 + 10918 + if (WARN_ON(!devlink_reload_supported(devlink->ops))) 10929 10919 return -EOPNOTSUPP; 10930 10920 10931 10921 param_item = devlink_param_find_by_id(&devlink->param_list, param_id); 10932 10922 if (!param_item) 10933 10923 return -EINVAL; 10934 10924 10935 - if (!param_item->driverinit_value_valid || 10936 - !devlink_param_cmode_is_supported(param_item->param, 10937 - DEVLINK_PARAM_CMODE_DRIVERINIT)) 10925 + if (!param_item->driverinit_value_valid) 10926 + return -EOPNOTSUPP; 10927 + 10928 + if (WARN_ON(!devlink_param_cmode_is_supported(param_item->param, 10929 + DEVLINK_PARAM_CMODE_DRIVERINIT))) 10938 10930 return -EOPNOTSUPP; 10939 10931 10940 10932 if (param_item->param->type == DEVLINK_PARAM_TYPE_STRING) ··· 10948 10932 10949 10933 return 0; 10950 10934 } 10951 - EXPORT_SYMBOL_GPL(devlink_param_driverinit_value_get); 10935 + EXPORT_SYMBOL_GPL(devl_param_driverinit_value_get); 10952 10936 10953 10937 /** 10954 - * devlink_param_driverinit_value_set - set value of configuration 10955 - * parameter for driverinit 10956 - * configuration mode 10938 + * devl_param_driverinit_value_set - set value of configuration 10939 + * parameter for driverinit 10940 + * configuration mode 10957 10941 * 10958 10942 * @devlink: devlink 10959 10943 * @param_id: parameter ID ··· 10962 10946 * This function should be used by the driver to set driverinit 10963 10947 * configuration mode default value. 10964 10948 */ 10965 - int devlink_param_driverinit_value_set(struct devlink *devlink, u32 param_id, 10966 - union devlink_param_value init_val) 10949 + void devl_param_driverinit_value_set(struct devlink *devlink, u32 param_id, 10950 + union devlink_param_value init_val) 10967 10951 { 10968 10952 struct devlink_param_item *param_item; 10969 10953 10970 10954 param_item = devlink_param_find_by_id(&devlink->param_list, param_id); 10971 - if (!param_item) 10972 - return -EINVAL; 10955 + if (WARN_ON(!param_item)) 10956 + return; 10973 10957 10974 - if (!devlink_param_cmode_is_supported(param_item->param, 10975 - DEVLINK_PARAM_CMODE_DRIVERINIT)) 10976 - return -EOPNOTSUPP; 10958 + if (WARN_ON(!devlink_param_cmode_is_supported(param_item->param, 10959 + DEVLINK_PARAM_CMODE_DRIVERINIT))) 10960 + return; 10977 10961 10978 10962 if (param_item->param->type == DEVLINK_PARAM_TYPE_STRING) 10979 10963 strcpy(param_item->driverinit_value.vstr, init_val.vstr); ··· 10982 10966 param_item->driverinit_value_valid = true; 10983 10967 10984 10968 devlink_param_notify(devlink, 0, param_item, DEVLINK_CMD_PARAM_NEW); 10985 - return 0; 10986 10969 } 10987 - EXPORT_SYMBOL_GPL(devlink_param_driverinit_value_set); 10970 + EXPORT_SYMBOL_GPL(devl_param_driverinit_value_set); 10988 10971 10989 10972 /** 10990 - * devlink_param_value_changed - notify devlink on a parameter's value 10991 - * change. Should be called by the driver 10992 - * right after the change. 10973 + * devl_param_value_changed - notify devlink on a parameter's value 10974 + * change. Should be called by the driver 10975 + * right after the change. 10993 10976 * 10994 10977 * @devlink: devlink 10995 10978 * @param_id: parameter ID ··· 10997 10982 * change, excluding driverinit configuration mode. 10998 10983 * For driverinit configuration mode driver should use the function 10999 10984 */ 11000 - void devlink_param_value_changed(struct devlink *devlink, u32 param_id) 10985 + void devl_param_value_changed(struct devlink *devlink, u32 param_id) 11001 10986 { 11002 10987 struct devlink_param_item *param_item; 11003 10988 ··· 11006 10991 11007 10992 devlink_param_notify(devlink, 0, param_item, DEVLINK_CMD_PARAM_NEW); 11008 10993 } 11009 - EXPORT_SYMBOL_GPL(devlink_param_value_changed); 10994 + EXPORT_SYMBOL_GPL(devl_param_value_changed); 11010 10995 11011 10996 /** 11012 10997 * devl_region_create - create a new address region