From nobody Sun Feb 8 10:43:33 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 5B847259489; Wed, 30 Apr 2025 15:07:03 +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=1746025624; cv=none; b=qMoTD7MbksVFkmjJxfZV06smo42HcOaiVV+30MSU6IPOC8Z6sFwjCKudMa+vX2VB4xzhdtjjXBQDJiHPebKbQgfG4FYDHtL4ILReNISlhO3b6B6XvKGQw/TGd+MZ0JMKGkXNt2NLhewl+9G0m+txjcCPRAWDp8bd2mCABhmYgaY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746025624; c=relaxed/simple; bh=qdjjg9250uAChp/B6CMoiJw5KiM08dmL8XUQ0eA5f48=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=KRPsGMTQ0pbXph97cck2C0lzQrn3GPoazgwA5qBNBD/LBeKP2xerX/qRgbRwhfLZzOMPqI0Dpj/4VsvQ0ImggccmZnDDTf3effOgyNbVVJZgeHxznXTam3xLZEIhvysvrHtfLgVAp5pTZBMVpCbIAj3kQHTsgH9vxTchZMBIgao= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=hAnlNUFJ; 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="hAnlNUFJ" Received: by smtp.kernel.org (Postfix) with ESMTPSA id DAC1DC4CEED; Wed, 30 Apr 2025 15:07:02 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1746025623; bh=qdjjg9250uAChp/B6CMoiJw5KiM08dmL8XUQ0eA5f48=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=hAnlNUFJndPQh2uqoHNAyXklxak3fPYowFrEv8KguTD7kOEZTqvsQbwCbsVC39suP z3P+/u7vRuVeqB1rCzIWaeExYIOWR2dVPu7zOCU4Q52U7mi4f0EO++QeY/xrGLjeHC 4qRI8uswoGrUJsyaAdVYn5G0kYpzpQfAx6SW5S3bo4sOTF+5tQ3DXjg+g/JO2shO6E 3F3tYS+xfAV6YGoIi8W7eLTtcI86AgU5shW5GfXoETmn/e9YpiB5JyS8FBTUkyXZQM Ov7qbae63qhPCaWsztB4SftgahdSHZS1n8WQN2EcNGpNZVX7daP8ci8DX7jXzxRSA7 wy1RFJPNFs7iA== From: Jeff Layton Date: Wed, 30 Apr 2025 08:06:47 -0700 Subject: [PATCH v6 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: <20250430-reftrack-dbgfs-v6-1-867c29aff03a@kernel.org> References: <20250430-reftrack-dbgfs-v6-0-867c29aff03a@kernel.org> In-Reply-To: <20250430-reftrack-dbgfs-v6-0-867c29aff03a@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/ZANAwAIAQAOaEEZVoIVAcsmYgBoEjySxG6cMlx8Pj7RBaQswqPAeiVGnzMELcZQ6 nQmh3QPQFmJAjMEAAEIAB0WIQRLwNeyRHGyoYTq9dMADmhBGVaCFQUCaBI8kgAKCRAADmhBGVaC Ff6MEACZvwFZgDa8UEtM2MyAwP7PKxEgphAbGXuulQI40KhvIV8pqXqUieV/nVxRvDs5KcN23RT 9sk80fL7PCbRJkaJgtbFfobqK6nuk4Z6PeI7CAui3dCFwQVzWw9RYPTt/Y6tYIhWIDjYCZUIS80 ArSzfaiv1rx9XKk5tXj5VcNnPmOoHrauILQb5gV7hAFzUxbqlortdzPo13ErqoYbrQGXb24svop WZjSBvqU/MU6chuvrP2XXQf+3ZCMJI6KeK3MpzRIxYdwOcTjUo9sIrh0fg0wkiPl5W8wQ4wEphN NGwJ8RXH3CxXuCWY8jxAOOZHeYbg15wYncIc3KgDsRdmH0VfZzQHdfvFOuKl084Qma29XR7e5ai tYBa0epFkMNbM68aHvbumUpbtR9a3o0zVu0aOlTqRC/Bw7LwkbfZK9Jak8o1fd459dw6qoCCmBC KB3hetK5nLNu5bW12GV+Sas9ij1y/P7iYvGtwsDB4bA34PPMkOPbekMZ8aoZ9ZbtoxiW2PuUvvw M1xWIkJ/YV78IvBVFNF5bEZeUX2sqquOs6DxYuhJdUu1c1f6B9Tnm3vuVtkDuZ/jfOM+hFy0CDq 5c2s/q7LlF5ob0mDrtPdHim8sqkiUw/1f8w66NShdH+AFheES+0XuXBmIUYjRmisUp/zEx+kp4G GeQQSlkCrhyIAcw== 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 10:43:33 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 500CA25DCFD; Wed, 30 Apr 2025 15:07: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=1746025625; cv=none; b=hEgogf7MlF5L1w3p+0/d7gMNYLtlQm8wQt5nLR2aXtyJHv3rRp+sf8OAznHXARdIm3MznZVAjRX5DkGBVvieUwsZhaTZUaGu4lcpuOyUjb/UnECqRCT5SW1xcZqRR6m9WX0Tf2IXhz5wohv0YrsG1Tk9wVXoFwyIVyOxixQksIU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746025625; c=relaxed/simple; bh=h02vtg+uo9MQLcJqO0oaAc8ETCkA4CEZoiZkSocwMrw=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=pXHQEt6pVu8S4ABqyT+FX2mXETbZvKX9k37zm3WDzlqBn4gcBPLwU7CKF7iDsTQDH0U0jbYuglz+5ehrWijy9fzhzQTMJujn25jDouEjMVb0mpPQV0Edx+8RkDuUQxdEgmQe73dwNYaH/JOXi9su6zLWZdk7BvpV8f+rllzCFBQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=jGPgPdJx; 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="jGPgPdJx" Received: by smtp.kernel.org (Postfix) with ESMTPSA id E924BC4CEF0; Wed, 30 Apr 2025 15:07:03 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1746025624; bh=h02vtg+uo9MQLcJqO0oaAc8ETCkA4CEZoiZkSocwMrw=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=jGPgPdJx6HlGTYWP06HKysNQ/Hx6S9M5qGOui5IiQyzX8JuYB0i0QZ0M1rigxrMvj 3z7Lx6N7/+aLRPQcXTUSyHk15Ow51rz8ajeBMPUSBCExcf6LcnBB6N1Bn9RhMHGDiM tY+n5y7x7CmFRKsUsGLqNckcxqf6eDgGXfNzk+jmTOtkz4xcvqsYEHL3tmIKNvundr OJ3j2hcAWFJ2ZUQxN0CVpiijSo1zO5yJqrsoC1MkNd5Fl4PxThKmh/70k6WfRUW8c+ hsafL4Vqk+EXlrn4pRzlTVJxCYM91R3YeI56mD2VQe13zssMqTAGqWaM2OPhw0HTFO rhHw0yfNcQojQ== From: Jeff Layton Date: Wed, 30 Apr 2025 08:06:48 -0700 Subject: [PATCH v6 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: <20250430-reftrack-dbgfs-v6-2-867c29aff03a@kernel.org> References: <20250430-reftrack-dbgfs-v6-0-867c29aff03a@kernel.org> In-Reply-To: <20250430-reftrack-dbgfs-v6-0-867c29aff03a@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/ZANAwAIAQAOaEEZVoIVAcsmYgBoEjyTZic4mSRdvadMvmskl/R23v/69+pdAJIj8 mP7Ppdt3HGJAjMEAAEIAB0WIQRLwNeyRHGyoYTq9dMADmhBGVaCFQUCaBI8kwAKCRAADmhBGVaC FdiEEACpnvN0dEI1q2tZxnGw8SjA7iZBndKYTOyvozPDnH9qZ5nJms0ukmkEKIc4/ZBjAI+gvbW ZS4eP3JRLOH2cZ2dy+OBMZrnqaogzEN80E6RhJwiARyzUjoBZJi0qkH7Z/uuU2zrK0km9OxUHgq Ferw1BFBjyTWDAj2wswW4oNCc/hhehV+H36x60OnzA9BnYnYbcBIShS6uPiG6wi6iRohQlcf39B jc5G+iOeKSddLmSo2zUwnxhP4T9WEfbZIyHV3dZjS2TxkC9KsA78OuV/19riDeGEjA62Yc/dOAM DcEBdOcZFa/OVh3gQbnSXlNg8C1N8COP5TUCssDVXYbVv5AlTWpjcJVOvYH2uZrCFBiESotZcMZ /anzSL0s6/7r6txzNdQmGDlac24G9x8TeBVRJ7V4NznUo9gQT/9zYCH86FBd5CWWURllA61wKw7 WjHg13Af+lFq3bSN/dLFWeqxUKu6UJdZTagO3UFKQzoznKC/yBP/zfltjqnzucRswWup/LSoImV Fh9wMYLYHsLjoiMMYxN+jWRYXspwFuGJMgkmZw02ZVRlmeVsljECSP8+88LpUUO4frTuO++Jezl gbW1z/CgrWYfiIT41Ez4/rXzNWZ3EJOkFTLG8Ni47qKcydNk9xPc156skr6apUn5x901pNT/Lkf Id7YhaTSJm3HixQ== 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 10:43:33 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 EF9FF2609D3; Wed, 30 Apr 2025 15:07: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=1746025626; cv=none; b=Viox4Bc9vAg5/pq6IxFsdiG9HVNxEf5i82wDR3Ay8HU24AHs8Tumirp2vvyUUbQ7HFlFuWQFwx/HxiOVI1pmGevw0kgVY7h7ykEwNI+zytLkRLYVShw4JH6SOj5VEnSnaSSstQIOf6AjNMKfNSwECKOJthkmkrnWBF6qblliMuo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746025626; c=relaxed/simple; bh=D7eYUyrEMPuIlNDnf5xYhfYtI7n2pvxbIb5qGlnf6w4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=aJZ3xlCdpKWS6LxGngjft3WhFYXpE1pKGXDD9h5KkfkyrnmBeJ0OdGCDimqxptPszo5MZ9qksL00+fVEI5gEIelm+1MlTxtzLzg9pUQh1sNtxHFpCNq3R2VLkRIqz+bI4d24ryDemxSEtPIit2iJKP471aDrPUTzXONlvoShE+g= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=PwDE+QTm; 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="PwDE+QTm" Received: by smtp.kernel.org (Postfix) with ESMTPSA id ECD77C4CEEE; Wed, 30 Apr 2025 15:07:04 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1746025625; bh=D7eYUyrEMPuIlNDnf5xYhfYtI7n2pvxbIb5qGlnf6w4=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=PwDE+QTm8euiz6JCbtrNwmYZkLWFW7xN3MYiq4BG+ZxPDV+fCCJky87Nm4mtBpAUT WTItyVAkg8gGcJv784Us80anEd7yCHSiMbY1LeC7D9NCs254opjY8su/225woP6Of8 DbStG2On+H8BVp1BcdAsNzV6FLhTqmlnERekvAn9k2mw75e9V8nKT3OuJx7ok5DrJ4 VsAybpzY1RcEH9it6BS1Hmsa7nUQRESiasnQnsmKTpsbeO4oRlWr3shgylwZXKne6x A4/O4D6+BgrpNwVCvd/5yOZgiZqabRCndmQa68xLMo9Nx9KrAh6eviSuYmwfG8FXMn +Acqd+sEqR0dQ== From: Jeff Layton Date: Wed, 30 Apr 2025 08:06:49 -0700 Subject: [PATCH v6 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: <20250430-reftrack-dbgfs-v6-3-867c29aff03a@kernel.org> References: <20250430-reftrack-dbgfs-v6-0-867c29aff03a@kernel.org> In-Reply-To: <20250430-reftrack-dbgfs-v6-0-867c29aff03a@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/ZANAwAIAQAOaEEZVoIVAcsmYgBoEjyTiIARanPYQArsviqK9IeK73cqDlVhO1+v9 E7Ob19cvaOJAjMEAAEIAB0WIQRLwNeyRHGyoYTq9dMADmhBGVaCFQUCaBI8kwAKCRAADmhBGVaC FZzHEADTHkCMU5FFtaPA6Y9omm9SFcBj15BwaZngJOAqNsAm9nFXzgcPgEMt9y4i4MGB8oZ0Bzo tlaG7rpjQxyeBOLpa4uOCEdIyKHuaO5v0kBgG+zw81KEsz62ZhT8ddMxc4O9ik9lTYl2dteORvr wvHNRsrclFnuSznhi3e94XyzmWhIaY2H71bhb2Z7Zk39FT7QCPSZDZQ9brUShhqs5tkRBZOtJWK EYHCw+NbUpQRHFWiCUFYmFIctJFbdSzxcKAcS7ALgp2LV0q1e2eC2IVgJfPOp1Rqsez1yQz2nIx e1zjOaNuNKaWX6L3UDVgVmCj+a2+Ko7VQ/fT4SAqn5hW31RwDti7yOC8WYkL2Uvew+0K9P3BfRd 7kOlR9hoPrIDIijh0yb99jNls6UbIbb5bn1JkhKPqNlvOYNVqgxW2mNiVGr0jVDqir/sNdgqqtp wuyR0xCjT8MwofIjnoySLb5PDBy/GzmycLlhdOFsi8TIgDjcq5EhiLGp9nh7PobsBvAkvN/2/7Y 1Rkchwi9pm1ms08bS282ntZ6hB9Tw6+X5JpCs2qO2aOFsqjWh58OR6dFdvdeZ7MDehOxRvdY5dS TYdKikOU7PXPkIXl7qg1NKLqEhb2N4+uGCPjxpgMG5vHHDShGfCGyDbiHntZQmKtCdglkxx3FIe JNYUn5dqoeqX5jw== 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 10:43:33 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 6F3F22620D1; Wed, 30 Apr 2025 15:07: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=1746025627; cv=none; b=lVOXNBGSqD59DOUyBa65KuVxK435lkSPzStlx9/C88SNnrL6sHpt/hQqdIw8wWgYn3LbJ6XQbtKupEYx/6rWs8e1uiedJgpTwQ1J9fx0UXkExXldZa9Xl63calUf1G76Yo+GNoRueKyuXcT9UqzdYwDh1Pf38+9+9OmS7QQxqu4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746025627; c=relaxed/simple; bh=OM8eKgd8/PoRGSkjls071wlD5MSsyPo0WX9Tc5eod8o=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=R/y5t9xcrnZnRgG74BzmGX2b9gYPuNDu56sD30t2pO0KBhECxFIlHyxcsuJTkUE8WL/R4BWFz0BWlOX/3Tr2D8GGeoGt5ck5fNn9uJUe+x8JX2bW62gO/wWuyjE3xELaXYEmkrB8mKpmuwVHfbnf2UADhSbPdPqaAhFtiRoWNuA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=mR1xluiV; 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="mR1xluiV" Received: by smtp.kernel.org (Postfix) with ESMTPSA id ED6FCC4CEF8; Wed, 30 Apr 2025 15:07:05 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1746025626; bh=OM8eKgd8/PoRGSkjls071wlD5MSsyPo0WX9Tc5eod8o=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=mR1xluiVjNvlMMQVtK/GhlCweCtrL780Odw2GA5biH0HSUWWyMHBH5zfcv3Z+Mg4v 625/VXp6Xjy7nZDjPKT2Jbyq+8cVUdDaePKHtM4TGQAX/L4Utm+9zGcpjYQrg60Rtf K17LyvNeXKgNZw0icxzH6vxQNBVJ8ATrX3GSMF9Fc8DBxoRBKu1+oAAUJIU0NxBfij Ndvkw5iHOy0KPGyKW35y6J3ahoAdcn5BvW1UwzlD0ijK7Jv5GD2r7Qz3k9U8SzardP 2L2u8wqIlMnxdy2cHxpNJ6u6OMw+V3pN7GaITgLXHUmScTCyFjcdF0lf7oRDj7TCgy mMfBw/UWAEUKQ== From: Jeff Layton Date: Wed, 30 Apr 2025 08:06:50 -0700 Subject: [PATCH v6 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: <20250430-reftrack-dbgfs-v6-4-867c29aff03a@kernel.org> References: <20250430-reftrack-dbgfs-v6-0-867c29aff03a@kernel.org> In-Reply-To: <20250430-reftrack-dbgfs-v6-0-867c29aff03a@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/ZANAwAIAQAOaEEZVoIVAcsmYgBoEjyTP13iajTzStcKm6uW/WgjZ0Brn1Mw41nOD KSaK76iGfCJAjMEAAEIAB0WIQRLwNeyRHGyoYTq9dMADmhBGVaCFQUCaBI8kwAKCRAADmhBGVaC FWTSEACIL8pk/WJ30anQ85if0UnCnnGlA/Mb6sgC8dn/sfKsXHZ4lfPq3cB/wqt9wzltyLpx09V ktWKWdStDdGZtL7kGjWScgA+iZZ4t1enlgh6M/ngYFjtRZY/upfyVdF9lD6gO5qC7cOXWx7WKtN W6qQnpeFal0bjlAbCrZmpCMuWEArVVFqYsHaqZtKQB8i+eSdeaiTaNyYQvAHpHRNrXM3qybbKmu 5fuflM6TASbMr+HjioM5zaOq0EtJqDliBtw4LMt3/sHmAq2IGbvmKDgmtdd2yrc2NSfwd3HROXA HLKpQCoh9SLnQBT9HRtN1VHxaMMpwRRCJHLBhasAapbuRaGxTxurouVGgNa+V1J6e3yU2UaMPMf 2dxZfkXOmIJyYGLcUPW0zNsFOvLi/wH6F8uKqBo3vPdS7piuhKfkwAbPd6JLnvajASs5EUtfMtq KCKQdHlkMZ1iBy1Gpy6jKXB0hATO6s1k8OnSnoWssr95GqqdTe1GLfMR5xJFPqUUudBWagJqIt5 Rs0Rafya+pAeZL4BoJ+RLM/Q69pw9KVC96RD9jOXowM8OetdFf02vzXRAN2g1L0OhLglRbqMcvG MAGyfGwTky074ON7Cz8z5Di65eY8pgW7xwF8V0tjunE43I9f6F+WuuZhS99OXa/OjOxknB5oR1j 6Jm6HWKJES+Or9A== 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 10:43:33 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 7B3322638A3; Wed, 30 Apr 2025 15:07: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=1746025628; cv=none; b=TcHpf+ZiR3BBqA0DcYw6UbMaHWr/tQ5SOdJvwFp0lvPCymlD0ssJOqpMQWkRp27FbRFUiMStaVpR4NM/NY95UP8fGv+KYCMGLnGHv4wWnV+BTvQMhJko5VKZTtgT4Xh0iKk05d3ffcp0g6sbxZuClfa7FWO7PkUrB7L9wG2emE8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746025628; c=relaxed/simple; bh=jnlBKJie8sIeQlm8A0Xfcctk6HgKFM10uOFIjHSJE7k=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=lADb9QDPxM4XSGpOfGORGOIqskqsm0/Li4H5CRJOcaaqj9dE9wzk7gomspSxEA6PqHkb+diO32VuYAXKuJWwEeZADNm9wh/HUq1SjCxJGJFIerezZJOHBEasvF99zDMJMSGKAf6nsxGMVC6HvSEao4TDsUDEnasYjPdOviG6B34= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=MSXuD2PK; 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="MSXuD2PK" Received: by smtp.kernel.org (Postfix) with ESMTPSA id F2A14C4CEE7; Wed, 30 Apr 2025 15:07:06 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1746025627; bh=jnlBKJie8sIeQlm8A0Xfcctk6HgKFM10uOFIjHSJE7k=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=MSXuD2PK8yuzpEK1lxSomb/zNOg+RoGHyaCk5buzelFPYi+s7O4VQpBwhs26AiWvL zZ4Kj0nyCrU1saexccZ2x7WcEXDxq49VSTRvpXM4Y3bbqqlP9sfM9MQvykx8YFhUwr 5s6ABRkGNY920tAtLnmQkaMd/eh34LaEpp1tADm3DGGbDaXQW1Fyvy6HqWEnmlx12g +1BucqMX0ofN+UMYWVZK5A336Mu5bh03vJjvrCabIgYak2/3/cGlj7YLAVMX5heLN0 fMNeOLG5dCNvfoaKUCtI2K2h2RFqU0wgncDJL3XQf2iLzhrOo2xyGDqPoQSGz6PiWk HEoTtAR3hwbzg== From: Jeff Layton Date: Wed, 30 Apr 2025 08:06:51 -0700 Subject: [PATCH v6 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: <20250430-reftrack-dbgfs-v6-5-867c29aff03a@kernel.org> References: <20250430-reftrack-dbgfs-v6-0-867c29aff03a@kernel.org> In-Reply-To: <20250430-reftrack-dbgfs-v6-0-867c29aff03a@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=jnlBKJie8sIeQlm8A0Xfcctk6HgKFM10uOFIjHSJE7k=; b=owEBbQKS/ZANAwAIAQAOaEEZVoIVAcsmYgBoEjyTBd35szOPXiAQJ1K7Sn3JUye1X+axt1Ajw UWlj/3vSbWJAjMEAAEIAB0WIQRLwNeyRHGyoYTq9dMADmhBGVaCFQUCaBI8kwAKCRAADmhBGVaC FZZQEACmu7RHfJdVK64+DbZKtpY1CZTAhoZHbZOAUJk6IWqIOhP7Z8aDxpS0Y43mF6hV7x2HDEO SwgoCYM11votmxNyAoOgIV1Bykm/Rs6++nx92eZM3tfAzJZdLP1goUkJh7pTsT6ysg2+ovhhNQV T1zEexyCBJmTO4BQXiRC+CIxzeR5obO1weF277irEJXyfBFbqdJHOY36LrLOclWxYXv4llhuZkm OkS8V50W+9EUS4SHYr5vxeyXsswDHA28jpmZ4cH2dntxZZKG6pH8n1/R9srcSCSU8rlqD5dfa6p phtt9EHEuasBDVqkUCr2W+CK1POwV8TfHT5ZSjRPfdLhhwBnOcFwvjHN5Vv+j0p8VzKYhmhgHgk TIbGcOE1/bLiclmCNzyskvOwdnxS1eVqyYb6fQ6NmfZFomyHaKfV16fX0sEmYhFmUiHmTUZMrpD PM8TIrQ0oym7N23fpU9fuIs/l7urTLdVwzzhCLUfzkQG2eTlVfZgiJh9Y+f8NDE8msgDcBnaGhp N2+RtscjB0JNWCYB9BtOrF9IeCQeMQx/fFtnhOJu0JQPBsv1bx1st/tfTlixW4ge/MV/nfonC7v MXgw4fbNEMjdZkbswE3qgNa2W4FJsImW1SGYLoUp1G/bNsElihR1RfBzr35WSWxRUm6pgodW+BP K2p0vXa1ek+bkcw== 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 b6e0a87dd75eddef4d504419c0cf398ea65c19d8..b69c11e83c18c19aaa2dc23f802= 291d4a7e82a66 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,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 10:43:33 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 0F8E326139C; Wed, 30 Apr 2025 15:07: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=1746025629; cv=none; b=Pkt5PudzwgNMWX/UVnZeidEz5+gabSSGBkV+13zFhy4DpS0gNxGUMR/yVuGgcm2E1pJLW5dBjDkj937Q14lu9ILylEJRJ3jux8Q62E8t5sXMjnK5P2g0iwzPPPsIELzGc3fabf8cafsQ1BXBKq+AxnDNFrUz4aLKVnN4zXuphpo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746025629; c=relaxed/simple; bh=fKwdzrNkBVnGeIy3K4ltVt8KOl+gKU1yoyKwM/eux4k=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=nK1XhLT2HXYmU0gKPMQo6lSlPP/MH9AOpwydIqesL0viDKfPMwA6fL4nM1tZrHfBi1tJKyMYAQSrLrsQ4FhLbhbw0EwhPZZzoXAMLXATYKZsGJi/mIQvMNoAzMiAOFXmkAuJdyeTq6q4MnkgUNjukaMVy1IgmifoGDhZHx9pCnM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=qSz/1MDZ; 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="qSz/1MDZ" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 07A24C4CEEF; Wed, 30 Apr 2025 15:07:07 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1746025628; bh=fKwdzrNkBVnGeIy3K4ltVt8KOl+gKU1yoyKwM/eux4k=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=qSz/1MDZEZVgLJeY9n8vKJ6tTBS8g8NuOZGfsG0LFGwDxGuSVSx6cXoJYlPOlJosR MZD1yl+QVBH+gVi2LsTxfXQU6Gz3Ips2kqJa3u9GZDJY9dvFQepWprR5l5HclAVFPp O7+erA56WJEtbjB5HHMH9F4/PcaJxeh8C++9VLENWEgUV77Grg2fpvzviJROPyyUox rd4z2Ehi3qgzRitfvyAG7/BnR5lec/nhp0eKm2itZ+cNx9vdBK0Ib0oxRmLQbYWmJJ dJ8G1A7ziHH7Ymyvz7t9980WduKC9wJ4UPoGZZWGb1mC0SyzaW82/aeXZv+GlL1npU diqgB3sIlXSWA== From: Jeff Layton Date: Wed, 30 Apr 2025 08:06:52 -0700 Subject: [PATCH v6 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: <20250430-reftrack-dbgfs-v6-6-867c29aff03a@kernel.org> References: <20250430-reftrack-dbgfs-v6-0-867c29aff03a@kernel.org> In-Reply-To: <20250430-reftrack-dbgfs-v6-0-867c29aff03a@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=5545; i=jlayton@kernel.org; h=from:subject:message-id; bh=fKwdzrNkBVnGeIy3K4ltVt8KOl+gKU1yoyKwM/eux4k=; b=owEBbQKS/ZANAwAIAQAOaEEZVoIVAcsmYgBoEjyUNnGQS0OYEdA4brxErxtiTXBj5ZSusgfCk UnOz8CB8vCJAjMEAAEIAB0WIQRLwNeyRHGyoYTq9dMADmhBGVaCFQUCaBI8lAAKCRAADmhBGVaC FTTYD/9meNbu8lLPrSnzpnTzU3KCwZP8U4SJlUXEnGkMatFWdm1oy1T6aTjTbnDGTc4vyCQkmYK FCVwNKDBk+L1kdwJtLJOk3n3+sRN17coPbBDS7T+xwISzd1gWvaS63jEpDCqtvG/E8bMsJj80Mn eMXq7lCvtP4PQjOnN9b/NjwP/GGwRf3iFeWT8ijeFQW2NYWLBEAfKjJnVc3fmqyZofQrKHXPHvR kY0BR4/yQuIF+g0OnOrTRdVqwBakOnF3QmfJ1PIRwtBl+f9MsSmtQN/0U+QrzWbYmlahrcCzq82 mkjoSVu4nQB7X6OahhYZtpbR8m1aPgr+kStAbVJrbMgYk0ufEP8Rw4xR2UTiSFXeMVQHyjOLUQy 7fQ6d0zfS80hWBJEAiVCoOGu/XLbP7IG8PwhLsIBHH05kiQnfqxJslhlScRGXtu89lath+REsBk NkGjLmRm3fhRfTva13Auj9luRvT24fMd4gXB//nybIdD9hFLFElCXBZs9HgWT/Orbpp+IzHSlbi 09M7tnEFN+7PFuNXKC0zmWLeRg4YzI2bdZTxbBt+WupDxZCZ5L79gOnN9rLmH+/7ABuMKYvQGOS 92BOJOhwGV6SQTwBKT2cLLhKk2bsvsoDj9126m3vaGaWlQL3D5Rel202YHe3Yrl5iXyfv3kOOV5 Mu1hl8JvUE65daA== 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 | 73 +++++++++++++++++++++++++++++++++++++++++= ++-- 2 files changed, 85 insertions(+), 2 deletions(-) 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 b69c11e83c18c19aaa2dc23f802291d4a7e82a66..3ee4fd0f33407881cfa140dcb7d= 8b40e3c2722de 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); @@ -313,8 +322,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 "", @@ -328,6 +336,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 10:43:33 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 6203A264FB1; Wed, 30 Apr 2025 15:07:10 +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=1746025630; cv=none; b=ottegEwv6smrom21ppRNwq8t7Iv4gWHzeXbNa2bBDe0WmOyWHyK7xJbKZGbI1PihJt3Dr3TSjbocOlUkqtBzOSegRLYkNcJc26qRNrWQkvlzVuBZ/KNICcSGrMI9wi4na830XxFwa2bsFo7ORs1yy+xsy1Zr4z9EpcMnlKPRtbI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746025630; c=relaxed/simple; bh=l2OCUUbhAtEJhunFl9s7WpfywU8jr7sBKcPv0mzaIgc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ucDyg0PAK1ofEkouIVYWa/qB6b0ZoknJiilcl1cC8pxoE4s9HihVs2EOqXhZGaLUnZ359zLSZv6M23OjsomJb59VNeFnFaMJjufV+bverJq0wfuVsD8US08hxzmEzbm6PNfh/osQ1TxKPguLMejcYB+k/w9S18Jbrtdph+21oK8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=hpzK8cQC; 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="hpzK8cQC" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 0D033C4CEEC; Wed, 30 Apr 2025 15:07:09 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1746025630; bh=l2OCUUbhAtEJhunFl9s7WpfywU8jr7sBKcPv0mzaIgc=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=hpzK8cQC9tKAyzjvucQ9iN+kZ/LjIAStnT1l0CirHdaPkndNg1pfw6OJ2LCoF4AOW GGn2qXA9tiNNWoMthMznaC/ZMrTlID39WzPzb5taSbvGXnwVQGcrpx2X1jM+iAp4uj bjZHbv9og3QGCPaHLwLIr3u9R2FdiEgfRb/6DQ3qyN8lOhKSQ/8vK2T1IM2XIHUsCy wblcZshwsKly9cfp0H4/ppWxPvq/Do7CXQkCfoBW7kG+qfzncarfI9NaXYKa7lkaIJ sBWePkWqLGa2Jthrbe9Qz/dEiYdungevR6nygKNP33Ogu/h+IYzusp03dndOn5euul uUMdNgvNtGmgA== From: Jeff Layton Date: Wed, 30 Apr 2025 08:06:53 -0700 Subject: [PATCH v6 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: <20250430-reftrack-dbgfs-v6-7-867c29aff03a@kernel.org> References: <20250430-reftrack-dbgfs-v6-0-867c29aff03a@kernel.org> In-Reply-To: <20250430-reftrack-dbgfs-v6-0-867c29aff03a@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=3214; i=jlayton@kernel.org; h=from:subject:message-id; bh=l2OCUUbhAtEJhunFl9s7WpfywU8jr7sBKcPv0mzaIgc=; b=owEBbQKS/ZANAwAIAQAOaEEZVoIVAcsmYgBoEjyUxlaClx2l1uovcL0XdFjxbdtx9MQCIdkCR ftLMdlZ6kyJAjMEAAEIAB0WIQRLwNeyRHGyoYTq9dMADmhBGVaCFQUCaBI8lAAKCRAADmhBGVaC FQB3D/9PQ1WZ8PairKuf37rAmKR3/4iexcIQGa+ifz04gdQ9A+xqtthSJNBUJ+gl3BkhwNNi+Fr 2nFviSEP1hVlJFFpmkRoJbf7noJ0CiuWVLszWK9vHI4s/UW8iJwKbnaC+8CgTnXeuaoKyb/0cw7 qJ8xFOC+bxSd96EjSHb/4FCmIvruHcJovfQR5AxanWZVInqg17C4Gl1l8ddNyEICZNBwvrKkNJQ OfcSXOLNFdYFDjtd0jIt5iF9vX+VkCcw6IHyweOv26kFW9A2yruqSefxdOkWHXbsOo85fFji2+J 8uU2nEVhzBMdENTMF6KfrdvjIOc50qGN66LxecGWkDB5dL2YABnsuDYn67udtImpWVEYFdMrxgO HDj8kEY4fj1FUpkYHKq9/0wBmQIMlDKES6m3JQGPy2SQ756V16iJqKGHcXtRG7Vc1ZieXjXw6GW GQdAOT/hwg0gqbyj2SET1X1TiZXb2zOJALcCXf2H9WF4Wjjndp+ZANWm33pkySfxGNtiCuNETra tP7tCwliNziK6/QElPi9r8b3qFlteEqp+1leWgbrys0E2lO1/J7z0U+Pnqa21cBdj98QzcoIkCs Wy07gDdc0VYEvIUW1+70jlrnmtEkiUqB+Y3VKurcn3/cnRZiyVGF+PFALyYmT/EsJDWWXrtRx8Y BQp886aCK+iTJOw== 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 | 10 ++++++++++ lib/ref_tracker.c | 28 ++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+) diff --git a/include/linux/ref_tracker.h b/include/linux/ref_tracker.h index c6e65d7ef4d4fc74c60fcabd19166c131d4173e2..210f26e2528f23bea3b713a57ac= 27c730bd100ce 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) { } @@ -113,6 +120,9 @@ static inline int ref_tracker_free(struct ref_tracker_d= ir *dir, return 0; } =20 +static inline void ref_tracker_dir_symlink(struct ref_tracker_dir *dir, co= nst char *fmt, ...) +{ +} #endif =20 #endif /* _LINUX_REF_TRACKER_H */ diff --git a/lib/ref_tracker.c b/lib/ref_tracker.c index 3ee4fd0f33407881cfa140dcb7d8b40e3c2722de..16ef752e52c230763f2832c3127= 93d27da47c608 100644 --- a/lib/ref_tracker.c +++ b/lib/ref_tracker.c @@ -392,8 +392,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 10:43:33 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 CF9E826659E; Wed, 30 Apr 2025 15:07: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=1746025631; cv=none; b=MSnVSZ3XXL7Hj1p0PjGfj9tkQxoTMBVhGQ+RwLsKj/ASLYQi32l88kwMjGs+OcUqa65cPxqSzwAoJLE5rY4sWePvkPowKniXRCoITTQKZ8airB2WeHLDHC28LV2/VTuuIRHu5fwwc9mghwXk2y4UgyWHViR9spHuYnyh55iT04s= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746025631; c=relaxed/simple; bh=HxYYob4i7WkZ4QVFzXDuapuOVvHl8o21L1EhBkSyHxk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=YF/9GECLyloC7aLP23T7NFLh4bgOZP10GUv1dfSCtpvWkMQBTmJhAYG9ozkLwEkric/3rynM1NH2KnuoIc5LsBn0DT2tosGrSaqgKjaYE+nhGD3hVdycl/EW7JoteMJz3V6fdqSol0Eg9r12omZAvuWerG9/6GCUX4PB7WgV8Yg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=c9iJvpoL; 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="c9iJvpoL" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 6ABDDC4CEE7; Wed, 30 Apr 2025 15:07:10 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1746025631; bh=HxYYob4i7WkZ4QVFzXDuapuOVvHl8o21L1EhBkSyHxk=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=c9iJvpoLxME0pedJkdJYf/mTX07Z1tRYXv2izX2mDQLS6fHRGun2hceoO/G2qCD1A s7g/3R8cvH+O4lxFY/YX8n2wYx8tZPifI8VYoOZesL/hkvlQIpQb/VL/gd1U8pQIME z9CLMyOnS3fM4cCyVJlKCrmE98U5fIEDS2ZnV5B+4YZlbewcwIA2ypb+PTx4Sr6/4r Ej3vBWOSg5FvnTOh40zwpeCrg8igtXk5xWt+qYY8dd9G3O40CUl3GOHwYGE7vH6G0z oSfiKav/kYS5Rjsy0zPF6J3yO34p60BUGe3p4sgzmJyJcOn1PcbmAgE7jtK321g75h qO6sbQdruCJ+A== From: Jeff Layton Date: Wed, 30 Apr 2025 08:06:54 -0700 Subject: [PATCH v6 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: <20250430-reftrack-dbgfs-v6-8-867c29aff03a@kernel.org> References: <20250430-reftrack-dbgfs-v6-0-867c29aff03a@kernel.org> In-Reply-To: <20250430-reftrack-dbgfs-v6-0-867c29aff03a@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/ZANAwAIAQAOaEEZVoIVAcsmYgBoEjyUuVkMoy78wN5CCpwW5xj/qphR1mAoNEtn4 Nv5KKjK06qJAjMEAAEIAB0WIQRLwNeyRHGyoYTq9dMADmhBGVaCFQUCaBI8lAAKCRAADmhBGVaC FWCzD/9Zc84uzNPo6OQ36eKyNx0rmSVtujwMSxaE3qqL/DbF8sjCwhHNv57yeK3dYr1mkvWvlvw udhBtJK0gSu2bHhYIuoDDQCSfLqX+8CdC2KsaQkGDbLg1DBtjzgN2rTN1asqBXIEfpkkU77zxup 9vmEmvrEaVhU5221dGZcPlacieR/cX+yr20I+Pc619rhUxt0yAT97BPmPZXVIUjoHe0Gq7TM6aJ 96eUQnKDBvNJZyjF/3Du3bq/uOIoqtQ15nuwtCWoinzzar/zlm+E0MPU66I5bf6is65nhVaBrPD njb57ITAKq7FMcpft0ZGTUMhyH4nF6m4UHRcebYIgQ4rx6DaiQae7SX9wIX1o8BAgDmDS2sd8ww HLIo5WQIkO6pM9jr7nMlXHLF3VbvTSg25jW7gXPwT248UPn0v+DdR8viq7z6zoyIxNywQifpUUQ OFn0Y2Id9yJhbypaioY5Pl1jk1Wfz7swqVR/lpCc9IegvZV5TbYHgNfpzpxj34FkmKJzOwYtUmj 69/vVc9T3cNLIK3o2qar/sImF8Ayi8D8EmirTw4cvT6JQRkt8Ym66v4dQ0WnJK6XKudou0PCkQE 1OAEIwo0IsqjmWWmeoHIIILTUVHwliw6gCIcvI/QECSfDmLqXoSDYrAmpkxOFUV05S0BrsYP7V0 iTRKApfY2p9eKzQ== 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 10:43:33 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 76730269806; Wed, 30 Apr 2025 15:07: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=1746025632; cv=none; b=EebGQ3l3a4RNbVXzhiddC0oeNt26n5Jb316BMQ0sP8rFFmpuoshN1kTf9QShlCx0AVRuBtghDp7p39YvcnkRonGZz01bZNTe+n1cBxG4y01ttch4KTBQ0+Wi353Bd6E2o+rYUecm8xgwT3X2ENoC0MlpPtA+yMBuEXf6au4DfOc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746025632; c=relaxed/simple; bh=LUr5khTFmeDi+Ua8+P5dJsfAbjq9HmURsDGnKrGJrGs=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=uNH4NYKiBvtP+tPgQKp5uKhqs8hSDcwqnvyWx7wmcK1Q85vR2f57BBnZ7wyVtsh5TEkAmADU/OVVZaF1wEWaWweoANX05YCY+dyb+yKTWtGQfib40h5AFn+rEKzy8lE1Ea/bQdEAermEXz9z2DVCkEHyWZALZ/VzN8uUVkxv2kE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=UIncw+JU; 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="UIncw+JU" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 7AF7CC4CEEB; Wed, 30 Apr 2025 15:07:11 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1746025632; bh=LUr5khTFmeDi+Ua8+P5dJsfAbjq9HmURsDGnKrGJrGs=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=UIncw+JULR396O7QZfyrdatVH1L8iJBNiH7aZTpumnvsny+C0TlcYcRIASTqnu/TU E+zhnQyNLZpHjCbLWM3OeJTl1MIXn9XeytCFEOdW4RaJm97l34nCo2wFcdYdybmDtZ BcN7NzZgzM7V2vYRLGYvltvgyeiQx5/VjqfSh64hM3L7X7HRJibB5xZIYDl4C92L0a FKcZ69JG4J8+MpT2wp9GbpTG3xrmRzjJaxmYjOISMvn+80TDXzan3xjo4E2mkNvBv8 X8wgV+2hUeE/BeYJnlKq5UUYxiR8g0QGKq+9759BP4b+4wtDBcpJN22Cj6kUZHxgdw NhGlPh9MdiqIg== From: Jeff Layton Date: Wed, 30 Apr 2025 08:06:55 -0700 Subject: [PATCH v6 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: <20250430-reftrack-dbgfs-v6-9-867c29aff03a@kernel.org> References: <20250430-reftrack-dbgfs-v6-0-867c29aff03a@kernel.org> In-Reply-To: <20250430-reftrack-dbgfs-v6-0-867c29aff03a@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/ZANAwAIAQAOaEEZVoIVAcsmYgBoEjyV/8N4BT9kbqBIClZFHdNt0mmYP4nJ9W9Nt Q9YrzCvgiKJAjMEAAEIAB0WIQRLwNeyRHGyoYTq9dMADmhBGVaCFQUCaBI8lQAKCRAADmhBGVaC FdLhD/9u59DQA7E9R/z9jUdvpaqGjSDJVU19ns22LWmmWhSpmOgKcFQcu6+Vd270BR/kChw6gY0 6uqGcPupXfRScg5k8Nz3qcfn3+q/ZQGkPHJeHoyhC8sjzlGPujsWVktBGemSuTRtjwCbYopV0kM PC3rzMEmD4/BRbdez/CRbxuIwVWflfSNUZZzAD5gvRvaIPFwpI2yknel7FPS3/wyhTAR2QR+X1i 2yQVT3r0mYlJjfetoAhGhsuPP5XPmpggvlA1v63vlzeIdVBjbdgevv6i85SaDF4rZqvgKjav2+H UL7rJl3wEeIORQRrCP1h1fQKkk6kgtLo7IItzfofaq88Jt69qr6C+jdQ+yPCbQRw+9BVVrArDAM 1pA7NNvALkho50bn0B2JiZ3Y1Z1I/hHAZkEj5v3/++0zeZLHQn258obo4r1fd8txDbUrSwVhTcj jk3bUQpi144MrrpghjtoC5Rxdx225tmwu5IU7megag0VyOS/JgZ2p6EmNJ8AM3dMjtEMtL4Qf3E rkdHidXMxuWGxQuqLXx2bLm1eV8fcu0IDRiXcrcnoN2ZK/+gCtqoXLpVwrktDMdFikhzMPE4njD bACoCZekNbgK2/qThW8UgcPsTjVyaMOsiZUwmTHXrIK81Y26bJloJ+RwN0p8f+aA6y8D6mvRQ8g fgvmwn4kJHtmxxw== 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 10:43:33 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 EA25920F091; Wed, 30 Apr 2025 15:07: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=1746025634; cv=none; b=uD4GGihzE7CxDY/lnlQZd27hRyWi74JFTFVMS0JQr61aR2jlDuHENFOr8Uk+ofzVliWNsFMic1efnjh7wkdXCfZsyj8xhpqtj4/mv58UyGTBie2/SKSZbI6T3ZZ42nWUS6yg0Sozt9EgaCdJWhr6ZZfZz42DX56APca6xd9e+Tw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1746025634; c=relaxed/simple; bh=te3/SWtYXksBycfmngxcsGWsZSFl9uAYFDEPPLo/BdQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=foDaxkAj4D4ru2JGIxn1BrBFcRCtlv6vAF99/2vulf1KlWbe6Hvta2ZPYL+pphWj6v+2CdMo+ILnSiJ/hsXmzH5PU9cikVzy09e8xYGATzzj8mTJxLmRUsAi5lwQp1yBX62kUstoXx5kEnZJLdhhLB/sUl/DWVlm9FczE2kHh8M= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=SHiLXyQc; 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="SHiLXyQc" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 7E885C4CEEC; Wed, 30 Apr 2025 15:07:12 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1746025633; bh=te3/SWtYXksBycfmngxcsGWsZSFl9uAYFDEPPLo/BdQ=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=SHiLXyQcxktLUACqltvhyhPGLf6ikVkmv9iDUz73wXUr8P+lOdolIlLl/kpU7Gx4U q1qWumC1hBLvexZwXiVd6UPoRVkDaeVOWZiD9oZmqVE0peOOBbz2MZxISV6hOuJR85 TNI9DuZ5Bn7XmSsaqPVj6+pyvBJHS3YYrg94/l5e16IfRbc4TA+vrXXj0VZjHLxYFT SKKpVa6EcARcFCGmjLqu3Jj0U2uTSfPsOi2WWrYTgKGT3PIy39OYXI+4fRtbuNNOxf 4xdlGgPAyLumJ0Ejdfh+c6Fs/VeyOrIpB97ZESxaiJfPn1nC+17mMcYIp7OY7n/dAN /S8oAzZyeFrng== From: Jeff Layton Date: Wed, 30 Apr 2025 08:06:56 -0700 Subject: [PATCH v6 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: <20250430-reftrack-dbgfs-v6-10-867c29aff03a@kernel.org> References: <20250430-reftrack-dbgfs-v6-0-867c29aff03a@kernel.org> In-Reply-To: <20250430-reftrack-dbgfs-v6-0-867c29aff03a@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=te3/SWtYXksBycfmngxcsGWsZSFl9uAYFDEPPLo/BdQ=; b=owEBbQKS/ZANAwAIAQAOaEEZVoIVAcsmYgBoEjyVzvpmChSmuwcar32/JyqDjcAqmdVYdaGh0 WbmO3mvFHmJAjMEAAEIAB0WIQRLwNeyRHGyoYTq9dMADmhBGVaCFQUCaBI8lQAKCRAADmhBGVaC FTvtEAC1gp2ontnydAGEZUVn/t/3vwThev+YLly7R6avr4Cg5IdwjCKvhJuh0Pxlw1oW/inv5f3 8zpTEFmGdOFRYk3XSWmxZx6oQkMJVVcDBlLnmqSSKc/2g4oRbHkSs1HXKKBq+7hQIHe71yeHtZI j3xpMXOFing6kAgM33ukXEiLBK7wdvhdi2TDpgCrrzEOzpRWfYf7azsvwGGsnmj1WvudmUTWksj OqWKQfUHoIukQYx/iblvIguo4vVkoLPdk20JKAXZm4xtmDCkgYUoYpL+LpoBMai/JfPCdWTLwp3 u8i92tS5bSHwzJbok8JhrniFKUeov3KdH5C2ZEd/1u3yP5DJL30MN1zZo1CVaIpOp7PfNSJ0Ipi 7VMd+BtdABMjXdoopgNfhVAVv8qL/eZUY6U+YIL3n7H7s6ZSnzq8S379NckhZMyndhYog9VfRdx SMUyzGFehK7xWP5S03sJnWAXhAHgxvHU2TUiSenQE1Qc3NIDJdXUqysJ2HdME2giGo0J6uSTONT wdvzDz/np/NpTbVnSOQUCnv+SZaAz5cgqfOzU1ZTCPBBSRGvX+2h40uESuz5Kjf3MXIWLMKbiJz F8PDZ0vYBWg4fIv4DIm/oZFZWrBxCOekwTAkfKX8rc1SPB+W//YxF2/ICbXkPeEeIDaLyEqIDH6 M8WvZ8ot6zjTFZw== 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 210f26e2528f23bea3b713a57ac27c730bd100ce..262432d6cbf265ea76bad968a7b= 00485586dfd60 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 16ef752e52c230763f2832c312793d27da47c608..2ec34846aaa354b3e4057e51ec4= 4433fcec9af86 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