From nobody Thu Apr 2 01:46:33 2026 Received: from PH8PR06CU001.outbound.protection.outlook.com (mail-westus3azon11012058.outbound.protection.outlook.com [40.107.209.58]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C3AAF47D932; Wed, 1 Apr 2026 18:51:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.209.58 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775069502; cv=fail; b=TzgUbmsbwhGaOzYk4PT/gKyZuDHTty2DiC8KlB9suG8SrDXYjye8xfbK7bkjnbj8/sVaFTdamg4qP0OSgYs3lJtPB0xxNFKBXgsspBt0q0OPe987NLE6jWy62QX8B84L8+rLN5D5Ym2mFnfgRzQkEps2ay+EVu45xAtlOOYvx04= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1775069502; c=relaxed/simple; bh=WsVfRnsevZyeTX/B+eZW+LkTKCQspGR8OwM+N/Tkggc=; h=From:To:CC:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=qepbjGpcup4InPgk5UGuU/Tzv6KFM35I7Ik+3Bo7OsKXnWc38b1kGJ3fa2Lpf+M4VBCJ+b7O8DixX12HQulNaTqeT2Fw3pOAFjnZJSw+Ufm+zluup+l6Zrq/cFNJyV+JyhBuFQ08EwMPmgcbLjCzI2FjTbrpPBcen584EXukfe0= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=KCeHyprm; arc=fail smtp.client-ip=40.107.209.58 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="KCeHyprm" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=AUnRiQ2cWGIQp0hxCQSkqGhYfkys7CdW3OnnMZJMFi8gXkfyTeNVaLxEAo8aFviN8+S3m3b5Yv67cBcIHr4mhSUTuEYlW7iEw6oaQmiR5v/Sl8S20qTjgHdxlHY2xPjjED5NJE86hFSxiL+xlojDM3M4dwgEqr8XeXgLbZk7L2filFQkmx1STs71ERv24eQmFt6ngq6aEINYC/7Q5hShwAxcxd7PNK4WZ0Ag2fse+2jQNRyY1ZLpFXkcv9rTztYsnLBWusfclQzidqac+SrleqnaKp0Ri8X4bhvosT97799fPMlKChwCE9CuLMLRBYBaZplZQnJ9IuhU/rhT7tjQjQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=LCWZgKj4j+y2nm+qJu4BtYoh+ItqKFfUow5gcRMo5Qc=; b=VLRz7VRz7VisFRLfVo1+o67/Ibqhi4lvU/SQp37mTRoXGgXZz+W67Hjg12R527+3nf/m5pYf6h7sDSeS0jqcprDL7tS8bTLgk4PQ5mG4//u6vEdDWrWAAepRrg+uxAHNaeXaDnE9o2rfTuvEQ+RkEDKhZqVI9GTlSinwA7qHolfL5ubUCOhV44v6AvT7VW+p+rnfZW5jeQfI596uzJn1WhU1qlB+/tGD9AVXTX9gvU9lO+q8WwTG6cZ93Tse2xTon2UHj2tG+AAqXIyCUH6cV49dPM+3RPTA579OBTZvt64XZdY1PKEuRVYv4msRbOHmUAzYIm8fuqblhUNjT1wWjg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.160) smtp.rcpttodomain=google.com smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none (0) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=LCWZgKj4j+y2nm+qJu4BtYoh+ItqKFfUow5gcRMo5Qc=; b=KCeHyprmUNc+lZsAdH+f72v4fw+minAq3cbMXwSdbIj1NuzV/cpIXGUZu1SM8dki6gJPcRlIDGLZvJZLZrihqOW5jEZJK0A6mo3JiwJiPVp1bI+KZ67VYag6yXug5SZlypFcKIOmCa6PFSfvQc+sQnZ7mm93Do2xhoBBSmcyUNk9y5EpYgqHq0fR00v8spgk3nVWTeYFOd9XX1rL6v7S3uuEv9tpImtXFrQiw5QESz19sZZH6J2oO8uB8hQS45531eEJ+UACVjLH06tqwLLOs/b1xVapYgb5TAnpK/dp6QUFa2RbLTHrkJFjWIJ5lgCtpEwGKYg1dNwZQ1CUemH6Zw== Received: from SJ0PR05CA0013.namprd05.prod.outlook.com (2603:10b6:a03:33b::18) by DM4PR12MB7576.namprd12.prod.outlook.com (2603:10b6:8:10c::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9769.17; Wed, 1 Apr 2026 18:51:27 +0000 Received: from SJ1PEPF00001CE1.namprd05.prod.outlook.com (2603:10b6:a03:33b:cafe::66) by SJ0PR05CA0013.outlook.office365.com (2603:10b6:a03:33b::18) with Microsoft SMTP Server (version=TLS1_3, cipher=TLS_AES_256_GCM_SHA384) id 15.20.9769.15 via Frontend Transport; Wed, 1 Apr 2026 18:51:27 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.160) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.160 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.160; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.160) by SJ1PEPF00001CE1.mail.protection.outlook.com (10.167.242.9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9769.17 via Frontend Transport; Wed, 1 Apr 2026 18:51:27 +0000 Received: from rnnvmail201.nvidia.com (10.129.68.8) by mail.nvidia.com (10.129.200.66) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Wed, 1 Apr 2026 11:51:06 -0700 Received: from rnnvmail205.nvidia.com (10.129.68.10) by rnnvmail201.nvidia.com (10.129.68.8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.2562.20; Wed, 1 Apr 2026 11:51:06 -0700 Received: from vdi.nvidia.com (10.127.8.10) by mail.nvidia.com (10.129.68.10) with Microsoft SMTP Server id 15.2.2562.20 via Frontend Transport; Wed, 1 Apr 2026 11:50:57 -0700 From: Tariq Toukan To: Eric Dumazet , Jakub Kicinski , Paolo Abeni , Andrew Lunn , "David S. Miller" CC: Simon Horman , Donald Hunter , Jiri Pirko , Jonathan Corbet , Shuah Khan , Saeed Mahameed , "Leon Romanovsky" , Tariq Toukan , Mark Bloch , Shuah Khan , Chuck Lever , "Matthieu Baerts (NGI0)" , Carolina Jubran , Or Har-Toov , Moshe Shemesh , Dragos Tatulea , Shahar Shitrit , Daniel Zahka , Jacob Keller , Cosmin Ratiu , Parav Pandit , Shay Drori , "Adithya Jayachandran" , Kees Cook , "Daniel Jurgens" , , , , , , Gal Pressman , Jiri Pirko Subject: [PATCH net-next V4 05/12] devlink: Add dump support for device-level resources Date: Wed, 1 Apr 2026 21:49:40 +0300 Message-ID: <20260401184947.135205-6-tariqt@nvidia.com> X-Mailer: git-send-email 2.44.0 In-Reply-To: <20260401184947.135205-1-tariqt@nvidia.com> References: <20260401184947.135205-1-tariqt@nvidia.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-NV-OnPremToCloud: ExternallySecured X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: SJ1PEPF00001CE1:EE_|DM4PR12MB7576:EE_ X-MS-Office365-Filtering-Correlation-Id: 0e5f8892-788d-4d0c-26fa-08de901fae52 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|82310400026|1800799024|376014|7416014|36860700016|18002099003|56012099003|22082099003; X-Microsoft-Antispam-Message-Info: S0+8wKbH2PotjuSvdSDDszU9hVWebC89ctwsLuxrHGGJdqqcBECtViTbV/x1SOiqPdtVO+ATAtKUGgl2nO+CY51VYz7GzsKFoJL/UypBoWM6kq/hccAr7eBKOsMyTtqn4992AcbCJ8l9XoSraM7dI9FZPt4PIjtM5X9TjXVN0EPwIcNBC5H7FRhhRQPyWzBUBQRyjTnpknHUJNsk+Aa+ZtN8gdx0ZQG8ALJU1UBh8WmmDzO2cczf3wWAOHW8DcgigI/TksyEG/3LYuCouwEXLCOK9HlA38CTISvJ/ugvSLcDWR+Jcqb+t0j1dQ6GzWOLpxcQH8Vw40uPzwT/QROF1O1bK+rO2+Co/7GM9ipV9aSe+WWRAVG73XVWG0Gwph92mGE/ye6xxkYckwhrONJEW5FuQPIq70GB9KdVqAYXn/Ihb4z/wJwJo6INqYwQFVqcinQ1esz7xJrbkbIFfxr7htNMQ2Q99Ng5o6rClZdqEMLbY8v0f1YvxY4780Cq9U0MQk6j1YVZ2Q2+iBl+y1OcPaJFSfBbX8CSFXBM9E1aXjjCCvN0hpMdnmcQgHdbu/Rtd5+DIUbxv98uapDDXyH8Q+ZwCZM1XvSCWaWAks9ydetI5qhLFJ5sDGAPf9TumZso5Pd1Oht0F0JeK9CoDdI0eS4VpdqwIRXTtkbrMPbsI0jDB+QyxRyLDeg4kmlHyyhDcZubEg6Yu3L5NvesclnSjDTBWjqKYyjZtZlu5UAcoBLodhHqooVnoTlVXsz1vpknEroVT0hWyqfSmRSvrooW2g== X-Forefront-Antispam-Report: CIP:216.228.117.160;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:mail.nvidia.com;PTR:dc6edge1.nvidia.com;CAT:NONE;SFS:(13230040)(82310400026)(1800799024)(376014)(7416014)(36860700016)(18002099003)(56012099003)(22082099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: mX36ouBQvqWNu6d6EA87g9rXH+ktYxqh6LN+OUaQNoD+erMsYXTJSCPBnfU8ePDxpGus14mOt5gzKakusLtwUDF7jZyX+F9oAIHni5/pMw8poMTjHUZVzeJuET7b7ZqEaYJwgjlQP+10bLzlLxlJ588nVPX62SwYnxf/nIr5b1RpS6to9jo6ltlbmXJJwcvqDXtJLPD4iEpZUlvMbsL+RGNIAZlTkWHgslGVEezMWsdfWg5H1TNRZxQKf3wePuomyaz9IYenYeVeqG8s7nD7RMOIUXvHYkU8m0cpMmv+GvfKly02bNZmr+5LcRz74NK0mjeEWdsr5RuBpzEo59PevDkNg0+pCbwsEY7usu7ZVujJvzmuYoTet7Y5MOBw5/OJKnK4FYepqZdUUfcidNlVhGBFDk5TmiUwcRcfXjN1bt/ugdGa9QNg/aTwIN+AwOv7 X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 01 Apr 2026 18:51:27.4886 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 0e5f8892-788d-4d0c-26fa-08de901fae52 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a;Ip=[216.228.117.160];Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: SJ1PEPF00001CE1.namprd05.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM4PR12MB7576 Content-Type: text/plain; charset="utf-8" From: Or Har-Toov Add dumpit handler for resource-dump command to iterate over all devlink devices and show their resources. $ 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 Reviewed-by: Shay Drori Reviewed-by: Moshe Shemesh Reviewed-by: Jiri Pirko Signed-off-by: Tariq Toukan --- Documentation/netlink/specs/devlink.yaml | 6 +- net/devlink/netlink_gen.c | 20 +++++- net/devlink/netlink_gen.h | 4 +- net/devlink/resource.c | 77 ++++++++++++++++++++++++ 4 files changed, 102 insertions(+), 5 deletions(-) diff --git a/Documentation/netlink/specs/devlink.yaml b/Documentation/netli= nk/specs/devlink.yaml index b495d56b9137..c423e049c7bd 100644 --- a/Documentation/netlink/specs/devlink.yaml +++ b/Documentation/netlink/specs/devlink.yaml @@ -1764,13 +1764,17 @@ operations: - bus-name - dev-name - index - reply: + reply: &resource-dump-reply value: 36 attributes: - bus-name - dev-name - index - resource-list + dump: + request: + attributes: *dev-id-attrs + reply: *resource-dump-reply =20 - name: reload diff --git a/net/devlink/netlink_gen.c b/net/devlink/netlink_gen.c index eb35e80e01d1..a5a47a4c6de8 100644 --- a/net/devlink/netlink_gen.c +++ b/net/devlink/netlink_gen.c @@ -305,7 +305,14 @@ static const struct nla_policy devlink_resource_set_nl= _policy[DEVLINK_ATTR_INDEX }; =20 /* DEVLINK_CMD_RESOURCE_DUMP - do */ -static const struct nla_policy devlink_resource_dump_nl_policy[DEVLINK_ATT= R_INDEX + 1] =3D { +static const struct nla_policy devlink_resource_dump_do_nl_policy[DEVLINK_= ATTR_INDEX + 1] =3D { + [DEVLINK_ATTR_BUS_NAME] =3D { .type =3D NLA_NUL_STRING, }, + [DEVLINK_ATTR_DEV_NAME] =3D { .type =3D NLA_NUL_STRING, }, + [DEVLINK_ATTR_INDEX] =3D NLA_POLICY_FULL_RANGE(NLA_UINT, &devlink_attr_in= dex_range), +}; + +/* DEVLINK_CMD_RESOURCE_DUMP - dump */ +static const struct nla_policy devlink_resource_dump_dump_nl_policy[DEVLIN= K_ATTR_INDEX + 1] =3D { [DEVLINK_ATTR_BUS_NAME] =3D { .type =3D NLA_NUL_STRING, }, [DEVLINK_ATTR_DEV_NAME] =3D { .type =3D NLA_NUL_STRING, }, [DEVLINK_ATTR_INDEX] =3D NLA_POLICY_FULL_RANGE(NLA_UINT, &devlink_attr_in= dex_range), @@ -680,7 +687,7 @@ static const struct nla_policy devlink_notify_filter_se= t_nl_policy[DEVLINK_ATTR_ }; =20 /* Ops table for devlink */ -const struct genl_split_ops devlink_nl_ops[74] =3D { +const struct genl_split_ops devlink_nl_ops[75] =3D { { .cmd =3D DEVLINK_CMD_GET, .validate =3D GENL_DONT_VALIDATE_STRICT, @@ -958,10 +965,17 @@ const struct genl_split_ops devlink_nl_ops[74] =3D { .pre_doit =3D devlink_nl_pre_doit, .doit =3D devlink_nl_resource_dump_doit, .post_doit =3D devlink_nl_post_doit, - .policy =3D devlink_resource_dump_nl_policy, + .policy =3D devlink_resource_dump_do_nl_policy, .maxattr =3D DEVLINK_ATTR_INDEX, .flags =3D GENL_CMD_CAP_DO, }, + { + .cmd =3D DEVLINK_CMD_RESOURCE_DUMP, + .dumpit =3D devlink_nl_resource_dump_dumpit, + .policy =3D devlink_resource_dump_dump_nl_policy, + .maxattr =3D DEVLINK_ATTR_INDEX, + .flags =3D GENL_CMD_CAP_DUMP, + }, { .cmd =3D DEVLINK_CMD_RELOAD, .validate =3D 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_AT= TR_SELFTEST_ID_FLASH + 1]; =20 /* Ops table for devlink */ -extern const struct genl_split_ops devlink_nl_ops[74]; +extern const struct genl_split_ops devlink_nl_ops[75]; =20 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_bu= ff *skb, struct genl_info *info); int devlink_nl_resource_set_doit(struct sk_buff *skb, struct genl_info *in= fo); int devlink_nl_resource_dump_doit(struct sk_buff *skb, struct genl_info *i= nfo); +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 f3014ec425c4..02fb36e25c52 100644 --- a/net/devlink/resource.c +++ b/net/devlink/resource.c @@ -223,6 +223,31 @@ static int devlink_resource_put(struct devlink *devlin= k, struct sk_buff *skb, return -EMSGSIZE; } =20 +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 =3D 0; + int err; + + list_for_each_entry(resource, resource_list_head, list) { + if (i < *idx) { + i++; + continue; + } + err =3D devlink_resource_put(devlink, skb, resource); + if (err) { + *idx =3D i; + return err; + } + i++; + } + *idx =3D 0; + return 0; +} + static int devlink_resource_fill(struct genl_info *info, enum devlink_command cmd, int flags) { @@ -302,6 +327,58 @@ int devlink_nl_resource_dump_doit(struct sk_buff *skb,= struct genl_info *info) return devlink_resource_fill(info, DEVLINK_CMD_RESOURCE_DUMP, 0); } =20 +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 =3D devlink_dump_state(cb); + struct nlattr *resources_attr; + int start_idx =3D state->idx; + void *hdr; + int err; + + if (list_empty(&devlink->resource_list)) + return 0; + + err =3D -EMSGSIZE; + hdr =3D genlmsg_put(skb, NETLINK_CB(cb->skb).portid, cb->nlh->nlmsg_seq, + &devlink_nl_family, flags, DEVLINK_CMD_RESOURCE_DUMP); + if (!hdr) + return err; + + if (devlink_nl_put_handle(skb, devlink)) + goto nla_put_failure; + + resources_attr =3D nla_nest_start_noflag(skb, DEVLINK_ATTR_RESOURCE_LIST); + if (!resources_attr) + goto nla_put_failure; + + err =3D devlink_resource_list_fill(skb, devlink, + &devlink->resource_list, &state->idx); + if (err) { + if (state->idx =3D=3D start_idx) + goto resource_list_cancel; + nla_nest_end(skb, resources_attr); + genlmsg_end(skb, hdr); + return err; + } + nla_nest_end(skb, resources_attr); + genlmsg_end(skb, hdr); + return 0; + +resource_list_cancel: + 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) --=20 2.44.0