From nobody Sun Feb 8 17:46:35 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 E492F26E146; Mon, 5 May 2025 17:33:31 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746466412; cv=none; b=h1o6FWD0zLdkBiQXYVhKuaqgSgc77EnHonMjmtSfcny1v4lLzaowN03P3wGO/CRhGZlp2Pg7cfMzGsODZrHTOsHD4QTRL+jq1hwvkW3uf/fye8iNA83lVIw8DLWnvNnLyCa2HxdoT9VIVMt+lPLHs+OXirYsh/IHf8fOg5rcymA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746466412; c=relaxed/simple; bh=qdjjg9250uAChp/B6CMoiJw5KiM08dmL8XUQ0eA5f48=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=H+/HaEGYkhOw+OQTHrq01u4TDrKpwAy/di736IpwqYwFqeb33VnT6GayL4NxvVFtwmBkekGefK0ANiUCd08RVsd3F8TVh8RA9Iv7XafUXo2C3ItoY8gu3PP+amqlwUcmwl6yV2qSaiBRtLDPI6ONQkNBp9Yj7gc81u+/XwUQwR8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=ZZMZfYL0; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="ZZMZfYL0" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 791C8C4CEF3; Mon, 5 May 2025 17:33:29 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1746466411; bh=qdjjg9250uAChp/B6CMoiJw5KiM08dmL8XUQ0eA5f48=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=ZZMZfYL0wg3jKpcHxGkRonNwBweQMAfERjDC08g++ALJOaVgi9sNb43/6F4hnKOuQ WZ8W0iI0f+qyUKBTHraI8gKWCyXxA6jlOF4YEZt+AuiWtKGQLqYKvT/0agjBNjRtHV FO3KLKroOYedv5L+iLWbOHEsJaoz9BXL59s1YqDc1yolQ5pbleBDHvrZMcqugwFIZF z8gSzK8w1nfauiv1dxr9uW30rt1H8buV2diGxLJS/mrZb4DLAIzLyA98+YMPwDad3T m8LwlF6MEi756piFCw+tEGZFRDJX66zCN+pRGGqKsZRN+hMXVLWybmXukpqBEmVJKn boZQm7F/CclAg== From: Jeff Layton Date: Mon, 05 May 2025 13:33:15 -0400 Subject: [PATCH v7 01/10] ref_tracker: don't use %pK in pr_ostream() output Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250505-reftrack-dbgfs-v7-1-f78c5d97bcca@kernel.org> References: <20250505-reftrack-dbgfs-v7-0-f78c5d97bcca@kernel.org> In-Reply-To: <20250505-reftrack-dbgfs-v7-0-f78c5d97bcca@kernel.org> To: Andrew Morton , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Jani Nikula , Joonas Lahtinen , Rodrigo Vivi , Tvrtko Ursulin Cc: Kuniyuki Iwashima , Qasim Ijaz , Nathan Chancellor , Andrew Lunn , linux-kernel@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, Jeff Layton , =?utf-8?q?Thomas_Wei=C3=9Fschuh?= X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1830; i=jlayton@kernel.org; h=from:subject:message-id; bh=qdjjg9250uAChp/B6CMoiJw5KiM08dmL8XUQ0eA5f48=; b=owEBbQKS/ZANAwAIAQAOaEEZVoIVAcsmYgBoGPZlA649+0ym6Pjl0o9ekDaT+BzlE7le9pLYh wydcbe0okGJAjMEAAEIAB0WIQRLwNeyRHGyoYTq9dMADmhBGVaCFQUCaBj2ZQAKCRAADmhBGVaC FdrnD/9pIPVYXvlrXdIoQMCxtxeUFjNCIpZhdiPu/DomgQZ8WFpITeRxommwq8UbYqqzGXNM0e1 0Rr99g2iDjQ6zfXvIvUScZtdNfbhFp3wjRFF+y/V64gMOOQu03lor+W3XUfgyyaOpfA2rz7/fLP 68VekzluRXfptoUgSIX1yUaC5JTjfyIGswyoDs6hHq1D3wDQqV5vMFDnrKNEtFga0IOc8CHohL0 /nsWvn+xsUv+2NJLkzcmIhhyEFTn2Qxra9JCdheoADiVOiZWMIZvSgTHZ0vx0MLGD1zPBq/u5fc Ou33WNh/mgeorkpeYIrZjUbyMmdj97WW3JY+gFZIrkwL1TuJBXBn11LUUR+uTIzw6nCAUvcb8gA xD7xYwBXq0gHFSOHF7S6QH8EOPtoSiOzYSrAtBTuwL5cabNMkevN/56AoCxEgkgPQyJAibMYWk/ slW4CGwFqYwoKoj8sPCZqrZI9pPMjVS8B/7UY3BOEb2YQu2mqppZ/h2bassaK0dJv3XGxviJ1Gs Kylk3isk//1fTw/TGSaJw18f3hmC1IeqsQWoMTbOXWFLl62zy1/jq0TBnS7H3euop3wUKbpjc+I t+SeFrSWQoTsNeJGtbq3G7Qsd6GUHJmLlcFpVqT9w5R74Isp4M6tPtB1qK3gGv1TrlR0T7YptU8 dDDhekYX6+5r8lw== X-Developer-Key: i=jlayton@kernel.org; a=openpgp; fpr=4BC0D7B24471B2A184EAF5D3000E684119568215 As Thomas Wei=C3=9Fschuh points out [1], it is now preferable to use %p instead of hashed pointers with printk(), since raw pointers should no longer be leaked into the kernel log. Change the ref_tracker infrastructure to use %p instead of %pK in its formats. [1]: https://lore.kernel.org/netdev/20250414-restricted-pointers-net-v1-0-1= 2af0ce46cdd@linutronix.de/ Cc: Thomas Wei=C3=9Fschuh Reviewed-by: Thomas Wei=C3=9Fschuh Signed-off-by: Jeff Layton --- lib/ref_tracker.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/ref_tracker.c b/lib/ref_tracker.c index cf5609b1ca79361763abe5a3a98484a3ee591ff2..de71439e12a3bab6456910986fa= 611dfbdd97980 100644 --- a/lib/ref_tracker.c +++ b/lib/ref_tracker.c @@ -96,7 +96,7 @@ __ref_tracker_dir_pr_ostream(struct ref_tracker_dir *dir, =20 stats =3D ref_tracker_get_stats(dir, display_limit); if (IS_ERR(stats)) { - pr_ostream(s, "%s@%pK: couldn't get stats, error %pe\n", + pr_ostream(s, "%s@%p: couldn't get stats, error %pe\n", dir->name, dir, stats); return; } @@ -107,13 +107,13 @@ __ref_tracker_dir_pr_ostream(struct ref_tracker_dir *= dir, stack =3D stats->stacks[i].stack_handle; if (sbuf && !stack_depot_snprint(stack, sbuf, STACK_BUF_SIZE, 4)) sbuf[0] =3D 0; - pr_ostream(s, "%s@%pK has %d/%d users at\n%s\n", dir->name, dir, + pr_ostream(s, "%s@%p has %d/%d users at\n%s\n", dir->name, dir, stats->stacks[i].count, stats->total, sbuf); skipped -=3D stats->stacks[i].count; } =20 if (skipped) - pr_ostream(s, "%s@%pK skipped reports about %d/%d users.\n", + pr_ostream(s, "%s@%p skipped reports about %d/%d users.\n", dir->name, dir, skipped, stats->total); =20 kfree(sbuf); --=20 2.49.0 From nobody Sun Feb 8 17:46:35 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 7373C26B942; Mon, 5 May 2025 17:33:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746466413; cv=none; b=Qqem8A4cN2+AEeoL1C61y36ux4OegjJYMkrBeATv9isFmAvYUkpSPhL6spDl5e6jfTNd/1m3ORd4ctWdNoqIr0emvlje+08YaVoOZx23sFo0qvvgehVlSU+kYn5WbUYd4w+UbKTpBYQWPiNg5SeWeqaKiDalh57tYrALTPzaqPo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746466413; c=relaxed/simple; bh=h02vtg+uo9MQLcJqO0oaAc8ETCkA4CEZoiZkSocwMrw=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=il1c4bI0Tgtkeb7aBPiQwHEzh9DjLN5SbGkAhxYDe8f2lrz4Q3jzTh50d1QIHe5Y8sOH4ZSaoXXQIaCiOWgrp+BCGlJ6SECRmjG/rYCTkjJhx2FnLSbes56zIeDO+HlYRRHirB3i+nrGZcRbcJd6RIFOUcd7qLjJ3wG7DrrF7rE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=F4aDHFdn; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="F4aDHFdn" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 8D892C4CEF8; Mon, 5 May 2025 17:33:31 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1746466413; bh=h02vtg+uo9MQLcJqO0oaAc8ETCkA4CEZoiZkSocwMrw=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=F4aDHFdnNcLca9gYOHfd9fOmbe/zPFx1H4HEGYfT8AtoutRC+2e9fPF5Oy2m68lEg Cs+7qCDb0KeKfGp8b7l9YmXPQxlZDIs9kafuYjdCnsBFu1jjXc41LPFsbANwHXF65Q L+VccfGmGKjzqadV/eew2SXIEGL0Zo+hEnASiiIzLZvCMH59w7g/V4c8zZ3hkRL8yY TO79EJcWuMKlQiu0JzXiNseffSqrBngCdSITebXy9aVbnzCfCx8MzhzUkdFd6KnaJB AX8nxOnOtzjv7T8LaFVIz4gjjbi8+NaaskRFLqWZ2o2hqESq5ImLsUtH56UPQfotz4 SgBZwwIaTAILw== From: Jeff Layton Date: Mon, 05 May 2025 13:33:16 -0400 Subject: [PATCH v7 02/10] ref_tracker: add a top level debugfs directory for ref_tracker Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250505-reftrack-dbgfs-v7-2-f78c5d97bcca@kernel.org> References: <20250505-reftrack-dbgfs-v7-0-f78c5d97bcca@kernel.org> In-Reply-To: <20250505-reftrack-dbgfs-v7-0-f78c5d97bcca@kernel.org> To: Andrew Morton , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Jani Nikula , Joonas Lahtinen , Rodrigo Vivi , Tvrtko Ursulin Cc: Kuniyuki Iwashima , Qasim Ijaz , Nathan Chancellor , Andrew Lunn , linux-kernel@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, Jeff Layton X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1387; i=jlayton@kernel.org; h=from:subject:message-id; bh=h02vtg+uo9MQLcJqO0oaAc8ETCkA4CEZoiZkSocwMrw=; b=owEBbQKS/ZANAwAIAQAOaEEZVoIVAcsmYgBoGPZlhSQZ/mtt0iZdXA5OKFjNHwjCuyEL3zyt1 RCjvhUpZxeJAjMEAAEIAB0WIQRLwNeyRHGyoYTq9dMADmhBGVaCFQUCaBj2ZQAKCRAADmhBGVaC FeP5EADFj06mm8aeYDTcUwtRPTKeSCnURsq7GNBniSrIFvK0n5zZsKEFPa/16/zLM8gloV0hknv gJkgTJITSMmzf3tFhQI2rQX6C37CVL0NM7JK5Yu3iz0rJT4KQRCF7jwkctJVFM0bPevfvryhq4l WBFt5bO21jTpaeV88Ke6GmYsU8JV1t7PUT1EQv9V65tKxY9Y4IopC7RGuGR6e01xYPKmlw25xdS kAERPz0HIlMGou6Rmg5zuv0eKbQ/1P86WIYLzYoeNHWMyt9e/ktQWA/WSV8MQUleoCkwtRQ+RXe sb/krxnqU1e3rbs6pE91aw8vjc8HB1+791MOzwgDtP/smWCL2cChLK5DgUl2/30PfVT3ik2kp2t NstaF9mG4YdEX7HJ6iOYtCGgkzXfbPBI1lXMfjyjt4MqzSOR1zMwXHpphUxQUtLJQaJl3opLKHS 8YN1Hj4OBUL1X458kRzkXATaJZoE0mFLiEDFfU1rfTJLanyMbuicf0YHzy2H7ZR9zFNB6RkUI5k WBGovtNm7zGDYp+K2JMQ9STFO6zK5FBrKPTY0nDnV4ZpbnG2DH8aqMdiSbLIy36034Pa/+b34Zn eMfyzbFUt3Ai1seTue9jR6W7phXBkJ2OI/E2/1Z5I9U6o69EAfiyX6Dztyf5rmyMzB6RUFVVtCv lawmhm2QoEZGKkg== X-Developer-Key: i=jlayton@kernel.org; a=openpgp; fpr=4BC0D7B24471B2A184EAF5D3000E684119568215 Add a new "ref_tracker" directory in debugfs. Each individual refcount tracker can register files under there to display info about currently-held references. Reviewed-by: Andrew Lunn Signed-off-by: Jeff Layton --- lib/ref_tracker.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/lib/ref_tracker.c b/lib/ref_tracker.c index de71439e12a3bab6456910986fa611dfbdd97980..a66cde325920780cfe7529ea9d8= 27d0ee943318d 100644 --- a/lib/ref_tracker.c +++ b/lib/ref_tracker.c @@ -12,6 +12,8 @@ #define REF_TRACKER_STACK_ENTRIES 16 #define STACK_BUF_SIZE 1024 =20 +static struct dentry *ref_tracker_debug_dir =3D (struct dentry *)-ENOENT; + struct ref_tracker { struct list_head head; /* anchor into dir->list or dir->quarantine */ bool dead; @@ -273,3 +275,17 @@ int ref_tracker_free(struct ref_tracker_dir *dir, return 0; } EXPORT_SYMBOL_GPL(ref_tracker_free); + +#ifdef CONFIG_DEBUG_FS +#include + +static int __init ref_tracker_debugfs_init(void) +{ + ref_tracker_debug_dir =3D debugfs_create_dir("ref_tracker", NULL); + if (IS_ERR(ref_tracker_debug_dir)) + pr_warn("ref_tracker: unable to create debugfs ref_tracker directory: %p= e\n", + ref_tracker_debug_dir); + return 0; +} +late_initcall(ref_tracker_debugfs_init); +#endif /* CONFIG_DEBUG_FS */ --=20 2.49.0 From nobody Sun Feb 8 17:46:35 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 DDDD32701A4; Mon, 5 May 2025 17:33:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746466416; cv=none; b=Uusig/N07ciF3qdlDc3U0NCvOPAp26YZ9IsKTFsO6God9/sGZ9lvYhQYdL9QoctOjEEkPmbMQ2Jx83hJ1VRHtG5lL/OngtMKI1DlATz7jjY+xhNBOz6vje28yOFVJVxVuIUO5zaEs3FF37AnQOdaVXgIa1/dGLRUWW7aSa57oSg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746466416; c=relaxed/simple; bh=XwNqVIexu/lptKD/9mAKjpUTud5pI8FDB+cvkqs7KjY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=tp5YnJq5ov24O45D5T1/ZmHQx36KiWzIjGslwgU8zCj9euwTZ0tzQC3zOU04tD8873s0Mw6wthkVa8B69Gq/xGwSyr4kSqX/GZ2yQ2pf9DfTIP/5iAAQBK4OI7JmgIWToR152RiDkVjxonq8chtmE8TNG43AlkgWtVxNWLtfN78= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=gL5CUQ9l; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="gL5CUQ9l" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 8D485C4CEEE; Mon, 5 May 2025 17:33:33 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1746466415; bh=XwNqVIexu/lptKD/9mAKjpUTud5pI8FDB+cvkqs7KjY=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=gL5CUQ9lz1OJlb5Hd0RN9DV+gQXwBzOpJX5wsFfSroA/GzgQ2ihafylcwIxeufS6W vmsL5HUZuiWufzIjfCoZ69A4GqEtSlHoNBOLsdRfoqUJqUhGLcKUxW8+Pfvn+ErGU/ 6UvczOb3YdVd5vDV4UlvelBZf+9KdFvVFdEqco1jFu/yU5o0WcKl+6jQzBh4ZcP95Q 2zPmpS7wCRzW3nL1mQyHwE6z2SOSSp2q9cY09EPD7CkoPaVjUVbs4sqO3vg6tjCfeP WhedAtD+1Qb6DQ2sJS7PxlJDTOTWoU0y1BtO51F5qpNtgKSLIwXFZUnzXRpxJhuzNz s6ArrUn+tOBZA== From: Jeff Layton Date: Mon, 05 May 2025 13:33:17 -0400 Subject: [PATCH v7 03/10] ref_tracker: have callers pass output function to pr_ostream() Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250505-reftrack-dbgfs-v7-3-f78c5d97bcca@kernel.org> References: <20250505-reftrack-dbgfs-v7-0-f78c5d97bcca@kernel.org> In-Reply-To: <20250505-reftrack-dbgfs-v7-0-f78c5d97bcca@kernel.org> To: Andrew Morton , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Jani Nikula , Joonas Lahtinen , Rodrigo Vivi , Tvrtko Ursulin Cc: Kuniyuki Iwashima , Qasim Ijaz , Nathan Chancellor , Andrew Lunn , linux-kernel@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, Jeff Layton X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=4242; i=jlayton@kernel.org; h=from:subject:message-id; bh=XwNqVIexu/lptKD/9mAKjpUTud5pI8FDB+cvkqs7KjY=; b=owEBbQKS/ZANAwAIAQAOaEEZVoIVAcsmYgBoGPZlMQ90l7Y0Fpb1tcNnuKqBU+1AkPwPJCbwv zV53wXkqHCJAjMEAAEIAB0WIQRLwNeyRHGyoYTq9dMADmhBGVaCFQUCaBj2ZQAKCRAADmhBGVaC Fd6aD/48q9WF3rO9QZKZQoDwaRaOcE8AGZb61hvWvJFRJvRXGxnBBP39T7ZpCBtB/1YOTVRWO8r IZGwLs4CqKIuIwLQmM75mUsvzeZ+zgLC60vscQp6jpzV3owwIwGr4zLm9eIeNIlNyllodL9eyy7 7HczUx8znOF3yCye9LWsF4fpWrmMMdMM7jHkLb0EzigFjX8vhQEh6FaX6x+HFWXjnynIFx4OGPk 33gUHRh4HyN3ru2+ldUWRw+tmwXumq2FP8D+Ua86cNoPOm3rUBW1b3b7k25IaokC7Xl1sPZBT8e 5OFHwlb2SMILS47ETEVn2hKZQ9vXVvVvZdEI+PHQAExF8Ikeb1ZCin3zuQ11oiff/iposHdh08p 0lYqjPaa5HXblsFSJzs/K+AXI+ZfKxI5JvPUIkWuN5CUEJn13RsnqPL2tQBaDxvE3fwuaCUvX8S G4JeN/05jb28ZQtnlNa1VtcHnvvypzv/q+PHsy6aIbT9JIA7O7bWiZ70jhoSzOcnloJnsFm7mNt ntJFLGvuZyhdMirhVd3UoaOEl64dxzV6uLCrM5YzjS0WMu3UsfkB/Kxwcb1hYrGS8DLjTmGaiuN cDFYERFDuvR5aY+8QhUMdvWHnBEFrBnZvXfvroe8qxOq/iyBzL+PUmbpKKQRrOmTHPCWT37eK7S oY0qP67ElbL19RA== X-Developer-Key: i=jlayton@kernel.org; a=openpgp; fpr=4BC0D7B24471B2A184EAF5D3000E684119568215 In a later patch, we'll be adding a 3rd mechanism for outputting ref_tracker info via seq_file. Instead of a conditional, have the caller set a pointer to an output function in struct ostream. As part of this, the log prefix must be explicitly passed in, as it's too late for the pr_fmt macro. Reviewed-by: Andrew Lunn Signed-off-by: Jeff Layton --- include/linux/ref_tracker.h | 2 ++ lib/ref_tracker.c | 51 ++++++++++++++++++++++++++++++++---------= ---- 2 files changed, 38 insertions(+), 15 deletions(-) diff --git a/include/linux/ref_tracker.h b/include/linux/ref_tracker.h index 8eac4f3d52547ccbaf9dcd09962ce80d26fbdff8..a0a1ee43724ffa00e60c116be18= e481bfe1d1455 100644 --- a/include/linux/ref_tracker.h +++ b/include/linux/ref_tracker.h @@ -6,6 +6,8 @@ #include #include =20 +#define __ostream_printf __printf(2, 3) + struct ref_tracker; =20 struct ref_tracker_dir { diff --git a/lib/ref_tracker.c b/lib/ref_tracker.c index a66cde325920780cfe7529ea9d827d0ee943318d..510d927c785576fd90292d325d2= 0a465d5f38079 100644 --- a/lib/ref_tracker.c +++ b/lib/ref_tracker.c @@ -65,21 +65,37 @@ ref_tracker_get_stats(struct ref_tracker_dir *dir, unsi= gned int limit) } =20 struct ostream { + void __ostream_printf (*func)(struct ostream *stream, char *fmt, ...); + char *prefix; char *buf; int size, used; }; =20 +static void __ostream_printf pr_ostream_log(struct ostream *stream, char *= fmt, ...) +{ + va_list args; + + va_start(args, fmt); + vprintk(fmt, args); + va_end(args); +} + +static void __ostream_printf pr_ostream_buf(struct ostream *stream, char *= fmt, ...) +{ + int ret, len =3D stream->size - stream->used; + va_list args; + + va_start(args, fmt); + ret =3D vsnprintf(stream->buf + stream->used, len, fmt, args); + va_end(args); + stream->used +=3D min(ret, len); +} + #define pr_ostream(stream, fmt, args...) \ ({ \ struct ostream *_s =3D (stream); \ \ - if (!_s->buf) { \ - pr_err(fmt, ##args); \ - } else { \ - int ret, len =3D _s->size - _s->used; \ - ret =3D snprintf(_s->buf + _s->used, len, pr_fmt(fmt), ##args); \ - _s->used +=3D min(ret, len); \ - } \ + _s->func(_s, fmt, ##args); \ }) =20 static void @@ -98,8 +114,8 @@ __ref_tracker_dir_pr_ostream(struct ref_tracker_dir *dir, =20 stats =3D ref_tracker_get_stats(dir, display_limit); if (IS_ERR(stats)) { - pr_ostream(s, "%s@%p: couldn't get stats, error %pe\n", - dir->name, dir, stats); + pr_ostream(s, "%s%s@%p: couldn't get stats, error %pe\n", + s->prefix, dir->name, dir, stats); return; } =20 @@ -109,14 +125,15 @@ __ref_tracker_dir_pr_ostream(struct ref_tracker_dir *= dir, stack =3D stats->stacks[i].stack_handle; if (sbuf && !stack_depot_snprint(stack, sbuf, STACK_BUF_SIZE, 4)) sbuf[0] =3D 0; - pr_ostream(s, "%s@%p has %d/%d users at\n%s\n", dir->name, dir, - stats->stacks[i].count, stats->total, sbuf); + pr_ostream(s, "%s%s@%p has %d/%d users at\n%s\n", s->prefix, + dir->name, dir, stats->stacks[i].count, + stats->total, sbuf); skipped -=3D stats->stacks[i].count; } =20 if (skipped) - pr_ostream(s, "%s@%p skipped reports about %d/%d users.\n", - dir->name, dir, skipped, stats->total); + pr_ostream(s, "%s%s@%p skipped reports about %d/%d users.\n", + s->prefix, dir->name, dir, skipped, stats->total); =20 kfree(sbuf); =20 @@ -126,7 +143,8 @@ __ref_tracker_dir_pr_ostream(struct ref_tracker_dir *di= r, void ref_tracker_dir_print_locked(struct ref_tracker_dir *dir, unsigned int display_limit) { - struct ostream os =3D {}; + struct ostream os =3D { .func =3D pr_ostream_log, + .prefix =3D "ref_tracker: " }; =20 __ref_tracker_dir_pr_ostream(dir, display_limit, &os); } @@ -145,7 +163,10 @@ EXPORT_SYMBOL(ref_tracker_dir_print); =20 int ref_tracker_dir_snprint(struct ref_tracker_dir *dir, char *buf, size_t= size) { - struct ostream os =3D { .buf =3D buf, .size =3D size }; + struct ostream os =3D { .func =3D pr_ostream_buf, + .prefix =3D "ref_tracker: ", + .buf =3D buf, + .size =3D size }; unsigned long flags; =20 spin_lock_irqsave(&dir->lock, flags); --=20 2.49.0 From nobody Sun Feb 8 17:46:35 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 713002701CC; Mon, 5 May 2025 17:33:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746466417; cv=none; b=R5x5lvFz/CdtRFk6hz8AXtLCNKX/8u3Ps7B2BsH+xsZ27Wi7kI2BjkWTh5putfeN5/pxagoIF4wvEekA697bYZDWua5mZV0xwUp3YSd72WW8Pf2vAZfTdZYydrKQ7F8nkhuTojVGUEwt4rHph0mBRQwOomybyvZEu6N5ClfhPmw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746466417; c=relaxed/simple; bh=hjRJC+ai7FiQIRoBwApJsexl2tKLt7dyencvNsS2N6g=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=mdbLn5zr/Du0jtqgnXN5zvz8yCIXNu6DfqisJNuf6cP0oIPCq7go22xkA/MqrmNm4/NVp80aFHw2DOc4CCNuw75pthU/SK2DfMGWNmpk6+hUDXh+Wl8kJ6L97VWlxSlkFadFhHIBerWi311Trmf08i4+MMctWngF7CjxDVnnpps= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=KTt+7ha7; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="KTt+7ha7" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 8BF5EC4CEEF; Mon, 5 May 2025 17:33:35 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1746466417; bh=hjRJC+ai7FiQIRoBwApJsexl2tKLt7dyencvNsS2N6g=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=KTt+7ha7+cbciHtzxBF084R4LIl6H8uCODaTiOoQIYMC++Dsdcba4L0dLjSECu+b0 WM6zq2uCSJENZj8vvGo1gcRCRm37NT5Q1qv5yFQDlZLZazMe5UbHzSkO8Mh3U1m5NO P5olxssaVcxtHXc4hSY1BdvKi8vQY8XJUwjt/d7FDq5NplgAHP5i4Rk91n4GqeQU7f L99FxJRt1vlFEWkQv5349vf4c5X8MfMzFrqlosmD9RK6Yse6XfOGn27Ij6UodxWLCk IR6u5DAVszUXetMWQ1ZhT6pnEZZgb982HCIk0QBBvEKHI4QoNcLLfVHU7KGfFQ2MGC 5Vc8TXBUZwP1Q== From: Jeff Layton Date: Mon, 05 May 2025 13:33:18 -0400 Subject: [PATCH v7 04/10] ref_tracker: add a static classname string to each ref_tracker_dir Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250505-reftrack-dbgfs-v7-4-f78c5d97bcca@kernel.org> References: <20250505-reftrack-dbgfs-v7-0-f78c5d97bcca@kernel.org> In-Reply-To: <20250505-reftrack-dbgfs-v7-0-f78c5d97bcca@kernel.org> To: Andrew Morton , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Jani Nikula , Joonas Lahtinen , Rodrigo Vivi , Tvrtko Ursulin Cc: Kuniyuki Iwashima , Qasim Ijaz , Nathan Chancellor , Andrew Lunn , linux-kernel@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, Jeff Layton X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=5956; i=jlayton@kernel.org; h=from:subject:message-id; bh=hjRJC+ai7FiQIRoBwApJsexl2tKLt7dyencvNsS2N6g=; b=owEBbQKS/ZANAwAIAQAOaEEZVoIVAcsmYgBoGPZlw8L3oWahkdvXhBaIIp4Z+CLh+w/wyZKIi psif/2ckpmJAjMEAAEIAB0WIQRLwNeyRHGyoYTq9dMADmhBGVaCFQUCaBj2ZQAKCRAADmhBGVaC FSMTD/0f4gjSTNBj7L8hCSyLQHjciULUjaGgwE2VO7Hb0TIFJacKwQmSgJa8BwDplItKUHObg3r 42wUhg0QDREo6XeZJQaUdd/vkzQPpGahSBZ/MMevKNzX+oOgY9jHV+Vqv41aQ2WvDA0eBvtpZkR 8yijv8j158ouwpVNaK23ysRZmMnbabLPtFQjMvxJHO3ftQSA5kpvDcOkTZ28Uykh+ad3MJTkhuw mRsz1MjMfHzlTK63OEKlntfKbHfY6RlWMyumqmFhYYafnxC1BdaV4QQOAOS/Ep9jEivMuETBZNY K//Clpm160iEDcgcjBjwEIsG5tTwaD0WSCJhJg71/FDikprueIsQW4MoDsFI5eVnCZGyMijL98P Sh9dX8V7KbKOIwlcIqntfB/55zlSsWVS28S5DzxPzdjeAxXeiFfEvpnMcvAd0sAI8ZihaS1VxAP gKYt23oUYp9mbtQb5ez/DYFe1tUB+7koDzi9BB2TZFIO2FxMfpwpMT2nT55EolS61fuLOM55A5L gz6xyThKprRKTXDuaabfVvWJ3AZSemrTvTTUPSHyjhgjOMlDACHDFI05oOM/EywGMLi0elSKaE2 W4AL+W2GGWS0z3pK2IKjKEWH3NjCzI46a9bGHr/DhyMhMAf8ciLRAcPWCM6gJnjwC9+5aXEk07l vuvytv6/KuyxpJw== X-Developer-Key: i=jlayton@kernel.org; a=openpgp; fpr=4BC0D7B24471B2A184EAF5D3000E684119568215 A later patch in the series will be adding debugfs files for each ref_tracker that get created in ref_tracker_dir_init(). The format will be "class@%px". The current "name" string can vary between ref_tracker_dir objects of the same type, so it's not suitable for this purpose. Add a new "class" string to the ref_tracker dir that describes the the type of object (sans any individual info for that object). Signed-off-by: Jeff Layton --- drivers/gpu/drm/display/drm_dp_tunnel.c | 2 +- drivers/gpu/drm/i915/intel_runtime_pm.c | 3 ++- drivers/gpu/drm/i915/intel_wakeref.c | 2 +- include/linux/ref_tracker.h | 4 ++++ lib/test_ref_tracker.c | 2 +- net/core/dev.c | 2 +- net/core/net_namespace.c | 4 ++-- 7 files changed, 12 insertions(+), 7 deletions(-) diff --git a/drivers/gpu/drm/display/drm_dp_tunnel.c b/drivers/gpu/drm/disp= lay/drm_dp_tunnel.c index 90fe07a89260e21e78f2db7f57a90602be921a11..f2a8ef6abf34d89a642d7c7708c= 41e5b1dc9dece 100644 --- a/drivers/gpu/drm/display/drm_dp_tunnel.c +++ b/drivers/gpu/drm/display/drm_dp_tunnel.c @@ -1920,7 +1920,7 @@ drm_dp_tunnel_mgr_create(struct drm_device *dev, int = max_group_count) } =20 #ifdef CONFIG_DRM_DISPLAY_DP_TUNNEL_STATE_DEBUG - ref_tracker_dir_init(&mgr->ref_tracker, 16, "dptun"); + ref_tracker_dir_init(&mgr->ref_tracker, 16, "drm_dptun", "dptun"); #endif =20 for (i =3D 0; i < max_group_count; i++) { diff --git a/drivers/gpu/drm/i915/intel_runtime_pm.c b/drivers/gpu/drm/i915= /intel_runtime_pm.c index 8d9f4c410546e4144d4bc8bbc6696f3bd9498848..3fdab3b44c08cea16ac2f73aafc= 2bea2ffbb19e7 100644 --- a/drivers/gpu/drm/i915/intel_runtime_pm.c +++ b/drivers/gpu/drm/i915/intel_runtime_pm.c @@ -59,7 +59,8 @@ static struct drm_i915_private *rpm_to_i915(struct intel_= runtime_pm *rpm) =20 static void init_intel_runtime_pm_wakeref(struct intel_runtime_pm *rpm) { - ref_tracker_dir_init(&rpm->debug, INTEL_REFTRACK_DEAD_COUNT, dev_name(rpm= ->kdev)); + ref_tracker_dir_init(&rpm->debug, INTEL_REFTRACK_DEAD_COUNT, + "intel_runtime_pm", dev_name(rpm->kdev)); } =20 static intel_wakeref_t diff --git a/drivers/gpu/drm/i915/intel_wakeref.c b/drivers/gpu/drm/i915/in= tel_wakeref.c index 07e81be4d3920febece34709c63a63204a41583c..5269e64c58a49884f5d71255754= 6272bfdeb8417 100644 --- a/drivers/gpu/drm/i915/intel_wakeref.c +++ b/drivers/gpu/drm/i915/intel_wakeref.c @@ -114,7 +114,7 @@ void __intel_wakeref_init(struct intel_wakeref *wf, "wakeref.work", &key->work, 0); =20 #if IS_ENABLED(CONFIG_DRM_I915_DEBUG_WAKEREF) - ref_tracker_dir_init(&wf->debug, INTEL_REFTRACK_DEAD_COUNT, name); + ref_tracker_dir_init(&wf->debug, INTEL_REFTRACK_DEAD_COUNT, "intel_wakere= f", name); #endif } =20 diff --git a/include/linux/ref_tracker.h b/include/linux/ref_tracker.h index a0a1ee43724ffa00e60c116be18e481bfe1d1455..3968f993db81e95c0d58c814543= 11841c1b9cd35 100644 --- a/include/linux/ref_tracker.h +++ b/include/linux/ref_tracker.h @@ -19,6 +19,7 @@ struct ref_tracker_dir { bool dead; struct list_head list; /* List of active trackers */ struct list_head quarantine; /* List of dead trackers */ + const char *class; /* object classname */ char name[32]; #endif }; @@ -27,6 +28,7 @@ struct ref_tracker_dir { =20 static inline void ref_tracker_dir_init(struct ref_tracker_dir *dir, unsigned int quarantine_count, + const char *class, const char *name) { INIT_LIST_HEAD(&dir->list); @@ -36,6 +38,7 @@ static inline void ref_tracker_dir_init(struct ref_tracke= r_dir *dir, dir->dead =3D false; refcount_set(&dir->untracked, 1); refcount_set(&dir->no_tracker, 1); + dir->class =3D class; strscpy(dir->name, name, sizeof(dir->name)); stack_depot_init(); } @@ -60,6 +63,7 @@ int ref_tracker_free(struct ref_tracker_dir *dir, =20 static inline void ref_tracker_dir_init(struct ref_tracker_dir *dir, unsigned int quarantine_count, + const char *class, const char *name) { } diff --git a/lib/test_ref_tracker.c b/lib/test_ref_tracker.c index b983ceb12afcb84ad60360a1e6fec0072e78ef79..d263502a4c1db248f64a66a468e= 96c8e4cffab25 100644 --- a/lib/test_ref_tracker.c +++ b/lib/test_ref_tracker.c @@ -64,7 +64,7 @@ static int __init test_ref_tracker_init(void) { int i; =20 - ref_tracker_dir_init(&ref_dir, 100, "selftest"); + ref_tracker_dir_init(&ref_dir, 100, "selftest", "selftest"); =20 timer_setup(&test_ref_tracker_timer, test_ref_tracker_timer_func, 0); mod_timer(&test_ref_tracker_timer, jiffies + 1); diff --git a/net/core/dev.c b/net/core/dev.c index 1be7cb73a6024fda6797b6dfc895e4ce25f43251..380d07bec15a1f62ed27c31a6e2= 11e74f3a5561d 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -11620,7 +11620,7 @@ struct net_device *alloc_netdev_mqs(int sizeof_priv= , const char *name, =20 dev->priv_len =3D sizeof_priv; =20 - ref_tracker_dir_init(&dev->refcnt_tracker, 128, name); + ref_tracker_dir_init(&dev->refcnt_tracker, 128, "netdev", name); #ifdef CONFIG_PCPU_DEV_REFCNT dev->pcpu_refcnt =3D alloc_percpu(int); if (!dev->pcpu_refcnt) diff --git a/net/core/net_namespace.c b/net/core/net_namespace.c index b0dfdf791ece5aa8fefdc2aea1ff4a9d9c399d72..008de9675ea98fa8c18628b2f1c= 3aee7f3ebc9c6 100644 --- a/net/core/net_namespace.c +++ b/net/core/net_namespace.c @@ -324,8 +324,8 @@ static __net_init void preinit_net(struct net *net, str= uct user_namespace *user_ { refcount_set(&net->passive, 1); refcount_set(&net->ns.count, 1); - ref_tracker_dir_init(&net->refcnt_tracker, 128, "net refcnt"); - ref_tracker_dir_init(&net->notrefcnt_tracker, 128, "net notrefcnt"); + ref_tracker_dir_init(&net->refcnt_tracker, 128, "net_refcnt", "net_refcnt= "); + ref_tracker_dir_init(&net->notrefcnt_tracker, 128, "net_notrefcnt", "net_= notrefcnt"); =20 get_random_bytes(&net->hash_mix, sizeof(u32)); net->dev_base_seq =3D 1; --=20 2.49.0 From nobody Sun Feb 8 17:46:35 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 749BD266588; Mon, 5 May 2025 17:33:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746466419; cv=none; b=Cp9Geset1vP+7rPqf65vqfp8tebHmjIn/uTEshRF+FlUVcs5ToEWV8/4SDeQUJylG4WK5s7uI5SLdjyO6rEfFjIeXFKuIaBR+hSmLVklgurG1U5MZfo4PKU+auqxq2R/yo80KeGKiWpyTC117TOygQZP8kOhjndsYz017eZ5QzM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746466419; c=relaxed/simple; bh=r/J3RdlUauCReBYN9Ih2mzIpJXEGqxCGvwWWjZoKeqk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=bn+namE47Sg3RQHVgNwA1Oas9l9VTxzaZFkCESUuawJb/djhaAv3Rk1G43hzymuSS2I2YxLwpS6/aSnjMy56hUvTByJQRbNIb16ei2oNknJS/itCcAA9pWLE7hia+rET9Hg8ZXokmXEwnK5AF4FouN88NWBPvKfTNzucFI7ufVs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=gjo+YBTX; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="gjo+YBTX" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 8A762C4CEF3; Mon, 5 May 2025 17:33:37 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1746466419; bh=r/J3RdlUauCReBYN9Ih2mzIpJXEGqxCGvwWWjZoKeqk=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=gjo+YBTXB84vOFLAkUrBiyXaSsrHZS0QSR6oEWPPFUAUNUMamMrLqYlRlz3eCO3Ft 0TGGIgz/Y0kzmRpf80J6psPlR03twFKJyeI+lIgmmJXONTta8jb13tQLsdXSPlw/s/ Kw6DkV1mz43Bf37Sl+DnL3gRND63p/Yh9j6cPs4RRE4FfXSysgrYLmLne8wLEjR6kU PIGyz5oNaKIAOemTAFcJvFjEAf2+k5PhaN1/PzOUS1Q4wqu+R083R89RrVmfEzLU2N 9OeBO+dPle1rsC74un4THGsy8iTH3H1ocVUNGIupmPEa12jL54dSTrRGFsCTtl9jsJ Uv6G50QaBSIAA== From: Jeff Layton Date: Mon, 05 May 2025 13:33:19 -0400 Subject: [PATCH v7 05/10] ref_tracker: allow pr_ostream() to print directly to a seq_file Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250505-reftrack-dbgfs-v7-5-f78c5d97bcca@kernel.org> References: <20250505-reftrack-dbgfs-v7-0-f78c5d97bcca@kernel.org> In-Reply-To: <20250505-reftrack-dbgfs-v7-0-f78c5d97bcca@kernel.org> To: Andrew Morton , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Jani Nikula , Joonas Lahtinen , Rodrigo Vivi , Tvrtko Ursulin Cc: Kuniyuki Iwashima , Qasim Ijaz , Nathan Chancellor , Andrew Lunn , linux-kernel@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, Jeff Layton X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=2126; i=jlayton@kernel.org; h=from:subject:message-id; bh=r/J3RdlUauCReBYN9Ih2mzIpJXEGqxCGvwWWjZoKeqk=; b=owEBbQKS/ZANAwAIAQAOaEEZVoIVAcsmYgBoGPZmBMxDi92UA5xN5em0PLOVIKyTrTTexMeu3 KnpbRZmkAyJAjMEAAEIAB0WIQRLwNeyRHGyoYTq9dMADmhBGVaCFQUCaBj2ZgAKCRAADmhBGVaC FT+2EACPjfPrd0tmfH+Grv9GPGYsSDt4TWGdYbwjP5WoMFyIOfeTCmfXXotjIO9Eb/EtKECs9Fw Ujy7O8kQObVrafjS/bXpU4IBtclI/dXll+3Ng9tEhwfnvlpQ37E3hKvJRHzjzgHo6gKbui0TWar mLKiyp5AGWAA+zuhZJqz3IKumld2gJDCaVAftxaj/GAxkkIKHbNxlOkuIGCeAQgRxlt/L8/Gqne ooNh2AZExF5YL8I/ZdiwepglfopcQVfI4ROv20lHwAZsXmCrV3avb36Gj7us9B5ZeUcyEYgaMcR v6sVgZiBpUjvUs9NAYhZQMhJGd5CYKw2HWpkE7vIqlMu5RvIHnkJtJWoy9IygxJg1sd8HAVa8Kf 9J4/Br9gmsRjyZzzktTtfYJPlQbftb+apoV6sqqc01qujFrCLt97mtwfmwaXNHCG6/royV+9CRv CEurW4zJ9zW/lDodaLSaStBZuFI5YcAT9ALOWCs6zwNxrlSdW2+VdxkKcM8ahmBlfxFQVAQdHrW DOlfMykmgRLmFj9shw0qV7R4Nra90ScVvy2KmKqQkwkSLrdgUA1dUe9hiwidLq8UME7snzARkC7 +iAqNxq5ennpR2EUbrFSxg/8JA17D1H9QEAzH8xDuiGzmhU8ZqqidztDWDB0YeTvw7lwnJ9IS0u WUMtRvm1QDOp3Gw== X-Developer-Key: i=jlayton@kernel.org; a=openpgp; fpr=4BC0D7B24471B2A184EAF5D3000E684119568215 Allow pr_ostream to also output directly to a seq_file without an intermediate buffer. The first caller of +ref_tracker_dir_seq_print() will come in a later patch, so mark that __maybe_unused for now. That designation will be removed once it is used. Reviewed-by: Andrew Lunn Signed-off-by: Jeff Layton --- lib/ref_tracker.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/lib/ref_tracker.c b/lib/ref_tracker.c index 510d927c785576fd90292d325d20a465d5f38079..66a765cdfc471968fd6434dafc5= b654962f20667 100644 --- a/lib/ref_tracker.c +++ b/lib/ref_tracker.c @@ -8,6 +8,7 @@ #include #include #include +#include =20 #define REF_TRACKER_STACK_ENTRIES 16 #define STACK_BUF_SIZE 1024 @@ -68,6 +69,7 @@ struct ostream { void __ostream_printf (*func)(struct ostream *stream, char *fmt, ...); char *prefix; char *buf; + struct seq_file *seq; int size, used; }; =20 @@ -91,6 +93,15 @@ static void __ostream_printf pr_ostream_buf(struct ostre= am *stream, char *fmt, . stream->used +=3D min(ret, len); } =20 +static void __ostream_printf pr_ostream_seq(struct ostream *stream, char *= fmt, ...) +{ + va_list args; + + va_start(args, fmt); + seq_vprintf(stream->seq, fmt, args); + va_end(args); +} + #define pr_ostream(stream, fmt, args...) \ ({ \ struct ostream *_s =3D (stream); \ @@ -300,6 +311,21 @@ EXPORT_SYMBOL_GPL(ref_tracker_free); #ifdef CONFIG_DEBUG_FS #include =20 +static __maybe_unused int +ref_tracker_dir_seq_print(struct ref_tracker_dir *dir, struct seq_file *se= q) +{ + struct ostream os =3D { .func =3D pr_ostream_seq, + .prefix =3D "", + .seq =3D seq }; + unsigned long flags; + + spin_lock_irqsave(&dir->lock, flags); + __ref_tracker_dir_pr_ostream(dir, 16, &os); + spin_unlock_irqrestore(&dir->lock, flags); + + return os.used; +} + static int __init ref_tracker_debugfs_init(void) { ref_tracker_debug_dir =3D debugfs_create_dir("ref_tracker", NULL); --=20 2.49.0 From nobody Sun Feb 8 17:46:35 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 7CC1826C39B; Mon, 5 May 2025 17:33:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746466421; cv=none; b=dH2aLbLQR3iegNIYUey+8eelI3xarCiIzKYNOFkWAWCfBPcn3AZYUryWFJpN9inVAtwut2nLOpUevGz7FtJxVw35LvmIZFm24uOCTnD4gr7FLiPOmxUNDtanOtMfRnWghCr1zsxSF9ju5z4DEHlqDzOhVWtpEwtzgiKvRpimDkY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746466421; c=relaxed/simple; bh=42PvFjHDOFh9c39+Q5w0rlwI+Zk/bS3XeleGEnio6jQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=NYXVNA41Vz8YVKGpI/QWivr7VwtlADniVbOBijvVV2eHBozZ/lZo9G9cW7bwysrh1SWoNky+tRt4U8OxX19hrW/9/Q2tvHDw5Yj+snnwFgTBh6rIfKlj6ZIGEjKIg2hh085RmllaKhXtI+hgQ1HLHSZhUF635SUQ1ocHq8WArJg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Qi61bwXI; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="Qi61bwXI" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 8CE2CC4CEE4; Mon, 5 May 2025 17:33:39 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1746466421; bh=42PvFjHDOFh9c39+Q5w0rlwI+Zk/bS3XeleGEnio6jQ=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=Qi61bwXIWhN7Q5imRLB7/jxH6c1qgxj9nq/E4rrrKRs1clB+HI/4xEs/4Sah6PfNX ebKlKMZJTnHpONBvXlc5YI2SkdUXbncwzHaBz/+dvHwMNJT/ubJwIcZgOCPb2eY4s6 4Lyawvpo8ddUIEUoK9QHsuEodgjPjwc/Q0SLuggjJuDNB6RLNZ5h5zQYsQNCQy7oKY FSpmKnIbZg10ZSmZT0nWPfRDeC5HFS5wkP8cFz+9L5mpc+i7aj3tPXFoVhYLVfC7ww yV6sZwEuIu2HDtKxUu+d7IVvxgrZCQ1GYG/uQUzmcnAc1tRThcNchwxwnnK6fQ7Xdm y2Zu/GIkyE7ow== From: Jeff Layton Date: Mon, 05 May 2025 13:33:20 -0400 Subject: [PATCH v7 06/10] ref_tracker: automatically register a file in debugfs for a ref_tracker_dir Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250505-reftrack-dbgfs-v7-6-f78c5d97bcca@kernel.org> References: <20250505-reftrack-dbgfs-v7-0-f78c5d97bcca@kernel.org> In-Reply-To: <20250505-reftrack-dbgfs-v7-0-f78c5d97bcca@kernel.org> To: Andrew Morton , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Jani Nikula , Joonas Lahtinen , Rodrigo Vivi , Tvrtko Ursulin Cc: Kuniyuki Iwashima , Qasim Ijaz , Nathan Chancellor , Andrew Lunn , linux-kernel@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, Jeff Layton X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=5380; i=jlayton@kernel.org; h=from:subject:message-id; bh=42PvFjHDOFh9c39+Q5w0rlwI+Zk/bS3XeleGEnio6jQ=; b=owEBbQKS/ZANAwAIAQAOaEEZVoIVAcsmYgBoGPZma2GRzK5/K5200bBcueRtzZcELNBky8pAq +BcXf1vUwiJAjMEAAEIAB0WIQRLwNeyRHGyoYTq9dMADmhBGVaCFQUCaBj2ZgAKCRAADmhBGVaC FUO1D/9wXsClij4uMc41dcHChDSiaEEbveOJaASamNsqCyPr83e4jRBLhI6OXAOdMI9CTjRUoWi ld3STsZRCneIgjcVnLG1BXAPFzzOpCqauxDVGHShHu4bnBADAvwopi5XUtVqUFEsZ3QKvkPXYII Am95FrvDl3upxVh7ekSDOvq9zi1EzKRUW/OZs1QgJ8ZCpGpAzuxnsropBUa0Q953u6MPCkcS85w ZpiBkD6KakmRHI3DYDcoLbO/Ugbq0ClX9/e+E4dClwQYVvVdeE5EHcevicnanhjNZbqXKUEOnGw 8z6WvNjCG3q7QxC1PKMMGH1RCXkGyZGulup1KHMMAH4e5kCdg2A93byFt4XzabWClp+SFka7nhn hGAfsA0bbGbgU/arkerSFvzp7GoiWw/6Md0kqpdzocCxV6iN0wKmY8cPYE9qRPXBaNUycVFb1Wp a0YMqMfXHp6IZ5a8WXMjcqDlHwsToFh3fytOjCqxnxZ//LRF2GktVApb1+zbEItzDCzdMNBpCXz C8EQPuAUcTIdiI3CKZypjcVkX24dODRrV+HFVDa1NfVqxfl5u9xho2EscWgvznfWvmyRAoPNtcH egGH65U1TBCAuVrBX/fKcYRlRLzCCupxkOc5IQS3kKpWT3bsII21T4PukVzbFxzmLd1yJWZPyHD XH0WReE+VyABUdA== X-Developer-Key: i=jlayton@kernel.org; a=openpgp; fpr=4BC0D7B24471B2A184EAF5D3000E684119568215 Currently, there is no convenient way to see the info that the ref_tracking infrastructure collects. Attempt to create a file in debugfs when called from ref_tracker_dir_init(). The file is given the name "class@%px", as having the unmodified address is helpful for debugging. This should be safe since this directory is only accessible by root If debugfs file creation fails, a pr_warn will be isssued. Signed-off-by: Jeff Layton --- include/linux/ref_tracker.h | 13 ++++++++ lib/ref_tracker.c | 73 +++++++++++++++++++++++++++++++++++++++++= ++-- 2 files changed, 84 insertions(+), 2 deletions(-) diff --git a/include/linux/ref_tracker.h b/include/linux/ref_tracker.h index 3968f993db81e95c0d58c81454311841c1b9cd35..17d5924d595ce95bfb5d8ec6d81= 3490499bd89d0 100644 --- a/include/linux/ref_tracker.h +++ b/include/linux/ref_tracker.h @@ -20,12 +20,17 @@ struct ref_tracker_dir { struct list_head list; /* List of active trackers */ struct list_head quarantine; /* List of dead trackers */ const char *class; /* object classname */ +#ifdef CONFIG_DEBUG_FS + struct dentry *dentry; +#endif char name[32]; #endif }; =20 #ifdef CONFIG_REF_TRACKER =20 +void ref_tracker_dir_debugfs(struct ref_tracker_dir *dir); + static inline void ref_tracker_dir_init(struct ref_tracker_dir *dir, unsigned int quarantine_count, const char *class, @@ -39,7 +44,11 @@ static inline void ref_tracker_dir_init(struct ref_track= er_dir *dir, refcount_set(&dir->untracked, 1); refcount_set(&dir->no_tracker, 1); dir->class =3D class; +#ifdef CONFIG_DEBUG_FS + dir->dentry =3D NULL; +#endif strscpy(dir->name, name, sizeof(dir->name)); + ref_tracker_dir_debugfs(dir); stack_depot_init(); } =20 @@ -68,6 +77,10 @@ static inline void ref_tracker_dir_init(struct ref_track= er_dir *dir, { } =20 +static inline void ref_tracker_dir_debugfs(struct ref_tracker_dir *dir) +{ +} + static inline void ref_tracker_dir_exit(struct ref_tracker_dir *dir) { } diff --git a/lib/ref_tracker.c b/lib/ref_tracker.c index 66a765cdfc471968fd6434dafc5b654962f20667..723df31321242d6af267986cc56= a9d80b6e5ad18 100644 --- a/lib/ref_tracker.c +++ b/lib/ref_tracker.c @@ -31,6 +31,14 @@ struct ref_tracker_dir_stats { } stacks[]; }; =20 +#ifdef CONFIG_DEBUG_FS +static void ref_tracker_debugfs_remove(struct ref_tracker_dir *dir); +#else +static inline void ref_tracker_debugfs_remove(struct ref_tracker_dir *dir) +{ +} +#endif + static struct ref_tracker_dir_stats * ref_tracker_get_stats(struct ref_tracker_dir *dir, unsigned int limit) { @@ -195,6 +203,7 @@ void ref_tracker_dir_exit(struct ref_tracker_dir *dir) bool leak =3D false; =20 dir->dead =3D true; + ref_tracker_debugfs_remove(dir); spin_lock_irqsave(&dir->lock, flags); list_for_each_entry_safe(tracker, n, &dir->quarantine, head) { list_del(&tracker->head); @@ -311,8 +320,7 @@ EXPORT_SYMBOL_GPL(ref_tracker_free); #ifdef CONFIG_DEBUG_FS #include =20 -static __maybe_unused int -ref_tracker_dir_seq_print(struct ref_tracker_dir *dir, struct seq_file *se= q) +static int ref_tracker_dir_seq_print(struct ref_tracker_dir *dir, struct s= eq_file *seq) { struct ostream os =3D { .func =3D pr_ostream_seq, .prefix =3D "", @@ -326,6 +334,67 @@ ref_tracker_dir_seq_print(struct ref_tracker_dir *dir,= struct seq_file *seq) return os.used; } =20 +static int ref_tracker_debugfs_show(struct seq_file *f, void *v) +{ + struct ref_tracker_dir *dir =3D f->private; + + return ref_tracker_dir_seq_print(dir, f); +} + +static int ref_tracker_debugfs_open(struct inode *inode, struct file *filp) +{ + struct ref_tracker_dir *dir =3D inode->i_private; + + return single_open(filp, ref_tracker_debugfs_show, dir); +} + +static const struct file_operations ref_tracker_debugfs_fops =3D { + .owner =3D THIS_MODULE, + .open =3D ref_tracker_debugfs_open, + .read =3D seq_read, + .llseek =3D seq_lseek, + .release =3D single_release, +}; + +/** + * ref_tracker_dir_debugfs - create debugfs file for ref_tracker_dir + * @dir: ref_tracker_dir to be associated with debugfs file + * + * In most cases, a debugfs file will be created automatically for every + * ref_tracker_dir. If the object was created before debugfs is brought up + * then that may fail. In those cases, it is safe to call this at a later + * time to create the file. + */ +void ref_tracker_dir_debugfs(struct ref_tracker_dir *dir) +{ + char name[NAME_MAX + 1]; + int ret; + + /* No-op if already created */ + if (!IS_ERR_OR_NULL(dir->dentry)) + return; + + ret =3D snprintf(name, sizeof(name), "%s@%px", dir->class, dir); + name[sizeof(name) - 1] =3D '\0'; + + if (ret < sizeof(name)) + dir->dentry =3D debugfs_create_file(name, S_IFREG | 0400, + ref_tracker_debug_dir, dir, + &ref_tracker_debugfs_fops); + else + dir->dentry =3D ERR_PTR(-ENAMETOOLONG); + + if (IS_ERR(dir->dentry)) + pr_warn("ref_tracker: unable to create debugfs file for %s: %pe\n", + name, dir->dentry); +} +EXPORT_SYMBOL(ref_tracker_dir_debugfs); + +static void ref_tracker_debugfs_remove(struct ref_tracker_dir *dir) +{ + debugfs_remove(dir->dentry); +} + static int __init ref_tracker_debugfs_init(void) { ref_tracker_debug_dir =3D debugfs_create_dir("ref_tracker", NULL); --=20 2.49.0 From nobody Sun Feb 8 17:46:35 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 7297126C3BB; Mon, 5 May 2025 17:33:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746466423; cv=none; b=AMLeOv2JpGHPGYhwIRPJCBfpzKPU3Z2BxeFhysTlotINyj/syJMskyeDIhwGSSXNVPOlBrElCuVwZdfvyk/qNysAAgN/HoVcoaZxENOtTCxF3MBkVBkik9DDogo7xU7oFbqAhyHc2zFEZQOYcLG0aEF4e7EBmFNovPN5X8W7ln0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746466423; c=relaxed/simple; bh=IxEfJTwtv3tFnOemtDSe37OzngbMQVgueQwcSf7+mkg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=flKUQXsz68NWQsIxNExrNOUNXAD690ORbaPlMTfGcf2U2vhxRemMBPk7niQiD7GjN1FkvP0JX8EUwaj0gH6XywqITfYXBjSkUJ20sTpoDw0MxUqvXhWqhZhw7LaFsYHMBYAWMIWbjdYPqQIzVa5c5k8MaBJJoW/yUaPGjpUU2ZA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=ELu+/4rt; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="ELu+/4rt" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 8CD18C4CEEE; Mon, 5 May 2025 17:33:41 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1746466423; bh=IxEfJTwtv3tFnOemtDSe37OzngbMQVgueQwcSf7+mkg=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=ELu+/4rt2BNqbp8ena4859UqcWHtTy0fkPon13KDo0emF9hFIpaTvZiEbUzZ9KvwM eT/h2J7TC871dNKRmHoMA4dFelMqCf1ES3z3AuwOBGYNWah+qN6+I8X1Y6AqV9jaxN 7Pzn71Klgm7tPfALaD+jbtc47dfnMlQ2CCQQmiXyK7U4GzEsU+tfodFx8zvYR2TDWY CWKCx4Pb1z8zgOWrfET4eBPvcba9Km34vL6FB80laCUQvV1G0Cr1RAQbZlRBR26BpL 9kqWS4q2CwQIyMklNh1qNmLoGzRohEyNtnzuDWemjScZVRwHAh6C8LKjaGog4N2SD5 mxFpkWaJOBKfQ== From: Jeff Layton Date: Mon, 05 May 2025 13:33:21 -0400 Subject: [PATCH v7 07/10] ref_tracker: add a way to create a symlink to the ref_tracker_dir debugfs file Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250505-reftrack-dbgfs-v7-7-f78c5d97bcca@kernel.org> References: <20250505-reftrack-dbgfs-v7-0-f78c5d97bcca@kernel.org> In-Reply-To: <20250505-reftrack-dbgfs-v7-0-f78c5d97bcca@kernel.org> To: Andrew Morton , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Jani Nikula , Joonas Lahtinen , Rodrigo Vivi , Tvrtko Ursulin Cc: Kuniyuki Iwashima , Qasim Ijaz , Nathan Chancellor , Andrew Lunn , linux-kernel@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, Jeff Layton X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=3235; i=jlayton@kernel.org; h=from:subject:message-id; bh=IxEfJTwtv3tFnOemtDSe37OzngbMQVgueQwcSf7+mkg=; b=owEBbQKS/ZANAwAIAQAOaEEZVoIVAcsmYgBoGPZmqYImS8VKF29pWEsy9M1mIaTDuMi+X5XLX i7o6JLBprOJAjMEAAEIAB0WIQRLwNeyRHGyoYTq9dMADmhBGVaCFQUCaBj2ZgAKCRAADmhBGVaC FXObEACsFcluugewWDUdniXoUPrmIoVz89U1FB9+MVnJs/+Qt4WWxFLadQlmtDJ23MTNghM7tgE VT5vdjTF8Qm/HkfJHjsbVy/1GfYkL4S1IdxfVS0Ey3BIIPBo2A3/sgmcIPfhojBBsxtavfJXJAg xHRkFiwmQY47op1AK4qPOTpJAqWI8e57tj8foWnWLZnTvlTtaFX5azoj5vil1ymI0LL6wOHo2CM GJluCIxdty9LLQFWY+kNW4BnnXJhvZtM7YVg4UKtMjPW9fJ0wve9gfSzeDkM/uhXW8eUO4Lej0B BXr2OqdoaxKQ56t7G44wKhaK0g54ROED8d2Jfm9b/sSE1p9rbYjs8Ae3Rx5gV2BeoAxvztR11nD fDqj6x19zDlzM2c173O/ZqmUZiCQ8rWSnvssuNZQIUIwCBRalmbWyvl+JdrPSFTQT48WCl13oAh g6x13Z+JedRAFqSrnXfMyfgkjDweOSvHuN+27iTi7xW0lvaA/oZ62DHzUm31LFMutxdL1LAMfL7 AHID7sUhfE9pVdRFm8SK9bcupYVh340fx0m30zI4c76DbBHjh3syqDXf+qnhN60Ksh41QATQm+u iGcpG++uCqxnR0KYfAY0wouw5foT24M3iPyoJR+WswEKfdBPf4XMs9oFqnfSHOY3UAABv52jFy1 8qq195W3/evKtTA== X-Developer-Key: i=jlayton@kernel.org; a=openpgp; fpr=4BC0D7B24471B2A184EAF5D3000E684119568215 Add the ability for a subsystem to add a user-friendly symlink that points to a ref_tracker_dir's debugfs file. Signed-off-by: Jeff Layton --- include/linux/ref_tracker.h | 11 +++++++++++ lib/ref_tracker.c | 28 ++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/include/linux/ref_tracker.h b/include/linux/ref_tracker.h index 17d5924d595ce95bfb5d8ec6d813490499bd89d0..b27cb7b3f1be5e16dedceeb0a88= e9aa577be5dff 100644 --- a/include/linux/ref_tracker.h +++ b/include/linux/ref_tracker.h @@ -22,6 +22,7 @@ struct ref_tracker_dir { const char *class; /* object classname */ #ifdef CONFIG_DEBUG_FS struct dentry *dentry; + struct dentry *symlink; #endif char name[32]; #endif @@ -30,6 +31,7 @@ struct ref_tracker_dir { #ifdef CONFIG_REF_TRACKER =20 void ref_tracker_dir_debugfs(struct ref_tracker_dir *dir); +void ref_tracker_dir_symlink(struct ref_tracker_dir *dir, const char *fmt,= ...); =20 static inline void ref_tracker_dir_init(struct ref_tracker_dir *dir, unsigned int quarantine_count, @@ -46,6 +48,7 @@ static inline void ref_tracker_dir_init(struct ref_tracke= r_dir *dir, dir->class =3D class; #ifdef CONFIG_DEBUG_FS dir->dentry =3D NULL; + dir->symlink =3D NULL; #endif strscpy(dir->name, name, sizeof(dir->name)); ref_tracker_dir_debugfs(dir); @@ -81,6 +84,10 @@ static inline void ref_tracker_dir_debugfs(struct ref_tr= acker_dir *dir) { } =20 +static inline void ref_tracker_dir_symlink(struct ref_tracker_dir *dir, co= nst char *fmt, ...) +{ +} + static inline void ref_tracker_dir_exit(struct ref_tracker_dir *dir) { } @@ -114,6 +121,10 @@ static inline int ref_tracker_free(struct ref_tracker_= dir *dir, return 0; } =20 +static inline __ostream_printf +void ref_tracker_dir_symlink(struct ref_tracker_dir *dir, const char *fmt,= ...) +{ +} #endif =20 #endif /* _LINUX_REF_TRACKER_H */ diff --git a/lib/ref_tracker.c b/lib/ref_tracker.c index 723df31321242d6af267986cc56a9d80b6e5ad18..d59ef7200dd4f97f247ddd989be= b5757b8afd519 100644 --- a/lib/ref_tracker.c +++ b/lib/ref_tracker.c @@ -390,8 +390,36 @@ void ref_tracker_dir_debugfs(struct ref_tracker_dir *d= ir) } EXPORT_SYMBOL(ref_tracker_dir_debugfs); =20 +void __ostream_printf ref_tracker_dir_symlink(struct ref_tracker_dir *dir,= const char *fmt, ...) +{ + char name[NAME_MAX + 1]; + va_list args; + int ret; + + /* Already created, or dentry doesn't exist? Do nothing */ + if (!IS_ERR_OR_NULL(dir->symlink) || IS_ERR_OR_NULL(dir->dentry)) + return; + + va_start(args, fmt); + ret =3D vsnprintf(name, sizeof(name), fmt, args); + va_end(args); + name[sizeof(name) - 1] =3D '\0'; + + if (ret < sizeof(name)) + dir->symlink =3D debugfs_create_symlink(name, ref_tracker_debug_dir, + dir->dentry->d_name.name); + else + dir->symlink =3D ERR_PTR(-ENAMETOOLONG); + + if (IS_ERR(dir->symlink)) + pr_warn("ref_tracker: unable to create debugfs symlink for %s: %pe\n", + name, dir->symlink); +} +EXPORT_SYMBOL(ref_tracker_dir_symlink); + static void ref_tracker_debugfs_remove(struct ref_tracker_dir *dir) { + debugfs_remove(dir->symlink); debugfs_remove(dir->dentry); } =20 --=20 2.49.0 From nobody Sun Feb 8 17:46:35 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 701AF2741B6; Mon, 5 May 2025 17:33:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746466425; cv=none; b=TaSKY1y1w/sDGI3ikwhMPabQIzPZXukFbEONMjTRiuWmr8JDBPBqgkKnYh/7ljlVHN5pxy08Q+tMFRwAQnPUpxbZHUeu/YjFgb7S+W1+AS/jtzb+GgcN7N/+Gpn2qBb/Ca2qUCGY8DoWI6KSSl9F+cOarVO2MJqsYBhJrbayVX8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746466425; c=relaxed/simple; bh=HO4xbozyJMxD8zWDiEa6K7DNK6Y9m2+KGX7iMwR0BG8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=H+CWM8KuRwC6XvKtlA9VY3Sp/NlNvh2Y9TrT7We8K5DsHq7XaYWfdVI1NZqhfCjDE3yiw+2wXHmIejWeY+LbV6knKsPnOvXamPlNtShrCeZ82ooBClYorIWyM/2hw5i3eLP/gInvu0mwOMVwp5jI1yfwzBIoVkUNbMMPLoappVE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=cjgKnVJP; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="cjgKnVJP" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 8C5F8C4CEEF; Mon, 5 May 2025 17:33:43 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1746466425; bh=HO4xbozyJMxD8zWDiEa6K7DNK6Y9m2+KGX7iMwR0BG8=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=cjgKnVJP0NxiQCgS6ccr3g74jbnfVKX0mTAvbsKWVRSt6PQysSLcS5butKG4L7m2F 6Oub0oiPzut5fTdG46vAY2WAuZxhIEF/Eyy6Tm/rIxD7eeVIt90PET0KsFzUDGEnQh 0WqCViVLWP7dte+LJ0o6F/grx5fSZWeQ2Nsoi9IJPpegyGs4LAaoL1CO/fdaoo1kdh TFOrUU9RdioVa24/jtOYDN5uoaOhJbE9i6frd19kFvXdgftQX2pUOnORRw6wqUWPlT ESs6fESX5/BLjC+JrXSkBCT08qccM3VCY4PNayCKnpePVEmQKAAljViFV+lUQv2Lwl o77ZJwMZW4rJQ== From: Jeff Layton Date: Mon, 05 May 2025 13:33:22 -0400 Subject: [PATCH v7 08/10] net: add symlinks to ref_tracker_dir for netns Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250505-reftrack-dbgfs-v7-8-f78c5d97bcca@kernel.org> References: <20250505-reftrack-dbgfs-v7-0-f78c5d97bcca@kernel.org> In-Reply-To: <20250505-reftrack-dbgfs-v7-0-f78c5d97bcca@kernel.org> To: Andrew Morton , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Jani Nikula , Joonas Lahtinen , Rodrigo Vivi , Tvrtko Ursulin Cc: Kuniyuki Iwashima , Qasim Ijaz , Nathan Chancellor , Andrew Lunn , linux-kernel@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, Jeff Layton X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1849; i=jlayton@kernel.org; h=from:subject:message-id; bh=HO4xbozyJMxD8zWDiEa6K7DNK6Y9m2+KGX7iMwR0BG8=; b=owEBbQKS/ZANAwAIAQAOaEEZVoIVAcsmYgBoGPZmYwQ+Q/CJWoKPdkB67+whcmC/OacHNJ4dH Vy/dKshE4KJAjMEAAEIAB0WIQRLwNeyRHGyoYTq9dMADmhBGVaCFQUCaBj2ZgAKCRAADmhBGVaC FbcVD/4k7jRscq+utxi9aI9kyxYHiT6RAVH+tCM0GODchSU6e7OAYwQx0wlLnBnIqPUE+10Czg0 za/opTFwdgl/7gTqRI67Twc3TCLp7nZWoMq+/THh1vl6J7/sLLql48sGWm/QgB2mthqXJMCU0X9 EF07MMZxvwPWuNqnGDdWms5LDntZe9bpyrerkXLuxPU+p9J6wZfV0Gt4d5kAvlewV7c40k665/O kLSONvE6xtX9tgEfvoJQ37oOYKem3u2RAJ7JctRJ3/fb7J1lfdAnwsx2leGYFADFAkS4ojGzIRC bOj8wjCwGT8zfst0hH6knOW6opu1pBXv8qkQX5Xy75EZoQ7eJFrGGr3TQ+NFPc4g/gkALcOUnTg XmGvAyaX3xTm7DZ8tDs5/PXvbmSHIz73pDkxbXcE7e6vOH7MUY9PU1H0slC3ELjFV2QyA4inEUp UZRqqZ95EWbXxLJ7ibj+GsHP+Ye2rYtFTtyzXXEqfNt2HSyvgr4wtm79x4llbHHtWGXUS8fMwYE MryL3SkeSxpTqbBDzIcV87VaG+ATrGKH12Ahsr1dORSzVHVZGex8LdggYYrvf9EcVcBRKZ7eaid l+uCziEFJ1lfW3tzAxrHYxR48BqPTfht9tNTeFBPBprurPPKLbXwhLHuThpA0K1eZO0HbxT3ezp KJtA+xOhEQwc4/Q== X-Developer-Key: i=jlayton@kernel.org; a=openpgp; fpr=4BC0D7B24471B2A184EAF5D3000E684119568215 After assigning the inode number to the namespace, use it to create a unique name for each netns refcount tracker with the ns.inum and net_cookie values in it, and register a symlink to the debugfs file for it. init_net is registered before the ref_tracker dir is created, so add a late_initcall() to register its files and symlinks. Signed-off-by: Jeff Layton --- net/core/net_namespace.c | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/net/core/net_namespace.c b/net/core/net_namespace.c index 008de9675ea98fa8c18628b2f1c3aee7f3ebc9c6..1c5e0289f0f0b37c61852d95d4e= 11a8c12a868f3 100644 --- a/net/core/net_namespace.c +++ b/net/core/net_namespace.c @@ -763,12 +763,40 @@ struct net *get_net_ns_by_pid(pid_t pid) } EXPORT_SYMBOL_GPL(get_net_ns_by_pid); =20 +#ifdef CONFIG_NET_NS_REFCNT_TRACKER +static void net_ns_net_debugfs(struct net *net) +{ + ref_tracker_dir_symlink(&net->refcnt_tracker, "netns--%lx-%u-refcnt", + net->net_cookie, net->ns.inum); + ref_tracker_dir_symlink(&net->notrefcnt_tracker, "netns-%lx-%u-notrefcnt", + net->net_cookie, net->ns.inum); +} + +static int __init init_net_debugfs(void) +{ + ref_tracker_dir_debugfs(&init_net.refcnt_tracker); + ref_tracker_dir_debugfs(&init_net.notrefcnt_tracker); + net_ns_net_debugfs(&init_net); + return 0; +} +late_initcall(init_net_debugfs); +#else +static void net_ns_net_debugfs(struct net *net) +{ +} +#endif + static __net_init int net_ns_net_init(struct net *net) { + int ret; + #ifdef CONFIG_NET_NS net->ns.ops =3D &netns_operations; #endif - return ns_alloc_inum(&net->ns); + ret =3D ns_alloc_inum(&net->ns); + if (!ret) + net_ns_net_debugfs(net); + return ret; } =20 static __net_exit void net_ns_net_exit(struct net *net) --=20 2.49.0 From nobody Sun Feb 8 17:46:35 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 6E70927602E; Mon, 5 May 2025 17:33:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746466427; cv=none; b=OXjJ9sGwDWLNR+VkZPGjLkhlDj5D88D+FZGZJu9izqxd17Y19HICnDs6TiEPkqU7m4INmWJ1YXVKaSFFu+gBm2UHTiO2NffGnTQvtFUd5LJEY9r1IeXrA8BaZoAdhHpfVzlTC+tRPCL0R4dlz3i095Q2VDQ4mZuiWg9S6TjXozE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746466427; c=relaxed/simple; bh=LUr5khTFmeDi+Ua8+P5dJsfAbjq9HmURsDGnKrGJrGs=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=S57wDj4CRDZ6sb948FBhL0YG8Co4bd3bNi/gWGmmtMy7EX1DL7/t98SBZFsbxUK6mPbT+sbQh72GgFz0bajNaxHAbCEraBzQIWss9B0IWnkFXN/N2apJ/JzAIhzGQcL9YTuj5vWc5KyWFyU/WPP0zCrUhNK7jTQsl4xUhU4NIZk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=AcSYv9qL; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="AcSYv9qL" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 8AAA8C4CEF3; Mon, 5 May 2025 17:33:45 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1746466427; bh=LUr5khTFmeDi+Ua8+P5dJsfAbjq9HmURsDGnKrGJrGs=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=AcSYv9qL9QxetukxyT6UauCSZR//wxaHjcUeh7lWEJWAJWkanBFIoA0xfl8gf+m4r KPNQHMa2e4B/YDfkKnejR5MU4B8lTMMYsQqf+u9/p2QYP3oWMXbtobj7VXdC5L5lsV U66FtwjO74jyrC0wp5UUWKbetuRTiPiJf8tOifjVCSI1HwkD9QJmtIImFjrIQa1dIg 2CqRReU3xQK1tQA1ykeMghhaK/H5+mFcaAJm2yeiGhD8Z1GxE0Mo92+WBxcmBlA1TB aLA72+9SDzAFAvh1AkhcMHZZFVeN2jq8JI4XvNYt4pzCXyhB591p39tObsq8gs1VB9 8epbkG/IPMSAg== From: Jeff Layton Date: Mon, 05 May 2025 13:33:23 -0400 Subject: [PATCH v7 09/10] i915: add ref_tracker_dir symlinks for each tracker Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250505-reftrack-dbgfs-v7-9-f78c5d97bcca@kernel.org> References: <20250505-reftrack-dbgfs-v7-0-f78c5d97bcca@kernel.org> In-Reply-To: <20250505-reftrack-dbgfs-v7-0-f78c5d97bcca@kernel.org> To: Andrew Morton , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Jani Nikula , Joonas Lahtinen , Rodrigo Vivi , Tvrtko Ursulin Cc: Kuniyuki Iwashima , Qasim Ijaz , Nathan Chancellor , Andrew Lunn , linux-kernel@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, Jeff Layton X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=1485; i=jlayton@kernel.org; h=from:subject:message-id; bh=LUr5khTFmeDi+Ua8+P5dJsfAbjq9HmURsDGnKrGJrGs=; b=owEBbQKS/ZANAwAIAQAOaEEZVoIVAcsmYgBoGPZmWmFz1ESaZFMQZZ6Qr0A+Q8I2qE3VNQO5z 5egiMFJBtKJAjMEAAEIAB0WIQRLwNeyRHGyoYTq9dMADmhBGVaCFQUCaBj2ZgAKCRAADmhBGVaC FexjD/9hLcEg6DYxJ4wVEmKQpEYCCS5MFN450o/uGUbvLOPL65lanJhTpwz4tBupWcVyfavCrhP Tt/c7fyR36PQ+beppoY8fiXHWm59g7o7mt5I0ryBFicV3nacxZ6tfr0s4q+07zDZJ1DHh+eMr6T IpDtC67gA/XH12NPlwtelMR+NlLt0oNAJLgutDhgpy4vhBPFG5UgJz/H0k83pfyWPb2tR1qIn3z VdQovvR54XulStcp2feTuKmAEdiACBohQ8YXwdTSATF0eMezfqoaIOwSRSzSqEHQq0IgC8d/eAq xzGFdFuzMlS2PoXSdi61Ryh36uDryiFrRmNQR8klFVeetl5/o3oaM3zzq7c+DTcDWjNqcUudbiG /1evAnet8XPTtR/rJdupyhDC1qoTAKKLtxy37FbOhBYPKtkTCiMd4Wj/Qe5g7PDgum53Sz5tM1T T/sAtJKLIG5gHO+Ym/cElPz5awUx5eeFON+rlVufu6Uc/HwL9ZmPxE4c4+XelbL45TbWO3WLzyh lAVCKcl8ThPheW2laaGu6k0Ctxu69Bh/jJ3YEChT2shXDNEFmXeT/WiqTLoGDEiJ+C8mXRFLcw4 SMze8aBLpL7uwg2yGyaDW+VskVR/r7JogFdA1gQgfZ3h/zWdFD0QQRlQHTzpXxhiq5M+b0QXIom oJHlLwY+nW2sqcg== X-Developer-Key: i=jlayton@kernel.org; a=openpgp; fpr=4BC0D7B24471B2A184EAF5D3000E684119568215 Now that there is the ability to create a symlink for each tracker, do so for the i915 entries. Signed-off-by: Jeff Layton --- drivers/gpu/drm/i915/intel_runtime_pm.c | 1 + drivers/gpu/drm/i915/intel_wakeref.c | 1 + 2 files changed, 2 insertions(+) diff --git a/drivers/gpu/drm/i915/intel_runtime_pm.c b/drivers/gpu/drm/i915= /intel_runtime_pm.c index 3fdab3b44c08cea16ac2f73aafc2bea2ffbb19e7..94315e952ead9be276298fb2a02= 00d102005a0c1 100644 --- a/drivers/gpu/drm/i915/intel_runtime_pm.c +++ b/drivers/gpu/drm/i915/intel_runtime_pm.c @@ -61,6 +61,7 @@ static void init_intel_runtime_pm_wakeref(struct intel_ru= ntime_pm *rpm) { ref_tracker_dir_init(&rpm->debug, INTEL_REFTRACK_DEAD_COUNT, "intel_runtime_pm", dev_name(rpm->kdev)); + ref_tracker_dir_symlink(&rpm->debug, "intel_runtime_pm-%s", dev_name(rpm-= >kdev)); } =20 static intel_wakeref_t diff --git a/drivers/gpu/drm/i915/intel_wakeref.c b/drivers/gpu/drm/i915/in= tel_wakeref.c index 5269e64c58a49884f5d712557546272bfdeb8417..2e0498b3fa7947f994de1339d4d= 2bed93de1a795 100644 --- a/drivers/gpu/drm/i915/intel_wakeref.c +++ b/drivers/gpu/drm/i915/intel_wakeref.c @@ -115,6 +115,7 @@ void __intel_wakeref_init(struct intel_wakeref *wf, =20 #if IS_ENABLED(CONFIG_DRM_I915_DEBUG_WAKEREF) ref_tracker_dir_init(&wf->debug, INTEL_REFTRACK_DEAD_COUNT, "intel_wakere= f", name); + ref_tracker_dir_symlink(&wf->debug, "intel_wakeref-%s", name); #endif } =20 --=20 2.49.0 From nobody Sun Feb 8 17:46:35 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (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 D222B2777E3; Mon, 5 May 2025 17:33:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746466429; cv=none; b=B5/rKJHuzox1ArfJm0WEHwHYBSiirvyrkwK0SLbl0E9PCf3ulzy/Jv2nYi0+3XypFgAi+yc5TtF3b6n0P6GCycJ+3iUIpIvmtNZWhR1sPS+gz8pFSEjjlcsTRuZvYZ7rIXTTSJrfZcni0PxSYL3ZXuPJtqd+D9eRVM+7HwvE60w= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746466429; c=relaxed/simple; bh=LbJzH/ZXREcqrMj1xNLrLa7ysPRTy7FBaPjFY5GdzAY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Jkvq8PFVtQ6ZEGifTydkGJMUQaW4NEDcs5WAYQ6nMMXm9JEQPQFWIUBs+jodKquJobhqPsA3DxXXUrgFfVsQN6pTtxO9Za8IW1SrkXf1AQGtN7hV/SHFKuqw2PJCujFTxadsni/Wo0vlrWtYqDz6aSj/naGjm7u6UaFdJrxZrUs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=X04cpW+8; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="X04cpW+8" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 8830EC4CEF1; Mon, 5 May 2025 17:33:47 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1746466429; bh=LbJzH/ZXREcqrMj1xNLrLa7ysPRTy7FBaPjFY5GdzAY=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=X04cpW+8A1xqLRDZj4zRc28ndREXxakLXbYXQj9FN83K+IdUXHfFr4ES6RAuLUABT ygMxUpeFE1wl/mabA8kfkQsID/94C6WuNGty5YqUlmQndSYlrNOan9XDulUq3yEkhY TLNZ/6D2c4kBtKTw3ZkvKlW9MaS8zl1Z79Ot+6QsltccSYXApBEF6vRYIH805i0ZFS 9tLhVVwX293qy/XeNNm9i80tSWyvdE7V/+cUsJTEAq6U9f4cmwyGo9xM5xxl46DOTB xa4dFcMz9M6imfIbMIcIh89Qxe8vyTpjU3/Fpky7nlwFi5ExtjspXqPGcekt8nuoUE 4FAyOCbcxKY8Q== From: Jeff Layton Date: Mon, 05 May 2025 13:33:24 -0400 Subject: [PATCH v7 10/10] ref_tracker: eliminate the ref_tracker_dir name field Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250505-reftrack-dbgfs-v7-10-f78c5d97bcca@kernel.org> References: <20250505-reftrack-dbgfs-v7-0-f78c5d97bcca@kernel.org> In-Reply-To: <20250505-reftrack-dbgfs-v7-0-f78c5d97bcca@kernel.org> To: Andrew Morton , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Simon Horman , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Jani Nikula , Joonas Lahtinen , Rodrigo Vivi , Tvrtko Ursulin Cc: Kuniyuki Iwashima , Qasim Ijaz , Nathan Chancellor , Andrew Lunn , linux-kernel@vger.kernel.org, netdev@vger.kernel.org, dri-devel@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, Jeff Layton X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=7677; i=jlayton@kernel.org; h=from:subject:message-id; bh=LbJzH/ZXREcqrMj1xNLrLa7ysPRTy7FBaPjFY5GdzAY=; b=owEBbQKS/ZANAwAIAQAOaEEZVoIVAcsmYgBoGPZn16CUdrMPZWaDqVbQwJ7VB4Y0gfIRoF8V+ 1hoC0cuheKJAjMEAAEIAB0WIQRLwNeyRHGyoYTq9dMADmhBGVaCFQUCaBj2ZwAKCRAADmhBGVaC FYPwEADBcX34d1r4npiz0Mah9npC0sTBla9rxOfxo6+aK9dAH1z+4+8DXTcRNE221SILUHaqUVj W7neY0K0r38PCyVPGldnsN1pmJb8Puu8Pcg/mD1IUGUBuhi1NBz6swIxGC/0Rq/v2x+IRbdA3r6 uIefqMBqZN8k/D4K7R4x/U9A/ZM5OdjJBDD6rbbGGOO5xTdPOSj5Fh1QdZTyxeZ5lnQRvFvkLLV j6gKPEZJ6X+jTvUn+ZUl4qztFtDnsP3G/RQh6Y5W3iqoBFrs7NtsE1WiJZ6e4WJFmE8LzWH624C HZkzb72aRyPsRH3cnm9LVRCs/6aqtwD5zpuu66SZmnmDip7Az+6845Jkx9EJRfDTLP4iJn3ITZe lnTk+57C3ySVWbNG3GgDei6wLCs2AxzCUkvFBQYsT84TlR5W/51jSUx2GBKGfwfziY6SE6Pdezo X9qPeSxr1DfbzQcyWfCKLFl0tpCtmVxg1H9eTnbnx02IEAgt+54UAqOq6q/Okr6L5LQAmKqubQc SXQAEPKJvhPJZ1WOD1RPWAp0HpDSKg+d+U+QVJR8hQmiyE3Ohzz8W6psT1Fs3F7maIhBR0qyzMb vjGJrhFbz2PPpAYuvyCRx9hRp+NpfUuXyErBkXRw2jmrk8e5qU2DDeAKxUs+T+Qq903WZqsPgMY mKl/aFOMe9P61Xw== X-Developer-Key: i=jlayton@kernel.org; a=openpgp; fpr=4BC0D7B24471B2A184EAF5D3000E684119568215 Now that we have dentries and the ability to create meaningful symlinks to them, don't keep a name string in each tracker. Switch the output format to print "class@address", and drop the name field. Also, add a kerneldoc header for ref_tracker_dir_init(). Signed-off-by: Jeff Layton --- drivers/gpu/drm/display/drm_dp_tunnel.c | 2 +- drivers/gpu/drm/i915/intel_runtime_pm.c | 2 +- drivers/gpu/drm/i915/intel_wakeref.c | 2 +- include/linux/ref_tracker.h | 20 ++++++++++++++------ lib/ref_tracker.c | 6 +++--- lib/test_ref_tracker.c | 2 +- net/core/dev.c | 2 +- net/core/net_namespace.c | 4 ++-- 8 files changed, 24 insertions(+), 16 deletions(-) diff --git a/drivers/gpu/drm/display/drm_dp_tunnel.c b/drivers/gpu/drm/disp= lay/drm_dp_tunnel.c index f2a8ef6abf34d89a642d7c7708c41e5b1dc9dece..f8d1f9c60e86c5a7b1866e1c9f6= 425e99d4ca9c6 100644 --- a/drivers/gpu/drm/display/drm_dp_tunnel.c +++ b/drivers/gpu/drm/display/drm_dp_tunnel.c @@ -1920,7 +1920,7 @@ drm_dp_tunnel_mgr_create(struct drm_device *dev, int = max_group_count) } =20 #ifdef CONFIG_DRM_DISPLAY_DP_TUNNEL_STATE_DEBUG - ref_tracker_dir_init(&mgr->ref_tracker, 16, "drm_dptun", "dptun"); + ref_tracker_dir_init(&mgr->ref_tracker, 16, "drm_dptun"); #endif =20 for (i =3D 0; i < max_group_count; i++) { diff --git a/drivers/gpu/drm/i915/intel_runtime_pm.c b/drivers/gpu/drm/i915= /intel_runtime_pm.c index 94315e952ead9be276298fb2a0200d102005a0c1..d560f94af7a86f1fc139204a4e9= 01eaea22c6ef1 100644 --- a/drivers/gpu/drm/i915/intel_runtime_pm.c +++ b/drivers/gpu/drm/i915/intel_runtime_pm.c @@ -60,7 +60,7 @@ static struct drm_i915_private *rpm_to_i915(struct intel_= runtime_pm *rpm) static void init_intel_runtime_pm_wakeref(struct intel_runtime_pm *rpm) { ref_tracker_dir_init(&rpm->debug, INTEL_REFTRACK_DEAD_COUNT, - "intel_runtime_pm", dev_name(rpm->kdev)); + "intel_runtime_pm"); ref_tracker_dir_symlink(&rpm->debug, "intel_runtime_pm-%s", dev_name(rpm-= >kdev)); } =20 diff --git a/drivers/gpu/drm/i915/intel_wakeref.c b/drivers/gpu/drm/i915/in= tel_wakeref.c index 2e0498b3fa7947f994de1339d4d2bed93de1a795..bbd5171ce0a22435e540f10821f= 2a0dad59c1d2f 100644 --- a/drivers/gpu/drm/i915/intel_wakeref.c +++ b/drivers/gpu/drm/i915/intel_wakeref.c @@ -114,7 +114,7 @@ void __intel_wakeref_init(struct intel_wakeref *wf, "wakeref.work", &key->work, 0); =20 #if IS_ENABLED(CONFIG_DRM_I915_DEBUG_WAKEREF) - ref_tracker_dir_init(&wf->debug, INTEL_REFTRACK_DEAD_COUNT, "intel_wakere= f", name); + ref_tracker_dir_init(&wf->debug, INTEL_REFTRACK_DEAD_COUNT, "intel_wakere= f"); ref_tracker_dir_symlink(&wf->debug, "intel_wakeref-%s", name); #endif } diff --git a/include/linux/ref_tracker.h b/include/linux/ref_tracker.h index b27cb7b3f1be5e16dedceeb0a88e9aa577be5dff..87c655ffdd77a0e5f080c326338= 53efea866aca3 100644 --- a/include/linux/ref_tracker.h +++ b/include/linux/ref_tracker.h @@ -24,7 +24,6 @@ struct ref_tracker_dir { struct dentry *dentry; struct dentry *symlink; #endif - char name[32]; #endif }; =20 @@ -33,10 +32,21 @@ struct ref_tracker_dir { void ref_tracker_dir_debugfs(struct ref_tracker_dir *dir); void ref_tracker_dir_symlink(struct ref_tracker_dir *dir, const char *fmt,= ...); =20 +/** + * ref_tracker_dir_init - initialize a ref_tracker dir + * @dir: ref_tracker_dir to be initialized + * @quarantime_count: max number of entries to be tracked + * @class: pointer to static string that describes object type + * + * Initialize a ref_tracker_dir. If debugfs is configured, then a file + * will also be created for it under the top-level ref_tracker debugfs + * directory. + * + * Note that @class must point to a static string. + */ static inline void ref_tracker_dir_init(struct ref_tracker_dir *dir, unsigned int quarantine_count, - const char *class, - const char *name) + const char *class) { INIT_LIST_HEAD(&dir->list); INIT_LIST_HEAD(&dir->quarantine); @@ -50,7 +60,6 @@ static inline void ref_tracker_dir_init(struct ref_tracke= r_dir *dir, dir->dentry =3D NULL; dir->symlink =3D NULL; #endif - strscpy(dir->name, name, sizeof(dir->name)); ref_tracker_dir_debugfs(dir); stack_depot_init(); } @@ -75,8 +84,7 @@ int ref_tracker_free(struct ref_tracker_dir *dir, =20 static inline void ref_tracker_dir_init(struct ref_tracker_dir *dir, unsigned int quarantine_count, - const char *class, - const char *name) + const char *class) { } =20 diff --git a/lib/ref_tracker.c b/lib/ref_tracker.c index d59ef7200dd4f97f247ddd989beb5757b8afd519..6c28d26c2e3e37a7ccd39893a29= 390149283d588 100644 --- a/lib/ref_tracker.c +++ b/lib/ref_tracker.c @@ -134,7 +134,7 @@ __ref_tracker_dir_pr_ostream(struct ref_tracker_dir *di= r, stats =3D ref_tracker_get_stats(dir, display_limit); if (IS_ERR(stats)) { pr_ostream(s, "%s%s@%p: couldn't get stats, error %pe\n", - s->prefix, dir->name, dir, stats); + s->prefix, dir->class, dir, stats); return; } =20 @@ -145,14 +145,14 @@ __ref_tracker_dir_pr_ostream(struct ref_tracker_dir *= dir, if (sbuf && !stack_depot_snprint(stack, sbuf, STACK_BUF_SIZE, 4)) sbuf[0] =3D 0; pr_ostream(s, "%s%s@%p has %d/%d users at\n%s\n", s->prefix, - dir->name, dir, stats->stacks[i].count, + dir->class, dir, stats->stacks[i].count, stats->total, sbuf); skipped -=3D stats->stacks[i].count; } =20 if (skipped) pr_ostream(s, "%s%s@%p skipped reports about %d/%d users.\n", - s->prefix, dir->name, dir, skipped, stats->total); + s->prefix, dir->class, dir, skipped, stats->total); =20 kfree(sbuf); =20 diff --git a/lib/test_ref_tracker.c b/lib/test_ref_tracker.c index d263502a4c1db248f64a66a468e96c8e4cffab25..b983ceb12afcb84ad60360a1e6f= ec0072e78ef79 100644 --- a/lib/test_ref_tracker.c +++ b/lib/test_ref_tracker.c @@ -64,7 +64,7 @@ static int __init test_ref_tracker_init(void) { int i; =20 - ref_tracker_dir_init(&ref_dir, 100, "selftest", "selftest"); + ref_tracker_dir_init(&ref_dir, 100, "selftest"); =20 timer_setup(&test_ref_tracker_timer, test_ref_tracker_timer_func, 0); mod_timer(&test_ref_tracker_timer, jiffies + 1); diff --git a/net/core/dev.c b/net/core/dev.c index 380d07bec15a1f62ed27c31a6e211e74f3a5561d..00776cba0276554066c94a6fc86= f5ed4df430cfa 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -11620,7 +11620,7 @@ struct net_device *alloc_netdev_mqs(int sizeof_priv= , const char *name, =20 dev->priv_len =3D sizeof_priv; =20 - ref_tracker_dir_init(&dev->refcnt_tracker, 128, "netdev", name); + ref_tracker_dir_init(&dev->refcnt_tracker, 128, "netdev"); #ifdef CONFIG_PCPU_DEV_REFCNT dev->pcpu_refcnt =3D alloc_percpu(int); if (!dev->pcpu_refcnt) diff --git a/net/core/net_namespace.c b/net/core/net_namespace.c index 1c5e0289f0f0b37c61852d95d4e11a8c12a868f3..5b06a0bf88e62c19f6f610eca3a= 4c4750ff4a2ea 100644 --- a/net/core/net_namespace.c +++ b/net/core/net_namespace.c @@ -324,8 +324,8 @@ static __net_init void preinit_net(struct net *net, str= uct user_namespace *user_ { refcount_set(&net->passive, 1); refcount_set(&net->ns.count, 1); - ref_tracker_dir_init(&net->refcnt_tracker, 128, "net_refcnt", "net_refcnt= "); - ref_tracker_dir_init(&net->notrefcnt_tracker, 128, "net_notrefcnt", "net_= notrefcnt"); + ref_tracker_dir_init(&net->refcnt_tracker, 128, "net_refcnt"); + ref_tracker_dir_init(&net->notrefcnt_tracker, 128, "net_notrefcnt"); =20 get_random_bytes(&net->hash_mix, sizeof(u32)); net->dev_base_seq =3D 1; --=20 2.49.0