Skip to content

Commit

Permalink
devlink: Add API to register and unregister single parameter
Browse files Browse the repository at this point in the history
Currently device configuration parameters can be registered as an array.
Due to this a constant array must be registered. A single driver
supporting multiple devices each with different device capabilities end
up registering all parameters even if it doesn't support it.

One possible workaround a driver can do is, it registers multiple single
entry arrays to overcome such limitation.

Better is to provide a API that enables driver to register/unregister a
single parameter. This also further helps in two ways.
(1) to reduce the memory of devlink_param_entry by avoiding in registering
parameters which are not supported by the device.
(2) avoid generating multiple parameter add, delete, publish, unpublish,
init value notifications for such unsupported parameters

Signed-off-by: Parav Pandit <parav@nvidia.com>
Reviewed-by: Jiri Pirko <jiri@nvidia.com>
Reviewed-by: Leon Romanovsky <leonro@nvidia.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Parav Pandit authored and David S. Miller committed Aug 11, 2021
1 parent 699784f commit b40c51e
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 0 deletions.
4 changes: 4 additions & 0 deletions include/net/devlink.h
Original file line number Diff line number Diff line change
Expand Up @@ -1645,6 +1645,10 @@ int devlink_params_register(struct devlink *devlink,
void devlink_params_unregister(struct devlink *devlink,
const struct devlink_param *params,
size_t params_count);
int devlink_param_register(struct devlink *devlink,
const struct devlink_param *param);
void devlink_param_unregister(struct devlink *devlink,
const struct devlink_param *param);
void devlink_params_publish(struct devlink *devlink);
void devlink_params_unpublish(struct devlink *devlink);
int devlink_port_params_register(struct devlink_port *devlink_port,
Expand Down
37 changes: 37 additions & 0 deletions net/core/devlink.c
Original file line number Diff line number Diff line change
Expand Up @@ -9903,6 +9903,43 @@ void devlink_params_unregister(struct devlink *devlink,
}
EXPORT_SYMBOL_GPL(devlink_params_unregister);

/**
* devlink_param_register - register one configuration parameter
*
* @devlink: devlink
* @param: one configuration parameter
*
* Register the configuration parameter supported by the driver.
* Return: returns 0 on successful registration or error code otherwise.
*/
int devlink_param_register(struct devlink *devlink,
const struct devlink_param *param)
{
int err;

mutex_lock(&devlink->lock);
err = __devlink_param_register_one(devlink, 0, &devlink->param_list,
param, DEVLINK_CMD_PARAM_NEW);
mutex_unlock(&devlink->lock);
return err;
}
EXPORT_SYMBOL_GPL(devlink_param_register);

/**
* devlink_param_unregister - unregister one configuration parameter
* @devlink: devlink
* @param: configuration parameter to unregister
*/
void devlink_param_unregister(struct devlink *devlink,
const struct devlink_param *param)
{
mutex_lock(&devlink->lock);
devlink_param_unregister_one(devlink, 0, &devlink->param_list, param,
DEVLINK_CMD_PARAM_DEL);
mutex_unlock(&devlink->lock);
}
EXPORT_SYMBOL_GPL(devlink_param_unregister);

/**
* devlink_params_publish - publish configuration parameters
*
Expand Down

0 comments on commit b40c51e

Please sign in to comment.