Skip to content

Commit 56dc7cd

Browse files
Arkadi Sharshevskydavem330
authored andcommitted
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 <[email protected]> Signed-off-by: Jiri Pirko <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent 2d8dc5b commit 56dc7cd

File tree

3 files changed

+56
-0
lines changed

3 files changed

+56
-0
lines changed

include/net/devlink.h

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,9 @@ struct devlink_dpipe_table_ops;
183183
* @counters_enabled: indicates if counters are active
184184
* @counter_control_extern: indicates if counter control is in dpipe or
185185
* external tool
186+
* @resource_valid: Indicate that the resource id is valid
187+
* @resource_id: relative resource this table is related to
188+
* @resource_units: number of resource's unit consumed per table's entry
186189
* @table_ops: table operations
187190
* @rcu: rcu
188191
*/
@@ -192,6 +195,9 @@ struct devlink_dpipe_table {
192195
const char *name;
193196
bool counters_enabled;
194197
bool counter_control_extern;
198+
bool resource_valid;
199+
u64 resource_id;
200+
u64 resource_units;
195201
struct devlink_dpipe_table_ops *table_ops;
196202
struct rcu_head rcu;
197203
};
@@ -403,6 +409,9 @@ void devlink_resources_unregister(struct devlink *devlink,
403409
int devlink_resource_size_get(struct devlink *devlink,
404410
u64 resource_id,
405411
u64 *p_resource_size);
412+
int devlink_dpipe_table_resource_set(struct devlink *devlink,
413+
const char *table_name, u64 resource_id,
414+
u64 resource_units);
406415

407416
#else
408417

@@ -566,6 +575,14 @@ devlink_resource_size_get(struct devlink *devlink, u64 resource_id,
566575
return -EOPNOTSUPP;
567576
}
568577

578+
static inline int
579+
devlink_dpipe_table_resource_set(struct devlink *devlink,
580+
const char *table_name, u64 resource_id,
581+
u64 resource_units)
582+
{
583+
return -EOPNOTSUPP;
584+
}
585+
569586
#endif
570587

571588
#endif /* _NET_DEVLINK_H_ */

include/uapi/linux/devlink.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,8 @@ enum devlink_attr {
221221
DEVLINK_ATTR_RESOURCE_SIZE_GRAN, /* u64 */
222222
DEVLINK_ATTR_RESOURCE_UNIT, /* u8 */
223223
DEVLINK_ATTR_RESOURCE_OCC, /* u64 */
224+
DEVLINK_ATTR_DPIPE_TABLE_RESOURCE_ID, /* u64 */
225+
DEVLINK_ATTR_DPIPE_TABLE_RESOURCE_UNITS,/* u64 */
224226

225227
/* add new attributes above here, update the policy in devlink.c */
226228

net/core/devlink.c

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1694,6 +1694,12 @@ static int devlink_dpipe_table_put(struct sk_buff *skb,
16941694
table->counters_enabled))
16951695
goto nla_put_failure;
16961696

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+
}
16971703
if (devlink_dpipe_matches_put(table, skb))
16981704
goto nla_put_failure;
16991705

@@ -3254,6 +3260,37 @@ int devlink_resource_size_get(struct devlink *devlink,
32543260
}
32553261
EXPORT_SYMBOL_GPL(devlink_resource_size_get);
32563262

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+
*/
3271+
int 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;
3288+
out:
3289+
mutex_unlock(&devlink->lock);
3290+
return err;
3291+
}
3292+
EXPORT_SYMBOL_GPL(devlink_dpipe_table_resource_set);
3293+
32573294
static int __init devlink_module_init(void)
32583295
{
32593296
return genl_register_family(&devlink_nl_family);

0 commit comments

Comments
 (0)