From: Yazen Ghannam <yazen.ghannam@amd.com>
To: Borislav Petkov <bp@alien8.de>
Cc: x86@kernel.org, linux-kernel@vger.kernel.org,
Mario Limonciello <mario.limonciello@amd.com>,
Filip Barczyk <filip.barczyk@pico.net>
Subject: Re: [PATCH 1/2] x86/amd_node: Fix AMD root device caching
Date: Wed, 22 Oct 2025 09:19:04 -0400 [thread overview]
Message-ID: <20251022131904.GA7243@yaz-khff2.amd.com> (raw)
In-Reply-To: <20251022111342.GNaPi8ZqATfwpja2GR@fat_crate.local>
On Wed, Oct 22, 2025 at 01:13:42PM +0200, Borislav Petkov wrote:
> On Tue, Sep 30, 2025 at 04:45:45PM +0000, Yazen Ghannam wrote:
> > This behavior is benign on AMD reference design boards, since the bus
> > numbers are aligned. This results in a bitwise-OR value matching one of
> > the buses. For example, 0x00 | 0x40 | 0xA0 | 0xE0 = 0xE0.
> >
> > This behavior breaks on boards where the bus numbers are not exactly
> > aligned. For example, 0x00 | 0x07 | 0xE0 | 0x15 = 0x1F.
>
> <---
>
> Please add here something along the lines of:
>
> "And even if one could say, they both have bus 0x0 containing the root
> devices, this is not true on the other AMD nodes besides 0."
>
Okay, will do.
> > static int amd_cache_roots(void)
> > {
> > - u16 node, num_nodes = amd_num_nodes();
> > + u16 count = 0, num_roots = 0, roots_per_node, node = 0, num_nodes = amd_num_nodes();
> > + struct pci_dev *root = NULL;
> >
> > amd_roots = kcalloc(num_nodes, sizeof(*amd_roots), GFP_KERNEL);
> > if (!amd_roots)
> > return -ENOMEM;
> >
> > - for (node = 0; node < num_nodes; node++)
> > - amd_roots[node] = amd_node_get_root(node);
> > + while ((root = get_next_root(root))) {
> > + pci_dbg(root, "is an AMD root device\n");
> > + num_roots++;
> > + }
> > +
> > + pr_debug("Found %d AMD root devices\n", num_roots);
> > +
> > + roots_per_node = num_roots / num_nodes;
>
> What happens if num_roots = 0? IOW, you need to handle that here.
Yes, will do.
>
> > +
> > + while ((root = get_next_root(root)) && node < num_nodes) {
> > + /* 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;
> > + }
>
> If I squint my eyes hard enough, I can see you getting rid of the *three*
> while loops here. So please try again.
>
I don't follow. Do you mean to combine the other loops into this one? Or
that this loop should be expanded into three loops explicitly doing one
thing each?
Thanks,
Yazen
next prev parent reply other threads:[~2025-10-22 13:19 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-09-30 16:45 [PATCH 0/2] AMD root search fix Yazen Ghannam
2025-09-30 16:45 ` [PATCH 1/2] x86/amd_node: Fix AMD root device caching Yazen Ghannam
2025-09-30 18:07 ` Mario Limonciello (AMD) (kernel.org)
2025-10-01 13:46 ` Yazen Ghannam
2025-10-07 17:30 ` Filip Barczyk
2025-10-07 17:37 ` Filip Barczyk
2025-10-21 12:29 ` Borislav Petkov
2025-10-21 13:37 ` Yazen Ghannam
2025-10-21 14:15 ` Borislav Petkov
2025-10-21 14:25 ` Yazen Ghannam
2025-10-22 11:13 ` Borislav Petkov
2025-10-22 13:19 ` Yazen Ghannam [this message]
2025-10-22 18:48 ` Borislav Petkov
2025-09-30 16:45 ` [PATCH 2/2] x86/amd_node: Use new root search helper Yazen Ghannam
2025-09-30 18:07 ` [PATCH 0/2] AMD root search fix Mario Limonciello (AMD) (kernel.org)
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20251022131904.GA7243@yaz-khff2.amd.com \
--to=yazen.ghannam@amd.com \
--cc=bp@alien8.de \
--cc=filip.barczyk@pico.net \
--cc=linux-kernel@vger.kernel.org \
--cc=mario.limonciello@amd.com \
--cc=x86@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox