aboutsummaryrefslogtreecommitdiffstats
path: root/net/core/devlink.c
diff options
context:
space:
mode:
authorArkadi Sharshevsky <arkadis@mellanox.com>2018-01-15 02:59:05 -0500
committerDavid S. Miller <davem@davemloft.net>2018-01-16 14:15:34 -0500
commit56dc7cd0a87a1ff4f49ee1e67bd88e768385d51a (patch)
tree2140397e0976eeadf51f9881ca456e852e081ad7 /net/core/devlink.c
parent2d8dc5bbf4e7603747875eb5cadcd67c1fa8b1bb (diff)
devlink: Add relation between dpipe and resource
The hardware processes which are modeled via dpipe commonly use some internal hardware resources. Such relation can improve the understanding of hardware limitations. The number of resource's unit consumed per table's entry are also provided for each table. Signed-off-by: Arkadi Sharshevsky <arkadis@mellanox.com> Signed-off-by: Jiri Pirko <jiri@mellanox.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/core/devlink.c')
-rw-r--r--net/core/devlink.c37
1 files changed, 37 insertions, 0 deletions
diff --git a/net/core/devlink.c b/net/core/devlink.c
index 4c3d85560436..dd7d6dd07bfb 100644
--- a/net/core/devlink.c
+++ b/net/core/devlink.c
@@ -1694,6 +1694,12 @@ static int devlink_dpipe_table_put(struct sk_buff *skb,
1694 table->counters_enabled)) 1694 table->counters_enabled))
1695 goto nla_put_failure; 1695 goto nla_put_failure;
1696 1696
1697 if (table->resource_valid) {
1698 nla_put_u64_64bit(skb, DEVLINK_ATTR_DPIPE_TABLE_RESOURCE_ID,
1699 table->resource_id, DEVLINK_ATTR_PAD);
1700 nla_put_u64_64bit(skb, DEVLINK_ATTR_DPIPE_TABLE_RESOURCE_UNITS,
1701 table->resource_units, DEVLINK_ATTR_PAD);
1702 }
1697 if (devlink_dpipe_matches_put(table, skb)) 1703 if (devlink_dpipe_matches_put(table, skb))
1698 goto nla_put_failure; 1704 goto nla_put_failure;
1699 1705
@@ -3254,6 +3260,37 @@ out:
3254} 3260}
3255EXPORT_SYMBOL_GPL(devlink_resource_size_get); 3261EXPORT_SYMBOL_GPL(devlink_resource_size_get);
3256 3262
3263/**
3264 * devlink_dpipe_table_resource_set - set the resource id
3265 *
3266 * @devlink: devlink
3267 * @table_name: table name
3268 * @resource_id: resource id
3269 * @resource_units: number of resource's units consumed per table's entry
3270 */
3271int devlink_dpipe_table_resource_set(struct devlink *devlink,
3272 const char *table_name, u64 resource_id,
3273 u64 resource_units)
3274{
3275 struct devlink_dpipe_table *table;
3276 int err = 0;
3277
3278 mutex_lock(&devlink->lock);
3279 table = devlink_dpipe_table_find(&devlink->dpipe_table_list,
3280 table_name);
3281 if (!table) {
3282 err = -EINVAL;
3283 goto out;
3284 }
3285 table->resource_id = resource_id;
3286 table->resource_units = resource_units;
3287 table->resource_valid = true;
3288out:
3289 mutex_unlock(&devlink->lock);
3290 return err;
3291}
3292EXPORT_SYMBOL_GPL(devlink_dpipe_table_resource_set);
3293
3257static int __init devlink_module_init(void) 3294static int __init devlink_module_init(void)
3258{ 3295{
3259 return genl_register_family(&devlink_nl_family); 3296 return genl_register_family(&devlink_nl_family);