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.
Reviewed-by: Jiri Pirko <jiri@nvidia.com>
Reviewed-by: Przemek Kitszel <przemyslaw.kitszel@intel.com>
Signed-off-by: Mateusz Polchlopek <mateusz.polchlopek@intel.com>
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
 #include "otx2_cpt_devlink.h"
 
 static int otx2_cpt_dl_egrp_create(struct devlink *dl, u32 id,
-                                  struct devlink_param_gset_ctx *ctx)
+                                  struct devlink_param_gset_ctx *ctx,
+                                  struct netlink_ext_ack *extack)
 {
        struct otx2_cpt_devlink *cpt_dl = devlink_priv(dl);
        struct otx2_cptpf_dev *cptpf = cpt_dl->cptpf;
 }
 
 static int otx2_cpt_dl_egrp_delete(struct devlink *dl, u32 id,
-                                  struct devlink_param_gset_ctx *ctx)
+                                  struct devlink_param_gset_ctx *ctx,
+                                  struct netlink_ext_ack *extack)
 {
        struct otx2_cpt_devlink *cpt_dl = devlink_priv(dl);
        struct otx2_cptpf_dev *cptpf = cpt_dl->cptpf;
 }
 
 static int otx2_cpt_dl_t106_mode_set(struct devlink *dl, u32 id,
-                                    struct devlink_param_gset_ctx *ctx)
+                                    struct devlink_param_gset_ctx *ctx,
+                                    struct netlink_ext_ack *extack)
 {
        struct otx2_cpt_devlink *cpt_dl = devlink_priv(dl);
        struct otx2_cptpf_dev *cptpf = cpt_dl->cptpf;
 
 int pdsc_dl_enable_get(struct devlink *dl, u32 id,
                       struct devlink_param_gset_ctx *ctx);
 int pdsc_dl_enable_set(struct devlink *dl, u32 id,
-                      struct devlink_param_gset_ctx *ctx);
+                      struct devlink_param_gset_ctx *ctx,
+                      struct netlink_ext_ack *extack);
 int pdsc_dl_enable_validate(struct devlink *dl, u32 id,
                            union devlink_param_value val,
                            struct netlink_ext_ack *extack);
 
 }
 
 int pdsc_dl_enable_set(struct devlink *dl, u32 id,
-                      struct devlink_param_gset_ctx *ctx)
+                      struct devlink_param_gset_ctx *ctx,
+                      struct netlink_ext_ack *extack)
 {
        struct pdsc *pdsc = devlink_priv(dl);
        struct pdsc_viftype *vt_entry;
 
 }
 
 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;
 }
 
 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;
 
        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;
        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;
 
 }
 
 static int rvu_af_dl_dwrr_mtu_set(struct devlink *devlink, u32 id,
-                                 struct devlink_param_gset_ctx *ctx)
+                                 struct devlink_param_gset_ctx *ctx,
+                                 struct netlink_ext_ack *extack)
 {
        struct rvu_devlink *rvu_dl = devlink_priv(devlink);
        struct rvu *rvu = rvu_dl->rvu;
 }
 
 static int rvu_af_npc_exact_feature_disable(struct devlink *devlink, u32 id,
-                                           struct devlink_param_gset_ctx *ctx)
+                                           struct devlink_param_gset_ctx *ctx,
+                                           struct netlink_ext_ack *extack)
 {
        struct rvu_devlink *rvu_dl = devlink_priv(devlink);
        struct rvu *rvu = rvu_dl->rvu;
 }
 
 static int rvu_af_dl_npc_mcam_high_zone_percent_set(struct devlink *devlink, u32 id,
-                                                   struct devlink_param_gset_ctx *ctx)
+                                                   struct devlink_param_gset_ctx *ctx,
+                                                   struct netlink_ext_ack *extack)
 {
        struct rvu_devlink *rvu_dl = devlink_priv(devlink);
        struct rvu *rvu = rvu_dl->rvu;
 }
 
 static int rvu_af_dl_nix_maxlf_set(struct devlink *devlink, u32 id,
-                                  struct devlink_param_gset_ctx *ctx)
+                                  struct devlink_param_gset_ctx *ctx,
+                                  struct netlink_ext_ack *extack)
 {
        struct rvu_devlink *rvu_dl = devlink_priv(devlink);
        struct rvu *rvu = rvu_dl->rvu;
 
 }
 
 static int otx2_dl_mcam_count_set(struct devlink *devlink, u32 id,
-                                 struct devlink_param_gset_ctx *ctx)
+                                 struct devlink_param_gset_ctx *ctx,
+                                 struct netlink_ext_ack *extack)
 {
        struct otx2_devlink *otx2_dl = devlink_priv(devlink);
        struct otx2_nic *pfvf = otx2_dl->pfvf;
 
 }
 
 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;
 }
 
 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;
 
 }
 
 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);
 
 
 }
 
 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;
 
 }
 
 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;
 
 }
 
 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;
 
 
 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;
 
 
 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);
 
 }
 
 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;
 
 }
 
 static int am65_cpsw_dl_switch_mode_set(struct devlink *dl, u32 id,
-                                       struct devlink_param_gset_ctx *ctx)
+                                       struct devlink_param_gset_ctx *ctx,
+                                       struct netlink_ext_ack *extack)
 {
        struct am65_cpsw_devlink *dl_priv = devlink_priv(dl);
        struct am65_cpsw_common *cpsw = dl_priv->common;
 
 }
 
 static int cpsw_dl_switch_mode_set(struct devlink *dl, u32 id,
-                                  struct devlink_param_gset_ctx *ctx)
+                                  struct devlink_param_gset_ctx *ctx,
+                                  struct netlink_ext_ack *extack)
 {
        struct cpsw_devlink *dl_priv = devlink_priv(dl);
        struct cpsw_common *cpsw = dl_priv->cpsw;
 }
 
 static int cpsw_dl_ale_ctrl_set(struct devlink *dl, u32 id,
-                               struct devlink_param_gset_ctx *ctx)
+                               struct devlink_param_gset_ctx *ctx,
+                               struct netlink_ext_ack *extack)
 {
        struct cpsw_devlink *dl_priv = devlink_priv(dl);
        struct cpsw_common *cpsw = dl_priv->cpsw;
 
 
 /* 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);
 
 
        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);
 
 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);
 
 
 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
                        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;
        }
 
 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);