From nobody Sun Feb 8 04:30:12 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 0FF8429293A; Mon, 28 Apr 2025 18:27:04 +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=1745864825; cv=none; b=IJv8Ge4KcVRRZW6qIJqzvp2qllMNneaIMV2JQQEZ+/uFVj5gLevtcw7LSwtFRoV4xUkNYNGJmXwBmu58zyYvg4sQQDDIJAzBH6mb7JkSwZfYggfkqosMckiNKghQd/W7SuySjbaOhH6v1TEYpRllZS6cLnzF6zPPc/iU+M2bS5k= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745864825; c=relaxed/simple; bh=qdjjg9250uAChp/B6CMoiJw5KiM08dmL8XUQ0eA5f48=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=pWPtHWYCxDe8nsibMp5XJm0uZlgjzckR5HKPaHlkgb/XBBbBPgumPFZ9CArIlfTZRN+ZakXOVyIBNtrhmvxLaM6SitvPwjMduWvPp4HSoHaOvdERIdiyqSYS6SEwAnZHir9pUS7KTgf61mt20MIWLLXm552KIapStmnpnOvKOfE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=hV1eg0Uq; 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="hV1eg0Uq" Received: by smtp.kernel.org (Postfix) with ESMTPSA id D3793C4CEF0; Mon, 28 Apr 2025 18:27:03 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1745864824; bh=qdjjg9250uAChp/B6CMoiJw5KiM08dmL8XUQ0eA5f48=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=hV1eg0Uq/DZQX8A0KlSx+gVYNKjrpskt86+XZbdmPc7E83wxD4EUaVvD2mOfRGGNN VMqTSA53kRBBPKbR+UqysP4R3IjqW0DqUYvzdjIZBzo7/Xd1b96uWc2iAPcwRN3AF4 kqnJ3t8qcmESHR0ZuckaeCKN4jOrFo/T/Kba4Cibtm7s9ncBNTjfv+6eypkdFSsu95 OdQXwygkOy6w+hzJ5M4IlNjhM/sRBHgPBcK6w6kVjSpMz9shrYaPZVSreEL+qyLsUO rELZ1Uz8+HHE0L4X5RQ1SeE2lPLMQ4dWKq9khflInEAL7cXT9eY0oQYs3sB/J6exUI B3xEQlihqY9RA== From: Jeff Layton Date: Mon, 28 Apr 2025 11:26:24 -0700 Subject: [PATCH v5 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: <20250428-reftrack-dbgfs-v5-1-1cbbdf2038bd@kernel.org> References: <20250428-reftrack-dbgfs-v5-0-1cbbdf2038bd@kernel.org> In-Reply-To: <20250428-reftrack-dbgfs-v5-0-1cbbdf2038bd@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/ZANAwAIAQAOaEEZVoIVAcsmYgBoD8h02NwYy4QXxJrP67+BDY0VaVkg4r1pRn5qS ThHlMbXUlmJAjMEAAEIAB0WIQRLwNeyRHGyoYTq9dMADmhBGVaCFQUCaA/IdAAKCRAADmhBGVaC FWLKD/9kwVxWvoaZkkWJH23eYL0p1SJDJCllNlPCiwOjfKYfWGGVvcN0dCzywhl8diyAwhsgEt4 81UPbDdDwoMKs+shn2AoycZZqRrXAFqqi2MpuX6orpIsoKXJzHe0p+ABKW7eJ9wKVPqsiMUCxCD /zL/x6SZTgtGokEdHsec9vkmhRmbRFtHKb0FSZXMbjVkg7xgH6SWi6KVZxl0ewhbsjKd/uHx2Eq r4IhWfVcHtTS4pSXLDQB/kHRo26twmEVDHw5B86+bBjF9M8fr2fiLvgxAmp4em6OoeUsxFPaqSo 6wMUeiY7ArzcUHiLc04LYIP4BdFi7v17GdW21Wd9I/Q7/Pn3Ha5nd3DXDip4zK68lM4A6Vd6OA5 VNOinpxLz6BcuYQsKV5n5ewHoFoiDCTspmeOLTYI5Pq8aTVZzvgF4l7JzSYedQ6TxWP0q4nephy 56jlt9AFPFkrNS+81MODB1rjFhuZTj+QK3Lb+RbgDDq6D2e6DGEAcUdtHgMFQwQ8RLDRbRcnvcC NA/VtukaNKktRpEZK+iVvZEEW9JLzEMvA1X4WVZQ1D+I9Q2o40CPXb2uTa862pGx0w9VUsBvtOj Skk92/jT1GfDAfRZGr+9uHN2gg4mJFxSBBBgWPpLlTcTHI00YCeQfkd2TG9tSZrypSYrDQkEewy WSZ6/w+jw7nmTeA== 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 04:30:12 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 C8AAD296151; Mon, 28 Apr 2025 18:27:05 +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=1745864825; cv=none; b=bf7Gpt4zb3x9/VD8AxQvSGMruEyae3OaSq7wur0q5Nl8DTwepp3Q2PHC83zzp3DmHr0CIV2swiQrcXAlyAtZh/4t/prlZ0gO2k1JwGnsxSL5PhdJTRQKQsubT51iQ8ijvCMYfQZerPopo4iMsUilYLXHS0J10Wojs/3cyXpCdi8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745864825; c=relaxed/simple; bh=h02vtg+uo9MQLcJqO0oaAc8ETCkA4CEZoiZkSocwMrw=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=fsni17Ql5JMZQIIMFocm7Phe49vAVbLr43IOIVQD1WcgmwB4obqrEHZAtA/gER9OITAkKqBM5Q0n8lG8OLglztJpY1uIcMX87bauXiHcC6AYFDBM9HeiJvsDSkgy8aIlwkeD5wBS3FDDgHALW1wrS7KbB0pgcSHeDl/1RJLYs58= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=XNOqf7j3; 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="XNOqf7j3" Received: by smtp.kernel.org (Postfix) with ESMTPSA id A5198C4CEF1; Mon, 28 Apr 2025 18:27:04 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1745864825; bh=h02vtg+uo9MQLcJqO0oaAc8ETCkA4CEZoiZkSocwMrw=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=XNOqf7j3CzjorNwFyIBk2uqgCdY8rUGvRy9by8gmo1bdnUryPIes/eB/0xVweiEjO zjPAUSgO2MgCFm4jzLx1y2N1DEkPg8w5Gwj4wbYYpxS2vanX3QxJVoMVD6UG18Zqhs LtU2i4o38qWQxyUrtQhuPPPVv0UtBWAc6BEcsqiIN4/Z8jGM3NFqMQ43IahuoTV/Iu JRl6y+7PKmjAurU2s32jewHrpt4QXhwfQrvrhtNMs01051UfhARalYiziCaWtUCXCL JTloBGDW7z4yaUV8aO0b5u0OQyGS+4uENjEwFhX8dQ1ooRXKjcRFgqpVdRCaEr4Skx vWtE4spiglHEQ== From: Jeff Layton Date: Mon, 28 Apr 2025 11:26:25 -0700 Subject: [PATCH v5 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: <20250428-reftrack-dbgfs-v5-2-1cbbdf2038bd@kernel.org> References: <20250428-reftrack-dbgfs-v5-0-1cbbdf2038bd@kernel.org> In-Reply-To: <20250428-reftrack-dbgfs-v5-0-1cbbdf2038bd@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/ZANAwAIAQAOaEEZVoIVAcsmYgBoD8h1wJh2LTt/ZX/SmXyVMcwsU4+HoiDNlOqaJ X/pWNTCVVWJAjMEAAEIAB0WIQRLwNeyRHGyoYTq9dMADmhBGVaCFQUCaA/IdQAKCRAADmhBGVaC FSFhD/4jXzbUGZpfQ+eJhWzENK/65qLg1kswKEYZesiyEtUwbpTn01weKqHUCnUNF2grcMlm3/H 7xtN4eb9L1VTELG7+ATz56c5C67AkEn3sNNcZDF6+AO5Hm0YR2jamrEGZKdQuRaMSQTFdr1VSf7 O48jNrJ/HLCLCO/wjFuqrGpOFsMtQPm+RfU9wJ2/b2gUeYZ5D2pHd0fxT2p/To7+tluwZGr4DFx B1NrOnAwSqLUvIC5yJLr23c411lKjT5NYjOfWcnlPM1Kgni+P2bfTj5Xc0SKbuSwROy1DR9Ac82 kqJzpVsn+eOXjdZz73uZW5iDY38X+rFEwb0AvmH4sAcSHjn3nUguF5RrJc8POahbowo9T1a022T glmKDjobpW/9sax2ol1yI/xccVWWtMPWK0lV8h8SGXdB4w5zygxd42z4owEArK+D1248PA1jqzx FYti1GnEWAScuQkhHqIvBFeuE51Vn7PMloX0gIKpDL0QO6zCu0ZoFYT+MaTq4OgyyjO6nMtC3i4 Ph+V/dQxxLV1E65UcwQTdXmP3At+5T5+RTP7wZeMfRFfKftJ8fmNv+PZpg557MeTcYg0Vh6+yj8 gqO+AnG5HIZ5xwcFdx46f3ooJ0RsYMPMgCNksjF0FQZ/fS0kdPY8wRdFdAfpANQJIw0i62Q3XdK 8Hv5IfIIWyabKqQ== 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 04:30:12 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 17C122973A9; Mon, 28 Apr 2025 18:27:06 +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=1745864827; cv=none; b=a3mHQDBBFvo7kTyFY7NsnF/uzk6FMzr8dWJROamVSwQjexxSRAWGLrsIlIYl+XN3w4bAgDO+jl20/K+e4YxauTRtwEovFaw/Jk2BWBzImyYZVkay3vqmAe14Q5H7x8mJRnMbWzblAuNuMpzHUBQ/fbFvkEEOCVoyAmcfYN4fMh0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745864827; c=relaxed/simple; bh=D7eYUyrEMPuIlNDnf5xYhfYtI7n2pvxbIb5qGlnf6w4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=MXSExhh3HTvPNI6gB6dAaTBBgeU0KDsHuXgKAbisj7nBgcU4+9e7mJv2PX/DVD7GVz/RO2O4iKNttuxLm5d9qt+3UaeJi/hbYt9/qTtj9t3xMxwN4aasAu7V+hHvJj1i++nW2WXU9ji4f/ZShOVQjXbDR2MjaJh0IPaBSd/j/+A= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=ddc0RbMZ; 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="ddc0RbMZ" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 72DE3C4CEEC; Mon, 28 Apr 2025 18:27:05 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1745864826; bh=D7eYUyrEMPuIlNDnf5xYhfYtI7n2pvxbIb5qGlnf6w4=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=ddc0RbMZ2RNaGjr5X9rVNs9k+m7QQM8h9ZTzFISuxbFkEzYcex0f7XolRLH4wg7QI UPmeUY7+pfi6pXn0qMc0QQ07+n3//mUfTzCOIZizWJdEUFX96+H1m0UGDLHzbQP5eL bGcGFeIBjtYZLZa+ceoxqMbYDYWk6KDB2kwwvR417YfhnblMe1FLThpb2TZ+8n1t+Q A07MBHSJqOd87ep7caLElsEBWrzd1yzTPBaE/2H3NbNM62H3geXFMg+i4m1MKIVhNL 8gp1S0LYC0c1OwLfnBCbBtiar2LRbzrWIrfg4kRs1qWH+t3bquH45njB6QD7/2R+52 ix7XD9pOd7FQw== From: Jeff Layton Date: Mon, 28 Apr 2025 11:26:26 -0700 Subject: [PATCH v5 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: <20250428-reftrack-dbgfs-v5-3-1cbbdf2038bd@kernel.org> References: <20250428-reftrack-dbgfs-v5-0-1cbbdf2038bd@kernel.org> In-Reply-To: <20250428-reftrack-dbgfs-v5-0-1cbbdf2038bd@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=3845; i=jlayton@kernel.org; h=from:subject:message-id; bh=D7eYUyrEMPuIlNDnf5xYhfYtI7n2pvxbIb5qGlnf6w4=; b=owEBbQKS/ZANAwAIAQAOaEEZVoIVAcsmYgBoD8h1XVu89ohyOL3T1JI0o4sLiqB9ffJ6NnrkZ fWTJ/gucbeJAjMEAAEIAB0WIQRLwNeyRHGyoYTq9dMADmhBGVaCFQUCaA/IdQAKCRAADmhBGVaC FVEfEAC1my8CPpLPuEeBqMbL7WKjg4rDZRfY4k/3dG35jzMdZQm0WyWtAVLj5fwf6n3ufm0CGkm 1AV3VQJmbvK6aaS7shkE//6UHSj7ji5h1INoNVFgBeMn4615sKOVfgjC1q2Nia2ULNZLTJHbq8A oyVT3tSrW7dZiTyVlXQqqO+T9EU+oYK/QVWhgCqf6KZGL/tkyNYZv5w77POudhVvY5dlSPjTaG1 yBrwzggguueY0zfPOihd5sZ4VVDNabamgAsY4zNqWD+CwXozQ3Ez6u627Ot64Xu/3XDtq37Tumg ++rHgBE5j+izUo6U7o8OnY/1f3b8VB0rNhQeq/hfmwuFKVhl9PrEHGWscK1/bvOvyqWWhEbDw+l 4RBxAHHPLw+j/PYxaF/O+j4YTrJCzmlvtWDnWfHb9H9B26Po+j5PpUOuG9GdOZHXYD3Ur1taWAD lkUcpz4FEUnSiuOTFxz5nQvGTSfIJN3GoAUKjF7kGTfbK3qbzVZ0REcLbbsO1lt59cQRorUN+lQ S0Zw3fOR/CfPlLGSmY4QeFbZCT+PEBSpPJOscAmoHgcPcZm2cYISraSUnPqC1k/Y1a2miruSuKn NH043O9JVQhl/faC39DYaz7a/mnB9V8HceBJqqlYICs4CETcKt3fgvJt/aZ1MogwAnHRezTahAs Km7+wg8eavv/Orw== 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 --- lib/ref_tracker.c | 53 ++++++++++++++++++++++++++++++++++++++-------------= -- 1 file changed, 38 insertions(+), 15 deletions(-) diff --git a/lib/ref_tracker.c b/lib/ref_tracker.c index a66cde325920780cfe7529ea9d827d0ee943318d..b6e0a87dd75eddef4d504419c0c= f398ea65c19d8 100644 --- a/lib/ref_tracker.c +++ b/lib/ref_tracker.c @@ -64,22 +64,40 @@ ref_tracker_get_stats(struct ref_tracker_dir *dir, unsi= gned int limit) return stats; } =20 +#define __ostream_printf __printf(2, 3) + 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 +116,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 +127,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 +145,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 +165,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 04:30:12 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 CD1B7297A5B; Mon, 28 Apr 2025 18:27:08 +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=1745864828; cv=none; b=mcPNWtLp04dQhBDCf8lnvR1fXHQ8E9cyToxqbgmKY7F9XEABSFj7LCTwdsdXPeMrmdBQ7yzD5UIuTkUswcp+nqVcrluEoGVxbdL4y8fkblgVpdCwgida7bRa+yYkQE0H+ETNlG7p24Ru7p3nE8GxSaU29prn/7K7u5m7w5Runi8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745864828; c=relaxed/simple; bh=fZKlpIcOJEF616o9qzMIcvZOI/oG1RfsOsr5fOV2mTY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=jgt365IHnis3WjA/YvfPmNu8FbAFYLY4Pe3EwhJf3UBcqzHxpJP4LU2zOaivarjdrQm+/zOFqKr3K8L2NiDYTs+zUf12UHtIFgj4pS00gZCqYP4lRmiDhEbAyZ2wv0xNdJZ0vb4yLGl/LKOlLZXyfZ5PP9g8X8ykSWzqJbMTuwc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=ItJW/ApR; 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="ItJW/ApR" Received: by smtp.kernel.org (Postfix) with ESMTPSA id CF877C4CEF2; Mon, 28 Apr 2025 18:27:06 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1745864828; bh=fZKlpIcOJEF616o9qzMIcvZOI/oG1RfsOsr5fOV2mTY=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=ItJW/ApRtFZNn8Pqn0PWf5YpYdYsk5BXh98Hnctw2dako7/BsLN+yRGp/nVrJTLTp HuX1P37y9/HQ42hbKrbuaxWa+k4P3An6hpBe8Y6RHkLEmOY74FT/RqBZ/K/ItdfFyI X6W+uQU1U8HYIPZlCT0EYDIC0PVVrq/7ch/PhgmBi+YSbmm41nGGZlsCmTqA7XnoKT bRYgVxrukMqkH9+U+2jqoa+3wzV84NVZPaQS5Rf/qI7g47qnMe4yyXIMgeHmOMQ8Ss 8CK1s4V+R825UJiRISB6HUUygAxOh2EE8F4NDicauTgSnrt3RMV3pzRRedB9bQMr6G 80HEcEERy9gJA== From: Jeff Layton Date: Mon, 28 Apr 2025 11:26:27 -0700 Subject: [PATCH v5 04/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: <20250428-reftrack-dbgfs-v5-4-1cbbdf2038bd@kernel.org> References: <20250428-reftrack-dbgfs-v5-0-1cbbdf2038bd@kernel.org> In-Reply-To: <20250428-reftrack-dbgfs-v5-0-1cbbdf2038bd@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=1942; i=jlayton@kernel.org; h=from:subject:message-id; bh=fZKlpIcOJEF616o9qzMIcvZOI/oG1RfsOsr5fOV2mTY=; b=owEBbQKS/ZANAwAIAQAOaEEZVoIVAcsmYgBoD8h19lmvXGTuNFcSN5fIMVwJMgTnbS9ux8eeC 9Smvy1t8q2JAjMEAAEIAB0WIQRLwNeyRHGyoYTq9dMADmhBGVaCFQUCaA/IdQAKCRAADmhBGVaC FdZpD/9wFVujdvH6ipX25y57L5uQZU/l/dal5kV1364+dlMrFDwCExdLvbXQJclwLlzOnkGKXQw lSedyy9xO5/QjCKxbveMsqGstv0uqyENt0uqsFhzmtyAU4Z2UFcFRxGE2qQJ6ccdxFXb12WsULh 3RWPDrgdZBQCrjeublN6njJdjEgg0CDo4OEotR+TDI38x71uYXRG/TB5SNRsY2T5FlOfMrgoF98 1ANLNmsaLi6sr1IfIIAVp7Zf2kmXBZBwpisqWZ5jizuea7ZmDfSWHbL0dFpBO1SdhZCmeY4Es+/ I+k3mY2IrJEFxwSUHHDL0X2/NloauEVq8qmBFkj/JuVCN9LaZ2FJ9wsMqXi+SRRBzyvSCiaIn7P JFTkQSeLJt7KrcC/4f/fRvhCtBUTJ4OztkOfv2YGDSBzZVyLZqzvbQ6tib3Z58TZGJ2+ThUdHci oyP96WTKknq3CTTrACZv5doziX1v0mZUs+Xe3jybtSrOEocmJVCRkm77u3mbxp+LpLH77hZPnIf h4GRUmfPh+t6wnMO7AiM3L1a5k4QzT0Ci7SJk5JfzaWnv0g2vvL+a/1zaeDfAaep1vY9zYayY9Z Z0HVST/xtbwoWkIzyNReQHC44rAA2zY1aB/4FJxAUt8G11WBDN7kemAMh75M/FM/BF2Jwx4rPgf fcVwGbNnM79rzLg== 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. Reviewed-by: Andrew Lunn Signed-off-by: Jeff Layton --- lib/ref_tracker.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/lib/ref_tracker.c b/lib/ref_tracker.c index b6e0a87dd75eddef4d504419c0cf398ea65c19d8..4857bcb6d4bf557a0089f51328e= 75e8209e959e6 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 @@ -70,6 +71,7 @@ struct ostream { void __ostream_printf (*func)(struct ostream *stream, char *fmt, ...); char *prefix; char *buf; + struct seq_file *seq; int size, used; }; =20 @@ -93,6 +95,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); \ @@ -302,6 +313,20 @@ EXPORT_SYMBOL_GPL(ref_tracker_free); #ifdef CONFIG_DEBUG_FS #include =20 +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 "", + .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 04:30:12 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 D19A02980A1; Mon, 28 Apr 2025 18:27:09 +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=1745864829; cv=none; b=gfdXwigp0AJFwvZf3lxgy7YNqawtL3PaU+uhpusGsEkCOywe/EJp8VeUk91n2VdC8jH5FhuIF/6CpqwzvJGkYlROzQFOIpfGBK2PRlLnX0x+WYWxLKuchrVxEcLbaKBjGkBa5dWGO5/cFqgP87rT+ngcoRWVXI/D2NfXhj6f2CY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745864829; c=relaxed/simple; bh=OM8eKgd8/PoRGSkjls071wlD5MSsyPo0WX9Tc5eod8o=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=kKmMO9arxKUPIg3jW0ujXIqi5Bj2EnJK31IRNSPPRiKogeYDSrsLv1D40tLQy2r9+hxgbkP+BAg/l3r+rCZMR6aIRR73VOfrc6wd8kHXy9o+q4RE2AtxoQdu5+ris2feju72wHeHI827+NL/4RPamWnSXvc2l29zB2k2MsQ3COs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Q46ijNdV; 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="Q46ijNdV" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 6F535C4CEEE; Mon, 28 Apr 2025 18:27:08 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1745864829; bh=OM8eKgd8/PoRGSkjls071wlD5MSsyPo0WX9Tc5eod8o=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=Q46ijNdVngOUORrjFQ1vEeERfTv2pmZHitmJzCbZ/lnoPz4XQZGK4ZY9W+qK89k5t caacX2QBBonrZtZBxf69Mzy2+2uwMecEHW+TaWKrI3iv8a89k3mt6fo1KGXYH9nql3 zWHeXyWppheegistPqVgvfhSsBRKn3sCebUHhj3GrWD6qxFN0goZBi60DfdfUOwygF mOuWuVLhNrPiE1VMXhEsIATC26ZIxOQXYLS3oE98XDIc3XHFW4cMecXPziWTR4gDBU Z01c4N1q1420KPu7lj9UkqUoNKVGn9TgzSuprgEF4mPpvaE9VMQb/W6xfjvqHYT9tW r4I01JEH9ewuQ== From: Jeff Layton Date: Mon, 28 Apr 2025 11:26:28 -0700 Subject: [PATCH v5 05/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: <20250428-reftrack-dbgfs-v5-5-1cbbdf2038bd@kernel.org> References: <20250428-reftrack-dbgfs-v5-0-1cbbdf2038bd@kernel.org> In-Reply-To: <20250428-reftrack-dbgfs-v5-0-1cbbdf2038bd@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=OM8eKgd8/PoRGSkjls071wlD5MSsyPo0WX9Tc5eod8o=; b=owEBbQKS/ZANAwAIAQAOaEEZVoIVAcsmYgBoD8h1QL1sXGTzoiDDrUudUqdFDIRezdxCMIO0m 57xl/2FHLqJAjMEAAEIAB0WIQRLwNeyRHGyoYTq9dMADmhBGVaCFQUCaA/IdQAKCRAADmhBGVaC FfNYD/98hOpWOSyki+UYdoHYPMoXp/WPF06pUAC90By3veBRBx2uY2HcEtAnpwgh1qZqYFxNNck fdpWcho3PM9wa/x0yzs6NGnRN4l2irJMG+Dz0uEcU7lBb1U+xkQcxMHOPAGjUtQfG+a6n1g+lpo sKhul2y5iauX6HMbtPmSkaZ/CDgqqjWUqVM9ay0G5TnPeW908FBxUH3WTI+MsrJKxETp3w0vTyn mAEn0Cy1rasPkgwjVZGc7EoyqaQ6NsRU3VrS6GGBivMsHMt3bv7Nc+XnoITuN1LDfwkrfQGH+sD 3hXF0noMJT1aLOY756tgtF1C4d1aRILhki9+bDsB9P4ZE4+z52XsuoKnpl4VCoVJTTaR/bpGMlX 3ulQxEw6hnQL5aU73EAEzO7xL+wQpQ5sfnHDwa0JvEntO1JcYFAGy+GN7GKkgJk6H6w/Wx53A// GDKGzeSv5sbOz/UfFx0m5M6DaiQ5YASDDN2XmkJSwSdmaKTeqI9DVV6VuzwnMox9jkCyI5i/guh 8kyrw6bDi4/a8QVNixw6cRw040LOoDTjs7pJg9JrDEE6G1cgOCK8NorN1tjWWY2emdDRg/IqgnI yrb9Y6wVgF6W+xBOU4yz9UEb+zEaZGxN2mkAvFj9NVjSs6Z9VxVsCI9KGrAvE65/MAkrDxeGqVI KZ9KzXQo/jmJTiw== 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 8eac4f3d52547ccbaf9dcd09962ce80d26fbdff8..2adae128d4b5e45f156af4775a1= d184bb596fa91 100644 --- a/include/linux/ref_tracker.h +++ b/include/linux/ref_tracker.h @@ -17,6 +17,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 }; @@ -25,6 +26,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); @@ -34,6 +36,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(); } @@ -58,6 +61,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 04:30:12 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 93F84298CA1; Mon, 28 Apr 2025 18:27:11 +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=1745864831; cv=none; b=Roja+WWdi7RIcb+gUjNg6361xghjoBOubbMRVoI5Kkv3QSW6sDXdCyOTUXZH8N+ir0h5yBRjafnDw2G8lwaR/YydV/F5FzVgKS+hkRMu2OPuVCP7hXt077fPhS8a94z6qPnULixL+u7jnDpUSl79TIPWIXXWkZazJgdwK9glU34= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745864831; c=relaxed/simple; bh=fpnw2V8uXAwDSgZ7plejSEREFoEn+a0D9Tgyy1cTvLw=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=WR20EfZZrkT/hKjvK5p9aWtExxccC+UkDlJyXVLydiC9aK9zq35PaoO9M6z2iPkfTavkG0uWBV0/FR34eYgGw1zWiLtoBEiPyiVzM7tIO4C5JOG27DqRbHote8E4p6n9oUWorUBFeQUKTZX1KxyEbJY6vEDJL2n16Ig0tNBo1Ew= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=MsLeU6T/; 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="MsLeU6T/" Received: by smtp.kernel.org (Postfix) with ESMTPSA id DCD8BC4CEE4; Mon, 28 Apr 2025 18:27:09 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1745864831; bh=fpnw2V8uXAwDSgZ7plejSEREFoEn+a0D9Tgyy1cTvLw=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=MsLeU6T/FbY5/FrdP7ESmG6hvZlKZUsncPbCgdsOLlmJW1izwqEvIJFKIIs5MKcQY p7JRTOlw+y7YbXwiLvPIj/7crvkiV7vS9iMYcjyytXP5tIcwwn6adOUrWDHcidfmwg fAPx906bVEifxrfGC6BHFutcrDQP0coSfEeBEAZyQqNNJMOp6xhWK1UdobTaUrtLnq Y8cJIKytWegW+CUMYg8Hiw0Y6ThcibWyL5MX6GeJMg9BM0IKNH6Yx5wziZcHZK2yq3 z8D22Arjo/sbaL45YbSAXVfG/0Ny81aPuhq6tyXb2wSCJvCCF04T16SrgBx0Vn8ImG cb5djjgPHwaqg== From: Jeff Layton Date: Mon, 28 Apr 2025 11:26:29 -0700 Subject: [PATCH v5 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: <20250428-reftrack-dbgfs-v5-6-1cbbdf2038bd@kernel.org> References: <20250428-reftrack-dbgfs-v5-0-1cbbdf2038bd@kernel.org> In-Reply-To: <20250428-reftrack-dbgfs-v5-0-1cbbdf2038bd@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=5257; i=jlayton@kernel.org; h=from:subject:message-id; bh=fpnw2V8uXAwDSgZ7plejSEREFoEn+a0D9Tgyy1cTvLw=; b=kA0DAAgBAA5oQRlWghUByyZiAGgPyHWjoJY4UZE5t/FLMAszlWsnxX/d3fsLLKgV3tv4W9hjo YkCMwQAAQgAHRYhBEvA17JEcbKhhOr10wAOaEEZVoIVBQJoD8h1AAoJEAAOaEEZVoIV2m4P/RgR MxWp0Y1mrrqmjWUWh2CnaGAtVyxgJX44OfhrRS3GPefiuUnSQlMSW4Rf8g4H14mUo8F9xHMJ1pO i3A2tOitKw1auei5pdV9dT8S5W9JfUMC5YRP6EIl9uC0JeESf76qFJ7NKcq03N+ZC8B4aUMQCtO Q6xq1n7q2HiwCwDgaLkdI5eVeQlh19lpdW8ptcK5x3SptcyhI4Kp30VBaU3N1A1nt2T9SiyL664 de0ASV8Yk5sMZ773qsONEVW8lmc7qE2moEq9p/GfuiCnToLRFji0Oyl9N62azzPrc8JP/6X37e1 Lgh2ECXbJoFbzpllKp/NkXQQWf0AY9yB+qj9EW0KzNs1gCJIAQYKudAF2tsxsNwuKsbhlZz9MVn +IfdMloIsrS269miW9r093Je5mQQNdYxvD3tXZ2Par3uhvmMHv1d2wTcO4m0mQOYsGmXT9mlXmw gJeuXHLuZqXJ0njVfwoh7GyC31fWWVkHrCNguJM7nnPKpj0aXZDJIEgIz9ZQoAJGOzMMHOEIBVE gC7FPqHcli/0L5Bgwpeb+KWzjg9BHbfXKwpZoGfBuBc+sfIHmITJl/ZocS89ggL3qT0/Y984pA6 eox3ojxlMrICYxNi9z65n1ntycaRJ1xIyu/zwlbw30KlN+OVufLnTdOxfNB/0xK3RmaDxx11UCZ aWBWh 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 | 14 +++++++++ lib/ref_tracker.c | 72 +++++++++++++++++++++++++++++++++++++++++= ++++ 2 files changed, 86 insertions(+) diff --git a/include/linux/ref_tracker.h b/include/linux/ref_tracker.h index 2adae128d4b5e45f156af4775a1d184bb596fa91..c6e65d7ef4d4fc74c60fcabd191= 66c131d4173e2 100644 --- a/include/linux/ref_tracker.h +++ b/include/linux/ref_tracker.h @@ -5,6 +5,7 @@ #include #include #include +#include =20 struct ref_tracker; =20 @@ -18,12 +19,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, @@ -37,7 +43,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 @@ -66,6 +76,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 4857bcb6d4bf557a0089f51328e75e8209e959e6..f5424857b0fde2339cce31c6744= fd4dafbaf0d2a 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) { @@ -197,6 +205,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); @@ -327,6 +336,69 @@ static int ref_tracker_dir_seq_print(struct ref_tracke= r_dir *dir, struct seq_fil 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 + * @fmt: format string for filename + * @...: arguments for the format string + * + * Call this function to create a debugfs file for your ref_tracker_dir th= at + * displays the current refcounts for the object. It will be automatically + * removed when the ref_tracker_dir exits. The filename must be unique. If + * the creation fails then the pr_warn will be emitted. + */ +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 04:30:12 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 6EBD7298CDB; Mon, 28 Apr 2025 18:27:12 +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=1745864832; cv=none; b=ibLO9V2XZzEqTmO5IVqvKSos86wi9ItY7Qwi3P+2Q3Q1tKmGl760AcOmYmb6BbCdJgKbFIkROg3ZuzYJES5DI8vTaloOEOCKrWK/d2gpugGyTCnf96gPwyDJaUCeZJ92EOymx3Z0TpFUtywvT27uxPKTZ3oeuNROQxKjAkPsPs0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745864832; c=relaxed/simple; bh=i0sKkNPaB0sY+YCWICK9OSFrGSBCfe0apiknij8kW04=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=JVYZnHZox/d+Kw8iHSG1zz1AcY4rRaAzqlllz1rl5w7ssS90zhPmnEqA4PSEW+P3IuBXzOwpm5+XjM+ziwVtrPhfe7Jh96q8VX3f/nxPSMaGdxZPq5fh7AaIg0bkVqr12ocTuvhRl0UCo/9ghSCT8veH+TwLBc1YeAJim6CsaYU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=hoKEP/4K; 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="hoKEP/4K" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 36174C4CEF2; Mon, 28 Apr 2025 18:27:11 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1745864831; bh=i0sKkNPaB0sY+YCWICK9OSFrGSBCfe0apiknij8kW04=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=hoKEP/4Kkao1Nmd7KgvmqFCRwZquS4LU+DlwxXpqciMNa6rXs5rdQ3aNHVwqeAES0 yEiDgUKSqucnDwbJekI6GPBLdB1l063zpo9segVy8zHTt0KdB5mI60Z8G9c/CSMfYE tC1++zpjlUbfjc6zrVAQ7HSBxS8lXJESYTzHQiTcM3ntOQnhJy66HS4xSOh407JM97 wEWO6FSRwGZv9Ax+9nSABPXZkXis1RrqaYfYZ7RCIqwo7AeGNOeNmDSTzc6FKYgqzs /vW+vSLRhYaQsi0OCavsyBuyy6TXscBwF8s4btbLfq+ekeEtq6KUIBO8Y4R31pfiV7 VqtX+LVxMtIVg== From: Jeff Layton Date: Mon, 28 Apr 2025 11:26:30 -0700 Subject: [PATCH v5 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: <20250428-reftrack-dbgfs-v5-7-1cbbdf2038bd@kernel.org> References: <20250428-reftrack-dbgfs-v5-0-1cbbdf2038bd@kernel.org> In-Reply-To: <20250428-reftrack-dbgfs-v5-0-1cbbdf2038bd@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=2954; i=jlayton@kernel.org; h=from:subject:message-id; bh=i0sKkNPaB0sY+YCWICK9OSFrGSBCfe0apiknij8kW04=; b=owEBbQKS/ZANAwAIAQAOaEEZVoIVAcsmYgBoD8h2mnfftV3/eT0IIGckwJAUE6JefHdUn76tY BT0pXPJ6fCJAjMEAAEIAB0WIQRLwNeyRHGyoYTq9dMADmhBGVaCFQUCaA/IdgAKCRAADmhBGVaC FWu/D/9Y0/TN64vxBj4sSN5GZ36a9aqZ/hBAB+vKh/1b0QTT1tUlKbxfdUosPfz+8H63LEKipjg dRmTegRPq+Fq9pRLgJCLni8Wx21MhwmTrPFHNz81zcsGuLS1jcNUODSwPJTvT8gaK/LiZurmn/5 hh7Wl+k3Fye4G78UI0eBMB+g8Hgu5ATr8WHhz2n4yu4R1kyI+KVGc+FcS2khgEvwqDhLwFTb6ky 1CyNWa9ikWs8f87Ytejv+m0TJ8pSh38AYMtKYxXHQUzCnsdOvz/oKJRfQOum/To6m7AqaLQnVuG RuMIxFnBEQwU/Ua1nS0AGbOrE0gHhI/nPPEsxiYwySvbPDRujt7G9Cf4Mwjm1QT1kg/jqarqqBg hEZzu/Jh4Ga9Fo9x0wohELe7WEObYqZA5ANyn+/OIHLNd2thlA9x5xk7xtzxCRQnhfoCOjEJHTl QsHsAdAoQUVlI5aOfcSmbwfQGfmGWomclny0DNPdRyP7BYElF1545tNO2emrKke7U6mMydtj85e pf0TYtZBe61ZvCz/8BfwCGUPvVTV4KfXgHeA1ykU4lIdfDGVljXUXbknkJWHJDQPdf75KQpAkfi m3xeOWb9ikiX+NDU1tsUX1tLrWpDw2ul99o3gTJExNbWnX03x0G53KY9hf7IHk7GnQKb/Vs0oKb YDMJM2whpsvjKMg== 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 | 7 +++++++ lib/ref_tracker.c | 28 ++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/include/linux/ref_tracker.h b/include/linux/ref_tracker.h index c6e65d7ef4d4fc74c60fcabd19166c131d4173e2..a011297c501011c697de44469f9= 720597aa33116 100644 --- a/include/linux/ref_tracker.h +++ b/include/linux/ref_tracker.h @@ -21,6 +21,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 @@ -29,6 +30,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, @@ -45,6 +47,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); @@ -80,6 +83,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) { } diff --git a/lib/ref_tracker.c b/lib/ref_tracker.c index f5424857b0fde2339cce31c6744fd4dafbaf0d2a..25fb22c0a367573851d83a8a00b= 99b109871f47d 100644 --- a/lib/ref_tracker.c +++ b/lib/ref_tracker.c @@ -394,8 +394,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 04:30:12 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 21F9B29A3E6; Mon, 28 Apr 2025 18:27:12 +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=1745864833; cv=none; b=ndLHd8WdowTHX2PwwRnc1V1kuxLxqPe7L8/LZ1hpovRlNSdGwb6Sp6G6l5ZQdPzGGPCg4kdy+nStb2qFgmDYjhwOhEVUjYhlSbKoCStpU2Jy/OO7h6BTA4RDgRwvRXQxIUQ4lslENvAMtOIEqyx2DBGKWkuJZyia8r+LmutFm04= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745864833; c=relaxed/simple; bh=HxYYob4i7WkZ4QVFzXDuapuOVvHl8o21L1EhBkSyHxk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Zr8r2Qo7hFEzIv0cZGVafyoYd+Z8DlO2T6mBWCGtBqERRIV43BSCjT/maEID5PAx0ldn+tcVC9GMeMi3NzepAbHbpe6JrzqWAoxNWZyztBNZ9DvRKu6XoBE1WKWeQe1zX3LiS/PQ25rnHpsYTQG7n1c/StzEoRSBJKlkYvWJjqc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=ROUBUlXP; 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="ROUBUlXP" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 08A5FC4CEF0; Mon, 28 Apr 2025 18:27:12 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1745864832; bh=HxYYob4i7WkZ4QVFzXDuapuOVvHl8o21L1EhBkSyHxk=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=ROUBUlXPD3eKLlzG4sQHNnNBoZW0cz/EGuOl2q7VbT09u74yESrZWWaOyhFSo748a vy68Fpcsm7U2UWBKOpl6AqLQj+JkuXu/S+Q84qkFSB8tEMYldDJHKcg8bM7FwuBwrw KLsrZR99QpVZRTKTkt6kHXR4v8MuVHrJX2cJngZMwHoK7oL3mFOxK/oiLCFzfbI4Vy 10qF7ZDfmNbxJAw2BrrbJDxJqryDaug/l4kjwCZMiLhYC+H1AsDo9PkYF8JuQSpCpu FN2s34oVZFlWlOHiiMNqCV5G7kSdoax25/7s+n4og8b6gPrVioy7fTahXAO2kPgdSB m5gzPmzv2YEeQ== From: Jeff Layton Date: Mon, 28 Apr 2025 11:26:31 -0700 Subject: [PATCH v5 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: <20250428-reftrack-dbgfs-v5-8-1cbbdf2038bd@kernel.org> References: <20250428-reftrack-dbgfs-v5-0-1cbbdf2038bd@kernel.org> In-Reply-To: <20250428-reftrack-dbgfs-v5-0-1cbbdf2038bd@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=1775; i=jlayton@kernel.org; h=from:subject:message-id; bh=HxYYob4i7WkZ4QVFzXDuapuOVvHl8o21L1EhBkSyHxk=; b=owEBbQKS/ZANAwAIAQAOaEEZVoIVAcsmYgBoD8h2GIUwsTMOiBkykV6nuYvnnAsHTw4T6X74O LiXbumtkWeJAjMEAAEIAB0WIQRLwNeyRHGyoYTq9dMADmhBGVaCFQUCaA/IdgAKCRAADmhBGVaC FWI4EAC0+pEyulF/sfWI4GSW8V2DaQRCQDfMCa92oSSE+i2/vnZtDa+FhiFKqLgJ9Qbc3zIWMlh 6uP25y50Qr1XSgtQHIKLfeef4UngKWy95iLBqv2QtI+uzKXMUkUQ4bkIBiHwxjtW8lZ3uHuHHqn grX6JJ7bmKjqS/PaFPftvv5d8wfpQgmXNiZTtxGEOP7aHfcvXzVINbFbyIwla/FMoEddtGqVaG9 AoTZxDzZRkk4JQuPtOWeXOwfhF3BQTSFuRBbuHURzkyVhNl8Hsa86xeyalMymzqdcbSYKBuB3g+ 12SX0db02yr7eLebsMfBu7PamKhoCVjrGstlYVoFMCbcZTBzFVnCbIHQYmIyI0hf8KyUTaGxKbw DXu8/o1myOyFLOSg4EUgHDV/OIThbVttBFOOdqtI6s1RoPPKdl4sC/Ar+CeanAvtJYev6kNsHSV fnC0XIsfpC/vLq+zAHIcHXjrmbDr8WrX7XVVV260UIOSfRZxZ2Ht8Cq6z7HaXXUhdZjIj6PBaRu IvN965JX5hN83cyTVvvkhU1XE5gU9bfCM8vJL2wg38eGkYeD3dvYb9ZMorOMiaXp3pxoPSxZhwD yEqOqcZZclxe9rMFKiry7qlIMyR0VXHi4pTWeR/scKwmMtwgslVeukSTDjLVLPqTI1HazahW185 TS1zcvNTf8Zep3w== 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 value 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 | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/net/core/net_namespace.c b/net/core/net_namespace.c index 008de9675ea98fa8c18628b2f1c3aee7f3ebc9c6..6cbc8eabb8e56c847fc34fa8ec9= 994e8b275b0af 100644 --- a/net/core/net_namespace.c +++ b/net/core/net_namespace.c @@ -763,12 +763,38 @@ 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-%u-refcnt", net->ns.= inum); + ref_tracker_dir_symlink(&net->notrefcnt_tracker, "netns-%u-notrefcnt", ne= t->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 04:30:12 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 F2C1929AAF2; Mon, 28 Apr 2025 18:27:13 +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=1745864834; cv=none; b=nV+nqydElndeyR3mDpdjqf2Nfw/KWjvJHjmKvhVS4/rjTlVnGJ3a+Ngf04oGSfV1oEcok5H+7ev3dGOIHIpQbvv2+y98uiqDPHZHaTaPIG/nsOZh1Qh2XwbFxWBD7pXb0LJoWAHM8r50pjDsJzumr6njKPhNXxmB8wiycLkOcvI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745864834; c=relaxed/simple; bh=LUr5khTFmeDi+Ua8+P5dJsfAbjq9HmURsDGnKrGJrGs=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=VZ+LQamJ0M7UXsYZ6bZurBLpxbiD8ECg6uxyS5tF/qHuuuXo8gHAANXndXXXD5Gd/KW0OmVAnFgVmAtVOVnwKW4/JX2ozrJPdrCeA8MdS3TU+YEAorIwyWgSAzzU2OFu1p+oQkQewt2dfdxLe5iYn4aNKdc7y+yUBOfzPV7g/eM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=CMLwNem1; 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="CMLwNem1" Received: by smtp.kernel.org (Postfix) with ESMTPSA id CE053C4CEED; Mon, 28 Apr 2025 18:27:12 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1745864833; bh=LUr5khTFmeDi+Ua8+P5dJsfAbjq9HmURsDGnKrGJrGs=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=CMLwNem1Fcc57a738z/tvDNE5PIQWOMMuBlhcebPgLlVA9nYnYadpQ9oTJKD0G9Pu EffEBnYnNQuY0W0//zEB6jFAluTG/ZGGOLR4iGHhUDfHRAN9PUzY96XEfeFe+vuBlN mlxu+/c8Qp2Geo4BjarYfoLWeTo/eIeMlJnW7P3Yi1RWNphh3oazPbawyTJm0SA+WR +fN66ZP23A4HYk1v8UyndZtSLgL1O/vUzmapnYx7EacKrlAtw3fe8N8N/senlsRw7D xr7QWbMY2Xcu/+NDw0QoWAYqY74eYO3iXDosAD1AUa1SDQ+tKrBNBNC0X0ZddBIxih W9D1CptjskySg== From: Jeff Layton Date: Mon, 28 Apr 2025 11:26:32 -0700 Subject: [PATCH v5 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: <20250428-reftrack-dbgfs-v5-9-1cbbdf2038bd@kernel.org> References: <20250428-reftrack-dbgfs-v5-0-1cbbdf2038bd@kernel.org> In-Reply-To: <20250428-reftrack-dbgfs-v5-0-1cbbdf2038bd@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/ZANAwAIAQAOaEEZVoIVAcsmYgBoD8h2gRjkmyNDtqQz8jGSWwZwY7At/oqUlVT1Z iLVbzuEaAaJAjMEAAEIAB0WIQRLwNeyRHGyoYTq9dMADmhBGVaCFQUCaA/IdgAKCRAADmhBGVaC FaUPD/0TiwzsG/qKnXlSUou4EyQ/Rhx5C1GxSJr5nJ/vjfm9VJyXyGfyUEQSKJzmf2PcH5G6Xi5 kqFV4jqEh3d1hQQmtEnfp5j02RAB4qGgHlZITDXJawCu2DBqW1LSBquWlQMnKZg2ceDNTGoXh7p ih2SqyMd9i7WyZFtZ8vNpIYttg1+FSgmMnu/vYZ2PjdWrWBPiwNj5hhaYmnljeKqc8YqphfOzKJ f7EoF2/fWAAO9ocbMf/6sx/x4IDqSbdGTFPt3ltzMhezteRuXs9/WDKrotUKl02NsaBflXvjZHf megsqTfQcMtp7wjdT/2d+ABVlUO3u431g7US+IbXhExlOcdsQ6497b7bEnEzGFfATG6ONf0+k5N tVSeNKBsQoz1LxmEnLs3hd5KuyyZoTtmi+5FR0XCyWgyKdhvusLFn5XKeyjuclD42elHcMoWJKD LO6Cv56Y8GOHQ/uTXI3Eb0MnyCfw5jLutZ9uIEMc9aJvuKD5TnR4IHRhGwKXeJww3OxgvWbG3lS tj6fjuNQ5lQfAvQfWGuC8o7G6HsQUKsgn0CfIEnpKbAe86Tv+ECv4kMn9zcQUY2zw6NKEzQSLc6 d0vd4uyTY4k77Lgg5lQh6xDOnnlCJsxxc9J9xmAYoHFW512t+k+JKLPzPo8/XIXMOnDpizory64 qhdlAV0pNa2R6fg== 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 04:30:12 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 D5FCF29B76B; Mon, 28 Apr 2025 18:27:14 +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=1745864836; cv=none; b=l4EQ76cfiKN28wKQqZIBZLc+CJS5Z8QIUmNAw5gxXz78vukLavTlS/xJTrYqpShXS7y26GdJpjh8J1Mv+lZLsEeDprQkYIHYxomIqKn9sPqBZr4x+JtFpLF3q2tcIUhhol5t64JQBuDcJ5GpNwUTezom630UjIUZw+NFqn9P8qM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1745864836; c=relaxed/simple; bh=GDPgtOVgXL6plCbNuxFYLP6Z2KzvkwaJrDLAn/m6LXU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=NvgkM7wRI/qlwkowQaFACEC/v+35hgC70jaDnrB6pmmtuDmYIIaBI9vd75B5dRM1xv23ppqtJq7acaS41+YYne4QJBEagDV3JN5zn/fj6gscCNWfl2gRTsNN8ComZ3G0FSv+p6JwSacR3+rjBUCYwKiPwa7wDb82LmDXiBzuEOI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=QkstneYm; 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="QkstneYm" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 9A5FBC4CEF0; Mon, 28 Apr 2025 18:27:13 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1745864834; bh=GDPgtOVgXL6plCbNuxFYLP6Z2KzvkwaJrDLAn/m6LXU=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=QkstneYmHHLA6J294oqPCh83PODKG3epohj7IZq8+5RZhEIeEVEZZJIgSw13vL5Zp xhRse5VKrR/X4iHQF5cd/WsEWbNUWOGI7LhyXZCxeabjEb7nZv1OkMU0BfLoUJjZvn komNEJvms8z4DpG7lJsQ5ZO+Nbi1251OCpdiQygjsdx96M6XZCwspX7/cB8TgXblw6 XRjR/4nD30a2HZKAfMCUYgSvrvvcYQPS9eS1ychR/2NU9JDMdvL2dxGY9o1h4wqPqR BI4CELjbu6UwLfxbZumrXFcbGMA+ndYZ8svPibdJp1GzJSE2szbAZVxo4YNyHs9tk/ XUBkBY97LDRJw== From: Jeff Layton Date: Mon, 28 Apr 2025 11:26:33 -0700 Subject: [PATCH v5 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: <20250428-reftrack-dbgfs-v5-10-1cbbdf2038bd@kernel.org> References: <20250428-reftrack-dbgfs-v5-0-1cbbdf2038bd@kernel.org> In-Reply-To: <20250428-reftrack-dbgfs-v5-0-1cbbdf2038bd@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=GDPgtOVgXL6plCbNuxFYLP6Z2KzvkwaJrDLAn/m6LXU=; b=owEBbQKS/ZANAwAIAQAOaEEZVoIVAcsmYgBoD8h2alZshdTC5MUo0enHqdTnXYzWEFaXW5InR 0QgaqPUFRqJAjMEAAEIAB0WIQRLwNeyRHGyoYTq9dMADmhBGVaCFQUCaA/IdgAKCRAADmhBGVaC FZCwD/4uyNGtTyU8VgiqHTC0vbAOEWvzi4PZFKEEOSiWk94kRUS4rluRUxSAnJIgI32QiB0L+qv wlhBcJjKUjQ5yT2Q/+nfKISKCtv66IoTAlqENJMKDdU7MbZwOpyk1K8assuqIiwUbzHJx4UY+1b u/wYdXUn3TLoXnELbgU2VKWJDKQ+gGwROh4etpNcMygQEvMEd4hKMKlqn97RjJbOXZuk0Sjr+N2 cwleF47fVikVLPHrG2JdVKopERKbAZnzn97uLC7d/a0A4GECOsvFdlt5v9q3DatJUnB1BaQPgpI 66yHFWswqxVgNfnW0lpq5gRIEg5MihpALl0oil4GdHUo8P81+U2CSZhYhco9X/5wQhx7ZURyUav uA+OEmzjGDvGBDVg3J0erum7ek08e1QnVs52e8nE3er9fGW/udT4HQ4ZbDsTOEJoGjrgNvpoDJx BZGy6M9RfMuzMitVgkBBbH+DKtw1OtW+KZ8gzR5OJKqD/fK9o6G8a9peERPwkdFa3DEmObpV7nH kZb5Ehb9/fscAbsq+GOmRpw3OmbJPEbhJt/dQNr/A1AwOoAmo0aREzhlcs7S177iICbpfKpUpV6 AaM56wUNP341lfnqVYDLSq3Xx2Xc+cNXX33EpfMbf2q5Y07Xh7DxYDyEqaR6Ly0WdC2YpbMuWRd 4p1WccIXmpYkJyQ== 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 a011297c501011c697de44469f9720597aa33116..1e2bd0a0b7c4c2273a92663af7e= 710a0a2ba079b 100644 --- a/include/linux/ref_tracker.h +++ b/include/linux/ref_tracker.h @@ -23,7 +23,6 @@ struct ref_tracker_dir { struct dentry *dentry; struct dentry *symlink; #endif - char name[32]; #endif }; =20 @@ -32,10 +31,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); @@ -49,7 +59,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(); } @@ -74,8 +83,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 25fb22c0a367573851d83a8a00b99b109871f47d..c603685e8afabe2263b1efef8c0= bc8e0ce7e7755 100644 --- a/lib/ref_tracker.c +++ b/lib/ref_tracker.c @@ -136,7 +136,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 @@ -147,14 +147,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 6cbc8eabb8e56c847fc34fa8ec9994e8b275b0af..d70e058476aafbac59738e1fd88= f0ebb32ee0fb2 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