mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-16 03:11:11 -04:00
devlink: Add port-level resource registration infrastructure
The current devlink resource infrastructure supports only device-level resources. Some hardware resources are associated with specific ports rather than the entire device, and today we have no way to show resource per-port. Add support for registering resources at the port level. Signed-off-by: Or Har-Toov <ohartoov@nvidia.com> Reviewed-by: Shay Drori <shayd@nvidia.com> Reviewed-by: Moshe Shemesh <moshe@nvidia.com> Reviewed-by: Jiri Pirko <jiri@nvidia.com> Signed-off-by: Tariq Toukan <tariqt@nvidia.com> Link: https://patch.msgid.link/20260407194107.148063-3-tariqt@nvidia.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
committed by
Jakub Kicinski
parent
7be3163c49
commit
6f38acfed5
@@ -129,6 +129,7 @@ struct devlink_rate {
|
||||
struct devlink_port {
|
||||
struct list_head list;
|
||||
struct list_head region_list;
|
||||
struct list_head resource_list;
|
||||
struct devlink *devlink;
|
||||
const struct devlink_port_ops *ops;
|
||||
unsigned int index;
|
||||
@@ -1891,6 +1892,13 @@ void devlink_resources_unregister(struct devlink *devlink);
|
||||
int devl_resource_size_get(struct devlink *devlink,
|
||||
u64 resource_id,
|
||||
u64 *p_resource_size);
|
||||
int
|
||||
devl_port_resource_register(struct devlink_port *devlink_port,
|
||||
const char *resource_name,
|
||||
u64 resource_size, u64 resource_id,
|
||||
u64 parent_resource_id,
|
||||
const struct devlink_resource_size_params *params);
|
||||
void devl_port_resources_unregister(struct devlink_port *devlink_port);
|
||||
int devl_dpipe_table_resource_set(struct devlink *devlink,
|
||||
const char *table_name, u64 resource_id,
|
||||
u64 resource_units);
|
||||
|
||||
@@ -1025,6 +1025,7 @@ void devlink_port_init(struct devlink *devlink,
|
||||
return;
|
||||
devlink_port->devlink = devlink;
|
||||
INIT_LIST_HEAD(&devlink_port->region_list);
|
||||
INIT_LIST_HEAD(&devlink_port->resource_list);
|
||||
devlink_port->initialized = true;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(devlink_port_init);
|
||||
@@ -1042,6 +1043,7 @@ EXPORT_SYMBOL_GPL(devlink_port_init);
|
||||
void devlink_port_fini(struct devlink_port *devlink_port)
|
||||
{
|
||||
WARN_ON(!list_empty(&devlink_port->region_list));
|
||||
WARN_ON(!list_empty(&devlink_port->resource_list));
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(devlink_port_fini);
|
||||
|
||||
|
||||
@@ -532,3 +532,46 @@ void devl_resource_occ_get_unregister(struct devlink *devlink,
|
||||
resource->occ_get_priv = NULL;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(devl_resource_occ_get_unregister);
|
||||
|
||||
/**
|
||||
* devl_port_resource_register - devlink port resource register
|
||||
*
|
||||
* @devlink_port: devlink port
|
||||
* @resource_name: resource's name
|
||||
* @resource_size: resource's size
|
||||
* @resource_id: resource's id
|
||||
* @parent_resource_id: resource's parent id
|
||||
* @params: size parameters
|
||||
*
|
||||
* Generic resources should reuse the same names across drivers.
|
||||
* Please see the generic resources list at:
|
||||
* Documentation/networking/devlink/devlink-resource.rst
|
||||
*
|
||||
* Return: 0 on success, negative error code otherwise.
|
||||
*/
|
||||
int
|
||||
devl_port_resource_register(struct devlink_port *devlink_port,
|
||||
const char *resource_name,
|
||||
u64 resource_size, u64 resource_id,
|
||||
u64 parent_resource_id,
|
||||
const struct devlink_resource_size_params *params)
|
||||
{
|
||||
return __devl_resource_register(devlink_port->devlink,
|
||||
&devlink_port->resource_list,
|
||||
resource_name, resource_size,
|
||||
resource_id, parent_resource_id,
|
||||
params);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(devl_port_resource_register);
|
||||
|
||||
/**
|
||||
* devl_port_resources_unregister - unregister all devlink port resources
|
||||
*
|
||||
* @devlink_port: devlink port
|
||||
*/
|
||||
void devl_port_resources_unregister(struct devlink_port *devlink_port)
|
||||
{
|
||||
__devl_resources_unregister(devlink_port->devlink,
|
||||
&devlink_port->resource_list);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(devl_port_resources_unregister);
|
||||
|
||||
Reference in New Issue
Block a user