From nobody Tue Oct 7 20:20:14 2025 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 E50452EBBAF; Wed, 18 Jun 2025 14:24:30 +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=1750256671; cv=none; b=KASgIdFirOag0eC0K08oEdftWbDCD8Bc39oblAPI3jPItkjLyac6IeKqttlO4ffY5OWdc9dBC2nJAeO7mlJVkd7xFaxTh5CsiEhF7mkCNuHN22ywWfQtjWyIdAQIK7EdqDoiSNfBj+x+Az9tl4YuYAuRJhlWo60kiG4eQXDuEEc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750256671; c=relaxed/simple; bh=kh/qFeLAyxVm0bBT3X1rDJqrmW5QgjHwPovsCE5exFQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ikLzffhGRxYhw2t4mWuphQYzv/n/mTNZxFIXYg4VmAFoMvcLzjUgGp7HZ4qRvYeNgy2d7XHDnjBdvT9ggXZc3545t0+/peEefvvS2I8bgHqKShHJVu83PFoBVYL1SpSZmTO4KswPutNmGqlzFFulVIdOz7QE4S9pUz0641u6W+4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=SeYHhd8K; 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="SeYHhd8K" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 5D2C1C4CEEE; Wed, 18 Jun 2025 14:24:28 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1750256670; bh=kh/qFeLAyxVm0bBT3X1rDJqrmW5QgjHwPovsCE5exFQ=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=SeYHhd8K/hFco9+lYRcTpt66O9BjObgzowNlvoj3KmtmFvujg3XruhKOmfVPihmgP jctolrK2B14PRoyYqqfOhNIblA7iCyKNSzHY1CmtNsb3sXfYw14FUw4GVitkmwulgx YX0h0DWAL9t1t3JRxc6Any2guq1okolisdG+4dKJZpy1Flm1culXK6LhdHpkw7yvpR K5oS9NV9IFg2vs5vrtrk3itWYyDkiWDrdcFT9Tw1HuniGjcA6l2xLn/Fq4QLqazlYL IQ+W5WcUfdxhSJUodTAqDrlKfSeSd3G7QMjgBp+WB2WEy0ywARW84jXOz8q/gAJ9BL 15M2uUOycS9xw== From: Jeff Layton Date: Wed, 18 Jun 2025 10:24:14 -0400 Subject: [PATCH v15 1/9] 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: <20250618-reftrack-dbgfs-v15-1-24fc37ead144@kernel.org> References: <20250618-reftrack-dbgfs-v15-0-24fc37ead144@kernel.org> In-Reply-To: <20250618-reftrack-dbgfs-v15-0-24fc37ead144@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: Krzysztof Karas , 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=1888; i=jlayton@kernel.org; h=from:subject:message-id; bh=kh/qFeLAyxVm0bBT3X1rDJqrmW5QgjHwPovsCE5exFQ=; b=owEBbQKS/ZANAwAKAQAOaEEZVoIVAcsmYgBoUswYN2rs6NDHd9438ugrW4Z7qYomJgPSuFUi1 3zE//5ATvWJAjMEAAEKAB0WIQRLwNeyRHGyoYTq9dMADmhBGVaCFQUCaFLMGAAKCRAADmhBGVaC Fd4+D/9d5Vtsrf3RTCVGKQEKvSsjosEMkf3NkCqT/wXPr5ws2ZGBx5dj1E5YIDRWLc72sVxMJz7 NmCCZusRTkT3ZmqUsEvNZ5asQPAku5xsTY5cAzpfof5upiz04SiCoFs8Xms9RNBMbHJXCE3vivy 3IeDmLIcgLTXbzF+fQ2eF4iIz+wWd7NfOIHjpEgnpFDUm3u0a6C1Uh3PpjRbYf75hWn4joCerzV 7SfhZbYL4fz9BMjy5RNxeqdb62f5nkCRQv8myG2FtO2DtARwby4LXVfV6bLPztE2PR6bfPPOBO7 cyGwtI1plMKnulaKyPkg5bdXIkMZ+tQ3dfT4bnTDq+z4D6cFwbFjeRbGOKDe3EktgpiLjnA3Rso Pzn8wtGCBUXBbTN/yRvGOyZ1/e+QZ241mzBjCRuwIjcqyyywRB1pB/roczuEMSO4EwOQ1fa/alK NawKSJrqZqJgTH7ReYZYCyv24Z/ijM56/PX5hxlpEuxSFSW0j1wWwWUAfzK+pWAgHmYRdwCC0c1 Qnc5IoFPIK4GHGXd2X/7b8Q3TfYS3UXUmWroKwHgAmsmrUSAUNLOXhJLU2YRz8hQwmq1imlHWnL SaAgskaZdW+dsvfA9lqzHfZNnoeVWxmNS+d4obEabATkKvu2rKY3QNXY+WnebI9o1N7vMLwaGY8 v6YzS+9/u1VRHrQ== 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 Reviewed-by: Krzysztof Karas 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 Tue Oct 7 20:20:14 2025 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 C38BF29AB01; Wed, 18 Jun 2025 14:24:32 +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=1750256672; cv=none; b=pwkHqr5vl86B2SK6b307P7e9JTp+VMa+rm71Asc8jr8jX0NHVowBN9VG0aJvWfm2DoDPbermGgzDaQRSlS4bB8noAmUf8yTpAu/ENeirQC33ixcrMnzCFxIXSAA/ehtJVlnzn7Ub5mz+SoLdMfCoEFR5TXHHLQxld9waGz1L6lw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750256672; c=relaxed/simple; bh=Cf9EAXyNK0VxD7speigkvYTyuNOgS7Co5M1zyvhQst0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=N57kxWGqP57hFBX+VnNIpdsOhGMTGrRjRMLcou704CFvOJaMi27R6QbrK3YRpfVS6QfdJut77VwJqpZINCFeuiVGGloa0OQ9QhpymBFz41ji1VaSHL9LiOyxsFgtElTIj6hOs9s3WS2ry9VDyabUnOA2ATASxrriGPhIrqTGX5g= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=TyBV+imc; 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="TyBV+imc" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 8166BC4CEF3; Wed, 18 Jun 2025 14:24:30 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1750256672; bh=Cf9EAXyNK0VxD7speigkvYTyuNOgS7Co5M1zyvhQst0=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=TyBV+imcrtJiwwpbaeLynAeTh8hwcKByRSAP15DhiBFuiHAKC0I3rXELx284XWUu4 PbZs4oKwh6XtBCoxEZmvzPi88IVZC1M7U8OZ+HF4HNHMTRhZ0oAFx0nlfoUeby3Med +HmDKK27RzqYvjm4UzDdbQoEd+kaLnYJ9K6x1e/kte2HAQEnGbciewagvWUd+CrCIr PTDbwKiWZYMcwB6304zPpGfUuHd8LndCg6LJPZsBymPgMz7zT8pRAhxGRP+9ntshrr 8PJeBzExRXPb1JMNnj4f1hiZ95ogJAIUA+Sv5SSJvsUXYqLOQcZrClsXAsyrrG6d/A qLI+9FLExrKnA== From: Jeff Layton Date: Wed, 18 Jun 2025 10:24:15 -0400 Subject: [PATCH v15 2/9] 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: <20250618-reftrack-dbgfs-v15-2-24fc37ead144@kernel.org> References: <20250618-reftrack-dbgfs-v15-0-24fc37ead144@kernel.org> In-Reply-To: <20250618-reftrack-dbgfs-v15-0-24fc37ead144@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: Krzysztof Karas , 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=1088; i=jlayton@kernel.org; h=from:subject:message-id; bh=Cf9EAXyNK0VxD7speigkvYTyuNOgS7Co5M1zyvhQst0=; b=owEBbQKS/ZANAwAKAQAOaEEZVoIVAcsmYgBoUswYtRrKDTz0z/5jptbsBl6j0GRK2O1Cx7HMd fA0vrEFgoGJAjMEAAEKAB0WIQRLwNeyRHGyoYTq9dMADmhBGVaCFQUCaFLMGAAKCRAADmhBGVaC FeXnEACIiGhOyzQ/qv4M8h1JZn+mH/jIaYUe2C3dkp3GOUP+LGeFMJgy5VWMgPBZzbB6jBFWT5g KGSQbrSNDjnQ89ux0ka392dfz5/0GB91dyVfcmKqIWPEbDf9ihAoI95KksGzuYeIHqxdUwx+Lgb RDDlyYj9QY5Vo1ofaF7ixnH2Oj0bhLN92P6rHUQdJpbFGwYFs3nPyKNhQvqsmToKP5rXOw2W/S8 bYeq9/tzN/7MkUDDjVgp5WoIwFdsQ4YjXB6oaibttgE6M4PhxOWDCJbsAeokn2/ImAqn8SKdwof SqVFm97peAjTiVbZUH45yXV0vjokuHj8z8KoHMkPCLBftGY9ZbAgD8RA/t7ZIAOMNOArqAa/gVh rHL81qWVWtlC8bEQZSEJD7hfYJULnorieZeDMsbao2bDNeaE8SkYSjt1WlJLFibOoHAThoghG9v 9C6qkM29R7m8kvPcrS2fs089z7OHstiyyVFI1QGYTPv8+HqlHzwS3HxYknmXAzspSUK8zlSzWIT BYKaTgcvvC8pc5OJ5gTig6Uxk4w049FeD2kSN+ek4opuD+k6HfvLXN5mcFoMhVEUlB0Uk+6YXVf xtTQObTA3yG4zEVxpoS1J8RCKk3PBeBZnxEJJw7OLyz0xy3Az4DJsJ/6N5qIRTrR4GnjZx1x2yr IFD37GA/g4tOwXw== 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 Reviewed-by: Krzysztof Karas Signed-off-by: Jeff Layton --- lib/ref_tracker.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/lib/ref_tracker.c b/lib/ref_tracker.c index de71439e12a3bab6456910986fa611dfbdd97980..d374e5273e1497cac0d70c02c28= 2baa2c3ab63fe 100644 --- a/lib/ref_tracker.c +++ b/lib/ref_tracker.c @@ -273,3 +273,16 @@ int ref_tracker_free(struct ref_tracker_dir *dir, return 0; } EXPORT_SYMBOL_GPL(ref_tracker_free); + +#ifdef CONFIG_DEBUG_FS +#include + +static struct dentry *ref_tracker_debug_dir =3D (struct dentry *)-ENOENT; + +static int __init ref_tracker_debugfs_init(void) +{ + ref_tracker_debug_dir =3D debugfs_create_dir("ref_tracker", NULL); + return 0; +} +late_initcall(ref_tracker_debugfs_init); +#endif /* CONFIG_DEBUG_FS */ --=20 2.49.0 From nobody Tue Oct 7 20:20:14 2025 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 A54B02EBBBB; Wed, 18 Jun 2025 14:24:34 +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=1750256674; cv=none; b=e2EHi7qsnnfUlf7CfKWLqloxb+GHDAsK+nxQnXaZSxP9OjDhFN7qDQniRiuH/q5mEfeIC47BTcOFGX4edXwPe5hHyz/GwS3Zm1IRhwlk7lfVEdlBbavBK7YKDOntf/jw4xhDpRAJLYnbDs0YEA4fqH3pc17GkhIn7WPR65nbtYI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750256674; c=relaxed/simple; bh=TA7LFTdMJDELDuvkJuuGw4yjXy1LcM/cr6YWykJIBfY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=nk7hbIOSx143rCc5R+eBxYJVHZEty97hUGcY6Gd970e2kTbFUEqMJ6lY3/MyM9ybXvRlSYpoQaGPrw0dZIZ80wmQrYuzb0kMEqVOP+qADkXDWhtVsMIwJENXhSzKIr2kWiYoA9cVood+YiGV7BSNdKQH8Jpwu7n5kGyM8uOtGjs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=EXVmfRCE; 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="EXVmfRCE" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 93906C4CEF1; Wed, 18 Jun 2025 14:24:32 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1750256674; bh=TA7LFTdMJDELDuvkJuuGw4yjXy1LcM/cr6YWykJIBfY=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=EXVmfRCEe75EfEO/SwkPEi4OUtOICZ050/9gxKCJsLQ/RxZRnZqpbEy6MGx9TSLnb yK11VHDk+Zyvpe0n0h3qBj0f/fBFSiA9uA8GW25XHhWxvpwC4YbUop5flsdjInAoam XMwIkJfV5Zt6MV6PB15J2X59QhPYdY4ii99fMkDEiZmXFIL0vgeFZAGDP7C7auF10n tHo+6tDS17rbziZlA017mKxzE3A0hDFxD1di2UguS5JINfaubAin8JiXe4BWdAMgqK MAU3WEFoMXVcR0ZtTrqKMuxr9ls05lutTTdFWLmYrUxkvsvyno3v9dKWCi58S40COF 8iObWd8CCnyAw== From: Jeff Layton Date: Wed, 18 Jun 2025 10:24:16 -0400 Subject: [PATCH v15 3/9] 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: <20250618-reftrack-dbgfs-v15-3-24fc37ead144@kernel.org> References: <20250618-reftrack-dbgfs-v15-0-24fc37ead144@kernel.org> In-Reply-To: <20250618-reftrack-dbgfs-v15-0-24fc37ead144@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: Krzysztof Karas , 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=4259; i=jlayton@kernel.org; h=from:subject:message-id; bh=TA7LFTdMJDELDuvkJuuGw4yjXy1LcM/cr6YWykJIBfY=; b=owEBbQKS/ZANAwAKAQAOaEEZVoIVAcsmYgBoUswYC3PjND5zsui+FPDgJZkVbec0YVTSqyBVr aq+m3a05PWJAjMEAAEKAB0WIQRLwNeyRHGyoYTq9dMADmhBGVaCFQUCaFLMGAAKCRAADmhBGVaC FZNrD/oD43RjStG7CUWz/ml4Qs1sGnDJMCn3/aPYYnRlqaO+znMLcanXMAxIh0uNlj8cjMq3dQ0 snLpf6nGAmZa2QhcYZZhs1NPG3b7bdtA3YLbtvYLf2kY2Ey7bXNeCvfcjlbOXzfnqwpkC0VHzsC jc5Vc44nx1uza6CBGYjvrDDmvg1AY2U1sq9NVMlrW5K18+kR9uQyz0rMPEbaUILHhXzdi9LXQbF Av+NZfVUYZprKOYmxSLSEf2bK7vyMB5WDO1VOMOJeTKm8rTL+Nz88G0Sq8sATjVlI1j9EyLo4Rz nUyLk8E2Yr0TFMNpSynw1TE5mHwlxp2ESeAsjcewC1p2x4nhA+cb6AEtiiWJ1L6YENGZGFCEz36 pfEnVvT0AqtRjfo4XzqRvWN1w7F2rPTdrabBjw82BeJ+SzTOoC5JChY9LOvjlF/lcseA9uDxsT2 L1CVCBhd8srwPuDzQzH5IRwlLEa7bp4RiWrrFnzudauMItnPL6pM+vnIIm2K1gDG7IfzobyBAfX qqeOmRZvjfNhqodTGrJFaAc+wL7Pgg2OrWDes8urDBk73REA9UVBSdmexnBLSFW7TjHHBh/aXAT opHNunwR1+6lQUgrnmzJ8FlLgsVmdSo+sD8h5Is2VlMhEkaN7AFcm/oQssss82SH08ABQZ9LlNn +mSpJvJYJ7+73TA== 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 Reviewed-by: Krzysztof Karas --- include/linux/ref_tracker.h | 2 ++ lib/ref_tracker.c | 52 ++++++++++++++++++++++++++++++++---------= ---- 2 files changed, 39 insertions(+), 15 deletions(-) diff --git a/include/linux/ref_tracker.h b/include/linux/ref_tracker.h index 8eac4f3d52547ccbaf9dcd09962ce80d26fbdff8..a0a1ee43724ffa00e60c116be18= e481bfe1d1455 100644 --- a/include/linux/ref_tracker.h +++ b/include/linux/ref_tracker.h @@ -6,6 +6,8 @@ #include #include =20 +#define __ostream_printf __printf(2, 3) + struct ref_tracker; =20 struct ref_tracker_dir { diff --git a/lib/ref_tracker.c b/lib/ref_tracker.c index d374e5273e1497cac0d70c02c282baa2c3ab63fe..42872f406b2a91b5bc611405cae= 7ce883fd8ed22 100644 --- a/lib/ref_tracker.c +++ b/lib/ref_tracker.c @@ -63,21 +63,38 @@ ref_tracker_get_stats(struct ref_tracker_dir *dir, unsi= gned int limit) } =20 struct ostream { + void __ostream_printf (*func)(struct ostream *stream, char *fmt, ...); + char *prefix; char *buf; int size, used; }; =20 +static void __ostream_printf pr_ostream_log(struct ostream *stream, char *= fmt, ...) +{ + va_list args; + + va_start(args, fmt); + vprintk(fmt, args); + va_end(args); +} + +static void __ostream_printf pr_ostream_buf(struct ostream *stream, char *= fmt, ...) +{ + int ret, len =3D stream->size - stream->used; + va_list args; + + va_start(args, fmt); + ret =3D vsnprintf(stream->buf + stream->used, len, fmt, args); + va_end(args); + if (ret > 0) + 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 @@ -96,8 +113,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 @@ -107,14 +124,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 @@ -124,7 +142,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); } @@ -143,7 +162,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 Tue Oct 7 20:20:14 2025 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 1108F2ED169; Wed, 18 Jun 2025 14:24:36 +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=1750256678; cv=none; b=srXGSMJcl5TTrD/+9i0FHwLb+HwnKIckYgXz3SSPn2Lg/abv4asdS+X+z/ifvAHI+EDyc6JxRV+QYk+Vd+vMhwYcrmDkEj/DLDNnGn/ey6RP+33AMFlGwCRHytyDKTq0nt0qLO9KqrpBdcgpbBH3v1fWgtijraOEqrTbl8cp02g= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750256678; c=relaxed/simple; bh=sDvBzK8bp/Z2sPKX3249YaEV241YJ6Xk50FlZaY0KPY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ZRYbgO5BAvBfvPp9RtEdY6pINndvzArUEECe9inNyTHsPZ0TJ6Zt9+tBu7/etR7NlNFRvsH62j5KwwJ9hUegF4VhRs6l966wZ5Y4aKuWSQCwdxKO5WnzTxjh5cuIwdE6yEEnmUmgR4A0tk325nuTMtKlY6A//a0xasuNgmfwOVU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=bIAvokyL; 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="bIAvokyL" Received: by smtp.kernel.org (Postfix) with ESMTPSA id A69ECC4CEF2; Wed, 18 Jun 2025 14:24:34 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1750256676; bh=sDvBzK8bp/Z2sPKX3249YaEV241YJ6Xk50FlZaY0KPY=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=bIAvokyLBVf3zdQRPKOZ1Y43xIP4ItvRImpi+HkkQz+FcWRICTSBu6SFTH6fq84Ym zmETIeqjPna5EgTuHDY8zsO5YJLN3Ce4dbCQuLRKOgv0hT1+x/4UcKKsSOFHSl8uTL 669wuTwpbIohnZeQKsZxSS011csU0bWOKR/9jN90KLy0M25UlzttZ2jSiaIS48MqOP vbzeu+5mIaTup/u+PlOv2baXrDXSQE02IBvCT9eVjqODzUPhgxo+rmHp2iB5f/B5ID 8VpblOX3lBCeTLqL16DJOnKIidxzxfO68u9AKfo2KN639vOtosd3l7l1+QVWjqXDxJ QYTzhaqPf51uw== From: Jeff Layton Date: Wed, 18 Jun 2025 10:24:17 -0400 Subject: [PATCH v15 4/9] 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: <20250618-reftrack-dbgfs-v15-4-24fc37ead144@kernel.org> References: <20250618-reftrack-dbgfs-v15-0-24fc37ead144@kernel.org> In-Reply-To: <20250618-reftrack-dbgfs-v15-0-24fc37ead144@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: Krzysztof Karas , 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=6203; i=jlayton@kernel.org; h=from:subject:message-id; bh=sDvBzK8bp/Z2sPKX3249YaEV241YJ6Xk50FlZaY0KPY=; b=owEBbQKS/ZANAwAKAQAOaEEZVoIVAcsmYgBoUswYxLGiMf3xnackVRyECrcTiDvHdTo2H5Qe5 8wxRYY3mhiJAjMEAAEKAB0WIQRLwNeyRHGyoYTq9dMADmhBGVaCFQUCaFLMGAAKCRAADmhBGVaC Fc9oD/9ePYCrYPP9+wrxERgYc5NLLRmWdKrsZZwKILpQjXGW7tk1fj8QA9ukM9dJ5z/3bTIcd92 4F85d8y2jSi44mFZy4H0sVHPV5y2np3KRwySIvElNhnKXazwL0HHkmXMTVaTfHY+IO6M367rPME b8w/qyfseaymPyK+tyvmQDyfTVUODiOHwVxY7FwhExGv9y/dOj/88YL/8i+XcNyywbsf8o67nRk hs5kp1CaJz76NhzWrmviD0KjEY0c9X4JoH/nqqR2cbeFiL+niF9Q0PsUU2pQDJsG6+0IhgXlVDj tlkoKVlwRZT2gOKOJmeDpwEnDao46z4gZ3P+LSVSZUhrVes/pxqv3+mkqCorHQl6wMdGEYXCZHh ugPBpubdaWYb0hivDcwbJaw3+49LT7C6Sc5DxFffGJisiT62FFqLsoQOloLfvAj5d+CUe9pJHdA Cu/7P+38j6wrxJWyeaqN1PWfkNZom2SiK59St2mLeJsqZ5QZ+6u3GX/scZKuDVjskmWwK0KG4G6 DXyG3gxZZC55jv24rf76D916WYPuX+ZgNk/p935wRKzCfirwZmW3w0FnYt1Ajg6DrTFe9CnS13e ehkRTbFyQGiFsuml0mEcq5iMNy0OGZ4JhTkMgksjlmPzw3evGHAQxu0m8pImiT1EJHEyiukyTRY wTybtyFecvJ7WYw== 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). Also, in the i915 driver, gate the creation of debugfs files on whether the dentry pointer is still set to NULL. CI has shown that the ref_tracker_dir can be initialized more than once. Signed-off-by: Jeff Layton Reviewed-by: Krzysztof Karas --- drivers/gpu/drm/display/drm_dp_tunnel.c | 2 +- drivers/gpu/drm/i915/intel_runtime_pm.c | 4 +++- drivers/gpu/drm/i915/intel_wakeref.c | 3 ++- 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, 14 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 076edf1610480275c62395334ab0536befa42f15..b9c12b8bf2a3e400b6d8e9d1841= 45834c603b9e1 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..90d90145a1890bf788e789858dd= ad3b3d8e3b978 100644 --- a/drivers/gpu/drm/i915/intel_runtime_pm.c +++ b/drivers/gpu/drm/i915/intel_runtime_pm.c @@ -59,7 +59,9 @@ 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)); + if (!rpm->debug.class) + 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..21dcee7c9a659ac1fb0aa19f301= 8647be3bda754 100644 --- a/drivers/gpu/drm/i915/intel_wakeref.c +++ b/drivers/gpu/drm/i915/intel_wakeref.c @@ -114,7 +114,8 @@ 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); + if (!wf->debug.class) + ref_tracker_dir_init(&wf->debug, INTEL_REFTRACK_DEAD_COUNT, "intel_waker= ef", name); #endif } =20 diff --git a/include/linux/ref_tracker.h b/include/linux/ref_tracker.h index a0a1ee43724ffa00e60c116be18e481bfe1d1455..3968f993db81e95c0d58c814543= 11841c1b9cd35 100644 --- a/include/linux/ref_tracker.h +++ b/include/linux/ref_tracker.h @@ -19,6 +19,7 @@ struct ref_tracker_dir { bool dead; struct list_head list; /* List of active trackers */ struct list_head quarantine; /* List of dead trackers */ + const char *class; /* object classname */ char name[32]; #endif }; @@ -27,6 +28,7 @@ struct ref_tracker_dir { =20 static inline void ref_tracker_dir_init(struct ref_tracker_dir *dir, unsigned int quarantine_count, + const char *class, const char *name) { INIT_LIST_HEAD(&dir->list); @@ -36,6 +38,7 @@ static inline void ref_tracker_dir_init(struct ref_tracke= r_dir *dir, dir->dead =3D false; refcount_set(&dir->untracked, 1); refcount_set(&dir->no_tracker, 1); + dir->class =3D class; strscpy(dir->name, name, sizeof(dir->name)); stack_depot_init(); } @@ -60,6 +63,7 @@ int ref_tracker_free(struct ref_tracker_dir *dir, =20 static inline void ref_tracker_dir_init(struct ref_tracker_dir *dir, unsigned int quarantine_count, + const char *class, const char *name) { } diff --git a/lib/test_ref_tracker.c b/lib/test_ref_tracker.c index b983ceb12afcb84ad60360a1e6fec0072e78ef79..d263502a4c1db248f64a66a468e= 96c8e4cffab25 100644 --- a/lib/test_ref_tracker.c +++ b/lib/test_ref_tracker.c @@ -64,7 +64,7 @@ static int __init test_ref_tracker_init(void) { int i; =20 - ref_tracker_dir_init(&ref_dir, 100, "selftest"); + ref_tracker_dir_init(&ref_dir, 100, "selftest", "selftest"); =20 timer_setup(&test_ref_tracker_timer, test_ref_tracker_timer_func, 0); mod_timer(&test_ref_tracker_timer, jiffies + 1); diff --git a/net/core/dev.c b/net/core/dev.c index be97c440ecd5f993344ae08d76c0b5216c4d296a..12cf4e5ae9c5437bcfec657e37b= 7e08792bc14bf 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -11715,7 +11715,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 ae54f26709ca242567e5d62d7b5dcc7f6303da57..aa1e34181ed6f353921a23411fa= 227b612db661a 100644 --- a/net/core/net_namespace.c +++ b/net/core/net_namespace.c @@ -403,8 +403,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 Tue Oct 7 20:20:14 2025 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 E44FC2ED16A; Wed, 18 Jun 2025 14:24:38 +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=1750256679; cv=none; b=YV6tnB0mDPvobg0rssU/K9MbtELQY9Z4psqHjZpJh1bJPWdTnFpmMlILp7MlIE+df+NxE5LbHKxW0OGlpPCigdr/wNaRk+iNqtPw/JXdpFdOlZla1w7J4LNa9URM8g5mriSF7hm+I8jqZ7txcMm+dFs1OhUXYXb3uO4xhS+9/To= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750256679; c=relaxed/simple; bh=fIUtfKsTxdswV0+z7NV6Nx2ljCgH4pcViNimfWT3u1o=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=IOPVJZqUXTIrkThTesKFU2vcwjbgaFe2f5/mWM0oLElKIAh8VNAtzC5qwUM62qFqsEAnXx7yUEO+ZeEq1/kdffwbBHHhoxVGp8A7db5Q1agMUoIA+X4yCD+s6JKo4VQ1S7RJifwoYYTqnIRGF/yYfQG1W3CmZ2mM6jJ8TISAOEM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=uLDIOX3H; 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="uLDIOX3H" Received: by smtp.kernel.org (Postfix) with ESMTPSA id C1136C4CEE7; Wed, 18 Jun 2025 14:24:36 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1750256678; bh=fIUtfKsTxdswV0+z7NV6Nx2ljCgH4pcViNimfWT3u1o=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=uLDIOX3Hul4bZlkecwEkjoZmYKDdf+cAsfBiUohxb26sAfGNRvo3NOW+5wttooh3K EXJfS/JXysjNl4W9KvYkmGx9kiCN6wI8pTMufW6b8m7rTalI/+lrHr3vbfk5T5AYO7 w8PGQJ9Jqo3ehQ4+3WjWjnhEG3S48pmW7VlBUEfZ9L6NbHJGZfeVsF0ozKOp2iH6YN /oxlgcP7uexH3ZA00heFWEYx2j60zcgv/tT0Gf1rySR/+5azouNVEmI+lf+VzQ0KTD QjxtwmlRn/HvkOoJ7Rzf/g9bjmgkWR2/IlptGai/1ltOBP57Y4Fcj8hXoXLSPYypB6 X2NZQ/dpYZHQg== From: Jeff Layton Date: Wed, 18 Jun 2025 10:24:18 -0400 Subject: [PATCH v15 5/9] 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: <20250618-reftrack-dbgfs-v15-5-24fc37ead144@kernel.org> References: <20250618-reftrack-dbgfs-v15-0-24fc37ead144@kernel.org> In-Reply-To: <20250618-reftrack-dbgfs-v15-0-24fc37ead144@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: Krzysztof Karas , 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=1919; i=jlayton@kernel.org; h=from:subject:message-id; bh=fIUtfKsTxdswV0+z7NV6Nx2ljCgH4pcViNimfWT3u1o=; b=owEBbQKS/ZANAwAKAQAOaEEZVoIVAcsmYgBoUswZ+yCe+Nq+zcQFbm7S/FnJLTnyxRZRUr9FZ Y29ppwMt1CJAjMEAAEKAB0WIQRLwNeyRHGyoYTq9dMADmhBGVaCFQUCaFLMGQAKCRAADmhBGVaC FX/KEAC6AM8ZF4tPJcB31H1Vs2JCZprZGrT8qjn779PdPnWBNhYGD+J2yXb1TiIM/dPBrIenj+Z RPOTBt+TA5pw2vPjDjFa5WZ2Nma/oqXa72+Znar/vjBoCVjP4yXEOJos6CWlwBUooSI6qZ3fyjh azbNJXMjKD+9gI+yqMCPsEPnFAtqpCzMgg01FqJaNaodtwwQfHh5jFNuOQwuJl2uyF+Y8Z2nJsB ifSUUNt8fA9dHQe0fTzaSolM3WAO+D9J0ZsXe90ZHkJMtxCcL/AaWbEDocJAgJhSxBo8iszYYON fqMh20r/IeNWYG7ZPjpyvrQE2MgT+VWxJokupoO1Ax3lrPPAGrC2cTlJ7LtrFRyAOn/H/E3tEQU Xy1DPyFuzOz/h26Z/x3B0yS8h6aJ1YS222BdgYh9PLH500SxHGPfqbf/feM93SxO+dhHSwlGa3+ cL/xwDVgNRcWmCDcpTS+hgewjrQpt1bfUwEqNcwLLTkrFaKa4gJKEvK4EOqFnj/ntfu6AI7u1+6 1B94aXDEtng4LFaXoI3n3+0ACGKnutuVNYg0Xk473x8ex7VBlquo8qMus18N0MEc+AU7o83S35+ z42G2vOGBE4U+VcLPda6i0WfwBwO8ehq+U+etyztZeREKmuIWtwfJUtOfgMY4rdTPNoxVO7m5uJ FbgrC6Up0DOQJgw== 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 Reviewed-by: Krzysztof Karas --- lib/ref_tracker.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/lib/ref_tracker.c b/lib/ref_tracker.c index 42872f406b2a91b5bc611405cae7ce883fd8ed22..73b606570cce9e551d13e65365a= 87dc4ce748b13 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 @@ -66,6 +67,7 @@ struct ostream { void __ostream_printf (*func)(struct ostream *stream, char *fmt, ...); char *prefix; char *buf; + struct seq_file *seq; int size, used; }; =20 @@ -301,6 +303,30 @@ EXPORT_SYMBOL_GPL(ref_tracker_free); =20 static struct dentry *ref_tracker_debug_dir =3D (struct dentry *)-ENOENT; =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); +} + +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 Tue Oct 7 20:20:14 2025 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 3B4A52EE261; Wed, 18 Jun 2025 14:24:40 +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=1750256681; cv=none; b=GSh7VFVh1FPv0yCAyJ2h8jlx5oOeuPx739lPuRROucfaYln4ERH7WlxlIK1wIu1sQt9aQKtYp/QSHQK9+O2xECB8xUd45G7xOSl7KgC2H8DwSQqErpuGASXTq9NuG1woaEhqufyraBccenDlPwhVPFL7/itoINuQzFpJgVm5uhI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750256681; c=relaxed/simple; bh=H+DYm16YFoz7vb/N3DPXrXYoaKJ781Yi0vxcEF804go=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=TZmXSAD8Gq+M0qAIz8WrxB27Thi3mb43hxh2fNnCKF6mjUXwuWa80E8TkaBm73s8Pu/9CLYwugjK6TvOtNRu3/5G15YwzQUxmhYZEY+8bi9HvkLzst6AUEVNfyuF5ImYs4RyAVM4jTr8Oa3Zi0aMKaMK+Q5wvowAQcScc7AVRRc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=Mla81/jA; 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="Mla81/jA" Received: by smtp.kernel.org (Postfix) with ESMTPSA id D6F49C4CEF2; Wed, 18 Jun 2025 14:24:38 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1750256680; bh=H+DYm16YFoz7vb/N3DPXrXYoaKJ781Yi0vxcEF804go=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=Mla81/jAR53nQq/R5J3d3n7OhWUugj6x11fyLrc+BE1lldZUmq92rPi3PUUvgOnjQ gXY6Q00HoV91lVq9IgYaA6uo16nQy7zokiM4fk3bgqYqIX6AoqdAU0ONMSGPeAbGOU zQCerlqAhCFAI2ypErkNGNJW0ZmWEckad39nWLCYlSxp7GvDz88s6+pd9M9E1TeNKq 7nOlvgzZk++sjJgylGQLGdjsjuoCRyAVLpESxKjf/8BqmgxMxRW4wcISsfL2//pxJt rz0gybqmVTSshcZj992ZJoYBlMGfb6AOyDf6a9trTlF4cInL7UKliA+8uT9fr8he0h A2ZXDQvpE5/pw== From: Jeff Layton Date: Wed, 18 Jun 2025 10:24:19 -0400 Subject: [PATCH v15 6/9] 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: <20250618-reftrack-dbgfs-v15-6-24fc37ead144@kernel.org> References: <20250618-reftrack-dbgfs-v15-0-24fc37ead144@kernel.org> In-Reply-To: <20250618-reftrack-dbgfs-v15-0-24fc37ead144@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: Krzysztof Karas , 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=8693; i=jlayton@kernel.org; h=from:subject:message-id; bh=H+DYm16YFoz7vb/N3DPXrXYoaKJ781Yi0vxcEF804go=; b=owEBbQKS/ZANAwAKAQAOaEEZVoIVAcsmYgBoUswZYrzoIrTsJLyKavwVYpLG6JiZ5EIlpy+cH Cx9niTrZo+JAjMEAAEKAB0WIQRLwNeyRHGyoYTq9dMADmhBGVaCFQUCaFLMGQAKCRAADmhBGVaC FTOjD/98opNEqzZ+o/C7K1wPS283gvKPeT7/zF0fQKMehIQHmQqznvDkRInmGQh6A4uqSBodd4Q lWgWBDEQueERDoh+Ik8Ja42qx1WokNOSiM3RzH+t9FgSMXAh1OmURJJaO3wJnTnxm8qnGwwXjjc cnYzrYD55spomz6NL0KOw7+cw8uw2KUDHvRQNLrDaEpD+uZeSZ1CIHjKrsJvEAIgLQOeDj4LXiy gkVfSPeyrA1bvTfLD05L6ib6hk47wdTCaO71ueGCWL90xOy9sfFwS2gyByEIcdjEhW8OIWnEEkg mk/TQne37znykHgL32IdW3zvE3OvzrqsW3Wujx7suUjQq3METJPWhRkKa0N19fq+WHbou6O2Ta6 H6X7ulrTR0VKmOvU+5wHTNNPQAVL+pJI4UhjCCQWRrZIkHYLyIYUq+49y9Xu6ORPKOKbhmVA9uX yc5VIMOFElQh/2qraKAPxlSafaNmvIuYSx/Bd2iwOiKq03RZoOot3Gv2CJwfX/oafYISEZzhOaZ E3G7GgGaiYctQ4b2p6fbyDo/0PY5lVUkDyPSUSpmFsldLx6bL73UbOzi40l+6zxY07QnOe3VgH+ GpNIbX/Ngjtj90RXQC2CdG4qrKKqbL21xo06v1lXI2JZ6cSpCPIAd8xsv0IV26TQDXK+NqX4e1f Vnqebfc/6X+gl4w== 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 While ref_tracker_dir_init() is generally called from a context where sleeping is OK, ref_tracker_dir_exit() can be called from anywhere. Thus, dentry cleanup must be handled asynchronously. Add a new global xarray that has entries with the ref_tracker_dir pointer as the index and the corresponding debugfs dentry pointer as the value. Instead of removing the debugfs dentry, have ref_tracker_dir_exit() set a mark on the xarray entry and schedule a workqueue job. The workqueue job then walks the xarray looking for marked entries, and removes their xarray entries and the debugfs dentries. Because of this, the debugfs dentry can outlive the corresponding ref_tracker_dir. Have ref_tracker_debugfs_show() take extra care to ensure that it's safe to dereference the dir pointer before using it. Signed-off-by: Jeff Layton --- include/linux/ref_tracker.h | 17 +++++ lib/ref_tracker.c | 152 ++++++++++++++++++++++++++++++++++++++++= ++-- 2 files changed, 164 insertions(+), 5 deletions(-) diff --git a/include/linux/ref_tracker.h b/include/linux/ref_tracker.h index 3968f993db81e95c0d58c81454311841c1b9cd35..28bbf436a8f4646cfac181d6181= 95a9460bda196 100644 --- a/include/linux/ref_tracker.h +++ b/include/linux/ref_tracker.h @@ -26,6 +26,18 @@ struct ref_tracker_dir { =20 #ifdef CONFIG_REF_TRACKER =20 +#ifdef CONFIG_DEBUG_FS + +void ref_tracker_dir_debugfs(struct ref_tracker_dir *dir); + +#else /* CONFIG_DEBUG_FS */ + +static inline void ref_tracker_dir_debugfs(struct ref_tracker_dir *dir) +{ +} + +#endif /* CONFIG_DEBUG_FS */ + static inline void ref_tracker_dir_init(struct ref_tracker_dir *dir, unsigned int quarantine_count, const char *class, @@ -40,6 +52,7 @@ static inline void ref_tracker_dir_init(struct ref_tracke= r_dir *dir, refcount_set(&dir->no_tracker, 1); dir->class =3D class; strscpy(dir->name, name, sizeof(dir->name)); + ref_tracker_dir_debugfs(dir); stack_depot_init(); } =20 @@ -68,6 +81,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 73b606570cce9e551d13e65365a87dc4ce748b13..c938ef56954b2169458e9b23a3d= b2441bcf91aa6 100644 --- a/lib/ref_tracker.c +++ b/lib/ref_tracker.c @@ -29,6 +29,40 @@ struct ref_tracker_dir_stats { } stacks[]; }; =20 +#ifdef CONFIG_DEBUG_FS +#include + +/* + * ref_tracker_dir_init() is usually called in allocation-safe contexts, b= ut + * the same is not true of ref_tracker_dir_exit() which can be called from + * anywhere an object is freed. Removing debugfs dentries is a blocking + * operation, so we defer that work to the debugfs_reap_worker. + * + * Each dentry is tracked in the appropriate xarray. When + * ref_tracker_dir_exit() is called, its entries in the xarrays are marked= and + * the workqueue job is scheduled. The worker then runs and deletes any ma= rked + * dentries asynchronously. + */ +static struct xarray debugfs_dentries; +static struct work_struct debugfs_reap_worker; + +#define REF_TRACKER_DIR_DEAD XA_MARK_0 +static inline void ref_tracker_debugfs_mark(struct ref_tracker_dir *dir) +{ + unsigned long flags; + + xa_lock_irqsave(&debugfs_dentries, flags); + __xa_set_mark(&debugfs_dentries, (unsigned long)dir, REF_TRACKER_DIR_DEAD= ); + xa_unlock_irqrestore(&debugfs_dentries, flags); + + schedule_work(&debugfs_reap_worker); +} +#else +static inline void ref_tracker_debugfs_mark(struct ref_tracker_dir *dir) +{ +} +#endif + static struct ref_tracker_dir_stats * ref_tracker_get_stats(struct ref_tracker_dir *dir, unsigned int limit) { @@ -185,6 +219,11 @@ void ref_tracker_dir_exit(struct ref_tracker_dir *dir) bool leak =3D false; =20 dir->dead =3D true; + /* + * The xarray entries must be marked before the dir->lock is taken to + * protect simultaneous debugfs readers. + */ + ref_tracker_debugfs_mark(dir); spin_lock_irqsave(&dir->lock, flags); list_for_each_entry_safe(tracker, n, &dir->quarantine, head) { list_del(&tracker->head); @@ -312,23 +351,126 @@ static void __ostream_printf pr_ostream_seq(struct o= stream *stream, char *fmt, . va_end(args); } =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 "", .seq =3D seq }; - unsigned long flags; =20 - spin_lock_irqsave(&dir->lock, flags); __ref_tracker_dir_pr_ostream(dir, 16, &os); - spin_unlock_irqrestore(&dir->lock, flags); =20 return os.used; } =20 +static int ref_tracker_debugfs_show(struct seq_file *f, void *v) +{ + struct ref_tracker_dir *dir =3D f->private; + unsigned long index =3D (unsigned long)dir; + unsigned long flags; + int ret; + + /* + * "dir" may not exist at this point if ref_tracker_dir_exit() has + * already been called. Take care not to dereference it until its + * legitimacy is established. + * + * The xa_lock is necessary to ensure that "dir" doesn't disappear + * before its lock can be taken. If it's in the hash and not marked + * dead, then it's safe to take dir->lock which prevents + * ref_tracker_dir_exit() from completing. Once the dir->lock is + * acquired, the xa_lock can be released. All of this must be IRQ-safe. + */ + xa_lock_irqsave(&debugfs_dentries, flags); + if (!xa_load(&debugfs_dentries, index) || + xa_get_mark(&debugfs_dentries, index, REF_TRACKER_DIR_DEAD)) { + xa_unlock_irqrestore(&debugfs_dentries, flags); + return -ENODATA; + } + + spin_lock(&dir->lock); + xa_unlock(&debugfs_dentries); + ret =3D ref_tracker_dir_seq_print(dir, f); + spin_unlock_irqrestore(&dir->lock, flags); + return ret; +} + +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]; + struct dentry *dentry; + int ret; + + /* No-op if already created */ + dentry =3D xa_load(&debugfs_dentries, (unsigned long)dir); + if (dentry && !xa_is_err(dentry)) + return; + + ret =3D snprintf(name, sizeof(name), "%s@%px", dir->class, dir); + name[sizeof(name) - 1] =3D '\0'; + + if (ret < sizeof(name)) { + dentry =3D debugfs_create_file(name, S_IFREG | 0400, + ref_tracker_debug_dir, dir, + &ref_tracker_debugfs_fops); + if (!IS_ERR(dentry)) { + void *old; + + old =3D xa_store_irq(&debugfs_dentries, (unsigned long)dir, + dentry, GFP_KERNEL); + + if (xa_is_err(old)) + debugfs_remove(dentry); + else + WARN_ON_ONCE(old); + } + } +} +EXPORT_SYMBOL(ref_tracker_dir_debugfs); + +static void debugfs_reap_work(struct work_struct *work) +{ + struct dentry *dentry; + unsigned long index; + bool reaped; + + do { + reaped =3D false; + xa_for_each_marked(&debugfs_dentries, index, dentry, REF_TRACKER_DIR_DEA= D) { + xa_erase_irq(&debugfs_dentries, index); + debugfs_remove(dentry); + reaped =3D true; + } + } while (reaped); +} + static int __init ref_tracker_debugfs_init(void) { + INIT_WORK(&debugfs_reap_worker, debugfs_reap_work); + xa_init_flags(&debugfs_dentries, XA_FLAGS_LOCK_IRQ); ref_tracker_debug_dir =3D debugfs_create_dir("ref_tracker", NULL); return 0; } --=20 2.49.0 From nobody Tue Oct 7 20:20:14 2025 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 F018B2EB5A8; Wed, 18 Jun 2025 14:24:42 +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=1750256683; cv=none; b=gR27LZ2Y3JL96lRLaMlh9UhFK1NXB9z2u18gPYQr2qYaj5fg7TRIYKVAJwCbLtxJlZqXc0NrWIv7x9g5v6zXvUOprqe1U3yeR4AzdAF4e+hR0JghrW8Fz0R+BW1J/aXvmiYkPBi4rGS1/QATaWgEw4XIGroB44P2NVndqfraXUA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750256683; c=relaxed/simple; bh=5X69klc0I5PpzlSj7ikkdfXm51zSMkRP81iDMAIdLbs=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Q0znqnH+XmJ82o9DKIsZaywsVMKCumz4tdcHZAEryBluhI5sHNw70cpzgiP5EK9rzqGqCu7TzrQ8aKH4Uyrg0zRoLes6OEDMr57hWkmR5weryypqEjRJgbtQk0Bmqs5Lc4AZNc/1WTYFQcvBBYVI6wZ1qk8AaPWATz0SgWLEAq0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=NLHdTVfh; 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="NLHdTVfh" Received: by smtp.kernel.org (Postfix) with ESMTPSA id EA30AC4CEEE; Wed, 18 Jun 2025 14:24:40 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1750256682; bh=5X69klc0I5PpzlSj7ikkdfXm51zSMkRP81iDMAIdLbs=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=NLHdTVfhf+n09kp2/BsHGxYMJOUEDMSvfM9bPGpayWSnxgFXSeDYVer+kaP0e2a2N 6AFVVqeLpBlqgSjo4cfx+PkGIRUr0BB4jgwtEzfDHDu0VeFQEny2rvlZm5PnyXanRJ mI5w9o2GwhqIPV+GSD/R3VTkMMgA8hIjVh5lu8KEH+xSmbJQJg6RBJCODjkr7frczt doGj0PItYd6guPnAAPniHArgqhut7BJhiHNCyyMvnY0gF6Iqfv3dyDCmQcI6ZS0A7F aVZB6ozSZtpu9iaqSHnPf3nW7F2Jrmcyq2+uufQOjAWuFsKW/Qqpiaf7FJ45KNtRgD ZsCn+JFkEcMOA== From: Jeff Layton Date: Wed, 18 Jun 2025 10:24:20 -0400 Subject: [PATCH v15 7/9] 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: <20250618-reftrack-dbgfs-v15-7-24fc37ead144@kernel.org> References: <20250618-reftrack-dbgfs-v15-0-24fc37ead144@kernel.org> In-Reply-To: <20250618-reftrack-dbgfs-v15-0-24fc37ead144@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: Krzysztof Karas , 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=4548; i=jlayton@kernel.org; h=from:subject:message-id; bh=5X69klc0I5PpzlSj7ikkdfXm51zSMkRP81iDMAIdLbs=; b=owEBbQKS/ZANAwAKAQAOaEEZVoIVAcsmYgBoUswZRy4G7laETNP8iYtaM4jXEjG6wT1hnrchO CixQWnlh3qJAjMEAAEKAB0WIQRLwNeyRHGyoYTq9dMADmhBGVaCFQUCaFLMGQAKCRAADmhBGVaC FZocD/9FIdqyye26ITj4dkHQP+/w8rMXrzB//J5h34BcHu5Avlrgjr+fRQTYN07cws9TQTXQKDF H1Ykh37fmprvQqyXXXjpe6T6SxfWBbWz8svJyUe62aAG2IPOAcMGkKm1bU564ijNkwFiYC94ffk vhbdrXV8Se8dbzj2P9WKYJVDdJrsia79ChZdyTELowz0QauGzw+VP14RiPLlP1LO4JvqnMTlnpM +oEBw5uXDR/X2mLdIcNu2LHvL/hS0SLWCYG0IPCZK0wcAWihK98WAQjwYPyK3toRikgqxTCHTsD EkNPl0xQXiH580B6nxkk43yig1zHOQGBITHcdEWHRixChIli8RvSVAL4/M9tg3x60qIvJe0YiQd iSIyE82WGIEmVqqR1b3h7IQ6eLPX/LvzPJ3RcdeVUfw3AzCS6eA9Y/gFaFwjDz24AgOpGf2yDB4 QulbwmYnmZOlz7carI0FlYepCY8DDdctusqUgE8Y/Uk0yHhjRTCsfIq+ZdnJ6A36+ciHH7Igg5J w9L/S1CMlSPdY7hJRWWIeSd0yzz8/fj7TsGEq0iBXlkd1DWyndF5Ad0wQ8BkNmaF7uY2/dVyoFQ gzJ+9l5maT08SeJrZp6r66avIHCPZOu16MAK5S9BTLFgrXycWRKy9lFQ7lWgeNnXGOO7rw5wLCc xf/aF+dgG8Btj3Q== 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. Add a separate debugfs_symlinks xarray and use that to track symlinks. The reaper workqueue job will remove symlinks before their corresponding dentries. Signed-off-by: Jeff Layton --- include/linux/ref_tracker.h | 11 ++++++++++ lib/ref_tracker.c | 50 +++++++++++++++++++++++++++++++++++++++++= ++++ 2 files changed, 61 insertions(+) diff --git a/include/linux/ref_tracker.h b/include/linux/ref_tracker.h index 28bbf436a8f4646cfac181d618195a9460bda196..e1323de93bf6b891aa14ad8d9b4= b28d02e10f9f7 100644 --- a/include/linux/ref_tracker.h +++ b/include/linux/ref_tracker.h @@ -29,6 +29,7 @@ struct ref_tracker_dir { #ifdef CONFIG_DEBUG_FS =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 #else /* CONFIG_DEBUG_FS */ =20 @@ -36,6 +37,11 @@ static inline void ref_tracker_dir_debugfs(struct ref_tr= acker_dir *dir) { } =20 +static inline __ostream_printf +void ref_tracker_dir_symlink(struct ref_tracker_dir *dir, const char *fmt,= ...) +{ +} + #endif /* CONFIG_DEBUG_FS */ =20 static inline void ref_tracker_dir_init(struct ref_tracker_dir *dir, @@ -85,6 +91,11 @@ static inline void ref_tracker_dir_debugfs(struct ref_tr= acker_dir *dir) { } =20 +static inline __ostream_printf +void ref_tracker_dir_symlink(struct ref_tracker_dir *dir, const 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 c938ef56954b2169458e9b23a3db2441bcf91aa6..6608520d6118685a9cfa497827f= 6a89318b3360c 100644 --- a/lib/ref_tracker.c +++ b/lib/ref_tracker.c @@ -44,6 +44,7 @@ struct ref_tracker_dir_stats { * dentries asynchronously. */ static struct xarray debugfs_dentries; +static struct xarray debugfs_symlinks; static struct work_struct debugfs_reap_worker; =20 #define REF_TRACKER_DIR_DEAD XA_MARK_0 @@ -55,6 +56,10 @@ static inline void ref_tracker_debugfs_mark(struct ref_t= racker_dir *dir) __xa_set_mark(&debugfs_dentries, (unsigned long)dir, REF_TRACKER_DIR_DEAD= ); xa_unlock_irqrestore(&debugfs_dentries, flags); =20 + xa_lock_irqsave(&debugfs_symlinks, flags); + __xa_set_mark(&debugfs_symlinks, (unsigned long)dir, REF_TRACKER_DIR_DEAD= ); + xa_unlock_irqrestore(&debugfs_symlinks, flags); + schedule_work(&debugfs_reap_worker); } #else @@ -451,6 +456,45 @@ 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]; + struct dentry *symlink, *dentry; + va_list args; + int ret; + + symlink =3D xa_load(&debugfs_symlinks, (unsigned long)dir); + dentry =3D xa_load(&debugfs_dentries, (unsigned long)dir); + + /* Already created?*/ + if (symlink && !xa_is_err(symlink)) + return; + + if (!dentry || xa_is_err(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)) { + symlink =3D debugfs_create_symlink(name, ref_tracker_debug_dir, + dentry->d_name.name); + if (!IS_ERR(symlink)) { + void *old; + + old =3D xa_store_irq(&debugfs_symlinks, (unsigned long)dir, + symlink, GFP_KERNEL); + if (xa_is_err(old)) + debugfs_remove(symlink); + else + WARN_ON_ONCE(old); + } + } +} +EXPORT_SYMBOL(ref_tracker_dir_symlink); + static void debugfs_reap_work(struct work_struct *work) { struct dentry *dentry; @@ -459,6 +503,11 @@ static void debugfs_reap_work(struct work_struct *work) =20 do { reaped =3D false; + xa_for_each_marked(&debugfs_symlinks, index, dentry, REF_TRACKER_DIR_DEA= D) { + xa_erase_irq(&debugfs_symlinks, index); + debugfs_remove(dentry); + reaped =3D true; + } xa_for_each_marked(&debugfs_dentries, index, dentry, REF_TRACKER_DIR_DEA= D) { xa_erase_irq(&debugfs_dentries, index); debugfs_remove(dentry); @@ -471,6 +520,7 @@ static int __init ref_tracker_debugfs_init(void) { INIT_WORK(&debugfs_reap_worker, debugfs_reap_work); xa_init_flags(&debugfs_dentries, XA_FLAGS_LOCK_IRQ); + xa_init_flags(&debugfs_symlinks, XA_FLAGS_LOCK_IRQ); ref_tracker_debug_dir =3D debugfs_create_dir("ref_tracker", NULL); return 0; } --=20 2.49.0 From nobody Tue Oct 7 20:20:14 2025 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 220D82EE5F7; Wed, 18 Jun 2025 14:24:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750256685; cv=none; b=QvwkjbbmciSKxUBKcxje8FmpSx0aMYrQE6NglNzA+fruMCZ/vHckMDSdF5y2RJ+jun3oh5YVzC+IM16P1Pqpou4XOZnhCihS/hwlYCz8ei370J4xn/S43ykgHEnhZ+oD2aP3SeGCR4Wewm0/gr5F9PPLmqQ+3ZZBee21Cq0azwk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750256685; c=relaxed/simple; bh=YMnNgfS5IcXRGDhGxBj9UTTtfo/Re9Qj3nh2BIc6ugE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=FTObjvHPMkvZFhetzDG8FBcSLlg4+ri33LePKoHYuiZJIeiX0IvLei5AHKh/nLQFaYCvWNoad79JeTr5S72DLqqOA0k5nVV4S7s60CTTw32SNc82f0GjQNFQoKdIqNvdzu/c5pRtOeqIE/SkhH2ppExVvf47u05T80dEaezMPFM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=ULqi2OtX; 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="ULqi2OtX" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 090DCC4CEE7; Wed, 18 Jun 2025 14:24:42 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1750256684; bh=YMnNgfS5IcXRGDhGxBj9UTTtfo/Re9Qj3nh2BIc6ugE=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=ULqi2OtX/7uQ/OyVEFJUJbHWJf3scVmdfB1Syvh1A4yU2en3qY22gH5zbO+8gRnRa hkbFmDA2P6JVzt1LFORxfc146FtCnKyYkkEofHabLnYIa9NegiYDfilBFz4uDXKRiQ 5uR3h8wbJ4IRinqaWjy5tSJJYJtD7kVJaSQ1TDeh9IJoA1LjQMR/fQtzGIqwspuouy oK6qxAsRjkOo6Wgp8EBDzVwUXpIfaNSA6jmunz57dkdgBW2yAuxrzAhbNVpGqagV6j AQFHZkqiiWnGTZdk0nigGjp3zDt1t+72/V4fBpgOev4AvDA6e8kagEYHVa83WlxwJs UkakWSC6iLfKQ== From: Jeff Layton Date: Wed, 18 Jun 2025 10:24:21 -0400 Subject: [PATCH v15 8/9] 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: <20250618-reftrack-dbgfs-v15-8-24fc37ead144@kernel.org> References: <20250618-reftrack-dbgfs-v15-0-24fc37ead144@kernel.org> In-Reply-To: <20250618-reftrack-dbgfs-v15-0-24fc37ead144@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: Krzysztof Karas , 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=1850; i=jlayton@kernel.org; h=from:subject:message-id; bh=YMnNgfS5IcXRGDhGxBj9UTTtfo/Re9Qj3nh2BIc6ugE=; b=owEBbQKS/ZANAwAKAQAOaEEZVoIVAcsmYgBoUswZ2MQDxuR/bgGgaU7roXXK3jAFb6b+3gRcS 2Gh2m6jG66JAjMEAAEKAB0WIQRLwNeyRHGyoYTq9dMADmhBGVaCFQUCaFLMGQAKCRAADmhBGVaC FWbzEADGmjNlfCIKt1Gur8k7XtE/w1mW0K4oZJEjKP6do61OM8e8nqjb9qNpTPPNIqPRS8ksLAT 7fxTEm8eKTPUzIFDNRl6j5gL5lCtGFR0ZLLdC7VrHQzVuNhoXyKTKKkWxnrwIIdLS7nGwI5p1VM w6e5BGFGMJgplw18uRbfjP5B6WJx+L6Q/2MfGXx+TwMiJRZMKKDmnTz6qVtd252m0a9ZDf4KWZE a2VD/tO/NU6T+ix4piM6P6WhS7rUpMzfdMVDtQ/k1hGIJaWTNDkawiaf4l6tT44Us5F9uSBCHRS DW8Y/xShIRKCT6qviKNXeDEZ/DG21lX3PDhJelE+hvsc3E+Co6FD/5p3ZLIBIbvt1dgGPof0+tH K1er113ZqMhxLFjGI6iWU1Vr9rXsdm7jvkTfkIJNl9a20/ltGUQ6uF5aVgmLRhf7cmihN616Ht3 bZKen7vLJ5IRhAVR/Zf/VPwJdajFITJbfqnSyBFiXA4zKGG+GkJzaecll2x/BZrZKa1SejAUqVN +GRWo0tm5msdh1EaliOk00PjSzeTh8KLepeEmLJlW4ppgsa1kJcmR3BVr1GfuGpwXExPb5MA6/o j2YhxO9fLrNhuHZnFoiE9aqKMcIexE8krjzHceVH0zikTPxGYwqROKhVDMlgdyT0NjdaDQewznW Dli1BSjXtLm6TjQ== X-Developer-Key: i=jlayton@kernel.org; a=openpgp; fpr=4BC0D7B24471B2A184EAF5D3000E684119568215 After assigning the inode number to the namespace, use it to create a unique name for each netns refcount tracker with the ns.inum and net_cookie values in it, and register a symlink to the debugfs file for it. init_net is registered before the ref_tracker dir is created, so add a late_initcall() to register its files and symlinks. Signed-off-by: Jeff Layton --- net/core/net_namespace.c | 30 +++++++++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/net/core/net_namespace.c b/net/core/net_namespace.c index aa1e34181ed6f353921a23411fa227b612db661a..45de05d8f0877a4e717bdad4ed7= 76ae27f98944a 100644 --- a/net/core/net_namespace.c +++ b/net/core/net_namespace.c @@ -791,12 +791,40 @@ struct net *get_net_ns_by_pid(pid_t pid) } EXPORT_SYMBOL_GPL(get_net_ns_by_pid); =20 +#ifdef CONFIG_NET_NS_REFCNT_TRACKER +static void net_ns_net_debugfs(struct net *net) +{ + ref_tracker_dir_symlink(&net->refcnt_tracker, "netns-%llx-%u-refcnt", + net->net_cookie, net->ns.inum); + ref_tracker_dir_symlink(&net->notrefcnt_tracker, "netns-%llx-%u-notrefcnt= ", + net->net_cookie, net->ns.inum); +} + +static int __init init_net_debugfs(void) +{ + ref_tracker_dir_debugfs(&init_net.refcnt_tracker); + ref_tracker_dir_debugfs(&init_net.notrefcnt_tracker); + net_ns_net_debugfs(&init_net); + return 0; +} +late_initcall(init_net_debugfs); +#else +static void net_ns_net_debugfs(struct net *net) +{ +} +#endif + static __net_init int net_ns_net_init(struct net *net) { + int ret; + #ifdef CONFIG_NET_NS net->ns.ops =3D &netns_operations; #endif - return ns_alloc_inum(&net->ns); + ret =3D ns_alloc_inum(&net->ns); + if (!ret) + net_ns_net_debugfs(net); + return ret; } =20 static __net_exit void net_ns_net_exit(struct net *net) --=20 2.49.0 From nobody Tue Oct 7 20:20:14 2025 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 217B62EE968; Wed, 18 Jun 2025 14:24:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750256687; cv=none; b=RsjKcz7xXMWKir3PYXQVg4Hwt7k0rgtGF2tfafXpSWUo/XukGedwnvB/fD8g5gCK6KNF8A4pjIJPYUa4r2kdTGA8hheFWSFnrSR0XHo0mftGX5uCrYxldNGYTXJkTSNlvG+iwy+c3iPckC1m2Tl0rY3wyn2h2agFY0WeZ9EEpsU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750256687; c=relaxed/simple; bh=G2qKFlQ8+p+UL7nKSf5U1IH4MvAtmYbFzoknv9cfwAU=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=VNH7v5tRV4vj/YgnUsc9UcSpmg1QT5po1en7NZ4YJr5VQac4u93lPnUcaFGfp8ax97PXKqsDkM9IBidQZxbPIxIfGWfQNCFEiQLWZ6rpSdAcQ2Mk9v/8FhZszfgHTED+X++hBj7ZNC08ePZE6CcC66ETbQZlg8YGvIE4GwJn4G0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=bq7sHndU; 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="bq7sHndU" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 1CFF1C4CEEE; Wed, 18 Jun 2025 14:24:45 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1750256687; bh=G2qKFlQ8+p+UL7nKSf5U1IH4MvAtmYbFzoknv9cfwAU=; h=From:Date:Subject:References:In-Reply-To:To:Cc:From; b=bq7sHndUZizC+7HhM6QZouE0q+wv29pXrTsu7mp0mNfVfi2U/izKm92NcK+cUp8G+ K6G2WTAUOAXipQMffq3cz1CN8Sk2AGmmV4dE9q7BMC0UxULfrH3+s0eSmsbaDewDTs mFQxJBIfyKeB0ITzSKQVOU3TMzod9AU+OGhzSKnysPlFavi7SLry9yTmme5CTKgHA7 /WrKhQ1IT7d+yMWJWIFshJ31lYjjd7iw0hSxU1qarda1mdZHsA4XYFVBVOM6zQrO20 oc/VKnyIk1f+8xEL3VxXAP3xz17JKq7bw3tmR5DV+PXKPY03bFO4yj5Sw28F2jQz2t URUzZ+fvREwFQ== From: Jeff Layton Date: Wed, 18 Jun 2025 10:24:22 -0400 Subject: [PATCH v15 9/9] 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: <20250618-reftrack-dbgfs-v15-9-24fc37ead144@kernel.org> References: <20250618-reftrack-dbgfs-v15-0-24fc37ead144@kernel.org> In-Reply-To: <20250618-reftrack-dbgfs-v15-0-24fc37ead144@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: Krzysztof Karas , 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=7581; i=jlayton@kernel.org; h=from:subject:message-id; bh=G2qKFlQ8+p+UL7nKSf5U1IH4MvAtmYbFzoknv9cfwAU=; b=owEBbQKS/ZANAwAKAQAOaEEZVoIVAcsmYgBoUswZXRU276CNV+CLArVXEjWUfk9ioXvcSh/x9 Ki1497bau+JAjMEAAEKAB0WIQRLwNeyRHGyoYTq9dMADmhBGVaCFQUCaFLMGQAKCRAADmhBGVaC FQG9D/9hkFYH+S17UUrJp9DtYSLL2Lur2uc52hRzZ10JTtIoV7t+6JopmdOeE1+tOcBTOQCtaHj ygQdLJqDJ9Xb/vBk047YhP23ovGsc5f8XOk39RTgJe3HQctiUb+3sWP7wYGrch9gA2xC116hlJx dQsAv8hPPZyBLYutdHJ+zLAedl+7AKuvR8zW9nNNMzQWmG+IvMtOeoJ86vleRB6LOd3srLBW0nh sGpa/LBEsiybAcmqqvLkfODyfRNu3WQoyk5Q5e5HOF/oBfhedztpmoQN58SvpFtyTmtWMOMh98x PdHR88ZHAPtWzny2EIvrMLBuGuvEPmBzabbGrRmP3a77KgXjDBAlBaeRmZ0/muio36plPKlxqjO uq9+lZDKYr8ezZDTebtAgYrg30GsjXlVM8jwHsc6i6XbplWVnuDHZI9tBTd8Ay7zJM7NYJv7j1Y QarG4h4qehohI9nt5CVBcVQ4RXaETxv3itRvsX2sVo7hBnhhsKVnE4Fj2hSWxp3D+zIQEFtuK6m dvKKKcC6APeCMqNwB/plSNsVmB9o7JzJh4sQNmy8c6xDUfwLzHU9RlLCTlq3Ac7GJUVUUzyl7Qg /ozYJ+l5l81PExqNQUfbXu/TfTDCX1SXNF8Oho8TAEieHdlLmWtADXuqKakD3gXMDmdPlCfKHvo yuUdsCnQblH1TNw== 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 b9c12b8bf2a3e400b6d8e9d184145834c603b9e1..1205a4432eb4142344fb6eed1cb= 5ba5b21ec6953 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 90d90145a1890bf788e789858ddad3b3d8e3b978..7ce3e6de0c1970697e0e58198e1= e3852975ee7bc 100644 --- a/drivers/gpu/drm/i915/intel_runtime_pm.c +++ b/drivers/gpu/drm/i915/intel_runtime_pm.c @@ -61,7 +61,7 @@ static void init_intel_runtime_pm_wakeref(struct intel_ru= ntime_pm *rpm) { if (!rpm->debug.class) ref_tracker_dir_init(&rpm->debug, INTEL_REFTRACK_DEAD_COUNT, - "intel_runtime_pm", dev_name(rpm->kdev)); + "intel_runtime_pm"); } =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 21dcee7c9a659ac1fb0aa19f3018647be3bda754..080535fc71d8c25dcc848eefd06= 3361bbe21b305 100644 --- a/drivers/gpu/drm/i915/intel_wakeref.c +++ b/drivers/gpu/drm/i915/intel_wakeref.c @@ -115,7 +115,7 @@ void __intel_wakeref_init(struct intel_wakeref *wf, =20 #if IS_ENABLED(CONFIG_DRM_I915_DEBUG_WAKEREF) if (!wf->debug.class) - ref_tracker_dir_init(&wf->debug, INTEL_REFTRACK_DEAD_COUNT, "intel_waker= ef", name); + ref_tracker_dir_init(&wf->debug, INTEL_REFTRACK_DEAD_COUNT, "intel_waker= ef"); #endif } =20 diff --git a/include/linux/ref_tracker.h b/include/linux/ref_tracker.h index e1323de93bf6b891aa14ad8d9b4b28d02e10f9f7..d10563afd91c0c551e08896fa53= 54e0a5894ba7c 100644 --- a/include/linux/ref_tracker.h +++ b/include/linux/ref_tracker.h @@ -20,7 +20,6 @@ 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 */ - char name[32]; #endif }; =20 @@ -44,10 +43,21 @@ void ref_tracker_dir_symlink(struct ref_tracker_dir *di= r, const char *fmt, ...) =20 #endif /* CONFIG_DEBUG_FS */ =20 +/** + * ref_tracker_dir_init - initialize a ref_tracker dir + * @dir: ref_tracker_dir to be initialized + * @quarantine_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); @@ -57,7 +67,6 @@ static inline void ref_tracker_dir_init(struct ref_tracke= r_dir *dir, refcount_set(&dir->untracked, 1); refcount_set(&dir->no_tracker, 1); dir->class =3D class; - strscpy(dir->name, name, sizeof(dir->name)); ref_tracker_dir_debugfs(dir); stack_depot_init(); } @@ -82,8 +91,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 6608520d6118685a9cfa497827f6a89318b3360c..dcf923a1edf5b7d7342bf61ccec= 5b54a2eceab5b 100644 --- a/lib/ref_tracker.c +++ b/lib/ref_tracker.c @@ -155,7 +155,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 @@ -166,14 +166,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 12cf4e5ae9c5437bcfec657e37b7e08792bc14bf..92a830162dd8f9e311d31e5285e= 394b0e9f20d42 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -11715,7 +11715,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 45de05d8f0877a4e717bdad4ed776ae27f98944a..d0f607507ee8d0b6d31f11a4942= 1b5f0a985bd3b 100644 --- a/net/core/net_namespace.c +++ b/net/core/net_namespace.c @@ -403,8 +403,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