* [PATCH net-next V3 00/10] devlink: add per-port resource support
@ 2026-02-26 22:19 Tariq Toukan
2026-02-26 22:19 ` [PATCH net-next V3 01/10] devlink: Add dump support for device-level resources Tariq Toukan
` (10 more replies)
0 siblings, 11 replies; 29+ messages in thread
From: Tariq Toukan @ 2026-02-26 22:19 UTC (permalink / raw)
To: Eric Dumazet, Jakub Kicinski, Paolo Abeni, Andrew Lunn,
David S. Miller
Cc: Donald Hunter, Jiri Pirko, Jonathan Corbet, Saeed Mahameed,
Leon Romanovsky, Tariq Toukan, Mark Bloch, Shuah Khan, netdev,
linux-kernel, linux-doc, linux-rdma, linux-kselftest,
Gal Pressman, Dragos Tatulea, Shay Drory, Jiri Pirko,
Moshe Shemesh
Hi,
This series adds devlink per-port resource support.
See detailed description by Or below [1].
Regards,
Tariq
[1]
Currently, devlink resources are only available at the device level.
However, some resources are inherently per-port, such as the maximum
number of subfunctions (SFs) that can be created on a specific PF port.
This limitation prevents user space from obtaining accurate per-port
capacity information.
This series adds infrastructure for per-port resources in devlink core
and implements it in the mlx5 driver to expose the max_SFs resource
on PF devlink ports.
Patch #1 adds dump support for device-level resources
Patch #2 adds selftest for resource dump
Patch #3 adds dump to resource documentation
Patch #4 refactors resource functions to be generic
Patch #5 adds port-level resource registration infrastructure
Patch #6 adds port resource netlink command
Patch #7 registers SF resource on PF port representor in mlx5
Patch #8 adds devlink port resource registration to netdevsim for testing
Patch #9 adds selftest for devlink port resources
Patch #10 documents port-level resources
With this series, users can query per-port resources:
$ devlink port resource show pci/0000:03:00.0/196608
pci/0000:03:00.0/196608:
name max_SFs size 20 unit entry
$ devlink port resource show
pci/0000:03:00.0/196608:
name max_SFs size 20 unit entry
pci/0000:03:00.1/262144:
name max_SFs size 20 unit entry
Userspace patches for iproute2:
https://github.com/ohartoov/iproute2/tree/port_resource
V3:
- Add dump command for device-level resources.
- Fix selftest to expect the "test_resource" registered by netdevsim
instead of max_SFs.
- Use a single netlink fill function for both device-level and
port-level resources.
- Fix documentation to refer to the GET command (kernel/netlink
perspective) instead of show.
- Link to V2: https://lore.kernel.org/all/20260205142833.1727929-1-tariqt@nvidia.com/
Or Har-Toov (10):
devlink: Add dump support for device-level resources
selftest: netdevsim: Add resource dump test
devlink: Add dump to resource documentation
devlink: Refactor resource functions to be generic
devlink: Add port-level resource registration infrastructure
devlink: Add port resource netlink command
net/mlx5: Register SF resource on PF port representor
netdevsim: Add devlink port resource registration
selftest: netdevsim: Add devlink port resource test
devlink: Document port-level resources
Documentation/netlink/specs/devlink.yaml | 29 +-
.../networking/devlink/devlink-resource.rst | 60 ++-
.../net/ethernet/mellanox/mlx5/core/devlink.h | 4 +
.../mellanox/mlx5/core/esw/devlink_port.c | 37 ++
drivers/net/netdevsim/dev.c | 23 +-
drivers/net/netdevsim/netdevsim.h | 4 +
include/net/devlink.h | 10 +-
include/uapi/linux/devlink.h | 3 +
net/devlink/devl_internal.h | 4 +
net/devlink/netlink.c | 2 +-
net/devlink/netlink_gen.c | 49 ++-
net/devlink/netlink_gen.h | 8 +-
net/devlink/port.c | 3 +
net/devlink/resource.c | 366 +++++++++++++++---
.../drivers/net/netdevsim/devlink.sh | 53 ++-
15 files changed, 581 insertions(+), 74 deletions(-)
base-commit: 90fcb0f3bc5ab67773b35030af68ed8c6bd83e1c
--
2.44.0
^ permalink raw reply [flat|nested] 29+ messages in thread
* [PATCH net-next V3 01/10] devlink: Add dump support for device-level resources
2026-02-26 22:19 [PATCH net-next V3 00/10] devlink: add per-port resource support Tariq Toukan
@ 2026-02-26 22:19 ` Tariq Toukan
2026-02-26 22:19 ` [PATCH net-next V3 02/10] selftest: netdevsim: Add resource dump test Tariq Toukan
` (9 subsequent siblings)
10 siblings, 0 replies; 29+ messages in thread
From: Tariq Toukan @ 2026-02-26 22:19 UTC (permalink / raw)
To: Eric Dumazet, Jakub Kicinski, Paolo Abeni, Andrew Lunn,
David S. Miller
Cc: Donald Hunter, Jiri Pirko, Jonathan Corbet, Saeed Mahameed,
Leon Romanovsky, Tariq Toukan, Mark Bloch, Shuah Khan, netdev,
linux-kernel, linux-doc, linux-rdma, linux-kselftest,
Gal Pressman, Dragos Tatulea, Shay Drory, Jiri Pirko,
Moshe Shemesh, Or Har-Toov
From: Or Har-Toov <ohartoov@nvidia.com>
Add dumpit handler for resource-dump command to iterate over all devlink
devices and show their resources. This aligns the device-level resource
command with the port-level resource command that will be added in next
patches.
$ devlink resource show
pci/0000:08:00.0:
name local_max_SFs size 508 unit entry
name external_max_SFs size 508 unit entry
pci/0000:08:00.1:
name local_max_SFs size 508 unit entry
name external_max_SFs size 508 unit entry
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>
---
Documentation/netlink/specs/devlink.yaml | 6 +-
net/devlink/netlink_gen.c | 19 ++++-
net/devlink/netlink_gen.h | 4 +-
net/devlink/resource.c | 99 ++++++++++++++++++++----
4 files changed, 109 insertions(+), 19 deletions(-)
diff --git a/Documentation/netlink/specs/devlink.yaml b/Documentation/netlink/specs/devlink.yaml
index 837112da6738..ee679ac14261 100644
--- a/Documentation/netlink/specs/devlink.yaml
+++ b/Documentation/netlink/specs/devlink.yaml
@@ -1733,12 +1733,16 @@ operations:
attributes:
- bus-name
- dev-name
- reply:
+ reply: &resource-dump-reply
value: 36
attributes:
- bus-name
- dev-name
- resource-list
+ dump:
+ request:
+ attributes: *dev-id-attrs
+ reply: *resource-dump-reply
-
name: reload
diff --git a/net/devlink/netlink_gen.c b/net/devlink/netlink_gen.c
index f4c61c2b4f22..d6667a3f87a0 100644
--- a/net/devlink/netlink_gen.c
+++ b/net/devlink/netlink_gen.c
@@ -272,7 +272,13 @@ static const struct nla_policy devlink_resource_set_nl_policy[DEVLINK_ATTR_RESOU
};
/* DEVLINK_CMD_RESOURCE_DUMP - do */
-static const struct nla_policy devlink_resource_dump_nl_policy[DEVLINK_ATTR_DEV_NAME + 1] = {
+static const struct nla_policy devlink_resource_dump_do_nl_policy[DEVLINK_ATTR_DEV_NAME + 1] = {
+ [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
+ [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
+};
+
+/* DEVLINK_CMD_RESOURCE_DUMP - dump */
+static const struct nla_policy devlink_resource_dump_dump_nl_policy[DEVLINK_ATTR_DEV_NAME + 1] = {
[DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
[DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
};
@@ -605,7 +611,7 @@ static const struct nla_policy devlink_notify_filter_set_nl_policy[DEVLINK_ATTR_
};
/* Ops table for devlink */
-const struct genl_split_ops devlink_nl_ops[74] = {
+const struct genl_split_ops devlink_nl_ops[75] = {
{
.cmd = DEVLINK_CMD_GET,
.validate = GENL_DONT_VALIDATE_STRICT,
@@ -883,10 +889,17 @@ const struct genl_split_ops devlink_nl_ops[74] = {
.pre_doit = devlink_nl_pre_doit,
.doit = devlink_nl_resource_dump_doit,
.post_doit = devlink_nl_post_doit,
- .policy = devlink_resource_dump_nl_policy,
+ .policy = devlink_resource_dump_do_nl_policy,
.maxattr = DEVLINK_ATTR_DEV_NAME,
.flags = GENL_CMD_CAP_DO,
},
+ {
+ .cmd = DEVLINK_CMD_RESOURCE_DUMP,
+ .dumpit = devlink_nl_resource_dump_dumpit,
+ .policy = devlink_resource_dump_dump_nl_policy,
+ .maxattr = DEVLINK_ATTR_DEV_NAME,
+ .flags = GENL_CMD_CAP_DUMP,
+ },
{
.cmd = DEVLINK_CMD_RELOAD,
.validate = GENL_DONT_VALIDATE_STRICT,
diff --git a/net/devlink/netlink_gen.h b/net/devlink/netlink_gen.h
index 2817d53a0eba..d79f6a0888f6 100644
--- a/net/devlink/netlink_gen.h
+++ b/net/devlink/netlink_gen.h
@@ -18,7 +18,7 @@ extern const struct nla_policy devlink_dl_rate_tc_bws_nl_policy[DEVLINK_RATE_TC_
extern const struct nla_policy devlink_dl_selftest_id_nl_policy[DEVLINK_ATTR_SELFTEST_ID_FLASH + 1];
/* Ops table for devlink */
-extern const struct genl_split_ops devlink_nl_ops[74];
+extern const struct genl_split_ops devlink_nl_ops[75];
int devlink_nl_pre_doit(const struct genl_split_ops *ops, struct sk_buff *skb,
struct genl_info *info);
@@ -80,6 +80,8 @@ int devlink_nl_dpipe_table_counters_set_doit(struct sk_buff *skb,
struct genl_info *info);
int devlink_nl_resource_set_doit(struct sk_buff *skb, struct genl_info *info);
int devlink_nl_resource_dump_doit(struct sk_buff *skb, struct genl_info *info);
+int devlink_nl_resource_dump_dumpit(struct sk_buff *skb,
+ struct netlink_callback *cb);
int devlink_nl_reload_doit(struct sk_buff *skb, struct genl_info *info);
int devlink_nl_param_get_doit(struct sk_buff *skb, struct genl_info *info);
int devlink_nl_param_get_dumpit(struct sk_buff *skb,
diff --git a/net/devlink/resource.c b/net/devlink/resource.c
index 2d6324f3d91f..5131875482ec 100644
--- a/net/devlink/resource.c
+++ b/net/devlink/resource.c
@@ -213,21 +213,43 @@ static int devlink_resource_put(struct devlink *devlink, struct sk_buff *skb,
return -EMSGSIZE;
}
+static int devlink_resource_list_fill(struct sk_buff *skb,
+ struct devlink *devlink,
+ int *idx)
+{
+ struct devlink_resource *resource;
+ int i = 0;
+ int err;
+
+ list_for_each_entry(resource, &devlink->resource_list, list) {
+ if (i < *idx) {
+ i++;
+ continue;
+ }
+ err = devlink_resource_put(devlink, skb, resource);
+ if (err) {
+ *idx = i;
+ return err;
+ }
+ i++;
+ }
+ *idx = 0;
+ return 0;
+}
+
static int devlink_resource_fill(struct genl_info *info,
enum devlink_command cmd, int flags)
{
struct devlink *devlink = info->user_ptr[0];
- struct devlink_resource *resource;
struct nlattr *resources_attr;
struct sk_buff *skb = NULL;
struct nlmsghdr *nlh;
bool incomplete;
+ int start_idx;
void *hdr;
- int i;
+ int i = 0;
int err;
- resource = list_first_entry(&devlink->resource_list,
- struct devlink_resource, list);
start_again:
err = devlink_nl_msg_reply_and_new(&skb, info);
if (err)
@@ -249,16 +271,12 @@ static int devlink_resource_fill(struct genl_info *info,
goto nla_put_failure;
incomplete = false;
- i = 0;
- list_for_each_entry_from(resource, &devlink->resource_list, list) {
- err = devlink_resource_put(devlink, skb, resource);
- if (err) {
- if (!i)
- goto err_resource_put;
- incomplete = true;
- break;
- }
- i++;
+ start_idx = i;
+ err = devlink_resource_list_fill(skb, devlink, &i);
+ if (err) {
+ if (i == start_idx)
+ goto err_resource_put;
+ incomplete = true;
}
nla_nest_end(skb, resources_attr);
genlmsg_end(skb, hdr);
@@ -292,6 +310,59 @@ int devlink_nl_resource_dump_doit(struct sk_buff *skb, struct genl_info *info)
return devlink_resource_fill(info, DEVLINK_CMD_RESOURCE_DUMP, 0);
}
+static int
+devlink_nl_resource_dump_one(struct sk_buff *skb, struct devlink *devlink,
+ struct netlink_callback *cb, int flags)
+{
+ struct devlink_nl_dump_state *state = devlink_dump_state(cb);
+ struct nlattr *resources_attr;
+ int start_idx = state->idx;
+ void *hdr;
+ int err;
+
+ if (list_empty(&devlink->resource_list))
+ return 0;
+
+ hdr = genlmsg_put(skb, NETLINK_CB(cb->skb).portid, cb->nlh->nlmsg_seq,
+ &devlink_nl_family, flags, DEVLINK_CMD_RESOURCE_DUMP);
+ if (!hdr)
+ return -EMSGSIZE;
+
+ err = devlink_nl_put_handle(skb, devlink);
+ if (err)
+ goto nla_put_failure;
+
+ resources_attr = nla_nest_start_noflag(skb, DEVLINK_ATTR_RESOURCE_LIST);
+ if (!resources_attr) {
+ err = -EMSGSIZE;
+ goto nla_put_failure;
+ }
+
+ err = devlink_resource_list_fill(skb, devlink, &state->idx);
+ if (err) {
+ if (state->idx == start_idx)
+ goto nla_put_failure_unwind;
+ nla_nest_end(skb, resources_attr);
+ genlmsg_end(skb, hdr);
+ return err;
+ }
+ nla_nest_end(skb, resources_attr);
+ genlmsg_end(skb, hdr);
+ return 0;
+
+nla_put_failure_unwind:
+ nla_nest_cancel(skb, resources_attr);
+nla_put_failure:
+ genlmsg_cancel(skb, hdr);
+ return err;
+}
+
+int devlink_nl_resource_dump_dumpit(struct sk_buff *skb,
+ struct netlink_callback *cb)
+{
+ return devlink_nl_dumpit(skb, cb, devlink_nl_resource_dump_one);
+}
+
int devlink_resources_validate(struct devlink *devlink,
struct devlink_resource *resource,
struct genl_info *info)
--
2.44.0
^ permalink raw reply related [flat|nested] 29+ messages in thread
* [PATCH net-next V3 02/10] selftest: netdevsim: Add resource dump test
2026-02-26 22:19 [PATCH net-next V3 00/10] devlink: add per-port resource support Tariq Toukan
2026-02-26 22:19 ` [PATCH net-next V3 01/10] devlink: Add dump support for device-level resources Tariq Toukan
@ 2026-02-26 22:19 ` Tariq Toukan
2026-02-26 22:19 ` [PATCH net-next V3 03/10] devlink: Add dump to resource documentation Tariq Toukan
` (8 subsequent siblings)
10 siblings, 0 replies; 29+ messages in thread
From: Tariq Toukan @ 2026-02-26 22:19 UTC (permalink / raw)
To: Eric Dumazet, Jakub Kicinski, Paolo Abeni, Andrew Lunn,
David S. Miller
Cc: Donald Hunter, Jiri Pirko, Jonathan Corbet, Saeed Mahameed,
Leon Romanovsky, Tariq Toukan, Mark Bloch, Shuah Khan, netdev,
linux-kernel, linux-doc, linux-rdma, linux-kselftest,
Gal Pressman, Dragos Tatulea, Shay Drory, Jiri Pirko,
Moshe Shemesh, Or Har-Toov
From: Or Har-Toov <ohartoov@nvidia.com>
Add test for devlink resource dump command which verifies dumping
resources for all devices.
Signed-off-by: Or Har-Toov <ohartoov@nvidia.com>
Reviewed-by: Moshe Shemesh <moshe@nvidia.com>
Reviewed-by: Jiri Pirko <jiri@nvidia.com>
Signed-off-by: Tariq Toukan <tariqt@nvidia.com>
---
.../selftests/drivers/net/netdevsim/devlink.sh | 17 ++++++++++++++++-
1 file changed, 16 insertions(+), 1 deletion(-)
diff --git a/tools/testing/selftests/drivers/net/netdevsim/devlink.sh b/tools/testing/selftests/drivers/net/netdevsim/devlink.sh
index 1b529ccaf050..9efd20d0241c 100755
--- a/tools/testing/selftests/drivers/net/netdevsim/devlink.sh
+++ b/tools/testing/selftests/drivers/net/netdevsim/devlink.sh
@@ -5,7 +5,7 @@ lib_dir=$(dirname $0)/../../../net/forwarding
ALL_TESTS="fw_flash_test params_test \
params_default_test regions_test reload_test \
- netns_reload_test resource_test dev_info_test \
+ netns_reload_test resource_test resource_dump_test dev_info_test \
empty_reporter_test dummy_reporter_test rate_test"
NUM_NETIFS=0
source $lib_dir/lib.sh
@@ -482,6 +482,21 @@ resource_test()
log_test "resource test"
}
+resource_dump_test()
+{
+ RET=0
+
+ if ! devlink resource show > /dev/null 2>&1; then
+ echo "SKIP: devlink resource dump not supported"
+ return
+ fi
+
+ devlink resource show > /dev/null 2>&1
+ check_err $? "Failed to dump all resources"
+
+ log_test "resource dump test"
+}
+
info_get()
{
local name=$1
--
2.44.0
^ permalink raw reply related [flat|nested] 29+ messages in thread
* [PATCH net-next V3 03/10] devlink: Add dump to resource documentation
2026-02-26 22:19 [PATCH net-next V3 00/10] devlink: add per-port resource support Tariq Toukan
2026-02-26 22:19 ` [PATCH net-next V3 01/10] devlink: Add dump support for device-level resources Tariq Toukan
2026-02-26 22:19 ` [PATCH net-next V3 02/10] selftest: netdevsim: Add resource dump test Tariq Toukan
@ 2026-02-26 22:19 ` Tariq Toukan
2026-02-26 22:19 ` [PATCH net-next V3 04/10] devlink: Refactor resource functions to be generic Tariq Toukan
` (7 subsequent siblings)
10 siblings, 0 replies; 29+ messages in thread
From: Tariq Toukan @ 2026-02-26 22:19 UTC (permalink / raw)
To: Eric Dumazet, Jakub Kicinski, Paolo Abeni, Andrew Lunn,
David S. Miller
Cc: Donald Hunter, Jiri Pirko, Jonathan Corbet, Saeed Mahameed,
Leon Romanovsky, Tariq Toukan, Mark Bloch, Shuah Khan, netdev,
linux-kernel, linux-doc, linux-rdma, linux-kselftest,
Gal Pressman, Dragos Tatulea, Shay Drory, Jiri Pirko,
Moshe Shemesh, Or Har-Toov
From: Or Har-Toov <ohartoov@nvidia.com>
Add dump documentation for resource command.
Resource dump command allow viewing resources
for all devices as a list.
Signed-off-by: Or Har-Toov <ohartoov@nvidia.com>
Reviewed-by: Moshe Shemesh <moshe@nvidia.com>
Reviewed-by: Jiri Pirko <jiri@nvidia.com>
Signed-off-by: Tariq Toukan <tariqt@nvidia.com>
---
.../networking/devlink/devlink-resource.rst | 24 +++++++++++++++++--
1 file changed, 22 insertions(+), 2 deletions(-)
diff --git a/Documentation/networking/devlink/devlink-resource.rst b/Documentation/networking/devlink/devlink-resource.rst
index 3d5ae51e65a2..b4203c498bf2 100644
--- a/Documentation/networking/devlink/devlink-resource.rst
+++ b/Documentation/networking/devlink/devlink-resource.rst
@@ -40,11 +40,31 @@ device drivers and their description must be added to the following table:
example usage
-------------
-The resources exposed by the driver can be observed, for example:
+The resources exposed by the driver can be observed.
+
+To list resources for all devlink devices that have resources registered:
.. code:: shell
- $devlink resource show pci/0000:03:00.0
+ $ devlink resource show
+ pci/0000:03:00.0:
+ name kvd size 245760 unit entry
+ resources:
+ name linear size 98304 occ 0 unit entry size_min 0 size_max 147456 size_gran 128
+ name hash_double size 60416 unit entry size_min 32768 size_max 180224 size_gran 128
+ name hash_single size 87040 unit entry size_min 65536 size_max 212992 size_gran 128
+ pci/0000:04:00.0:
+ name kvd size 245760 unit entry
+ resources:
+ name linear size 98304 occ 0 unit entry size_min 0 size_max 147456 size_gran 128
+ name hash_double size 60416 unit entry size_min 32768 size_max 180224 size_gran 128
+ name hash_single size 87040 unit entry size_min 65536 size_max 212992 size_gran 128
+
+To show resources for a specific device:
+
+.. code:: shell
+
+ $ devlink resource show pci/0000:03:00.0
pci/0000:03:00.0:
name kvd size 245760 unit entry
resources:
--
2.44.0
^ permalink raw reply related [flat|nested] 29+ messages in thread
* [PATCH net-next V3 04/10] devlink: Refactor resource functions to be generic
2026-02-26 22:19 [PATCH net-next V3 00/10] devlink: add per-port resource support Tariq Toukan
` (2 preceding siblings ...)
2026-02-26 22:19 ` [PATCH net-next V3 03/10] devlink: Add dump to resource documentation Tariq Toukan
@ 2026-02-26 22:19 ` Tariq Toukan
2026-02-26 22:19 ` [PATCH net-next V3 05/10] devlink: Add port-level resource registration infrastructure Tariq Toukan
` (6 subsequent siblings)
10 siblings, 0 replies; 29+ messages in thread
From: Tariq Toukan @ 2026-02-26 22:19 UTC (permalink / raw)
To: Eric Dumazet, Jakub Kicinski, Paolo Abeni, Andrew Lunn,
David S. Miller
Cc: Donald Hunter, Jiri Pirko, Jonathan Corbet, Saeed Mahameed,
Leon Romanovsky, Tariq Toukan, Mark Bloch, Shuah Khan, netdev,
linux-kernel, linux-doc, linux-rdma, linux-kselftest,
Gal Pressman, Dragos Tatulea, Shay Drory, Jiri Pirko,
Moshe Shemesh, Or Har-Toov
From: Or Har-Toov <ohartoov@nvidia.com>
Currently the resource functions take devlink pointer as parameter
and take the resource list from there.
Allow resource functions to work with other resource lists that will
be added in next patches and not only with the devlink's resource list.
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>
---
include/net/devlink.h | 2 +-
net/devlink/resource.c | 140 ++++++++++++++++++++++++++---------------
2 files changed, 91 insertions(+), 51 deletions(-)
diff --git a/include/net/devlink.h b/include/net/devlink.h
index cb839e0435a1..48e1ad067836 100644
--- a/include/net/devlink.h
+++ b/include/net/devlink.h
@@ -1875,7 +1875,7 @@ int devl_resource_register(struct devlink *devlink,
u64 resource_size,
u64 resource_id,
u64 parent_resource_id,
- const struct devlink_resource_size_params *size_params);
+ const struct devlink_resource_size_params *params);
void devl_resources_unregister(struct devlink *devlink);
void devlink_resources_unregister(struct devlink *devlink);
int devl_resource_size_get(struct devlink *devlink,
diff --git a/net/devlink/resource.c b/net/devlink/resource.c
index 5131875482ec..10043ad26dfd 100644
--- a/net/devlink/resource.c
+++ b/net/devlink/resource.c
@@ -36,15 +36,16 @@ struct devlink_resource {
};
static struct devlink_resource *
-devlink_resource_find(struct devlink *devlink,
- struct devlink_resource *resource, u64 resource_id)
+__devlink_resource_find(struct list_head *resource_list_head,
+ struct devlink_resource *resource,
+ u64 resource_id)
{
struct list_head *resource_list;
if (resource)
resource_list = &resource->resource_list;
else
- resource_list = &devlink->resource_list;
+ resource_list = resource_list_head;
list_for_each_entry(resource, resource_list, list) {
struct devlink_resource *child_resource;
@@ -52,14 +53,23 @@ devlink_resource_find(struct devlink *devlink,
if (resource->id == resource_id)
return resource;
- child_resource = devlink_resource_find(devlink, resource,
- resource_id);
+ child_resource = __devlink_resource_find(resource_list_head,
+ resource,
+ resource_id);
if (child_resource)
return child_resource;
}
return NULL;
}
+static struct devlink_resource *
+devlink_resource_find(struct devlink *devlink,
+ struct devlink_resource *resource, u64 resource_id)
+{
+ return __devlink_resource_find(&devlink->resource_list,
+ resource, resource_id);
+}
+
static void
devlink_resource_validate_children(struct devlink_resource *resource)
{
@@ -215,13 +225,14 @@ static int devlink_resource_put(struct devlink *devlink, struct sk_buff *skb,
static int devlink_resource_list_fill(struct sk_buff *skb,
struct devlink *devlink,
+ struct list_head *resource_list_head,
int *idx)
{
struct devlink_resource *resource;
int i = 0;
int err;
- list_for_each_entry(resource, &devlink->resource_list, list) {
+ list_for_each_entry(resource, resource_list_head, list) {
if (i < *idx) {
i++;
continue;
@@ -237,8 +248,9 @@ static int devlink_resource_list_fill(struct sk_buff *skb,
return 0;
}
-static int devlink_resource_fill(struct genl_info *info,
- enum devlink_command cmd, int flags)
+static int __devlink_resource_fill(struct genl_info *info,
+ struct list_head *resource_list_head,
+ enum devlink_command cmd, int flags)
{
struct devlink *devlink = info->user_ptr[0];
struct nlattr *resources_attr;
@@ -250,6 +262,9 @@ static int devlink_resource_fill(struct genl_info *info,
int i = 0;
int err;
+ if (list_empty(resource_list_head))
+ return -EOPNOTSUPP;
+
start_again:
err = devlink_nl_msg_reply_and_new(&skb, info);
if (err)
@@ -272,7 +287,7 @@ static int devlink_resource_fill(struct genl_info *info,
incomplete = false;
start_idx = i;
- err = devlink_resource_list_fill(skb, devlink, &i);
+ err = devlink_resource_list_fill(skb, devlink, resource_list_head, &i);
if (err) {
if (i == start_idx)
goto err_resource_put;
@@ -300,13 +315,17 @@ static int devlink_resource_fill(struct genl_info *info,
return err;
}
-int devlink_nl_resource_dump_doit(struct sk_buff *skb, struct genl_info *info)
+static int devlink_resource_fill(struct genl_info *info,
+ enum devlink_command cmd, int flags)
{
struct devlink *devlink = info->user_ptr[0];
- if (list_empty(&devlink->resource_list))
- return -EOPNOTSUPP;
+ return __devlink_resource_fill(info, &devlink->resource_list,
+ cmd, flags);
+}
+int devlink_nl_resource_dump_doit(struct sk_buff *skb, struct genl_info *info)
+{
return devlink_resource_fill(info, DEVLINK_CMD_RESOURCE_DUMP, 0);
}
@@ -338,7 +357,8 @@ devlink_nl_resource_dump_one(struct sk_buff *skb, struct devlink *devlink,
goto nla_put_failure;
}
- err = devlink_resource_list_fill(skb, devlink, &state->idx);
+ err = devlink_resource_list_fill(skb, devlink,
+ &devlink->resource_list, &state->idx);
if (err) {
if (state->idx == start_idx)
goto nla_put_failure_unwind;
@@ -385,26 +405,12 @@ int devlink_resources_validate(struct devlink *devlink,
return err;
}
-/**
- * devl_resource_register - devlink resource register
- *
- * @devlink: devlink
- * @resource_name: resource's name
- * @resource_size: resource's size
- * @resource_id: resource's id
- * @parent_resource_id: resource's parent id
- * @size_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
- */
-int devl_resource_register(struct devlink *devlink,
- const char *resource_name,
- u64 resource_size,
- u64 resource_id,
- u64 parent_resource_id,
- const struct devlink_resource_size_params *size_params)
+static int
+__devl_resource_register(struct devlink *devlink,
+ struct list_head *resource_list_head,
+ const char *resource_name, u64 resource_size,
+ u64 resource_id, u64 parent_resource_id,
+ const struct devlink_resource_size_params *params)
{
struct devlink_resource *resource;
struct list_head *resource_list;
@@ -414,7 +420,8 @@ int devl_resource_register(struct devlink *devlink,
top_hierarchy = parent_resource_id == DEVLINK_RESOURCE_ID_PARENT_TOP;
- resource = devlink_resource_find(devlink, NULL, resource_id);
+ resource = __devlink_resource_find(resource_list_head, NULL,
+ resource_id);
if (resource)
return -EEXIST;
@@ -423,12 +430,13 @@ int devl_resource_register(struct devlink *devlink,
return -ENOMEM;
if (top_hierarchy) {
- resource_list = &devlink->resource_list;
+ resource_list = resource_list_head;
} else {
struct devlink_resource *parent_resource;
- parent_resource = devlink_resource_find(devlink, NULL,
- parent_resource_id);
+ parent_resource = __devlink_resource_find(resource_list_head,
+ NULL,
+ parent_resource_id);
if (parent_resource) {
resource_list = &parent_resource->resource_list;
resource->parent = parent_resource;
@@ -443,46 +451,78 @@ int devl_resource_register(struct devlink *devlink,
resource->size_new = resource_size;
resource->id = resource_id;
resource->size_valid = true;
- memcpy(&resource->size_params, size_params,
- sizeof(resource->size_params));
+ memcpy(&resource->size_params, params, sizeof(resource->size_params));
INIT_LIST_HEAD(&resource->resource_list);
list_add_tail(&resource->list, resource_list);
return 0;
}
+
+/**
+ * devl_resource_register - devlink resource register
+ *
+ * @devlink: devlink
+ * @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_resource_register(struct devlink *devlink, 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, &devlink->resource_list,
+ resource_name, resource_size,
+ resource_id, parent_resource_id,
+ params);
+}
EXPORT_SYMBOL_GPL(devl_resource_register);
-static void devlink_resource_unregister(struct devlink *devlink,
- struct devlink_resource *resource)
+static void devlink_resource_unregister(struct devlink_resource *resource)
{
struct devlink_resource *tmp, *child_resource;
list_for_each_entry_safe(child_resource, tmp, &resource->resource_list,
list) {
- devlink_resource_unregister(devlink, child_resource);
+ devlink_resource_unregister(child_resource);
list_del(&child_resource->list);
kfree(child_resource);
}
}
-/**
- * devl_resources_unregister - free all resources
- *
- * @devlink: devlink
- */
-void devl_resources_unregister(struct devlink *devlink)
+static void
+__devl_resources_unregister(struct devlink *devlink,
+ struct list_head *resource_list_head)
{
struct devlink_resource *tmp, *child_resource;
lockdep_assert_held(&devlink->lock);
- list_for_each_entry_safe(child_resource, tmp, &devlink->resource_list,
+ list_for_each_entry_safe(child_resource, tmp, resource_list_head,
list) {
- devlink_resource_unregister(devlink, child_resource);
+ devlink_resource_unregister(child_resource);
list_del(&child_resource->list);
kfree(child_resource);
}
}
+
+/**
+ * devl_resources_unregister - free all resources
+ *
+ * @devlink: devlink
+ */
+void devl_resources_unregister(struct devlink *devlink)
+{
+ __devl_resources_unregister(devlink, &devlink->resource_list);
+}
EXPORT_SYMBOL_GPL(devl_resources_unregister);
/**
--
2.44.0
^ permalink raw reply related [flat|nested] 29+ messages in thread
* [PATCH net-next V3 05/10] devlink: Add port-level resource registration infrastructure
2026-02-26 22:19 [PATCH net-next V3 00/10] devlink: add per-port resource support Tariq Toukan
` (3 preceding siblings ...)
2026-02-26 22:19 ` [PATCH net-next V3 04/10] devlink: Refactor resource functions to be generic Tariq Toukan
@ 2026-02-26 22:19 ` Tariq Toukan
2026-02-26 22:19 ` [PATCH net-next V3 06/10] devlink: Add port resource netlink command Tariq Toukan
` (5 subsequent siblings)
10 siblings, 0 replies; 29+ messages in thread
From: Tariq Toukan @ 2026-02-26 22:19 UTC (permalink / raw)
To: Eric Dumazet, Jakub Kicinski, Paolo Abeni, Andrew Lunn,
David S. Miller
Cc: Donald Hunter, Jiri Pirko, Jonathan Corbet, Saeed Mahameed,
Leon Romanovsky, Tariq Toukan, Mark Bloch, Shuah Khan, netdev,
linux-kernel, linux-doc, linux-rdma, linux-kselftest,
Gal Pressman, Dragos Tatulea, Shay Drory, Jiri Pirko,
Moshe Shemesh, Or Har-Toov
From: Or Har-Toov <ohartoov@nvidia.com>
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>
---
include/net/devlink.h | 8 ++++++++
net/devlink/port.c | 3 +++
net/devlink/resource.c | 43 ++++++++++++++++++++++++++++++++++++++++++
3 files changed, 54 insertions(+)
diff --git a/include/net/devlink.h b/include/net/devlink.h
index 48e1ad067836..1ba12ab51e66 100644
--- a/include/net/devlink.h
+++ b/include/net/devlink.h
@@ -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;
@@ -1881,6 +1882,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);
diff --git a/net/devlink/port.c b/net/devlink/port.c
index 93d8a25bb920..10d0d88894a3 100644
--- a/net/devlink/port.c
+++ b/net/devlink/port.c
@@ -1024,6 +1024,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);
@@ -1041,6 +1042,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);
@@ -1135,6 +1137,7 @@ void devl_port_unregister(struct devlink_port *devlink_port)
devlink_port_notify(devlink_port, DEVLINK_CMD_PORT_DEL);
xa_erase(&devlink_port->devlink->ports, devlink_port->index);
WARN_ON(!list_empty(&devlink_port->reporter_list));
+ devlink_port_fini(devlink_port);
devlink_port->registered = false;
}
EXPORT_SYMBOL_GPL(devl_port_unregister);
diff --git a/net/devlink/resource.c b/net/devlink/resource.c
index 10043ad26dfd..71f00e580f59 100644
--- a/net/devlink/resource.c
+++ b/net/devlink/resource.c
@@ -613,3 +613,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);
--
2.44.0
^ permalink raw reply related [flat|nested] 29+ messages in thread
* [PATCH net-next V3 06/10] devlink: Add port resource netlink command
2026-02-26 22:19 [PATCH net-next V3 00/10] devlink: add per-port resource support Tariq Toukan
` (4 preceding siblings ...)
2026-02-26 22:19 ` [PATCH net-next V3 05/10] devlink: Add port-level resource registration infrastructure Tariq Toukan
@ 2026-02-26 22:19 ` Tariq Toukan
2026-02-26 22:19 ` [PATCH net-next V3 07/10] net/mlx5: Register SF resource on PF port representor Tariq Toukan
` (4 subsequent siblings)
10 siblings, 0 replies; 29+ messages in thread
From: Tariq Toukan @ 2026-02-26 22:19 UTC (permalink / raw)
To: Eric Dumazet, Jakub Kicinski, Paolo Abeni, Andrew Lunn,
David S. Miller
Cc: Donald Hunter, Jiri Pirko, Jonathan Corbet, Saeed Mahameed,
Leon Romanovsky, Tariq Toukan, Mark Bloch, Shuah Khan, netdev,
linux-kernel, linux-doc, linux-rdma, linux-kselftest,
Gal Pressman, Dragos Tatulea, Shay Drory, Jiri Pirko,
Moshe Shemesh, Or Har-Toov
From: Or Har-Toov <ohartoov@nvidia.com>
Add support for userspace to query resources registered on devlink
ports, allowing drivers to expose per-port resource limits and usage.
Example output:
$ devlink port resource show
pci/0000:03:00.0/196608:
name max_SFs size 20 unit entry
pci/0000:03:00.1/262144:
name max_SFs size 20 unit entry
$ devlink port resource show pci/0000:03:00.0/196608
pci/0000:03:00.0/196608:
name max_SFs size 20 unit entry
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>
---
Documentation/netlink/specs/devlink.yaml | 23 ++++++
include/uapi/linux/devlink.h | 3 +
net/devlink/devl_internal.h | 4 ++
net/devlink/netlink.c | 2 +-
net/devlink/netlink_gen.c | 32 ++++++++-
net/devlink/netlink_gen.h | 6 +-
net/devlink/resource.c | 90 +++++++++++++++++++++++-
7 files changed, 155 insertions(+), 5 deletions(-)
diff --git a/Documentation/netlink/specs/devlink.yaml b/Documentation/netlink/specs/devlink.yaml
index ee679ac14261..9b813f5fc51c 100644
--- a/Documentation/netlink/specs/devlink.yaml
+++ b/Documentation/netlink/specs/devlink.yaml
@@ -2340,3 +2340,26 @@ operations:
- bus-name
- dev-name
- port-index
+
+ -
+ name: port-resource-get
+ doc: Get port resources.
+ attribute-set: devlink
+ dont-validate: [strict]
+ do:
+ pre: devlink-nl-pre-doit-port
+ post: devlink-nl-post-doit
+ request:
+ value: 85
+ attributes: *port-id-attrs
+ reply: &port-resource-get-reply
+ value: 85
+ attributes:
+ - bus-name
+ - dev-name
+ - port-index
+ - resource-list
+ dump:
+ request:
+ attributes: *dev-id-attrs
+ reply: *port-resource-get-reply
diff --git a/include/uapi/linux/devlink.h b/include/uapi/linux/devlink.h
index e7d6b6d13470..1cabd1f6cba0 100644
--- a/include/uapi/linux/devlink.h
+++ b/include/uapi/linux/devlink.h
@@ -141,6 +141,9 @@ enum devlink_command {
DEVLINK_CMD_NOTIFY_FILTER_SET,
+ DEVLINK_CMD_PORT_RESOURCE_GET, /* can dump */
+ DEVLINK_CMD_PORT_RESOURCE_SET,
+
/* add new commands above here */
__DEVLINK_CMD_MAX,
DEVLINK_CMD_MAX = __DEVLINK_CMD_MAX - 1
diff --git a/net/devlink/devl_internal.h b/net/devlink/devl_internal.h
index 1377864383bc..ddf855bc893f 100644
--- a/net/devlink/devl_internal.h
+++ b/net/devlink/devl_internal.h
@@ -148,6 +148,10 @@ struct devlink_nl_dump_state {
struct {
u64 dump_ts;
};
+ /* DEVLINK_CMD_PORT_RESOURCE_GET - dump */
+ struct {
+ unsigned long port_index;
+ };
};
};
diff --git a/net/devlink/netlink.c b/net/devlink/netlink.c
index 593605c1b1ef..c78c31779622 100644
--- a/net/devlink/netlink.c
+++ b/net/devlink/netlink.c
@@ -367,7 +367,7 @@ struct genl_family devlink_nl_family __ro_after_init = {
.module = THIS_MODULE,
.split_ops = devlink_nl_ops,
.n_split_ops = ARRAY_SIZE(devlink_nl_ops),
- .resv_start_op = DEVLINK_CMD_SELFTESTS_RUN + 1,
+ .resv_start_op = DEVLINK_CMD_PORT_RESOURCE_GET + 1,
.mcgrps = devlink_nl_mcgrps,
.n_mcgrps = ARRAY_SIZE(devlink_nl_mcgrps),
.sock_priv_size = sizeof(struct devlink_nl_sock_priv),
diff --git a/net/devlink/netlink_gen.c b/net/devlink/netlink_gen.c
index d6667a3f87a0..a235748d0688 100644
--- a/net/devlink/netlink_gen.c
+++ b/net/devlink/netlink_gen.c
@@ -610,8 +610,21 @@ static const struct nla_policy devlink_notify_filter_set_nl_policy[DEVLINK_ATTR_
[DEVLINK_ATTR_PORT_INDEX] = { .type = NLA_U32, },
};
+/* DEVLINK_CMD_PORT_RESOURCE_GET - do */
+static const struct nla_policy devlink_port_resource_get_do_nl_policy[DEVLINK_ATTR_PORT_INDEX + 1] = {
+ [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
+ [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
+ [DEVLINK_ATTR_PORT_INDEX] = { .type = NLA_U32, },
+};
+
+/* DEVLINK_CMD_PORT_RESOURCE_GET - dump */
+static const struct nla_policy devlink_port_resource_get_dump_nl_policy[DEVLINK_ATTR_DEV_NAME + 1] = {
+ [DEVLINK_ATTR_BUS_NAME] = { .type = NLA_NUL_STRING, },
+ [DEVLINK_ATTR_DEV_NAME] = { .type = NLA_NUL_STRING, },
+};
+
/* Ops table for devlink */
-const struct genl_split_ops devlink_nl_ops[75] = {
+const struct genl_split_ops devlink_nl_ops[77] = {
{
.cmd = DEVLINK_CMD_GET,
.validate = GENL_DONT_VALIDATE_STRICT,
@@ -1297,4 +1310,21 @@ const struct genl_split_ops devlink_nl_ops[75] = {
.maxattr = DEVLINK_ATTR_PORT_INDEX,
.flags = GENL_CMD_CAP_DO,
},
+ {
+ .cmd = DEVLINK_CMD_PORT_RESOURCE_GET,
+ .validate = GENL_DONT_VALIDATE_STRICT,
+ .pre_doit = devlink_nl_pre_doit_port,
+ .doit = devlink_nl_port_resource_get_doit,
+ .post_doit = devlink_nl_post_doit,
+ .policy = devlink_port_resource_get_do_nl_policy,
+ .maxattr = DEVLINK_ATTR_PORT_INDEX,
+ .flags = GENL_CMD_CAP_DO,
+ },
+ {
+ .cmd = DEVLINK_CMD_PORT_RESOURCE_GET,
+ .dumpit = devlink_nl_port_resource_get_dumpit,
+ .policy = devlink_port_resource_get_dump_nl_policy,
+ .maxattr = DEVLINK_ATTR_DEV_NAME,
+ .flags = GENL_CMD_CAP_DUMP,
+ },
};
diff --git a/net/devlink/netlink_gen.h b/net/devlink/netlink_gen.h
index d79f6a0888f6..cab9d30e913a 100644
--- a/net/devlink/netlink_gen.h
+++ b/net/devlink/netlink_gen.h
@@ -18,7 +18,7 @@ extern const struct nla_policy devlink_dl_rate_tc_bws_nl_policy[DEVLINK_RATE_TC_
extern const struct nla_policy devlink_dl_selftest_id_nl_policy[DEVLINK_ATTR_SELFTEST_ID_FLASH + 1];
/* Ops table for devlink */
-extern const struct genl_split_ops devlink_nl_ops[75];
+extern const struct genl_split_ops devlink_nl_ops[77];
int devlink_nl_pre_doit(const struct genl_split_ops *ops, struct sk_buff *skb,
struct genl_info *info);
@@ -148,5 +148,9 @@ int devlink_nl_selftests_get_dumpit(struct sk_buff *skb,
int devlink_nl_selftests_run_doit(struct sk_buff *skb, struct genl_info *info);
int devlink_nl_notify_filter_set_doit(struct sk_buff *skb,
struct genl_info *info);
+int devlink_nl_port_resource_get_doit(struct sk_buff *skb,
+ struct genl_info *info);
+int devlink_nl_port_resource_get_dumpit(struct sk_buff *skb,
+ struct netlink_callback *cb);
#endif /* _LINUX_DEVLINK_GEN_H */
diff --git a/net/devlink/resource.c b/net/devlink/resource.c
index 71f00e580f59..0a1d1610ff67 100644
--- a/net/devlink/resource.c
+++ b/net/devlink/resource.c
@@ -252,6 +252,7 @@ static int __devlink_resource_fill(struct genl_info *info,
struct list_head *resource_list_head,
enum devlink_command cmd, int flags)
{
+ struct devlink_port *devlink_port = info->user_ptr[1];
struct devlink *devlink = info->user_ptr[0];
struct nlattr *resources_attr;
struct sk_buff *skb = NULL;
@@ -279,9 +280,13 @@ static int __devlink_resource_fill(struct genl_info *info,
if (devlink_nl_put_handle(skb, devlink))
goto nla_put_failure;
+ if (devlink_port) {
+ if (nla_put_u32(skb, DEVLINK_ATTR_PORT_INDEX,
+ devlink_port->index))
+ goto nla_put_failure;
+ }
- resources_attr = nla_nest_start_noflag(skb,
- DEVLINK_ATTR_RESOURCE_LIST);
+ resources_attr = nla_nest_start_noflag(skb, DEVLINK_ATTR_RESOURCE_LIST);
if (!resources_attr)
goto nla_put_failure;
@@ -656,3 +661,84 @@ void devl_port_resources_unregister(struct devlink_port *devlink_port)
&devlink_port->resource_list);
}
EXPORT_SYMBOL_GPL(devl_port_resources_unregister);
+
+int devlink_nl_port_resource_get_doit(struct sk_buff *skb,
+ struct genl_info *info)
+{
+ struct devlink_port *devlink_port = info->user_ptr[1];
+
+ return __devlink_resource_fill(info, &devlink_port->resource_list,
+ DEVLINK_CMD_PORT_RESOURCE_GET, 0);
+}
+
+static int
+devlink_nl_port_resource_get_dump_one(struct sk_buff *skb,
+ struct devlink *devlink,
+ struct netlink_callback *cb, int flags)
+{
+ struct devlink_nl_dump_state *state = devlink_dump_state(cb);
+ struct devlink_port *devlink_port;
+ struct list_head *resource_list;
+ struct nlattr *resources_attr;
+ int resource_idx, start_idx;
+ unsigned long port_idx;
+ void *hdr;
+ int err;
+
+ xa_for_each_start(&devlink->ports, port_idx, devlink_port,
+ state->port_index) {
+ if (list_empty(&devlink_port->resource_list))
+ continue;
+
+ resource_idx = (port_idx == state->port_index) ? state->idx : 0;
+ start_idx = resource_idx;
+ err = -EMSGSIZE;
+
+ hdr = genlmsg_put(skb, NETLINK_CB(cb->skb).portid,
+ cb->nlh->nlmsg_seq, &devlink_nl_family, flags,
+ DEVLINK_CMD_PORT_RESOURCE_GET);
+ if (!hdr)
+ return err;
+
+ if (devlink_nl_put_handle(skb, devlink) ||
+ nla_put_u32(skb, DEVLINK_ATTR_PORT_INDEX,
+ devlink_port->index))
+ goto nla_put_failure;
+
+ resources_attr =
+ nla_nest_start_noflag(skb, DEVLINK_ATTR_RESOURCE_LIST);
+ if (!resources_attr)
+ goto nla_put_failure;
+
+ resource_list = &devlink_port->resource_list;
+ err = devlink_resource_list_fill(skb, devlink, resource_list,
+ &resource_idx);
+ if (err) {
+ state->port_index = port_idx;
+ state->idx = resource_idx;
+ if (resource_idx == start_idx)
+ goto nla_put_failure_unwind;
+ nla_nest_end(skb, resources_attr);
+ genlmsg_end(skb, hdr);
+ return err;
+ }
+ nla_nest_end(skb, resources_attr);
+ genlmsg_end(skb, hdr);
+ }
+ state->port_index = 0;
+ state->idx = 0;
+ return 0;
+
+nla_put_failure_unwind:
+ nla_nest_cancel(skb, resources_attr);
+nla_put_failure:
+ genlmsg_cancel(skb, hdr);
+ return err;
+}
+
+int devlink_nl_port_resource_get_dumpit(struct sk_buff *skb,
+ struct netlink_callback *cb)
+{
+ return devlink_nl_dumpit(skb, cb,
+ devlink_nl_port_resource_get_dump_one);
+}
--
2.44.0
^ permalink raw reply related [flat|nested] 29+ messages in thread
* [PATCH net-next V3 07/10] net/mlx5: Register SF resource on PF port representor
2026-02-26 22:19 [PATCH net-next V3 00/10] devlink: add per-port resource support Tariq Toukan
` (5 preceding siblings ...)
2026-02-26 22:19 ` [PATCH net-next V3 06/10] devlink: Add port resource netlink command Tariq Toukan
@ 2026-02-26 22:19 ` Tariq Toukan
2026-02-26 22:19 ` [PATCH net-next V3 08/10] netdevsim: Add devlink port resource registration Tariq Toukan
` (3 subsequent siblings)
10 siblings, 0 replies; 29+ messages in thread
From: Tariq Toukan @ 2026-02-26 22:19 UTC (permalink / raw)
To: Eric Dumazet, Jakub Kicinski, Paolo Abeni, Andrew Lunn,
David S. Miller
Cc: Donald Hunter, Jiri Pirko, Jonathan Corbet, Saeed Mahameed,
Leon Romanovsky, Tariq Toukan, Mark Bloch, Shuah Khan, netdev,
linux-kernel, linux-doc, linux-rdma, linux-kselftest,
Gal Pressman, Dragos Tatulea, Shay Drory, Jiri Pirko,
Moshe Shemesh, Or Har-Toov
From: Or Har-Toov <ohartoov@nvidia.com>
The device-level "resource show" displays max_local_SFs and
max_external_SFs without indicating which port each resource belongs
to. Users cannot determine the controller number and pfnum associated
with each SF pool.
Register max_SFs resource on the Host PF representor port to expose
per-port SF limits. Users can correlate the port resource with the
controller number and pfnum shown in 'devlink port show'.
Future patches will introduce an ECPF that manages multiple PFs,
where each PF has its own SF pool.
Example usage:
$ devlink port resource show
pci/0000:03:00.0/196608:
name max_SFs size 20 unit entry
pci/0000:03:00.1/262144:
name max_SFs size 20 unit entry
$ devlink port resource show pci/0000:03:00.0/196608
pci/0000:03:00.0/196608:
name max_SFs size 20 unit entry
$ devlink port show pci/0000:03:00.0/196608
pci/0000:03:00.0/196608: type eth netdev pf0hpf flavour pcipf
controller 1 pfnum 0 external true splittable false
function:
hw_addr b8:3f:d2:e1:8f:dc roce enable max_io_eqs 120
We can create up to 20 SFs over devlink port pci/0000:03:00.0/196608,
with pfnum 0 and controller 1.
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>
---
.../net/ethernet/mellanox/mlx5/core/devlink.h | 4 ++
.../mellanox/mlx5/core/esw/devlink_port.c | 37 +++++++++++++++++++
2 files changed, 41 insertions(+)
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/devlink.h b/drivers/net/ethernet/mellanox/mlx5/core/devlink.h
index 43b9bf8829cf..4fbb3926a3e5 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/devlink.h
+++ b/drivers/net/ethernet/mellanox/mlx5/core/devlink.h
@@ -14,6 +14,10 @@ enum mlx5_devlink_resource_id {
MLX5_ID_RES_MAX = __MLX5_ID_RES_MAX - 1,
};
+enum mlx5_devlink_port_resource_id {
+ MLX5_DL_PORT_RES_MAX_SFS = 1,
+};
+
enum mlx5_devlink_param_id {
MLX5_DEVLINK_PARAM_ID_BASE = DEVLINK_PARAM_GENERIC_ID_MAX,
MLX5_DEVLINK_PARAM_ID_FLOW_STEERING_MODE,
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/esw/devlink_port.c b/drivers/net/ethernet/mellanox/mlx5/core/esw/devlink_port.c
index cd60bc500ec5..9601eaace168 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/esw/devlink_port.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/esw/devlink_port.c
@@ -3,6 +3,7 @@
#include <linux/mlx5/driver.h>
#include "eswitch.h"
+#include "devlink.h"
static void
mlx5_esw_get_port_parent_id(struct mlx5_core_dev *dev, struct netdev_phys_item_id *ppid)
@@ -158,6 +159,32 @@ static const struct devlink_port_ops mlx5_esw_dl_sf_port_ops = {
.port_fn_max_io_eqs_set = mlx5_devlink_port_fn_max_io_eqs_set,
};
+static int mlx5_esw_devlink_port_res_register(struct mlx5_eswitch *esw,
+ struct devlink_port *dl_port)
+{
+ struct devlink_resource_size_params size_params;
+ struct mlx5_core_dev *dev = esw->dev;
+ u16 max_sfs, sf_base_id;
+ int err;
+
+ err = mlx5_esw_sf_max_hpf_functions(dev, &max_sfs, &sf_base_id);
+ if (err)
+ return err;
+
+ devlink_resource_size_params_init(&size_params, max_sfs, max_sfs, 1,
+ DEVLINK_RESOURCE_UNIT_ENTRY);
+
+ return devl_port_resource_register(dl_port, "max_SFs", max_sfs,
+ MLX5_DL_PORT_RES_MAX_SFS,
+ DEVLINK_RESOURCE_ID_PARENT_TOP,
+ &size_params);
+}
+
+static void mlx5_esw_devlink_port_res_unregister(struct devlink_port *dl_port)
+{
+ devl_port_resources_unregister(dl_port);
+}
+
int mlx5_esw_offloads_devlink_port_register(struct mlx5_eswitch *esw, struct mlx5_vport *vport)
{
struct mlx5_core_dev *dev = esw->dev;
@@ -189,6 +216,15 @@ int mlx5_esw_offloads_devlink_port_register(struct mlx5_eswitch *esw, struct mlx
if (err)
goto rate_err;
+ if (vport_num == MLX5_VPORT_PF) {
+ err = mlx5_esw_devlink_port_res_register(esw,
+ &dl_port->dl_port);
+ if (err)
+ mlx5_core_dbg(dev,
+ "Failed to register port resources: %d\n",
+ err);
+ }
+
return 0;
rate_err:
@@ -203,6 +239,7 @@ void mlx5_esw_offloads_devlink_port_unregister(struct mlx5_vport *vport)
if (!vport->dl_port)
return;
dl_port = vport->dl_port;
+ mlx5_esw_devlink_port_res_unregister(&dl_port->dl_port);
mlx5_esw_qos_vport_update_parent(vport, NULL, NULL);
devl_rate_leaf_destroy(&dl_port->dl_port);
--
2.44.0
^ permalink raw reply related [flat|nested] 29+ messages in thread
* [PATCH net-next V3 08/10] netdevsim: Add devlink port resource registration
2026-02-26 22:19 [PATCH net-next V3 00/10] devlink: add per-port resource support Tariq Toukan
` (6 preceding siblings ...)
2026-02-26 22:19 ` [PATCH net-next V3 07/10] net/mlx5: Register SF resource on PF port representor Tariq Toukan
@ 2026-02-26 22:19 ` Tariq Toukan
2026-02-26 22:19 ` [PATCH net-next V3 09/10] selftest: netdevsim: Add devlink port resource test Tariq Toukan
` (2 subsequent siblings)
10 siblings, 0 replies; 29+ messages in thread
From: Tariq Toukan @ 2026-02-26 22:19 UTC (permalink / raw)
To: Eric Dumazet, Jakub Kicinski, Paolo Abeni, Andrew Lunn,
David S. Miller
Cc: Donald Hunter, Jiri Pirko, Jonathan Corbet, Saeed Mahameed,
Leon Romanovsky, Tariq Toukan, Mark Bloch, Shuah Khan, netdev,
linux-kernel, linux-doc, linux-rdma, linux-kselftest,
Gal Pressman, Dragos Tatulea, Shay Drory, Jiri Pirko,
Moshe Shemesh, Or Har-Toov
From: Or Har-Toov <ohartoov@nvidia.com>
Register port-level resources for netdevsim ports to enable testing
of the port resource infrastructure.
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>
---
drivers/net/netdevsim/dev.c | 23 ++++++++++++++++++++++-
drivers/net/netdevsim/netdevsim.h | 4 ++++
2 files changed, 26 insertions(+), 1 deletion(-)
diff --git a/drivers/net/netdevsim/dev.c b/drivers/net/netdevsim/dev.c
index f7b32446d3b8..80df3ffd1bc7 100644
--- a/drivers/net/netdevsim/dev.c
+++ b/drivers/net/netdevsim/dev.c
@@ -1487,9 +1487,25 @@ static int __nsim_dev_port_add(struct nsim_dev *nsim_dev, enum nsim_dev_port_typ
if (err)
goto err_port_free;
+ if (nsim_dev_port_is_pf(nsim_dev_port)) {
+ u64 parent_id = DEVLINK_RESOURCE_ID_PARENT_TOP;
+ struct devlink_resource_size_params params = {
+ .size_max = 100,
+ .size_granularity = 1,
+ .unit = DEVLINK_RESOURCE_UNIT_ENTRY
+ };
+
+ err = devl_port_resource_register(devlink_port,
+ "test_resource", 20,
+ NSIM_PORT_RESOURCE_TEST,
+ parent_id, ¶ms);
+ if (err)
+ goto err_dl_port_unregister;
+ }
+
err = nsim_dev_port_debugfs_init(nsim_dev, nsim_dev_port);
if (err)
- goto err_dl_port_unregister;
+ goto err_port_resource_unregister;
nsim_dev_port->ns = nsim_create(nsim_dev, nsim_dev_port, perm_addr);
if (IS_ERR(nsim_dev_port->ns)) {
@@ -1512,6 +1528,9 @@ static int __nsim_dev_port_add(struct nsim_dev *nsim_dev, enum nsim_dev_port_typ
nsim_destroy(nsim_dev_port->ns);
err_port_debugfs_exit:
nsim_dev_port_debugfs_exit(nsim_dev_port);
+err_port_resource_unregister:
+ if (nsim_dev_port_is_pf(nsim_dev_port))
+ devl_port_resources_unregister(devlink_port);
err_dl_port_unregister:
devl_port_unregister(devlink_port);
err_port_free:
@@ -1528,6 +1547,8 @@ static void __nsim_dev_port_del(struct nsim_dev_port *nsim_dev_port)
devl_rate_leaf_destroy(&nsim_dev_port->devlink_port);
nsim_destroy(nsim_dev_port->ns);
nsim_dev_port_debugfs_exit(nsim_dev_port);
+ if (nsim_dev_port_is_pf(nsim_dev_port))
+ devl_port_resources_unregister(devlink_port);
devl_port_unregister(devlink_port);
kfree(nsim_dev_port);
}
diff --git a/drivers/net/netdevsim/netdevsim.h b/drivers/net/netdevsim/netdevsim.h
index f767fc8a7505..985530486184 100644
--- a/drivers/net/netdevsim/netdevsim.h
+++ b/drivers/net/netdevsim/netdevsim.h
@@ -224,6 +224,10 @@ enum nsim_resource_id {
NSIM_RESOURCE_NEXTHOPS,
};
+enum nsim_port_resource_id {
+ NSIM_PORT_RESOURCE_TEST = 1,
+};
+
struct nsim_dev_health {
struct devlink_health_reporter *empty_reporter;
struct devlink_health_reporter *dummy_reporter;
--
2.44.0
^ permalink raw reply related [flat|nested] 29+ messages in thread
* [PATCH net-next V3 09/10] selftest: netdevsim: Add devlink port resource test
2026-02-26 22:19 [PATCH net-next V3 00/10] devlink: add per-port resource support Tariq Toukan
` (7 preceding siblings ...)
2026-02-26 22:19 ` [PATCH net-next V3 08/10] netdevsim: Add devlink port resource registration Tariq Toukan
@ 2026-02-26 22:19 ` Tariq Toukan
2026-02-26 22:19 ` [PATCH net-next V3 10/10] devlink: Document port-level resources Tariq Toukan
2026-03-03 3:26 ` [PATCH net-next V3 00/10] devlink: add per-port resource support Jakub Kicinski
10 siblings, 0 replies; 29+ messages in thread
From: Tariq Toukan @ 2026-02-26 22:19 UTC (permalink / raw)
To: Eric Dumazet, Jakub Kicinski, Paolo Abeni, Andrew Lunn,
David S. Miller
Cc: Donald Hunter, Jiri Pirko, Jonathan Corbet, Saeed Mahameed,
Leon Romanovsky, Tariq Toukan, Mark Bloch, Shuah Khan, netdev,
linux-kernel, linux-doc, linux-rdma, linux-kselftest,
Gal Pressman, Dragos Tatulea, Shay Drory, Jiri Pirko,
Moshe Shemesh, Or Har-Toov
From: Or Har-Toov <ohartoov@nvidia.com>
Add selftest to verify port-level resource functionality using netdevsim.
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>
---
.../drivers/net/netdevsim/devlink.sh | 38 ++++++++++++++++++-
1 file changed, 37 insertions(+), 1 deletion(-)
diff --git a/tools/testing/selftests/drivers/net/netdevsim/devlink.sh b/tools/testing/selftests/drivers/net/netdevsim/devlink.sh
index 9efd20d0241c..93f6ef3cd700 100755
--- a/tools/testing/selftests/drivers/net/netdevsim/devlink.sh
+++ b/tools/testing/selftests/drivers/net/netdevsim/devlink.sh
@@ -5,7 +5,8 @@ lib_dir=$(dirname $0)/../../../net/forwarding
ALL_TESTS="fw_flash_test params_test \
params_default_test regions_test reload_test \
- netns_reload_test resource_test resource_dump_test dev_info_test \
+ netns_reload_test resource_test resource_dump_test \
+ port_resource_test dev_info_test \
empty_reporter_test dummy_reporter_test rate_test"
NUM_NETIFS=0
source $lib_dir/lib.sh
@@ -871,6 +872,41 @@ rate_test()
log_test "rate test"
}
+port_resource_test()
+{
+ RET=0
+
+ if ! devlink port help 2>&1 | grep -q resource; then
+ echo "SKIP: missing devlink port resource support"
+ return
+ fi
+
+ local first_port="${DL_HANDLE}/0"
+ local name
+ local size
+
+ devlink port resource show "$first_port" > /dev/null 2>&1
+ check_err $? "Failed to show port resource for $first_port"
+
+ name=$(cmd_jq "devlink port resource show $first_port -j" \
+ ".[][][].name")
+ [ "$name" == "test_resource" ]
+ check_err $? "Unexpected resource name $name (expected test_resource)"
+
+ size=$(cmd_jq "devlink port resource show $first_port -j" \
+ ".[][][].size")
+ [ "$size" == "20" ]
+ check_err $? "Unexpected resource size $size (expected 20)"
+
+ devlink port resource show "$DL_HANDLE" > /dev/null 2>&1
+ check_err $? "Failed to show port resources for $DL_HANDLE"
+
+ devlink port resource show > /dev/null 2>&1
+ check_err $? "Failed to dump all port resources"
+
+ log_test "port resource test"
+}
+
setup_prepare()
{
modprobe netdevsim
--
2.44.0
^ permalink raw reply related [flat|nested] 29+ messages in thread
* [PATCH net-next V3 10/10] devlink: Document port-level resources
2026-02-26 22:19 [PATCH net-next V3 00/10] devlink: add per-port resource support Tariq Toukan
` (8 preceding siblings ...)
2026-02-26 22:19 ` [PATCH net-next V3 09/10] selftest: netdevsim: Add devlink port resource test Tariq Toukan
@ 2026-02-26 22:19 ` Tariq Toukan
2026-03-03 3:14 ` Jakub Kicinski
2026-03-03 3:26 ` [PATCH net-next V3 00/10] devlink: add per-port resource support Jakub Kicinski
10 siblings, 1 reply; 29+ messages in thread
From: Tariq Toukan @ 2026-02-26 22:19 UTC (permalink / raw)
To: Eric Dumazet, Jakub Kicinski, Paolo Abeni, Andrew Lunn,
David S. Miller
Cc: Donald Hunter, Jiri Pirko, Jonathan Corbet, Saeed Mahameed,
Leon Romanovsky, Tariq Toukan, Mark Bloch, Shuah Khan, netdev,
linux-kernel, linux-doc, linux-rdma, linux-kselftest,
Gal Pressman, Dragos Tatulea, Shay Drory, Jiri Pirko,
Moshe Shemesh, Or Har-Toov
From: Or Har-Toov <ohartoov@nvidia.com>
Add documentation for the port-level resource feature to
devlink-resource.rst. Port-level resources allow viewing resources
associated with specific devlink ports.
Currently, port-level resources only support the get command for
viewing resource information.
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>
---
.../networking/devlink/devlink-resource.rst | 36 +++++++++++++++++++
1 file changed, 36 insertions(+)
diff --git a/Documentation/networking/devlink/devlink-resource.rst b/Documentation/networking/devlink/devlink-resource.rst
index b4203c498bf2..1d6d8bfa1692 100644
--- a/Documentation/networking/devlink/devlink-resource.rst
+++ b/Documentation/networking/devlink/devlink-resource.rst
@@ -94,3 +94,39 @@ attribute, which represents the pending change in size. For example:
Note that changes in resource size may require a device reload to properly
take effect.
+
+Port-level Resources
+====================
+
+In addition to device-level resources, ``devlink`` also supports port-level
+resources. These resources are associated with a specific devlink port rather
+than the device as a whole.
+
+Currently, port-level resources only support the ``GET`` command for viewing
+resource information.
+
+Port-level resources can be viewed for a specific port:
+
+.. code:: shell
+
+ $devlink port resource show pci/0000:03:00.0/196608
+ pci/0000:03:00.0/196608:
+ name max_SFs size 20 unit entry
+
+Or for ports of a specific device:
+
+.. code:: shell
+
+ $devlink port resource show pci/0000:03:00.0
+ pci/0000:03:00.0/196608:
+ name max_SFs size 20 unit entry
+
+Or for all ports across all devices:
+
+.. code:: shell
+
+ $devlink port resource show
+ pci/0000:03:00.0/196608:
+ name max_SFs size 20 unit entry
+ pci/0000:03:00.1/262144:
+ name max_SFs size 20 unit entry
--
2.44.0
^ permalink raw reply related [flat|nested] 29+ messages in thread
* Re: [PATCH net-next V3 10/10] devlink: Document port-level resources
2026-02-26 22:19 ` [PATCH net-next V3 10/10] devlink: Document port-level resources Tariq Toukan
@ 2026-03-03 3:14 ` Jakub Kicinski
2026-03-04 10:06 ` Jiri Pirko
0 siblings, 1 reply; 29+ messages in thread
From: Jakub Kicinski @ 2026-03-03 3:14 UTC (permalink / raw)
To: Tariq Toukan
Cc: Eric Dumazet, Paolo Abeni, Andrew Lunn, David S. Miller,
Donald Hunter, Jiri Pirko, Jonathan Corbet, Saeed Mahameed,
Leon Romanovsky, Mark Bloch, Shuah Khan, netdev, linux-kernel,
linux-doc, linux-rdma, linux-kselftest, Gal Pressman,
Dragos Tatulea, Shay Drory, Jiri Pirko, Moshe Shemesh,
Or Har-Toov
On Fri, 27 Feb 2026 00:19:16 +0200 Tariq Toukan wrote:
> +Currently, port-level resources only support the ``GET`` command for viewing
> +resource information.
In case there is v4, AI says:
> +Currently, port-level resources only support the ``GET`` command for viewing
^^^^^
This isn't a bug, but the terminology here appears inconsistent with the
rest of the documentation. The document uses user-facing command names
elsewhere (like "devlink port resource show"), but this line uses "GET
command" which seems to reference the internal DEVLINK_CMD_PORT_RESOURCE_GET
netlink command.
Should this be reworded to match the user-facing terminology used throughout
the rest of the document, perhaps "only support the show command" or
"only support viewing"?
^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: [PATCH net-next V3 00/10] devlink: add per-port resource support
2026-02-26 22:19 [PATCH net-next V3 00/10] devlink: add per-port resource support Tariq Toukan
` (9 preceding siblings ...)
2026-02-26 22:19 ` [PATCH net-next V3 10/10] devlink: Document port-level resources Tariq Toukan
@ 2026-03-03 3:26 ` Jakub Kicinski
2026-03-04 10:05 ` Jiri Pirko
10 siblings, 1 reply; 29+ messages in thread
From: Jakub Kicinski @ 2026-03-03 3:26 UTC (permalink / raw)
To: Tariq Toukan
Cc: Eric Dumazet, Paolo Abeni, Andrew Lunn, David S. Miller,
Donald Hunter, Jiri Pirko, Jonathan Corbet, Saeed Mahameed,
Leon Romanovsky, Mark Bloch, Shuah Khan, netdev, linux-kernel,
linux-doc, linux-rdma, linux-kselftest, Gal Pressman,
Dragos Tatulea, Shay Drory, Jiri Pirko, Moshe Shemesh
On Fri, 27 Feb 2026 00:19:06 +0200 Tariq Toukan wrote:
> With this series, users can query per-port resources:
>
> $ devlink port resource show pci/0000:03:00.0/196608
> pci/0000:03:00.0/196608:
> name max_SFs size 20 unit entry
>
> $ devlink port resource show
> pci/0000:03:00.0/196608:
> name max_SFs size 20 unit entry
> pci/0000:03:00.1/262144:
> name max_SFs size 20 unit entry
Code LGTM, I have a question about having a new cmd, tho.
Does it matter to the user how the resource is scoped?
Whether the resource is at the instance level or at the port level?
I worry we are mechanically following the design of other commands.
Since the dump handler is new we could just dump resources with port-id
there. No existing user space may be using it. Alternatively we could
add a new attribute to select a bitmask of which scope user wants to
dump.
I have a strong suspicion that the user will want to access all
resources of a device. `devlink resource show [$dev]` should dump
all resources devlink knows about, including port ones.
What's the reason for the new command?
^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: [PATCH net-next V3 00/10] devlink: add per-port resource support
2026-03-03 3:26 ` [PATCH net-next V3 00/10] devlink: add per-port resource support Jakub Kicinski
@ 2026-03-04 10:05 ` Jiri Pirko
2026-03-04 10:34 ` Jiri Pirko
0 siblings, 1 reply; 29+ messages in thread
From: Jiri Pirko @ 2026-03-04 10:05 UTC (permalink / raw)
To: Jakub Kicinski
Cc: Tariq Toukan, Eric Dumazet, Paolo Abeni, Andrew Lunn,
David S. Miller, Donald Hunter, Jonathan Corbet, Saeed Mahameed,
Leon Romanovsky, Mark Bloch, Shuah Khan, netdev, linux-kernel,
linux-doc, linux-rdma, linux-kselftest, Gal Pressman,
Dragos Tatulea, Shay Drory, Jiri Pirko, Moshe Shemesh
Tue, Mar 03, 2026 at 04:26:40AM +0100, kuba@kernel.org wrote:
>On Fri, 27 Feb 2026 00:19:06 +0200 Tariq Toukan wrote:
>> With this series, users can query per-port resources:
>>
>> $ devlink port resource show pci/0000:03:00.0/196608
>> pci/0000:03:00.0/196608:
>> name max_SFs size 20 unit entry
>>
>> $ devlink port resource show
>> pci/0000:03:00.0/196608:
>> name max_SFs size 20 unit entry
>> pci/0000:03:00.1/262144:
>> name max_SFs size 20 unit entry
>
>Code LGTM, I have a question about having a new cmd, tho.
>
>Does it matter to the user how the resource is scoped?
>Whether the resource is at the instance level or at the port level?
>
>I worry we are mechanically following the design of other commands.
>Since the dump handler is new we could just dump resources with port-id
>there. No existing user space may be using it. Alternatively we could
>add a new attribute to select a bitmask of which scope user wants to
>dump.
You can specify what you want to dump with dump selectors. For example,
if you are interensted only in port of specific devlink. That should be
enough for most of the cases, no?
>
>I have a strong suspicion that the user will want to access all
>resources of a device. `devlink resource show [$dev]` should dump
>all resources devlink knows about, including port ones.
>
>What's the reason for the new command?
You are right, one cmd would do. Good thing someone forgot to implement
dump for it :)
^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: [PATCH net-next V3 10/10] devlink: Document port-level resources
2026-03-03 3:14 ` Jakub Kicinski
@ 2026-03-04 10:06 ` Jiri Pirko
0 siblings, 0 replies; 29+ messages in thread
From: Jiri Pirko @ 2026-03-04 10:06 UTC (permalink / raw)
To: Jakub Kicinski
Cc: Tariq Toukan, Eric Dumazet, Paolo Abeni, Andrew Lunn,
David S. Miller, Donald Hunter, Jonathan Corbet, Saeed Mahameed,
Leon Romanovsky, Mark Bloch, Shuah Khan, netdev, linux-kernel,
linux-doc, linux-rdma, linux-kselftest, Gal Pressman,
Dragos Tatulea, Shay Drory, Jiri Pirko, Moshe Shemesh,
Or Har-Toov
Tue, Mar 03, 2026 at 04:14:48AM +0100, kuba@kernel.org wrote:
>On Fri, 27 Feb 2026 00:19:16 +0200 Tariq Toukan wrote:
>> +Currently, port-level resources only support the ``GET`` command for viewing
>> +resource information.
>
>In case there is v4, AI says:
>
>> +Currently, port-level resources only support the ``GET`` command for viewing
> ^^^^^
>
>This isn't a bug, but the terminology here appears inconsistent with the
>rest of the documentation. The document uses user-facing command names
>elsewhere (like "devlink port resource show"), but this line uses "GET
>command" which seems to reference the internal DEVLINK_CMD_PORT_RESOURCE_GET
>netlink command.
>
>Should this be reworded to match the user-facing terminology used throughout
>the rest of the document, perhaps "only support the show command" or
>"only support viewing"?
AI does not see the context here. This is in-line with the rest of the
get commands.
^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: [PATCH net-next V3 00/10] devlink: add per-port resource support
2026-03-04 10:05 ` Jiri Pirko
@ 2026-03-04 10:34 ` Jiri Pirko
2026-03-04 18:15 ` Jakub Kicinski
0 siblings, 1 reply; 29+ messages in thread
From: Jiri Pirko @ 2026-03-04 10:34 UTC (permalink / raw)
To: Jakub Kicinski
Cc: Tariq Toukan, Eric Dumazet, Paolo Abeni, Andrew Lunn,
David S. Miller, Donald Hunter, Jonathan Corbet, Saeed Mahameed,
Leon Romanovsky, Mark Bloch, Shuah Khan, netdev, linux-kernel,
linux-doc, linux-rdma, linux-kselftest, Gal Pressman,
Dragos Tatulea, Shay Drory, Jiri Pirko, Moshe Shemesh
Wed, Mar 04, 2026 at 11:05:06AM +0100, jiri@resnulli.us wrote:
>Tue, Mar 03, 2026 at 04:26:40AM +0100, kuba@kernel.org wrote:
>>On Fri, 27 Feb 2026 00:19:06 +0200 Tariq Toukan wrote:
>>> With this series, users can query per-port resources:
>>>
>>> $ devlink port resource show pci/0000:03:00.0/196608
>>> pci/0000:03:00.0/196608:
>>> name max_SFs size 20 unit entry
>>>
>>> $ devlink port resource show
>>> pci/0000:03:00.0/196608:
>>> name max_SFs size 20 unit entry
>>> pci/0000:03:00.1/262144:
>>> name max_SFs size 20 unit entry
>>
>>Code LGTM, I have a question about having a new cmd, tho.
>>
>>Does it matter to the user how the resource is scoped?
>>Whether the resource is at the instance level or at the port level?
>>
>>I worry we are mechanically following the design of other commands.
>>Since the dump handler is new we could just dump resources with port-id
>>there. No existing user space may be using it. Alternatively we could
>>add a new attribute to select a bitmask of which scope user wants to
>>dump.
>
>You can specify what you want to dump with dump selectors. For example,
>if you are interensted only in port of specific devlink. That should be
>enough for most of the cases, no?
>
>>
>>I have a strong suspicion that the user will want to access all
>>resources of a device. `devlink resource show [$dev]` should dump
>>all resources devlink knows about, including port ones.
>>
>>What's the reason for the new command?
>
>You are right, one cmd would do. Good thing someone forgot to implement
>dump for it :)
On a second thought, if we merge multiple objects into one dump, how
does this extend? I mean, the userspace has to check there are no extra
attributes, as they may be used as a handle to another new object
introduced in the future... Idk, it's a bit odd.
^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: [PATCH net-next V3 00/10] devlink: add per-port resource support
2026-03-04 10:34 ` Jiri Pirko
@ 2026-03-04 18:15 ` Jakub Kicinski
2026-03-05 7:56 ` Jiri Pirko
0 siblings, 1 reply; 29+ messages in thread
From: Jakub Kicinski @ 2026-03-04 18:15 UTC (permalink / raw)
To: Jiri Pirko
Cc: Tariq Toukan, Eric Dumazet, Paolo Abeni, Andrew Lunn,
David S. Miller, Donald Hunter, Jonathan Corbet, Saeed Mahameed,
Leon Romanovsky, Mark Bloch, Shuah Khan, netdev, linux-kernel,
linux-doc, linux-rdma, linux-kselftest, Gal Pressman,
Dragos Tatulea, Shay Drory, Jiri Pirko, Moshe Shemesh
On Wed, 4 Mar 2026 11:34:13 +0100 Jiri Pirko wrote:
> >>I have a strong suspicion that the user will want to access all
> >>resources of a device. `devlink resource show [$dev]` should dump
> >>all resources devlink knows about, including port ones.
> >>
> >>What's the reason for the new command?
> >
> >You are right, one cmd would do. Good thing someone forgot to implement
> >dump for it :)
>
> On a second thought, if we merge multiple objects into one dump, how
> does this extend? I mean, the userspace has to check there are no extra
> attributes, as they may be used as a handle to another new object
> introduced in the future... Idk, it's a bit odd.
That's true, the user space must be able to interpret the object
identifier. So if we extend the command to add more identifiers
we will have to add the bitmask to the dump request, and have
the user space tell the kernel which objects it can recognize.
I was just saying that we don't have to add such attribute now,
maybe leave a comment in a strategic place for our future selves?
^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: [PATCH net-next V3 00/10] devlink: add per-port resource support
2026-03-04 18:15 ` Jakub Kicinski
@ 2026-03-05 7:56 ` Jiri Pirko
2026-03-05 14:37 ` Jakub Kicinski
0 siblings, 1 reply; 29+ messages in thread
From: Jiri Pirko @ 2026-03-05 7:56 UTC (permalink / raw)
To: Jakub Kicinski
Cc: Tariq Toukan, Eric Dumazet, Paolo Abeni, Andrew Lunn,
David S. Miller, Donald Hunter, Jonathan Corbet, Saeed Mahameed,
Leon Romanovsky, Mark Bloch, Shuah Khan, netdev, linux-kernel,
linux-doc, linux-rdma, linux-kselftest, Gal Pressman,
Dragos Tatulea, Shay Drory, Jiri Pirko, Moshe Shemesh
Wed, Mar 04, 2026 at 07:15:22PM +0100, kuba@kernel.org wrote:
>On Wed, 4 Mar 2026 11:34:13 +0100 Jiri Pirko wrote:
>> >>I have a strong suspicion that the user will want to access all
>> >>resources of a device. `devlink resource show [$dev]` should dump
>> >>all resources devlink knows about, including port ones.
>> >>
>> >>What's the reason for the new command?
>> >
>> >You are right, one cmd would do. Good thing someone forgot to implement
>> >dump for it :)
>>
>> On a second thought, if we merge multiple objects into one dump, how
>> does this extend? I mean, the userspace has to check there are no extra
>> attributes, as they may be used as a handle to another new object
>> introduced in the future... Idk, it's a bit odd.
>
>That's true, the user space must be able to interpret the object
>identifier. So if we extend the command to add more identifiers
>we will have to add the bitmask to the dump request, and have
>the user space tell the kernel which objects it can recognize.
>I was just saying that we don't have to add such attribute now,
>maybe leave a comment in a strategic place for our future selves?
Or, alternatively, we can have per-object dumps as we have for all
objects and command right now and leave things simple and
straightforward? I mean, I don't really see a benefit of a single dump
for more objects :/
^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: [PATCH net-next V3 00/10] devlink: add per-port resource support
2026-03-05 7:56 ` Jiri Pirko
@ 2026-03-05 14:37 ` Jakub Kicinski
2026-03-06 12:13 ` Jiri Pirko
0 siblings, 1 reply; 29+ messages in thread
From: Jakub Kicinski @ 2026-03-05 14:37 UTC (permalink / raw)
To: Jiri Pirko
Cc: Tariq Toukan, Eric Dumazet, Paolo Abeni, Andrew Lunn,
David S. Miller, Donald Hunter, Jonathan Corbet, Saeed Mahameed,
Leon Romanovsky, Mark Bloch, Shuah Khan, netdev, linux-kernel,
linux-doc, linux-rdma, linux-kselftest, Gal Pressman,
Dragos Tatulea, Shay Drory, Jiri Pirko, Moshe Shemesh
On Thu, 5 Mar 2026 08:56:42 +0100 Jiri Pirko wrote:
> Wed, Mar 04, 2026 at 07:15:22PM +0100, kuba@kernel.org wrote:
> >On Wed, 4 Mar 2026 11:34:13 +0100 Jiri Pirko wrote:
> >> On a second thought, if we merge multiple objects into one dump, how
> >> does this extend? I mean, the userspace has to check there are no extra
> >> attributes, as they may be used as a handle to another new object
> >> introduced in the future... Idk, it's a bit odd.
> >
> >That's true, the user space must be able to interpret the object
> >identifier. So if we extend the command to add more identifiers
> >we will have to add the bitmask to the dump request, and have
> >the user space tell the kernel which objects it can recognize.
> >I was just saying that we don't have to add such attribute now,
> >maybe leave a comment in a strategic place for our future selves?
>
> Or, alternatively, we can have per-object dumps as we have for all
> objects and command right now and leave things simple and
> straightforward? I mean, I don't really see a benefit of a single dump
> for more objects :/
What do you mean by straightforward, exactly?
User will most likely want to see all resources of a device in a single
dump / command.
The objects themselves are identical, they only differ by the handle,
and yet we'd have two separate commands to access them.
It's as if we had separate GETLINK commands in rtnetlink for devices on
the PCIe bus vs connected via USB.
^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: [PATCH net-next V3 00/10] devlink: add per-port resource support
2026-03-05 14:37 ` Jakub Kicinski
@ 2026-03-06 12:13 ` Jiri Pirko
2026-03-06 20:03 ` Jakub Kicinski
0 siblings, 1 reply; 29+ messages in thread
From: Jiri Pirko @ 2026-03-06 12:13 UTC (permalink / raw)
To: Jakub Kicinski
Cc: Tariq Toukan, Eric Dumazet, Paolo Abeni, Andrew Lunn,
David S. Miller, Donald Hunter, Jonathan Corbet, Saeed Mahameed,
Leon Romanovsky, Mark Bloch, Shuah Khan, netdev, linux-kernel,
linux-doc, linux-rdma, linux-kselftest, Gal Pressman,
Dragos Tatulea, Shay Drory, Jiri Pirko, Moshe Shemesh
Thu, Mar 05, 2026 at 03:37:29PM +0100, kuba@kernel.org wrote:
>On Thu, 5 Mar 2026 08:56:42 +0100 Jiri Pirko wrote:
>> Wed, Mar 04, 2026 at 07:15:22PM +0100, kuba@kernel.org wrote:
>> >On Wed, 4 Mar 2026 11:34:13 +0100 Jiri Pirko wrote:
>> >> On a second thought, if we merge multiple objects into one dump, how
>> >> does this extend? I mean, the userspace has to check there are no extra
>> >> attributes, as they may be used as a handle to another new object
>> >> introduced in the future... Idk, it's a bit odd.
>> >
>> >That's true, the user space must be able to interpret the object
>> >identifier. So if we extend the command to add more identifiers
>> >we will have to add the bitmask to the dump request, and have
>> >the user space tell the kernel which objects it can recognize.
>> >I was just saying that we don't have to add such attribute now,
>> >maybe leave a comment in a strategic place for our future selves?
>>
>> Or, alternatively, we can have per-object dumps as we have for all
>> objects and command right now and leave things simple and
>> straightforward? I mean, I don't really see a benefit of a single dump
>> for more objects :/
>
>What do you mean by straightforward, exactly?
>
>User will most likely want to see all resources of a device in a single
>dump / command.
Hmm. We actually already have this for region and health reporter dumps.
Only for params we have that separate.
So let's do it for resource too.
Thanks!
>
>The objects themselves are identical, they only differ by the handle,
>and yet we'd have two separate commands to access them.
>
>It's as if we had separate GETLINK commands in rtnetlink for devices on
>the PCIe bus vs connected via USB.
^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: [PATCH net-next V3 00/10] devlink: add per-port resource support
2026-03-06 12:13 ` Jiri Pirko
@ 2026-03-06 20:03 ` Jakub Kicinski
2026-03-08 16:03 ` Or Har-Toov
0 siblings, 1 reply; 29+ messages in thread
From: Jakub Kicinski @ 2026-03-06 20:03 UTC (permalink / raw)
To: Jiri Pirko
Cc: Tariq Toukan, Eric Dumazet, Paolo Abeni, Andrew Lunn,
David S. Miller, Donald Hunter, Jonathan Corbet, Saeed Mahameed,
Leon Romanovsky, Mark Bloch, Shuah Khan, netdev, linux-kernel,
linux-doc, linux-rdma, linux-kselftest, Gal Pressman,
Dragos Tatulea, Shay Drory, Jiri Pirko, Moshe Shemesh
On Fri, 6 Mar 2026 13:13:26 +0100 Jiri Pirko wrote:
> Thu, Mar 05, 2026 at 03:37:29PM +0100, kuba@kernel.org wrote:
> >On Thu, 5 Mar 2026 08:56:42 +0100 Jiri Pirko wrote:
> >> Or, alternatively, we can have per-object dumps as we have for all
> >> objects and command right now and leave things simple and
> >> straightforward? I mean, I don't really see a benefit of a single dump
> >> for more objects :/
> >
> >What do you mean by straightforward, exactly?
> >
> >User will most likely want to see all resources of a device in a single
> >dump / command.
>
> Hmm. We actually already have this for region and health reporter dumps.
> Only for params we have that separate.
> So let's do it for resource too.
That's not a good argument, as I said in my first response to the
thread:
I worry we are mechanically following the design of other commands.
https://lore.kernel.org/all/20260302192640.49af074f@kernel.org/
^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: [PATCH net-next V3 00/10] devlink: add per-port resource support
2026-03-06 20:03 ` Jakub Kicinski
@ 2026-03-08 16:03 ` Or Har-Toov
2026-03-09 20:33 ` Jakub Kicinski
0 siblings, 1 reply; 29+ messages in thread
From: Or Har-Toov @ 2026-03-08 16:03 UTC (permalink / raw)
To: Jakub Kicinski, Jiri Pirko
Cc: Tariq Toukan, Eric Dumazet, Paolo Abeni, Andrew Lunn,
David S. Miller, Donald Hunter, Jonathan Corbet, Saeed Mahameed,
Leon Romanovsky, Mark Bloch, Shuah Khan, netdev, linux-kernel,
linux-doc, linux-rdma, linux-kselftest, Gal Pressman,
Dragos Tatulea, Shay Drory, Jiri Pirko, Moshe Shemesh
On 06/03/2026 22:03, Jakub Kicinski wrote:
> External email: Use caution opening links or attachments
>
>
> On Fri, 6 Mar 2026 13:13:26 +0100 Jiri Pirko wrote:
>> Thu, Mar 05, 2026 at 03:37:29PM +0100, kuba@kernel.org wrote:
>>> On Thu, 5 Mar 2026 08:56:42 +0100 Jiri Pirko wrote:
>>>> Or, alternatively, we can have per-object dumps as we have for all
>>>> objects and command right now and leave things simple and
>>>> straightforward? I mean, I don't really see a benefit of a single dump
>>>> for more objects :/
>>>
>>> What do you mean by straightforward, exactly?
>>>
>>> User will most likely want to see all resources of a device in a single
>>> dump / command.
>>
>> Hmm. We actually already have this for region and health reporter dumps.
>> Only for params we have that separate.
>> So let's do it for resource too.
>
> That's not a good argument, as I said in my first response to the
> thread:
>
> I worry we are mechanically following the design of other commands.
>
> https://lore.kernel.org/all/20260302192640.49af074f@kernel.org/
>
Hi,
Do you mean that we will register resources per port, but not show with
new devlink port resource show.
Instead, the current devlink resource show dev command will also display
the ports of that device?
For example:
$ devlink resource show pci/0000:03:00.0
pci/0000:03:00.0:
name local_max_SFs size 40 unit entry
pci/0000:03:00.0/196608:
name max_SFs size 20 unit entry
pci/0000:03:00.0/196609:
name max_SFs size 20 unit entry
Or should we keep the current behavior where devlink resource show dev
displays only device-level resources, and only the full dump shows both
devices and their ports?
For example:
$ devlink resource show
pci/0000:03:00.0:
name local_max_SFs size 40 unit entry
pci/0000:03:00.0/196608:
name max_SFs size 20 unit entry
pci/0000:03:00.0/196609:
name max_SFs size 20 unit entry
pci/0000:03:00.1:
name local_max_SFs size 40 unit entry
pci/0000:03:00.1/196608:
name max_SFs size 20 unit entry
pci/0000:03:00.1/196609:
name max_SFs size 20 unit entry
Want to confirm which behavior you meant.
Thanks.
^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: [PATCH net-next V3 00/10] devlink: add per-port resource support
2026-03-08 16:03 ` Or Har-Toov
@ 2026-03-09 20:33 ` Jakub Kicinski
2026-03-11 18:24 ` Or Har-Toov
0 siblings, 1 reply; 29+ messages in thread
From: Jakub Kicinski @ 2026-03-09 20:33 UTC (permalink / raw)
To: Or Har-Toov
Cc: Jiri Pirko, Tariq Toukan, Eric Dumazet, Paolo Abeni, Andrew Lunn,
David S. Miller, Donald Hunter, Jonathan Corbet, Saeed Mahameed,
Leon Romanovsky, Mark Bloch, Shuah Khan, netdev, linux-kernel,
linux-doc, linux-rdma, linux-kselftest, Gal Pressman,
Dragos Tatulea, Shay Drory, Jiri Pirko, Moshe Shemesh
On Sun, 8 Mar 2026 18:03:11 +0200 Or Har-Toov wrote:
> Do you mean that we will register resources per port, but not show with
> new devlink port resource show.
> Instead, the current devlink resource show dev command will also display
> the ports of that device?
>
> For example:
>
> $ devlink resource show pci/0000:03:00.0
> pci/0000:03:00.0:
> name local_max_SFs size 40 unit entry
> pci/0000:03:00.0/196608:
> name max_SFs size 20 unit entry
> pci/0000:03:00.0/196609:
> name max_SFs size 20 unit entry
>
> Or should we keep the current behavior where devlink resource show dev
> displays only device-level resources, and only the full dump shows both
> devices and their ports?
>
> For example:
>
> $ devlink resource show
> pci/0000:03:00.0:
> name local_max_SFs size 40 unit entry
> pci/0000:03:00.0/196608:
> name max_SFs size 20 unit entry
> pci/0000:03:00.0/196609:
> name max_SFs size 20 unit entry
> pci/0000:03:00.1:
> name local_max_SFs size 40 unit entry
> pci/0000:03:00.1/196608:
> name max_SFs size 20 unit entry
> pci/0000:03:00.1/196609:
> name max_SFs size 20 unit entry
>
> Want to confirm which behavior you meant.
No strong preference on the CLI. For the kernel I think specifying
the device should not exclude the port resources. Whether port
resources are shown or not should be entirely up to the mask attribute.
Thinking about this some more after my last reply to Jiri I think we
should add that mask attribute to let user decide whether they want
only the device resources, port resources or both. This will retain
the exact functionality of the series.
On the CLI "devlink resource show" should show all resources in the
system IMO. How we define the CLI arguments to scope things down I don't
have a strong opinion on.
^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: [PATCH net-next V3 00/10] devlink: add per-port resource support
2026-03-09 20:33 ` Jakub Kicinski
@ 2026-03-11 18:24 ` Or Har-Toov
2026-03-11 21:51 ` Jakub Kicinski
0 siblings, 1 reply; 29+ messages in thread
From: Or Har-Toov @ 2026-03-11 18:24 UTC (permalink / raw)
To: Jakub Kicinski
Cc: Jiri Pirko, Tariq Toukan, Eric Dumazet, Paolo Abeni, Andrew Lunn,
David S. Miller, Donald Hunter, Jonathan Corbet, Saeed Mahameed,
Leon Romanovsky, Mark Bloch, Shuah Khan, netdev, linux-kernel,
linux-doc, linux-rdma, linux-kselftest, Gal Pressman,
Dragos Tatulea, Shay Drory, Jiri Pirko, Moshe Shemesh
On 09/03/2026 22:33, Jakub Kicinski wrote:
>
>
> On Sun, 8 Mar 2026 18:03:11 +0200 Or Har-Toov wrote:
>> Do you mean that we will register resources per port, but not show with
>> new devlink port resource show.
>> Instead, the current devlink resource show dev command will also display
>> the ports of that device?
>>
>> For example:
>>
>> $ devlink resource show pci/0000:03:00.0
>> pci/0000:03:00.0:
>> name local_max_SFs size 40 unit entry
>> pci/0000:03:00.0/196608:
>> name max_SFs size 20 unit entry
>> pci/0000:03:00.0/196609:
>> name max_SFs size 20 unit entry
>>
>> Or should we keep the current behavior where devlink resource show dev
>> displays only device-level resources, and only the full dump shows both
>> devices and their ports?
>>
>> For example:
>>
>> $ devlink resource show
>> pci/0000:03:00.0:
>> name local_max_SFs size 40 unit entry
>> pci/0000:03:00.0/196608:
>> name max_SFs size 20 unit entry
>> pci/0000:03:00.0/196609:
>> name max_SFs size 20 unit entry
>> pci/0000:03:00.1:
>> name local_max_SFs size 40 unit entry
>> pci/0000:03:00.1/196608:
>> name max_SFs size 20 unit entry
>> pci/0000:03:00.1/196609:
>> name max_SFs size 20 unit entry
>>
>> Want to confirm which behavior you meant.
>
> No strong preference on the CLI. For the kernel I think specifying
> the device should not exclude the port resources. Whether port
> resources are shown or not should be entirely up to the mask attribute.
>
> Thinking about this some more after my last reply to Jiri I think we
> should add that mask attribute to let user decide whether they want
> only the device resources, port resources or both. This will retain
> the exact functionality of the series.
>
> On the CLI "devlink resource show" should show all resources in the
> system IMO. How we define the CLI arguments to scope things down I don't
> have a strong opinion on.
So for the dump of all resources it is clear. But I want to make sure I
understood the scope/mask part:
For the dump-it command:
devlink resource show
pci/0000:03:00.0:
<resource>
pci/0000:03:00.0/196608:
<port-resource>
pci/0000:03:00.0/196609:
<port-resource>
pci/0000:03:00.1:
<resource>
pci/0000:03:00.1/262144:
<port-resource>
devlink resource show scope port
pci/0000:03:00.0/196608:
<port-resource>
pci/0000:03:00.0/196609:
<port-resource>
pci/0000:03:00.1/262144:
<port-resource>
devlink resource show scope dev
pci/0000:03:00.0:
<resource>
pci/0000:03:00.1:
<resource>
For the do-it command:
devlink resource show pci/0000:03:00.0
pci/0000:03:00.0:
<resource>
pci/0000:03:00.0/196608:
<port-resource>
pci/0000:03:00.0/196609:
<port-resource>
devlink resource show pci/0000:03:00.0 scope port
pci/0000:03:00.0/196608:
<port-resource>
pci/0000:03:00.0/196609:
<port-resource>
devlink resource show pci/0000:03:00.0 scope dev
pci/0000:03:00.0:
<resource>
The way to get the dev or port scope will be by bitmask in the netlink
message of the dump/doit command.
Thank you
^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: [PATCH net-next V3 00/10] devlink: add per-port resource support
2026-03-11 18:24 ` Or Har-Toov
@ 2026-03-11 21:51 ` Jakub Kicinski
2026-03-12 8:34 ` Jiri Pirko
0 siblings, 1 reply; 29+ messages in thread
From: Jakub Kicinski @ 2026-03-11 21:51 UTC (permalink / raw)
To: Or Har-Toov
Cc: Jiri Pirko, Tariq Toukan, Eric Dumazet, Paolo Abeni, Andrew Lunn,
David S. Miller, Donald Hunter, Jonathan Corbet, Saeed Mahameed,
Leon Romanovsky, Mark Bloch, Shuah Khan, netdev, linux-kernel,
linux-doc, linux-rdma, linux-kselftest, Gal Pressman,
Dragos Tatulea, Shay Drory, Jiri Pirko, Moshe Shemesh
On Wed, 11 Mar 2026 20:24:08 +0200 Or Har-Toov wrote:
> For the dump-it command:
> devlink resource show
> pci/0000:03:00.0:
> <resource>
> pci/0000:03:00.0/196608:
> <port-resource>
> pci/0000:03:00.0/196609:
> <port-resource>
> pci/0000:03:00.1:
> <resource>
> pci/0000:03:00.1/262144:
> <port-resource>
>
> devlink resource show scope port
> pci/0000:03:00.0/196608:
> <port-resource>
> pci/0000:03:00.0/196609:
> <port-resource>
> pci/0000:03:00.1/262144:
> <port-resource>
>
> devlink resource show scope dev
> pci/0000:03:00.0:
> <resource>
> pci/0000:03:00.1:
> <resource>
LGTM
> For the do-it command:
> devlink resource show pci/0000:03:00.0
> pci/0000:03:00.0:
> <resource>
> pci/0000:03:00.0/196608:
> <port-resource>
> pci/0000:03:00.0/196609:
> <port-resource>
>
> devlink resource show pci/0000:03:00.0 scope port
> pci/0000:03:00.0/196608:
> <port-resource>
> pci/0000:03:00.0/196609:
> <port-resource>
>
> devlink resource show pci/0000:03:00.0 scope dev
> pci/0000:03:00.0:
> <resource>
Do we have to touch doit? Maybe we should let doit be what it is now
and consider it legacy going forward? doit which is in fact a filtered
dump is a bit of a mistake in the first place, from Netlink's
perspective.
^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: [PATCH net-next V3 00/10] devlink: add per-port resource support
2026-03-11 21:51 ` Jakub Kicinski
@ 2026-03-12 8:34 ` Jiri Pirko
2026-03-12 14:19 ` Jakub Kicinski
0 siblings, 1 reply; 29+ messages in thread
From: Jiri Pirko @ 2026-03-12 8:34 UTC (permalink / raw)
To: Jakub Kicinski
Cc: Or Har-Toov, Tariq Toukan, Eric Dumazet, Paolo Abeni, Andrew Lunn,
David S. Miller, Donald Hunter, Jonathan Corbet, Saeed Mahameed,
Leon Romanovsky, Mark Bloch, Shuah Khan, netdev, linux-kernel,
linux-doc, linux-rdma, linux-kselftest, Gal Pressman,
Dragos Tatulea, Shay Drory, Jiri Pirko, Moshe Shemesh
Wed, Mar 11, 2026 at 10:51:26PM +0100, kuba@kernel.org wrote:
>On Wed, 11 Mar 2026 20:24:08 +0200 Or Har-Toov wrote:
>> For the dump-it command:
>> devlink resource show
>> pci/0000:03:00.0:
>> <resource>
>> pci/0000:03:00.0/196608:
>> <port-resource>
>> pci/0000:03:00.0/196609:
>> <port-resource>
>> pci/0000:03:00.1:
>> <resource>
>> pci/0000:03:00.1/262144:
>> <port-resource>
>>
>> devlink resource show scope port
>> pci/0000:03:00.0/196608:
>> <port-resource>
>> pci/0000:03:00.0/196609:
>> <port-resource>
>> pci/0000:03:00.1/262144:
>> <port-resource>
>>
>> devlink resource show scope dev
>> pci/0000:03:00.0:
>> <resource>
>> pci/0000:03:00.1:
>> <resource>
>
>LGTM
I don't see the benefit of exposing the scope to the user to be honest.
I mean, dump would show all, dump with "dev" handle would be used as a
selector to dump only things related to "dev". What is the use case of
this "scope" granularity?
>
>> For the do-it command:
>> devlink resource show pci/0000:03:00.0
>> pci/0000:03:00.0:
>> <resource>
>> pci/0000:03:00.0/196608:
>> <port-resource>
>> pci/0000:03:00.0/196609:
>> <port-resource>
>>
>> devlink resource show pci/0000:03:00.0 scope port
>> pci/0000:03:00.0/196608:
>> <port-resource>
>> pci/0000:03:00.0/196609:
>> <port-resource>
>>
>> devlink resource show pci/0000:03:00.0 scope dev
>> pci/0000:03:00.0:
>> <resource>
>
>Do we have to touch doit? Maybe we should let doit be what it is now
>and consider it legacy going forward? doit which is in fact a filtered
>dump is a bit of a mistake in the first place, from Netlink's
>perspective.
I don't think we should. If user wants doit, he is going to specify the
object (dev/port). If user is interested only in things related to
single device, he should do dump with selector (dev).
Let's make this simple.
^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: [PATCH net-next V3 00/10] devlink: add per-port resource support
2026-03-12 8:34 ` Jiri Pirko
@ 2026-03-12 14:19 ` Jakub Kicinski
2026-03-12 14:29 ` Jiri Pirko
0 siblings, 1 reply; 29+ messages in thread
From: Jakub Kicinski @ 2026-03-12 14:19 UTC (permalink / raw)
To: Jiri Pirko
Cc: Or Har-Toov, Tariq Toukan, Eric Dumazet, Paolo Abeni, Andrew Lunn,
David S. Miller, Donald Hunter, Jonathan Corbet, Saeed Mahameed,
Leon Romanovsky, Mark Bloch, Shuah Khan, netdev, linux-kernel,
linux-doc, linux-rdma, linux-kselftest, Gal Pressman,
Dragos Tatulea, Shay Drory, Jiri Pirko, Moshe Shemesh
On Thu, 12 Mar 2026 09:34:52 +0100 Jiri Pirko wrote:
> >> devlink resource show scope dev
> >> pci/0000:03:00.0:
> >> <resource>
> >> pci/0000:03:00.1:
> >> <resource>
> >
> >LGTM
>
> I don't see the benefit of exposing the scope to the user to be honest.
> I mean, dump would show all, dump with "dev" handle would be used as a
> selector to dump only things related to "dev". What is the use case of
> this "scope" granularity?
If we follow the logic that dump should show the user relevant
resources, no matter which sub-object they are attached to -
having a dev specified should only filter the objects to match
the dev, including resources which are on ports of that dev.
IDK if there's a strong use case for allowing the user to set
scope on CLI but also - I don't see why not?
> >> For the do-it command:
> >> devlink resource show pci/0000:03:00.0
> >> pci/0000:03:00.0:
> >> <resource>
> >> pci/0000:03:00.0/196608:
> >> <port-resource>
> >> pci/0000:03:00.0/196609:
> >> <port-resource>
> >>
> >> devlink resource show pci/0000:03:00.0 scope port
> >> pci/0000:03:00.0/196608:
> >> <port-resource>
> >> pci/0000:03:00.0/196609:
> >> <port-resource>
> >>
> >> devlink resource show pci/0000:03:00.0 scope dev
> >> pci/0000:03:00.0:
> >> <resource>
> >
> >Do we have to touch doit? Maybe we should let doit be what it is now
> >and consider it legacy going forward? doit which is in fact a filtered
> >dump is a bit of a mistake in the first place, from Netlink's
> >perspective.
>
> I don't think we should. If user wants doit, he is going to specify the
> object (dev/port). If user is interested only in things related to
> single device, he should do dump with selector (dev).
Could you confirm that you're agreeing that we should leave doit as is?
I'm not 100% sure after reading this twice :)
^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: [PATCH net-next V3 00/10] devlink: add per-port resource support
2026-03-12 14:19 ` Jakub Kicinski
@ 2026-03-12 14:29 ` Jiri Pirko
2026-03-12 14:36 ` Jakub Kicinski
0 siblings, 1 reply; 29+ messages in thread
From: Jiri Pirko @ 2026-03-12 14:29 UTC (permalink / raw)
To: Jakub Kicinski
Cc: Or Har-Toov, Tariq Toukan, Eric Dumazet, Paolo Abeni, Andrew Lunn,
David S. Miller, Donald Hunter, Jonathan Corbet, Saeed Mahameed,
Leon Romanovsky, Mark Bloch, Shuah Khan, netdev, linux-kernel,
linux-doc, linux-rdma, linux-kselftest, Gal Pressman,
Dragos Tatulea, Shay Drory, Jiri Pirko, Moshe Shemesh
Thu, Mar 12, 2026 at 03:19:16PM +0100, kuba@kernel.org wrote:
>On Thu, 12 Mar 2026 09:34:52 +0100 Jiri Pirko wrote:
>> >> devlink resource show scope dev
>> >> pci/0000:03:00.0:
>> >> <resource>
>> >> pci/0000:03:00.1:
>> >> <resource>
>> >
>> >LGTM
>>
>> I don't see the benefit of exposing the scope to the user to be honest.
>> I mean, dump would show all, dump with "dev" handle would be used as a
>> selector to dump only things related to "dev". What is the use case of
>> this "scope" granularity?
>
>If we follow the logic that dump should show the user relevant
>resources, no matter which sub-object they are attached to -
>having a dev specified should only filter the objects to match
>the dev, including resources which are on ports of that dev.
>
>IDK if there's a strong use case for allowing the user to set
>scope on CLI but also - I don't see why not?
At least some small sense of consistency with other dumps? Health
reporter and region does not have scope and output mixture of dev-based
and port-based objects. Why to confuse user?
>
>> >> For the do-it command:
>> >> devlink resource show pci/0000:03:00.0
>> >> pci/0000:03:00.0:
>> >> <resource>
>> >> pci/0000:03:00.0/196608:
>> >> <port-resource>
>> >> pci/0000:03:00.0/196609:
>> >> <port-resource>
>> >>
>> >> devlink resource show pci/0000:03:00.0 scope port
>> >> pci/0000:03:00.0/196608:
>> >> <port-resource>
>> >> pci/0000:03:00.0/196609:
>> >> <port-resource>
>> >>
>> >> devlink resource show pci/0000:03:00.0 scope dev
>> >> pci/0000:03:00.0:
>> >> <resource>
>> >
>> >Do we have to touch doit? Maybe we should let doit be what it is now
>> >and consider it legacy going forward? doit which is in fact a filtered
>> >dump is a bit of a mistake in the first place, from Netlink's
>> >perspective.
>>
>> I don't think we should. If user wants doit, he is going to specify the
>> object (dev/port). If user is interested only in things related to
>> single device, he should do dump with selector (dev).
>
>Could you confirm that you're agreeing that we should leave doit as is?
>I'm not 100% sure after reading this twice :)
Yes.
^ permalink raw reply [flat|nested] 29+ messages in thread
* Re: [PATCH net-next V3 00/10] devlink: add per-port resource support
2026-03-12 14:29 ` Jiri Pirko
@ 2026-03-12 14:36 ` Jakub Kicinski
0 siblings, 0 replies; 29+ messages in thread
From: Jakub Kicinski @ 2026-03-12 14:36 UTC (permalink / raw)
To: Jiri Pirko
Cc: Or Har-Toov, Tariq Toukan, Eric Dumazet, Paolo Abeni, Andrew Lunn,
David S. Miller, Donald Hunter, Jonathan Corbet, Saeed Mahameed,
Leon Romanovsky, Mark Bloch, Shuah Khan, netdev, linux-kernel,
linux-doc, linux-rdma, linux-kselftest, Gal Pressman,
Dragos Tatulea, Shay Drory, Jiri Pirko, Moshe Shemesh
On Thu, 12 Mar 2026 15:29:53 +0100 Jiri Pirko wrote:
> >> I don't see the benefit of exposing the scope to the user to be honest.
> >> I mean, dump would show all, dump with "dev" handle would be used as a
> >> selector to dump only things related to "dev". What is the use case of
> >> this "scope" granularity?
> >
> >If we follow the logic that dump should show the user relevant
> >resources, no matter which sub-object they are attached to -
> >having a dev specified should only filter the objects to match
> >the dev, including resources which are on ports of that dev.
> >
> >IDK if there's a strong use case for allowing the user to set
> >scope on CLI but also - I don't see why not?
>
> At least some small sense of consistency with other dumps? Health
> reporter and region does not have scope and output mixture of dev-based
> and port-based objects. Why to confuse user?
That's a judgment call - either we confuse users but two commands
behaving differently, or we confuse users with devlink $thing not
dumping all instances of the $thing.
Especially that drivers often retroactively move $things from device
scope to port scope :(
^ permalink raw reply [flat|nested] 29+ messages in thread
end of thread, other threads:[~2026-03-12 14:36 UTC | newest]
Thread overview: 29+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-02-26 22:19 [PATCH net-next V3 00/10] devlink: add per-port resource support Tariq Toukan
2026-02-26 22:19 ` [PATCH net-next V3 01/10] devlink: Add dump support for device-level resources Tariq Toukan
2026-02-26 22:19 ` [PATCH net-next V3 02/10] selftest: netdevsim: Add resource dump test Tariq Toukan
2026-02-26 22:19 ` [PATCH net-next V3 03/10] devlink: Add dump to resource documentation Tariq Toukan
2026-02-26 22:19 ` [PATCH net-next V3 04/10] devlink: Refactor resource functions to be generic Tariq Toukan
2026-02-26 22:19 ` [PATCH net-next V3 05/10] devlink: Add port-level resource registration infrastructure Tariq Toukan
2026-02-26 22:19 ` [PATCH net-next V3 06/10] devlink: Add port resource netlink command Tariq Toukan
2026-02-26 22:19 ` [PATCH net-next V3 07/10] net/mlx5: Register SF resource on PF port representor Tariq Toukan
2026-02-26 22:19 ` [PATCH net-next V3 08/10] netdevsim: Add devlink port resource registration Tariq Toukan
2026-02-26 22:19 ` [PATCH net-next V3 09/10] selftest: netdevsim: Add devlink port resource test Tariq Toukan
2026-02-26 22:19 ` [PATCH net-next V3 10/10] devlink: Document port-level resources Tariq Toukan
2026-03-03 3:14 ` Jakub Kicinski
2026-03-04 10:06 ` Jiri Pirko
2026-03-03 3:26 ` [PATCH net-next V3 00/10] devlink: add per-port resource support Jakub Kicinski
2026-03-04 10:05 ` Jiri Pirko
2026-03-04 10:34 ` Jiri Pirko
2026-03-04 18:15 ` Jakub Kicinski
2026-03-05 7:56 ` Jiri Pirko
2026-03-05 14:37 ` Jakub Kicinski
2026-03-06 12:13 ` Jiri Pirko
2026-03-06 20:03 ` Jakub Kicinski
2026-03-08 16:03 ` Or Har-Toov
2026-03-09 20:33 ` Jakub Kicinski
2026-03-11 18:24 ` Or Har-Toov
2026-03-11 21:51 ` Jakub Kicinski
2026-03-12 8:34 ` Jiri Pirko
2026-03-12 14:19 ` Jakub Kicinski
2026-03-12 14:29 ` Jiri Pirko
2026-03-12 14:36 ` Jakub Kicinski
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox