All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2] x86/amd_node: Fix PCI device reference counting in amd_smn_init()
@ 2026-09-03 15:43 Yazen Ghannam
  2026-09-03 19:37 ` Serge Hallyn (AMD)
  2026-09-11  2:59 ` [tip: x86/urgent] " tip-bot2 for Yazen Ghannam
  0 siblings, 2 replies; 7+ messages in thread
From: Yazen Ghannam @ 2026-09-03 15:43 UTC (permalink / raw)
  To: x86; +Cc: linux-kernel, Yazen Ghannam

The local "root" pointer is a temporary variable used during the device
search. Therefore, refcount related to the search iterators should be
cleaned up after the search is complete.

Use the __free() cleanup macro to ensure the refcount is decremented
when the temporary pointer goes out of scope.

Additionally, increment the refcount when caching a root pointer. This
ensures the in-use refcount is separate from the temporary search
refcounting.

Finally, drop the redundant "root = NULL" before the second search
loop. The pci_get_class() iterator always decrements the refcount of
its "from" argument, so the first loop can only fall through with
"root" already NULL.

Fixes: 0a4b61d9c2e4 ("x86/amd_node: Fix AMD root device caching")
Reported-by: Sashiko <sashiko-bot@kernel.org>
Closes: https://sashiko.dev/#/patchset/20260806160159.230453-1-jason.andryuk%40amd.com
Assisted-by: Claude-Code:claude-opus-5
Signed-off-by: Yazen Ghannam <yazen.ghannam@amd.com>
Reviewed-by: Mario Limonciello (AMD) <superm1@kernel.org>
---
Link:
https://lore.kernel.org/r/20260824175003.335196-1-yazen.ghannam@amd.com

v1->v2:
* Add SoB from Mario.
* Remove redundant pointer reset.

 arch/x86/kernel/amd_node.c | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/arch/x86/kernel/amd_node.c b/arch/x86/kernel/amd_node.c
index 762585775b5a..b7926ba3610a 100644
--- a/arch/x86/kernel/amd_node.c
+++ b/arch/x86/kernel/amd_node.c
@@ -251,7 +251,7 @@ __setup("amd_smn_debugfs_enable", amd_smn_enable_dfs);
 static int __init amd_smn_init(void)
 {
 	u16 count, num_roots, roots_per_node, node, num_nodes;
-	struct pci_dev *root;
+	struct pci_dev *root __free(pci_dev_put) = NULL;
 
 	if (!cpu_feature_enabled(X86_FEATURE_ZEN))
 		return 0;
@@ -262,7 +262,6 @@ static int __init amd_smn_init(void)
 		return 0;
 
 	num_roots = 0;
-	root = NULL;
 	while ((root = get_next_root(root))) {
 		pci_dbg(root, "Reserving PCI config space\n");
 
@@ -299,14 +298,13 @@ static int __init amd_smn_init(void)
 
 	count = 0;
 	node = 0;
-	root = NULL;
 	while (node < num_nodes && (root = get_next_root(root))) {
 		/* Use one root for each node and skip the rest. */
 		if (count++ % roots_per_node)
 			continue;
 
 		pci_dbg(root, "is root for AMD node %u\n", node);
-		amd_roots[node++] = root;
+		amd_roots[node++] = pci_dev_get(root);
 	}
 
 	if (enable_dfs) {

base-commit: 7755fae2ea370ee914797c5bcca922836a818c3d
-- 
2.43.0


^ permalink raw reply related	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2026-09-11 17:21 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-09-03 15:43 [PATCH v2] x86/amd_node: Fix PCI device reference counting in amd_smn_init() Yazen Ghannam
2026-09-03 19:37 ` Serge Hallyn (AMD)
2026-09-11  3:03   ` Borislav Petkov
2026-09-11 13:42     ` Yazen Ghannam
2026-09-11 16:33     ` Serge Hallyn
2026-09-11 17:21       ` Borislav Petkov
2026-09-11  2:59 ` [tip: x86/urgent] " tip-bot2 for Yazen Ghannam

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.