devlink: convert flash_update to use params structure
The devlink core recently gained support for checking whether the driver supports a flash_update parameter, via `supported_flash_update_params`. However, parameters are specified as function arguments. Adding a new parameter still requires modifying the signature of the .flash_update callback in all drivers. Convert the .flash_update function to take a new `struct devlink_flash_update_params` instead. By using this structure, and the `supported_flash_update_params` bit field, a new parameter to flash_update can be added without requiring modification to existing drivers. As before, all parameters except file_name will require driver opt-in. Because file_name is a necessary field to for the flash_update to make sense, no "SUPPORTED" bitflag is provided and it is always considered valid. All future additional parameters will require a new bit in the supported_flash_update_params bitfield. Signed-off-by: Jacob Keller <jacob.e.keller@intel.com> Reviewed-by: Jakub Kicinski <kuba@kernel.org> Cc: Jiri Pirko <jiri@mellanox.com> Cc: Jakub Kicinski <kuba@kernel.org> Cc: Jonathan Corbet <corbet@lwn.net> Cc: Michael Chan <michael.chan@broadcom.com> Cc: Bin Luo <luobin9@huawei.com> Cc: Saeed Mahameed <saeedm@mellanox.com> Cc: Leon Romanovsky <leon@kernel.org> Cc: Ido Schimmel <idosch@mellanox.com> Cc: Danielle Ratson <danieller@mellanox.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
22ec3d232f
commit
bc75c054f0
@@ -3147,8 +3147,8 @@ EXPORT_SYMBOL_GPL(devlink_flash_update_timeout_notify);
|
||||
static int devlink_nl_cmd_flash_update(struct sk_buff *skb,
|
||||
struct genl_info *info)
|
||||
{
|
||||
struct devlink_flash_update_params params = {};
|
||||
struct devlink *devlink = info->user_ptr[0];
|
||||
const char *file_name, *component = NULL;
|
||||
struct nlattr *nla_component;
|
||||
u32 supported_params;
|
||||
|
||||
@@ -3160,7 +3160,7 @@ static int devlink_nl_cmd_flash_update(struct sk_buff *skb,
|
||||
|
||||
supported_params = devlink->ops->supported_flash_update_params;
|
||||
|
||||
file_name = nla_data(info->attrs[DEVLINK_ATTR_FLASH_UPDATE_FILE_NAME]);
|
||||
params.file_name = nla_data(info->attrs[DEVLINK_ATTR_FLASH_UPDATE_FILE_NAME]);
|
||||
|
||||
nla_component = info->attrs[DEVLINK_ATTR_FLASH_UPDATE_COMPONENT];
|
||||
if (nla_component) {
|
||||
@@ -3169,11 +3169,10 @@ static int devlink_nl_cmd_flash_update(struct sk_buff *skb,
|
||||
"component update is not supported by this device");
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
component = nla_data(nla_component);
|
||||
params.component = nla_data(nla_component);
|
||||
}
|
||||
|
||||
return devlink->ops->flash_update(devlink, file_name, component,
|
||||
info->extack);
|
||||
return devlink->ops->flash_update(devlink, ¶ms, info->extack);
|
||||
}
|
||||
|
||||
static const struct devlink_param devlink_param_generic[] = {
|
||||
@@ -9651,6 +9650,7 @@ out:
|
||||
|
||||
int devlink_compat_flash_update(struct net_device *dev, const char *file_name)
|
||||
{
|
||||
struct devlink_flash_update_params params = {};
|
||||
struct devlink *devlink;
|
||||
int ret;
|
||||
|
||||
@@ -9663,8 +9663,10 @@ int devlink_compat_flash_update(struct net_device *dev, const char *file_name)
|
||||
goto out;
|
||||
}
|
||||
|
||||
params.file_name = file_name;
|
||||
|
||||
mutex_lock(&devlink->lock);
|
||||
ret = devlink->ops->flash_update(devlink, file_name, NULL, NULL);
|
||||
ret = devlink->ops->flash_update(devlink, ¶ms, NULL);
|
||||
mutex_unlock(&devlink->lock);
|
||||
|
||||
out:
|
||||
|
Reference in New Issue
Block a user