devlink: pass extack through to devlink_param::get()
Allow devlink_param::get() handlers to report error messages via extack. This function is called in a few different contexts, but not all of them will have an valid extack to use. When devlink_param::get() is called from param_get_doit or param_get_dumpit contexts, pass the extack through so that drivers can report errors when retrieving param values. devlink_param::get() is called from the context of devlink_param_notify(), pass NULL in for the extack. Reviewed-by: Saeed Mahameed <saeedm@nvidia.com> Reviewed-by: Aleksandr Loktionov <aleksandr.loktionov@intel.com> Signed-off-by: Daniel Zahka <daniel.zahka@gmail.com> Link: https://patch.msgid.link/20251119025038.651131-2-daniel.zahka@gmail.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>pull/1354/merge
parent
b8f2b678fc
commit
011d133bb9
|
|
@ -24,7 +24,8 @@ static int otx2_cpt_dl_egrp_delete(struct devlink *dl, u32 id,
|
|||
}
|
||||
|
||||
static int otx2_cpt_dl_uc_info(struct devlink *dl, u32 id,
|
||||
struct devlink_param_gset_ctx *ctx)
|
||||
struct devlink_param_gset_ctx *ctx,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
ctx->val.vstr[0] = '\0';
|
||||
|
||||
|
|
@ -32,7 +33,8 @@ static int otx2_cpt_dl_uc_info(struct devlink *dl, u32 id,
|
|||
}
|
||||
|
||||
static int otx2_cpt_dl_t106_mode_get(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;
|
||||
|
|
|
|||
|
|
@ -255,7 +255,8 @@ int pdsc_dl_flash_update(struct devlink *dl,
|
|||
struct devlink_flash_update_params *params,
|
||||
struct netlink_ext_ack *extack);
|
||||
int pdsc_dl_enable_get(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_set(struct devlink *dl, u32 id,
|
||||
struct devlink_param_gset_ctx *ctx,
|
||||
struct netlink_ext_ack *extack);
|
||||
|
|
|
|||
|
|
@ -22,7 +22,8 @@ pdsc_viftype *pdsc_dl_find_viftype_by_id(struct pdsc *pdsc,
|
|||
}
|
||||
|
||||
int pdsc_dl_enable_get(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;
|
||||
|
|
|
|||
|
|
@ -1086,7 +1086,8 @@ static int bnxt_hwrm_nvm_req(struct bnxt *bp, u32 param_id, void *msg,
|
|||
}
|
||||
|
||||
static int bnxt_dl_nvm_param_get(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_get_variable_input *req;
|
||||
|
|
@ -1168,7 +1169,8 @@ static int bnxt_dl_msix_validate(struct devlink *dl, u32 id,
|
|||
}
|
||||
|
||||
static int bnxt_remote_dev_reset_get(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);
|
||||
|
||||
|
|
|
|||
|
|
@ -24,7 +24,8 @@ static int i40e_max_mac_per_vf_set(struct devlink *devlink,
|
|||
|
||||
static int i40e_max_mac_per_vf_get(struct devlink *devlink,
|
||||
u32 id,
|
||||
struct devlink_param_gset_ctx *ctx)
|
||||
struct devlink_param_gset_ctx *ctx,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct i40e_pf *pf = devlink_priv(devlink);
|
||||
|
||||
|
|
|
|||
|
|
@ -610,11 +610,13 @@ exit_release_res:
|
|||
* @devlink: pointer to the devlink instance
|
||||
* @id: the parameter ID to set
|
||||
* @ctx: context to store the parameter value
|
||||
* @extack: netlink extended ACK structure
|
||||
*
|
||||
* Return: zero on success and negative value on failure.
|
||||
*/
|
||||
static int ice_devlink_tx_sched_layers_get(struct devlink *devlink, u32 id,
|
||||
struct devlink_param_gset_ctx *ctx)
|
||||
struct devlink_param_gset_ctx *ctx,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct ice_pf *pf = devlink_priv(devlink);
|
||||
int err;
|
||||
|
|
@ -1349,7 +1351,8 @@ static const struct devlink_ops ice_sf_devlink_ops;
|
|||
|
||||
static int
|
||||
ice_devlink_enable_roce_get(struct devlink *devlink, u32 id,
|
||||
struct devlink_param_gset_ctx *ctx)
|
||||
struct devlink_param_gset_ctx *ctx,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct ice_pf *pf = devlink_priv(devlink);
|
||||
struct iidc_rdma_core_dev_info *cdev;
|
||||
|
|
@ -1415,7 +1418,8 @@ ice_devlink_enable_roce_validate(struct devlink *devlink, u32 id,
|
|||
|
||||
static int
|
||||
ice_devlink_enable_iw_get(struct devlink *devlink, u32 id,
|
||||
struct devlink_param_gset_ctx *ctx)
|
||||
struct devlink_param_gset_ctx *ctx,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct ice_pf *pf = devlink_priv(devlink);
|
||||
struct iidc_rdma_core_dev_info *cdev;
|
||||
|
|
@ -1522,11 +1526,13 @@ static int ice_devlink_local_fwd_str_to_mode(const char *mode_str)
|
|||
* @devlink: Pointer to the devlink instance.
|
||||
* @id: The parameter ID to set.
|
||||
* @ctx: Context to store the parameter value.
|
||||
* @extack: netlink extended ACK structure
|
||||
*
|
||||
* Return: Zero.
|
||||
*/
|
||||
static int ice_devlink_local_fwd_get(struct devlink *devlink, u32 id,
|
||||
struct devlink_param_gset_ctx *ctx)
|
||||
struct devlink_param_gset_ctx *ctx,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct ice_pf *pf = devlink_priv(devlink);
|
||||
struct ice_port_info *pi;
|
||||
|
|
|
|||
|
|
@ -1233,7 +1233,8 @@ static int rvu_af_dl_dwrr_mtu_set(struct devlink *devlink, u32 id,
|
|||
}
|
||||
|
||||
static int rvu_af_dl_dwrr_mtu_get(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;
|
||||
|
|
@ -1259,7 +1260,8 @@ enum rvu_af_dl_param_id {
|
|||
};
|
||||
|
||||
static int rvu_af_npc_exact_feature_get(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;
|
||||
|
|
@ -1314,7 +1316,8 @@ static int rvu_af_npc_exact_feature_validate(struct devlink *devlink, u32 id,
|
|||
}
|
||||
|
||||
static int rvu_af_dl_npc_mcam_high_zone_percent_get(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;
|
||||
|
|
@ -1376,7 +1379,8 @@ static int rvu_af_dl_npc_mcam_high_zone_percent_validate(struct devlink *devlink
|
|||
}
|
||||
|
||||
static int rvu_af_dl_npc_def_rule_cntr_get(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;
|
||||
|
|
@ -1402,7 +1406,8 @@ static int rvu_af_dl_npc_def_rule_cntr_set(struct devlink *devlink, u32 id,
|
|||
}
|
||||
|
||||
static int rvu_af_dl_nix_maxlf_get(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;
|
||||
|
|
|
|||
|
|
@ -48,7 +48,8 @@ static int otx2_dl_mcam_count_set(struct devlink *devlink, u32 id,
|
|||
}
|
||||
|
||||
static int otx2_dl_mcam_count_get(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;
|
||||
|
|
@ -84,7 +85,8 @@ static int otx2_dl_ucast_flt_cnt_set(struct devlink *devlink, u32 id,
|
|||
}
|
||||
|
||||
static int otx2_dl_ucast_flt_cnt_get(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;
|
||||
|
|
|
|||
|
|
@ -174,7 +174,8 @@ MODULE_PARM_DESC(port_type_array, "Array of port types: HW_DEFAULT (0) is defaul
|
|||
static atomic_t pf_loading = ATOMIC_INIT(0);
|
||||
|
||||
static int mlx4_devlink_ierr_reset_get(struct devlink *devlink, u32 id,
|
||||
struct devlink_param_gset_ctx *ctx)
|
||||
struct devlink_param_gset_ctx *ctx,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
ctx->val.vbool = !!mlx4_internal_err_reset;
|
||||
return 0;
|
||||
|
|
@ -189,7 +190,8 @@ static int mlx4_devlink_ierr_reset_set(struct devlink *devlink, u32 id,
|
|||
}
|
||||
|
||||
static int mlx4_devlink_crdump_snapshot_get(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;
|
||||
|
|
|
|||
|
|
@ -1969,7 +1969,8 @@ static int mlx5_devlink_esw_multiport_set(struct devlink *devlink, u32 id,
|
|||
}
|
||||
|
||||
static int mlx5_devlink_esw_multiport_get(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);
|
||||
|
||||
|
|
|
|||
|
|
@ -2618,7 +2618,8 @@ done:
|
|||
}
|
||||
|
||||
static int esw_port_metadata_get(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);
|
||||
|
||||
|
|
|
|||
|
|
@ -3833,7 +3833,8 @@ static int mlx5_fs_mode_set(struct devlink *devlink, u32 id,
|
|||
}
|
||||
|
||||
static int mlx5_fs_mode_get(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);
|
||||
|
||||
|
|
|
|||
|
|
@ -73,7 +73,8 @@ static int mlx5_fw_reset_enable_remote_dev_reset_set(struct devlink *devlink, u3
|
|||
}
|
||||
|
||||
static int mlx5_fw_reset_enable_remote_dev_reset_get(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;
|
||||
|
|
|
|||
|
|
@ -200,7 +200,8 @@ static const char *const
|
|||
|
||||
static int
|
||||
mlx5_nv_param_devlink_cqe_compress_get(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);
|
||||
u32 mnvda[MLX5_ST_SZ_DW(mnvda_reg)] = {};
|
||||
|
|
@ -302,7 +303,8 @@ static int mlx5_nv_param_read_per_host_pf_conf(struct mlx5_core_dev *dev,
|
|||
}
|
||||
|
||||
static int mlx5_devlink_enable_sriov_get(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);
|
||||
u32 mnvda[MLX5_ST_SZ_DW(mnvda_reg)] = {};
|
||||
|
|
@ -413,7 +415,8 @@ static int mlx5_devlink_enable_sriov_set(struct devlink *devlink, u32 id,
|
|||
}
|
||||
|
||||
static int mlx5_devlink_total_vfs_get(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);
|
||||
u32 mnvda[MLX5_ST_SZ_DW(mnvda_reg)] = {};
|
||||
|
|
|
|||
|
|
@ -1489,7 +1489,8 @@ mlxsw_sp_acl_tcam_vregion_rehash(struct mlxsw_sp *mlxsw_sp,
|
|||
|
||||
static int
|
||||
mlxsw_sp_acl_tcam_region_rehash_intrvl_get(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 *tcam;
|
||||
|
|
|
|||
|
|
@ -81,7 +81,8 @@ static const struct nfp_devlink_param_u8_arg nfp_devlink_u8_args[] = {
|
|||
|
||||
static int
|
||||
nfp_devlink_param_u8_get(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);
|
||||
|
|
|
|||
|
|
@ -121,7 +121,8 @@ void qed_fw_reporters_destroy(struct devlink *devlink)
|
|||
}
|
||||
|
||||
static int qed_dl_param_get(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;
|
||||
|
|
|
|||
|
|
@ -7531,7 +7531,8 @@ static int stmmac_dl_ts_coarse_set(struct devlink *dl, u32 id,
|
|||
}
|
||||
|
||||
static int stmmac_dl_ts_coarse_get(struct devlink *dl, u32 id,
|
||||
struct devlink_param_gset_ctx *ctx)
|
||||
struct devlink_param_gset_ctx *ctx,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct stmmac_devlink_priv *dl_priv = devlink_priv(dl);
|
||||
struct stmmac_priv *priv = dl_priv->stmmac_priv;
|
||||
|
|
|
|||
|
|
@ -3068,7 +3068,8 @@ static void am65_cpsw_init_host_port_emac(struct am65_cpsw_common *common)
|
|||
}
|
||||
|
||||
static int am65_cpsw_dl_switch_mode_get(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 *common = dl_priv->common;
|
||||
|
|
|
|||
|
|
@ -1618,7 +1618,8 @@ static const struct devlink_ops cpsw_devlink_ops = {
|
|||
};
|
||||
|
||||
static int cpsw_dl_switch_mode_get(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;
|
||||
|
|
@ -1753,7 +1754,8 @@ exit:
|
|||
}
|
||||
|
||||
static int cpsw_dl_ale_ctrl_get(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;
|
||||
|
|
|
|||
|
|
@ -21,7 +21,8 @@ static struct iosm_coredump_file_info list[IOSM_NOF_CD_REGION] = {
|
|||
|
||||
/* Get the param values for the specific param ID's */
|
||||
static int ipc_devlink_get_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);
|
||||
|
||||
|
|
|
|||
|
|
@ -490,7 +490,8 @@ struct devlink_param {
|
|||
enum devlink_param_type type;
|
||||
unsigned long supported_cmodes;
|
||||
int (*get)(struct devlink *devlink, u32 id,
|
||||
struct devlink_param_gset_ctx *ctx);
|
||||
struct devlink_param_gset_ctx *ctx,
|
||||
struct netlink_ext_ack *extack);
|
||||
int (*set)(struct devlink *devlink, u32 id,
|
||||
struct devlink_param_gset_ctx *ctx,
|
||||
struct netlink_ext_ack *extack);
|
||||
|
|
|
|||
|
|
@ -1251,7 +1251,8 @@ struct dsa_switch_ops {
|
|||
dsa_devlink_param_get, dsa_devlink_param_set, NULL)
|
||||
|
||||
int dsa_devlink_param_get(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_param_set(struct devlink *dl, u32 id,
|
||||
struct devlink_param_gset_ctx *ctx,
|
||||
struct netlink_ext_ack *extack);
|
||||
|
|
|
|||
|
|
@ -174,11 +174,12 @@ devlink_param_cmode_is_supported(const struct devlink_param *param,
|
|||
|
||||
static int devlink_param_get(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->get)
|
||||
return -EOPNOTSUPP;
|
||||
return param->get(devlink, param->id, ctx);
|
||||
return param->get(devlink, param->id, ctx, extack);
|
||||
}
|
||||
|
||||
static int devlink_param_set(struct devlink *devlink,
|
||||
|
|
@ -250,7 +251,8 @@ static int devlink_nl_param_fill(struct sk_buff *msg, struct devlink *devlink,
|
|||
unsigned int port_index,
|
||||
struct devlink_param_item *param_item,
|
||||
enum devlink_command cmd,
|
||||
u32 portid, u32 seq, int flags)
|
||||
u32 portid, u32 seq, int flags,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
union devlink_param_value param_value[DEVLINK_PARAM_CMODE_MAX + 1];
|
||||
bool param_value_set[DEVLINK_PARAM_CMODE_MAX + 1] = {};
|
||||
|
|
@ -275,7 +277,7 @@ static int devlink_nl_param_fill(struct sk_buff *msg, struct devlink *devlink,
|
|||
return -EOPNOTSUPP;
|
||||
} else {
|
||||
ctx.cmode = i;
|
||||
err = devlink_param_get(devlink, param, &ctx);
|
||||
err = devlink_param_get(devlink, param, &ctx, extack);
|
||||
if (err)
|
||||
return err;
|
||||
param_value[i] = ctx.val;
|
||||
|
|
@ -357,7 +359,7 @@ static void devlink_param_notify(struct devlink *devlink,
|
|||
if (!msg)
|
||||
return;
|
||||
err = devlink_nl_param_fill(msg, devlink, port_index, param_item, cmd,
|
||||
0, 0, 0);
|
||||
0, 0, 0, NULL);
|
||||
if (err) {
|
||||
nlmsg_free(msg);
|
||||
return;
|
||||
|
|
@ -400,7 +402,8 @@ static int devlink_nl_param_get_dump_one(struct sk_buff *msg,
|
|||
err = devlink_nl_param_fill(msg, devlink, 0, param_item,
|
||||
DEVLINK_CMD_PARAM_GET,
|
||||
NETLINK_CB(cb->skb).portid,
|
||||
cb->nlh->nlmsg_seq, flags);
|
||||
cb->nlh->nlmsg_seq, flags,
|
||||
cb->extack);
|
||||
if (err == -EOPNOTSUPP) {
|
||||
err = 0;
|
||||
} else if (err) {
|
||||
|
|
@ -509,8 +512,8 @@ int devlink_nl_param_get_doit(struct sk_buff *skb,
|
|||
return -ENOMEM;
|
||||
|
||||
err = devlink_nl_param_fill(msg, devlink, 0, param_item,
|
||||
DEVLINK_CMD_PARAM_GET,
|
||||
info->snd_portid, info->snd_seq, 0);
|
||||
DEVLINK_CMD_PARAM_GET, info->snd_portid,
|
||||
info->snd_seq, 0, info->extack);
|
||||
if (err) {
|
||||
nlmsg_free(msg);
|
||||
return err;
|
||||
|
|
|
|||
|
|
@ -182,7 +182,8 @@ static const struct devlink_ops dsa_devlink_ops = {
|
|||
};
|
||||
|
||||
int dsa_devlink_param_get(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);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue