diff mbox series

[Intel-wired-lan,iwl-next,v6,1/6] devlink: extend devlink_param *set pointer

Message ID 20240305143942.23757-2-mateusz.polchlopek@intel.com (mailing list archive)
State Superseded
Delegated to: Netdev Maintainers
Headers show
Series ice: Support 5 layer Tx scheduler topology | expand

Checks

Context Check Description
netdev/series_format success Posting correctly formatted
netdev/tree_selection success Guessed tree name to be net-next
netdev/ynl success Generated files up to date; no warnings/errors; no diff in generated;
netdev/fixes_present success Fixes tag not required for -next series
netdev/header_inline success No static functions without inline keyword in header files
netdev/build_32bit fail Errors and warnings before: 1310 this patch: 387
netdev/build_tools success Errors and warnings before: 0 this patch: 0
netdev/cc_maintainers warning 20 maintainers not CCed: saeedm@nvidia.com louis.peens@corigine.com m.chetan.kumar@intel.com ryazanov.s.a@gmail.com edumazet@google.com johannes@sipsolutions.net manishc@marvell.com loic.poulain@linaro.org olteanv@gmail.com leon@kernel.org tariqt@nvidia.com petrm@nvidia.com pabeni@redhat.com jesse.brandeburg@intel.com aelior@marvell.com linux-rdma@vger.kernel.org f.fainelli@gmail.com idosch@nvidia.com oss-drivers@corigine.com michael.chan@broadcom.com
netdev/build_clang fail Errors and warnings before: 978 this patch: 32
netdev/verify_signedoff success Signed-off-by tag matches author and committer
netdev/deprecated_api success None detected
netdev/check_selftest success No net selftest shell script
netdev/verify_fixes success No Fixes tag
netdev/build_allmodconfig_warn fail Errors and warnings before: 1709 this patch: 511
netdev/checkpatch warning WARNING: line length of 84 exceeds 80 columns WARNING: line length of 88 exceeds 80 columns
netdev/build_clang_rust success No Rust files in patch. Skipping build
netdev/kdoc success Errors and warnings before: 0 this patch: 0
netdev/source_inline success Was 0 now: 0

Commit Message

Mateusz Polchlopek March 5, 2024, 2:39 p.m. UTC
Extend devlink_param *set function pointer to take extack as a param.
Sometimes it is needed to pass information to the end user from set
function. It is more proper to use for that netlink instead of passing
message to dmesg.

Signed-off-by: Mateusz Polchlopek <mateusz.polchlopek@intel.com>
---
 .../net/ethernet/broadcom/bnxt/bnxt_devlink.c |  6 ++--
 drivers/net/ethernet/intel/ice/ice_devlink.c  | 36 +++++++++----------
 drivers/net/ethernet/mellanox/mlx4/main.c     |  6 ++--
 .../net/ethernet/mellanox/mlx5/core/eswitch.c |  3 +-
 .../mellanox/mlx5/core/eswitch_offloads.c     |  3 +-
 .../net/ethernet/mellanox/mlx5/core/fs_core.c |  3 +-
 .../ethernet/mellanox/mlx5/core/fw_reset.c    |  3 +-
 .../mellanox/mlxsw/spectrum_acl_tcam.c        |  3 +-
 .../ethernet/netronome/nfp/devlink_param.c    |  3 +-
 drivers/net/ethernet/qlogic/qed/qed_devlink.c |  3 +-
 drivers/net/wwan/iosm/iosm_ipc_devlink.c      |  3 +-
 include/net/devlink.h                         |  3 +-
 include/net/dsa.h                             |  3 +-
 net/devlink/param.c                           |  7 ++--
 net/dsa/devlink.c                             |  3 +-
 15 files changed, 50 insertions(+), 38 deletions(-)

Comments

Jiri Pirko March 6, 2024, 8:32 a.m. UTC | #1
Tue, Mar 05, 2024 at 03:39:37PM CET, mateusz.polchlopek@intel.com wrote:
>Extend devlink_param *set function pointer to take extack as a param.
>Sometimes it is needed to pass information to the end user from set
>function. It is more proper to use for that netlink instead of passing
>message to dmesg.
>
>Signed-off-by: Mateusz Polchlopek <mateusz.polchlopek@intel.com>
>---
> .../net/ethernet/broadcom/bnxt/bnxt_devlink.c |  6 ++--
> drivers/net/ethernet/intel/ice/ice_devlink.c  | 36 +++++++++----------
> drivers/net/ethernet/mellanox/mlx4/main.c     |  6 ++--
> .../net/ethernet/mellanox/mlx5/core/eswitch.c |  3 +-
> .../mellanox/mlx5/core/eswitch_offloads.c     |  3 +-
> .../net/ethernet/mellanox/mlx5/core/fs_core.c |  3 +-
> .../ethernet/mellanox/mlx5/core/fw_reset.c    |  3 +-
> .../mellanox/mlxsw/spectrum_acl_tcam.c        |  3 +-
> .../ethernet/netronome/nfp/devlink_param.c    |  3 +-
> drivers/net/ethernet/qlogic/qed/qed_devlink.c |  3 +-
> drivers/net/wwan/iosm/iosm_ipc_devlink.c      |  3 +-
> include/net/devlink.h                         |  3 +-
> include/net/dsa.h                             |  3 +-
> net/devlink/param.c                           |  7 ++--
> net/dsa/devlink.c                             |  3 +-
> 15 files changed, 50 insertions(+), 38 deletions(-)
>
>diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c b/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c
>index ae4529c043f0..d9ea6fa23923 100644
>--- a/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c
>+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c
>@@ -1096,7 +1096,8 @@ static int bnxt_dl_nvm_param_get(struct devlink *dl, u32 id,
> }
> 
> static int bnxt_dl_nvm_param_set(struct devlink *dl, u32 id,
>-				 struct devlink_param_gset_ctx *ctx)
>+				 struct devlink_param_gset_ctx *ctx,
>+				 struct netlink_ext_ack *extack)
> {
> 	struct bnxt *bp = bnxt_get_bp_from_dl(dl);
> 	struct hwrm_nvm_set_variable_input *req;
>@@ -1145,7 +1146,8 @@ static int bnxt_remote_dev_reset_get(struct devlink *dl, u32 id,
> }
> 
> static int bnxt_remote_dev_reset_set(struct devlink *dl, u32 id,
>-				     struct devlink_param_gset_ctx *ctx)
>+				     struct devlink_param_gset_ctx *ctx,
>+				     struct netlink_ext_ack *extack)
> {
> 	struct bnxt *bp = bnxt_get_bp_from_dl(dl);
> 	int rc;
>diff --git a/drivers/net/ethernet/intel/ice/ice_devlink.c b/drivers/net/ethernet/intel/ice/ice_devlink.c
>index b516e42b41f0..c0a89a1b4e88 100644
>--- a/drivers/net/ethernet/intel/ice/ice_devlink.c
>+++ b/drivers/net/ethernet/intel/ice/ice_devlink.c
>@@ -1380,9 +1380,8 @@ static const struct devlink_ops ice_devlink_ops = {
> 	.rate_node_parent_set = ice_devlink_set_parent,
> };
> 
>-static int
>-ice_devlink_enable_roce_get(struct devlink *devlink, u32 id,
>-			    struct devlink_param_gset_ctx *ctx)
>+static int ice_devlink_enable_roce_get(struct devlink *devlink, u32 id,
>+				       struct devlink_param_gset_ctx *ctx)

Hmm. This hunk does not seem related to the rest of the patch. Please
remove.

Feel free to add my:
Suggested-by: Jiri Pirko <jiri@nvidia.com>
Reviewed-by: Jiri Pirko <jiri@nvidia.com>

after that.

pw-bot: cr



> {
> 	struct ice_pf *pf = devlink_priv(devlink);
> 
>@@ -1391,9 +1390,9 @@ ice_devlink_enable_roce_get(struct devlink *devlink, u32 id,
> 	return 0;
> }
> 
>-static int
>-ice_devlink_enable_roce_set(struct devlink *devlink, u32 id,
>-			    struct devlink_param_gset_ctx *ctx)
>+static int ice_devlink_enable_roce_set(struct devlink *devlink, u32 id,
>+				       struct devlink_param_gset_ctx *ctx,
>+				       struct netlink_ext_ack *extack)
> {
> 	struct ice_pf *pf = devlink_priv(devlink);
> 	bool roce_ena = ctx->val.vbool;
>@@ -1413,10 +1412,9 @@ ice_devlink_enable_roce_set(struct devlink *devlink, u32 id,
> 	return ret;
> }
> 
>-static int
>-ice_devlink_enable_roce_validate(struct devlink *devlink, u32 id,
>-				 union devlink_param_value val,
>-				 struct netlink_ext_ack *extack)
>+static int ice_devlink_enable_roce_validate(struct devlink *devlink, u32 id,
>+					    union devlink_param_value val,
>+					    struct netlink_ext_ack *extack)
> {
> 	struct ice_pf *pf = devlink_priv(devlink);
> 
>@@ -1431,9 +1429,8 @@ ice_devlink_enable_roce_validate(struct devlink *devlink, u32 id,
> 	return 0;
> }
> 
>-static int
>-ice_devlink_enable_iw_get(struct devlink *devlink, u32 id,
>-			  struct devlink_param_gset_ctx *ctx)
>+static int ice_devlink_enable_iw_get(struct devlink *devlink, u32 id,
>+				     struct devlink_param_gset_ctx *ctx)
> {
> 	struct ice_pf *pf = devlink_priv(devlink);
> 
>@@ -1442,9 +1439,9 @@ ice_devlink_enable_iw_get(struct devlink *devlink, u32 id,
> 	return 0;
> }
> 
>-static int
>-ice_devlink_enable_iw_set(struct devlink *devlink, u32 id,
>-			  struct devlink_param_gset_ctx *ctx)
>+static int ice_devlink_enable_iw_set(struct devlink *devlink, u32 id,
>+				     struct devlink_param_gset_ctx *ctx,
>+				     struct netlink_ext_ack *extack)
> {
> 	struct ice_pf *pf = devlink_priv(devlink);
> 	bool iw_ena = ctx->val.vbool;
>@@ -1464,10 +1461,9 @@ ice_devlink_enable_iw_set(struct devlink *devlink, u32 id,
> 	return ret;
> }
> 
>-static int
>-ice_devlink_enable_iw_validate(struct devlink *devlink, u32 id,
>-			       union devlink_param_value val,
>-			       struct netlink_ext_ack *extack)
>+static int ice_devlink_enable_iw_validate(struct devlink *devlink, u32 id,
>+					  union devlink_param_value val,
>+					  struct netlink_ext_ack *extack)
> {
> 	struct ice_pf *pf = devlink_priv(devlink);
> 
>diff --git a/drivers/net/ethernet/mellanox/mlx4/main.c b/drivers/net/ethernet/mellanox/mlx4/main.c
>index 7b02ff61126d..98688e4dbec5 100644
>--- a/drivers/net/ethernet/mellanox/mlx4/main.c
>+++ b/drivers/net/ethernet/mellanox/mlx4/main.c
>@@ -185,7 +185,8 @@ static int mlx4_devlink_ierr_reset_get(struct devlink *devlink, u32 id,
> }
> 
> static int mlx4_devlink_ierr_reset_set(struct devlink *devlink, u32 id,
>-				       struct devlink_param_gset_ctx *ctx)
>+				       struct devlink_param_gset_ctx *ctx,
>+				       struct netlink_ext_ack *extack)
> {
> 	mlx4_internal_err_reset = ctx->val.vbool;
> 	return 0;
>@@ -202,7 +203,8 @@ static int mlx4_devlink_crdump_snapshot_get(struct devlink *devlink, u32 id,
> }
> 
> static int mlx4_devlink_crdump_snapshot_set(struct devlink *devlink, u32 id,
>-					    struct devlink_param_gset_ctx *ctx)
>+					    struct devlink_param_gset_ctx *ctx,
>+					    struct netlink_ext_ack *extack)
> {
> 	struct mlx4_priv *priv = devlink_priv(devlink);
> 	struct mlx4_dev *dev = &priv->dev;
>diff --git a/drivers/net/ethernet/mellanox/mlx5/core/eswitch.c b/drivers/net/ethernet/mellanox/mlx5/core/eswitch.c
>index 3047d7015c52..a86f9c335b6b 100644
>--- a/drivers/net/ethernet/mellanox/mlx5/core/eswitch.c
>+++ b/drivers/net/ethernet/mellanox/mlx5/core/eswitch.c
>@@ -1805,7 +1805,8 @@ static int mlx5_esw_vports_init(struct mlx5_eswitch *esw)
> }
> 
> static int mlx5_devlink_esw_multiport_set(struct devlink *devlink, u32 id,
>-					  struct devlink_param_gset_ctx *ctx)
>+					  struct devlink_param_gset_ctx *ctx,
>+					  struct netlink_ext_ack *extack)
> {
> 	struct mlx5_core_dev *dev = devlink_priv(devlink);
> 
>diff --git a/drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c b/drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c
>index b0455134c98e..3d8b3ca681d0 100644
>--- a/drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c
>+++ b/drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c
>@@ -2405,7 +2405,8 @@ static int esw_offloads_init_reps(struct mlx5_eswitch *esw)
> }
> 
> static int esw_port_metadata_set(struct devlink *devlink, u32 id,
>-				 struct devlink_param_gset_ctx *ctx)
>+				 struct devlink_param_gset_ctx *ctx,
>+				 struct netlink_ext_ack *extack)
> {
> 	struct mlx5_core_dev *dev = devlink_priv(devlink);
> 	struct mlx5_eswitch *esw = dev->priv.eswitch;
>diff --git a/drivers/net/ethernet/mellanox/mlx5/core/fs_core.c b/drivers/net/ethernet/mellanox/mlx5/core/fs_core.c
>index e6bfa7e4f146..8a941c0b4497 100644
>--- a/drivers/net/ethernet/mellanox/mlx5/core/fs_core.c
>+++ b/drivers/net/ethernet/mellanox/mlx5/core/fs_core.c
>@@ -3321,7 +3321,8 @@ static int mlx5_fs_mode_validate(struct devlink *devlink, u32 id,
> }
> 
> static int mlx5_fs_mode_set(struct devlink *devlink, u32 id,
>-			    struct devlink_param_gset_ctx *ctx)
>+			    struct devlink_param_gset_ctx *ctx,
>+			    struct netlink_ext_ack *extack)
> {
> 	struct mlx5_core_dev *dev = devlink_priv(devlink);
> 	enum mlx5_flow_steering_mode mode;
>diff --git a/drivers/net/ethernet/mellanox/mlx5/core/fw_reset.c b/drivers/net/ethernet/mellanox/mlx5/core/fw_reset.c
>index f27eab6e4929..1237b7fb5cef 100644
>--- a/drivers/net/ethernet/mellanox/mlx5/core/fw_reset.c
>+++ b/drivers/net/ethernet/mellanox/mlx5/core/fw_reset.c
>@@ -52,7 +52,8 @@ static void mlx5_set_fw_rst_ack(struct mlx5_core_dev *dev)
> }
> 
> static int mlx5_fw_reset_enable_remote_dev_reset_set(struct devlink *devlink, u32 id,
>-						     struct devlink_param_gset_ctx *ctx)
>+						     struct devlink_param_gset_ctx *ctx,
>+						     struct netlink_ext_ack *extack)
> {
> 	struct mlx5_core_dev *dev = devlink_priv(devlink);
> 	struct mlx5_fw_reset *fw_reset;
>diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_tcam.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_tcam.c
>index f20052776b3f..baedf0d45e85 100644
>--- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_tcam.c
>+++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_tcam.c
>@@ -1465,7 +1465,8 @@ mlxsw_sp_acl_tcam_region_rehash_intrvl_get(struct devlink *devlink, u32 id,
> 
> static int
> mlxsw_sp_acl_tcam_region_rehash_intrvl_set(struct devlink *devlink, u32 id,
>-					   struct devlink_param_gset_ctx *ctx)
>+					   struct devlink_param_gset_ctx *ctx,
>+					   struct netlink_ext_ack *extack)
> {
> 	struct mlxsw_core *mlxsw_core = devlink_priv(devlink);
> 	struct mlxsw_sp_acl_tcam_vregion *vregion;
>diff --git a/drivers/net/ethernet/netronome/nfp/devlink_param.c b/drivers/net/ethernet/netronome/nfp/devlink_param.c
>index a655f9e69a7b..0e1a3800f371 100644
>--- a/drivers/net/ethernet/netronome/nfp/devlink_param.c
>+++ b/drivers/net/ethernet/netronome/nfp/devlink_param.c
>@@ -132,7 +132,8 @@ nfp_devlink_param_u8_get(struct devlink *devlink, u32 id,
> 
> static int
> nfp_devlink_param_u8_set(struct devlink *devlink, u32 id,
>-			 struct devlink_param_gset_ctx *ctx)
>+			 struct devlink_param_gset_ctx *ctx,
>+			 struct netlink_ext_ack *extack)
> {
> 	const struct nfp_devlink_param_u8_arg *arg;
> 	struct nfp_pf *pf = devlink_priv(devlink);
>diff --git a/drivers/net/ethernet/qlogic/qed/qed_devlink.c b/drivers/net/ethernet/qlogic/qed/qed_devlink.c
>index dad8e617c393..1adc7fbb3f2f 100644
>--- a/drivers/net/ethernet/qlogic/qed/qed_devlink.c
>+++ b/drivers/net/ethernet/qlogic/qed/qed_devlink.c
>@@ -132,7 +132,8 @@ static int qed_dl_param_get(struct devlink *dl, u32 id,
> }
> 
> static int qed_dl_param_set(struct devlink *dl, u32 id,
>-			    struct devlink_param_gset_ctx *ctx)
>+			    struct devlink_param_gset_ctx *ctx,
>+			    struct netlink_ext_ack *extack)
> {
> 	struct qed_devlink *qed_dl = devlink_priv(dl);
> 	struct qed_dev *cdev;
>diff --git a/drivers/net/wwan/iosm/iosm_ipc_devlink.c b/drivers/net/wwan/iosm/iosm_ipc_devlink.c
>index 2fe724d623c0..bef6819986e9 100644
>--- a/drivers/net/wwan/iosm/iosm_ipc_devlink.c
>+++ b/drivers/net/wwan/iosm/iosm_ipc_devlink.c
>@@ -33,7 +33,8 @@ static int ipc_devlink_get_param(struct devlink *dl, u32 id,
> 
> /* Set the param values for the specific param ID's */
> static int ipc_devlink_set_param(struct devlink *dl, u32 id,
>-				 struct devlink_param_gset_ctx *ctx)
>+				 struct devlink_param_gset_ctx *ctx,
>+				 struct netlink_ext_ack *extack)
> {
> 	struct iosm_devlink *ipc_devlink = devlink_priv(dl);
> 
>diff --git a/include/net/devlink.h b/include/net/devlink.h
>index 9ac394bdfbe4..12f14be44e53 100644
>--- a/include/net/devlink.h
>+++ b/include/net/devlink.h
>@@ -483,7 +483,8 @@ struct devlink_param {
> 	int (*get)(struct devlink *devlink, u32 id,
> 		   struct devlink_param_gset_ctx *ctx);
> 	int (*set)(struct devlink *devlink, u32 id,
>-		   struct devlink_param_gset_ctx *ctx);
>+		   struct devlink_param_gset_ctx *ctx,
>+		   struct netlink_ext_ack *extack);
> 	int (*validate)(struct devlink *devlink, u32 id,
> 			union devlink_param_value val,
> 			struct netlink_ext_ack *extack);
>diff --git a/include/net/dsa.h b/include/net/dsa.h
>index 7c0da9effe4e..140b80e1a88c 100644
>--- a/include/net/dsa.h
>+++ b/include/net/dsa.h
>@@ -1247,7 +1247,8 @@ struct dsa_switch_ops {
> int dsa_devlink_param_get(struct devlink *dl, u32 id,
> 			  struct devlink_param_gset_ctx *ctx);
> int dsa_devlink_param_set(struct devlink *dl, u32 id,
>-			  struct devlink_param_gset_ctx *ctx);
>+			  struct devlink_param_gset_ctx *ctx,
>+			  struct netlink_ext_ack *extack);
> int dsa_devlink_params_register(struct dsa_switch *ds,
> 				const struct devlink_param *params,
> 				size_t params_count);
>diff --git a/net/devlink/param.c b/net/devlink/param.c
>index 22bc3b500518..dcf0d1ccebba 100644
>--- a/net/devlink/param.c
>+++ b/net/devlink/param.c
>@@ -158,11 +158,12 @@ static int devlink_param_get(struct devlink *devlink,
> 
> static int devlink_param_set(struct devlink *devlink,
> 			     const struct devlink_param *param,
>-			     struct devlink_param_gset_ctx *ctx)
>+			     struct devlink_param_gset_ctx *ctx,
>+			     struct netlink_ext_ack *extack)
> {
> 	if (!param->set)
> 		return -EOPNOTSUPP;
>-	return param->set(devlink, param->id, ctx);
>+	return param->set(devlink, param->id, ctx, extack);
> }
> 
> static int
>@@ -571,7 +572,7 @@ static int __devlink_nl_cmd_param_set_doit(struct devlink *devlink,
> 			return -EOPNOTSUPP;
> 		ctx.val = value;
> 		ctx.cmode = cmode;
>-		err = devlink_param_set(devlink, param, &ctx);
>+		err = devlink_param_set(devlink, param, &ctx, info->extack);
> 		if (err)
> 			return err;
> 	}
>diff --git a/net/dsa/devlink.c b/net/dsa/devlink.c
>index 431bf52290a1..0aac887d0098 100644
>--- a/net/dsa/devlink.c
>+++ b/net/dsa/devlink.c
>@@ -194,7 +194,8 @@ int dsa_devlink_param_get(struct devlink *dl, u32 id,
> EXPORT_SYMBOL_GPL(dsa_devlink_param_get);
> 
> int dsa_devlink_param_set(struct devlink *dl, u32 id,
>-			  struct devlink_param_gset_ctx *ctx)
>+			  struct devlink_param_gset_ctx *ctx,
>+			  struct netlink_ext_ack *extack)
> {
> 	struct dsa_switch *ds = dsa_devlink_to_ds(dl);
> 
>-- 
>2.38.1
>
diff mbox series

Patch

diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c b/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c
index ae4529c043f0..d9ea6fa23923 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_devlink.c
@@ -1096,7 +1096,8 @@  static int bnxt_dl_nvm_param_get(struct devlink *dl, u32 id,
 }
 
 static int bnxt_dl_nvm_param_set(struct devlink *dl, u32 id,
-				 struct devlink_param_gset_ctx *ctx)
+				 struct devlink_param_gset_ctx *ctx,
+				 struct netlink_ext_ack *extack)
 {
 	struct bnxt *bp = bnxt_get_bp_from_dl(dl);
 	struct hwrm_nvm_set_variable_input *req;
@@ -1145,7 +1146,8 @@  static int bnxt_remote_dev_reset_get(struct devlink *dl, u32 id,
 }
 
 static int bnxt_remote_dev_reset_set(struct devlink *dl, u32 id,
-				     struct devlink_param_gset_ctx *ctx)
+				     struct devlink_param_gset_ctx *ctx,
+				     struct netlink_ext_ack *extack)
 {
 	struct bnxt *bp = bnxt_get_bp_from_dl(dl);
 	int rc;
diff --git a/drivers/net/ethernet/intel/ice/ice_devlink.c b/drivers/net/ethernet/intel/ice/ice_devlink.c
index b516e42b41f0..c0a89a1b4e88 100644
--- a/drivers/net/ethernet/intel/ice/ice_devlink.c
+++ b/drivers/net/ethernet/intel/ice/ice_devlink.c
@@ -1380,9 +1380,8 @@  static const struct devlink_ops ice_devlink_ops = {
 	.rate_node_parent_set = ice_devlink_set_parent,
 };
 
-static int
-ice_devlink_enable_roce_get(struct devlink *devlink, u32 id,
-			    struct devlink_param_gset_ctx *ctx)
+static int ice_devlink_enable_roce_get(struct devlink *devlink, u32 id,
+				       struct devlink_param_gset_ctx *ctx)
 {
 	struct ice_pf *pf = devlink_priv(devlink);
 
@@ -1391,9 +1390,9 @@  ice_devlink_enable_roce_get(struct devlink *devlink, u32 id,
 	return 0;
 }
 
-static int
-ice_devlink_enable_roce_set(struct devlink *devlink, u32 id,
-			    struct devlink_param_gset_ctx *ctx)
+static int ice_devlink_enable_roce_set(struct devlink *devlink, u32 id,
+				       struct devlink_param_gset_ctx *ctx,
+				       struct netlink_ext_ack *extack)
 {
 	struct ice_pf *pf = devlink_priv(devlink);
 	bool roce_ena = ctx->val.vbool;
@@ -1413,10 +1412,9 @@  ice_devlink_enable_roce_set(struct devlink *devlink, u32 id,
 	return ret;
 }
 
-static int
-ice_devlink_enable_roce_validate(struct devlink *devlink, u32 id,
-				 union devlink_param_value val,
-				 struct netlink_ext_ack *extack)
+static int ice_devlink_enable_roce_validate(struct devlink *devlink, u32 id,
+					    union devlink_param_value val,
+					    struct netlink_ext_ack *extack)
 {
 	struct ice_pf *pf = devlink_priv(devlink);
 
@@ -1431,9 +1429,8 @@  ice_devlink_enable_roce_validate(struct devlink *devlink, u32 id,
 	return 0;
 }
 
-static int
-ice_devlink_enable_iw_get(struct devlink *devlink, u32 id,
-			  struct devlink_param_gset_ctx *ctx)
+static int ice_devlink_enable_iw_get(struct devlink *devlink, u32 id,
+				     struct devlink_param_gset_ctx *ctx)
 {
 	struct ice_pf *pf = devlink_priv(devlink);
 
@@ -1442,9 +1439,9 @@  ice_devlink_enable_iw_get(struct devlink *devlink, u32 id,
 	return 0;
 }
 
-static int
-ice_devlink_enable_iw_set(struct devlink *devlink, u32 id,
-			  struct devlink_param_gset_ctx *ctx)
+static int ice_devlink_enable_iw_set(struct devlink *devlink, u32 id,
+				     struct devlink_param_gset_ctx *ctx,
+				     struct netlink_ext_ack *extack)
 {
 	struct ice_pf *pf = devlink_priv(devlink);
 	bool iw_ena = ctx->val.vbool;
@@ -1464,10 +1461,9 @@  ice_devlink_enable_iw_set(struct devlink *devlink, u32 id,
 	return ret;
 }
 
-static int
-ice_devlink_enable_iw_validate(struct devlink *devlink, u32 id,
-			       union devlink_param_value val,
-			       struct netlink_ext_ack *extack)
+static int ice_devlink_enable_iw_validate(struct devlink *devlink, u32 id,
+					  union devlink_param_value val,
+					  struct netlink_ext_ack *extack)
 {
 	struct ice_pf *pf = devlink_priv(devlink);
 
diff --git a/drivers/net/ethernet/mellanox/mlx4/main.c b/drivers/net/ethernet/mellanox/mlx4/main.c
index 7b02ff61126d..98688e4dbec5 100644
--- a/drivers/net/ethernet/mellanox/mlx4/main.c
+++ b/drivers/net/ethernet/mellanox/mlx4/main.c
@@ -185,7 +185,8 @@  static int mlx4_devlink_ierr_reset_get(struct devlink *devlink, u32 id,
 }
 
 static int mlx4_devlink_ierr_reset_set(struct devlink *devlink, u32 id,
-				       struct devlink_param_gset_ctx *ctx)
+				       struct devlink_param_gset_ctx *ctx,
+				       struct netlink_ext_ack *extack)
 {
 	mlx4_internal_err_reset = ctx->val.vbool;
 	return 0;
@@ -202,7 +203,8 @@  static int mlx4_devlink_crdump_snapshot_get(struct devlink *devlink, u32 id,
 }
 
 static int mlx4_devlink_crdump_snapshot_set(struct devlink *devlink, u32 id,
-					    struct devlink_param_gset_ctx *ctx)
+					    struct devlink_param_gset_ctx *ctx,
+					    struct netlink_ext_ack *extack)
 {
 	struct mlx4_priv *priv = devlink_priv(devlink);
 	struct mlx4_dev *dev = &priv->dev;
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/eswitch.c b/drivers/net/ethernet/mellanox/mlx5/core/eswitch.c
index 3047d7015c52..a86f9c335b6b 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/eswitch.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/eswitch.c
@@ -1805,7 +1805,8 @@  static int mlx5_esw_vports_init(struct mlx5_eswitch *esw)
 }
 
 static int mlx5_devlink_esw_multiport_set(struct devlink *devlink, u32 id,
-					  struct devlink_param_gset_ctx *ctx)
+					  struct devlink_param_gset_ctx *ctx,
+					  struct netlink_ext_ack *extack)
 {
 	struct mlx5_core_dev *dev = devlink_priv(devlink);
 
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c b/drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c
index b0455134c98e..3d8b3ca681d0 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/eswitch_offloads.c
@@ -2405,7 +2405,8 @@  static int esw_offloads_init_reps(struct mlx5_eswitch *esw)
 }
 
 static int esw_port_metadata_set(struct devlink *devlink, u32 id,
-				 struct devlink_param_gset_ctx *ctx)
+				 struct devlink_param_gset_ctx *ctx,
+				 struct netlink_ext_ack *extack)
 {
 	struct mlx5_core_dev *dev = devlink_priv(devlink);
 	struct mlx5_eswitch *esw = dev->priv.eswitch;
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/fs_core.c b/drivers/net/ethernet/mellanox/mlx5/core/fs_core.c
index e6bfa7e4f146..8a941c0b4497 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/fs_core.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/fs_core.c
@@ -3321,7 +3321,8 @@  static int mlx5_fs_mode_validate(struct devlink *devlink, u32 id,
 }
 
 static int mlx5_fs_mode_set(struct devlink *devlink, u32 id,
-			    struct devlink_param_gset_ctx *ctx)
+			    struct devlink_param_gset_ctx *ctx,
+			    struct netlink_ext_ack *extack)
 {
 	struct mlx5_core_dev *dev = devlink_priv(devlink);
 	enum mlx5_flow_steering_mode mode;
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/fw_reset.c b/drivers/net/ethernet/mellanox/mlx5/core/fw_reset.c
index f27eab6e4929..1237b7fb5cef 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/fw_reset.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/fw_reset.c
@@ -52,7 +52,8 @@  static void mlx5_set_fw_rst_ack(struct mlx5_core_dev *dev)
 }
 
 static int mlx5_fw_reset_enable_remote_dev_reset_set(struct devlink *devlink, u32 id,
-						     struct devlink_param_gset_ctx *ctx)
+						     struct devlink_param_gset_ctx *ctx,
+						     struct netlink_ext_ack *extack)
 {
 	struct mlx5_core_dev *dev = devlink_priv(devlink);
 	struct mlx5_fw_reset *fw_reset;
diff --git a/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_tcam.c b/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_tcam.c
index f20052776b3f..baedf0d45e85 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_tcam.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/spectrum_acl_tcam.c
@@ -1465,7 +1465,8 @@  mlxsw_sp_acl_tcam_region_rehash_intrvl_get(struct devlink *devlink, u32 id,
 
 static int
 mlxsw_sp_acl_tcam_region_rehash_intrvl_set(struct devlink *devlink, u32 id,
-					   struct devlink_param_gset_ctx *ctx)
+					   struct devlink_param_gset_ctx *ctx,
+					   struct netlink_ext_ack *extack)
 {
 	struct mlxsw_core *mlxsw_core = devlink_priv(devlink);
 	struct mlxsw_sp_acl_tcam_vregion *vregion;
diff --git a/drivers/net/ethernet/netronome/nfp/devlink_param.c b/drivers/net/ethernet/netronome/nfp/devlink_param.c
index a655f9e69a7b..0e1a3800f371 100644
--- a/drivers/net/ethernet/netronome/nfp/devlink_param.c
+++ b/drivers/net/ethernet/netronome/nfp/devlink_param.c
@@ -132,7 +132,8 @@  nfp_devlink_param_u8_get(struct devlink *devlink, u32 id,
 
 static int
 nfp_devlink_param_u8_set(struct devlink *devlink, u32 id,
-			 struct devlink_param_gset_ctx *ctx)
+			 struct devlink_param_gset_ctx *ctx,
+			 struct netlink_ext_ack *extack)
 {
 	const struct nfp_devlink_param_u8_arg *arg;
 	struct nfp_pf *pf = devlink_priv(devlink);
diff --git a/drivers/net/ethernet/qlogic/qed/qed_devlink.c b/drivers/net/ethernet/qlogic/qed/qed_devlink.c
index dad8e617c393..1adc7fbb3f2f 100644
--- a/drivers/net/ethernet/qlogic/qed/qed_devlink.c
+++ b/drivers/net/ethernet/qlogic/qed/qed_devlink.c
@@ -132,7 +132,8 @@  static int qed_dl_param_get(struct devlink *dl, u32 id,
 }
 
 static int qed_dl_param_set(struct devlink *dl, u32 id,
-			    struct devlink_param_gset_ctx *ctx)
+			    struct devlink_param_gset_ctx *ctx,
+			    struct netlink_ext_ack *extack)
 {
 	struct qed_devlink *qed_dl = devlink_priv(dl);
 	struct qed_dev *cdev;
diff --git a/drivers/net/wwan/iosm/iosm_ipc_devlink.c b/drivers/net/wwan/iosm/iosm_ipc_devlink.c
index 2fe724d623c0..bef6819986e9 100644
--- a/drivers/net/wwan/iosm/iosm_ipc_devlink.c
+++ b/drivers/net/wwan/iosm/iosm_ipc_devlink.c
@@ -33,7 +33,8 @@  static int ipc_devlink_get_param(struct devlink *dl, u32 id,
 
 /* Set the param values for the specific param ID's */
 static int ipc_devlink_set_param(struct devlink *dl, u32 id,
-				 struct devlink_param_gset_ctx *ctx)
+				 struct devlink_param_gset_ctx *ctx,
+				 struct netlink_ext_ack *extack)
 {
 	struct iosm_devlink *ipc_devlink = devlink_priv(dl);
 
diff --git a/include/net/devlink.h b/include/net/devlink.h
index 9ac394bdfbe4..12f14be44e53 100644
--- a/include/net/devlink.h
+++ b/include/net/devlink.h
@@ -483,7 +483,8 @@  struct devlink_param {
 	int (*get)(struct devlink *devlink, u32 id,
 		   struct devlink_param_gset_ctx *ctx);
 	int (*set)(struct devlink *devlink, u32 id,
-		   struct devlink_param_gset_ctx *ctx);
+		   struct devlink_param_gset_ctx *ctx,
+		   struct netlink_ext_ack *extack);
 	int (*validate)(struct devlink *devlink, u32 id,
 			union devlink_param_value val,
 			struct netlink_ext_ack *extack);
diff --git a/include/net/dsa.h b/include/net/dsa.h
index 7c0da9effe4e..140b80e1a88c 100644
--- a/include/net/dsa.h
+++ b/include/net/dsa.h
@@ -1247,7 +1247,8 @@  struct dsa_switch_ops {
 int dsa_devlink_param_get(struct devlink *dl, u32 id,
 			  struct devlink_param_gset_ctx *ctx);
 int dsa_devlink_param_set(struct devlink *dl, u32 id,
-			  struct devlink_param_gset_ctx *ctx);
+			  struct devlink_param_gset_ctx *ctx,
+			  struct netlink_ext_ack *extack);
 int dsa_devlink_params_register(struct dsa_switch *ds,
 				const struct devlink_param *params,
 				size_t params_count);
diff --git a/net/devlink/param.c b/net/devlink/param.c
index 22bc3b500518..dcf0d1ccebba 100644
--- a/net/devlink/param.c
+++ b/net/devlink/param.c
@@ -158,11 +158,12 @@  static int devlink_param_get(struct devlink *devlink,
 
 static int devlink_param_set(struct devlink *devlink,
 			     const struct devlink_param *param,
-			     struct devlink_param_gset_ctx *ctx)
+			     struct devlink_param_gset_ctx *ctx,
+			     struct netlink_ext_ack *extack)
 {
 	if (!param->set)
 		return -EOPNOTSUPP;
-	return param->set(devlink, param->id, ctx);
+	return param->set(devlink, param->id, ctx, extack);
 }
 
 static int
@@ -571,7 +572,7 @@  static int __devlink_nl_cmd_param_set_doit(struct devlink *devlink,
 			return -EOPNOTSUPP;
 		ctx.val = value;
 		ctx.cmode = cmode;
-		err = devlink_param_set(devlink, param, &ctx);
+		err = devlink_param_set(devlink, param, &ctx, info->extack);
 		if (err)
 			return err;
 	}
diff --git a/net/dsa/devlink.c b/net/dsa/devlink.c
index 431bf52290a1..0aac887d0098 100644
--- a/net/dsa/devlink.c
+++ b/net/dsa/devlink.c
@@ -194,7 +194,8 @@  int dsa_devlink_param_get(struct devlink *dl, u32 id,
 EXPORT_SYMBOL_GPL(dsa_devlink_param_get);
 
 int dsa_devlink_param_set(struct devlink *dl, u32 id,
-			  struct devlink_param_gset_ctx *ctx)
+			  struct devlink_param_gset_ctx *ctx,
+			  struct netlink_ext_ack *extack)
 {
 	struct dsa_switch *ds = dsa_devlink_to_ds(dl);