From: "Roger Pau Monné" <roger.pau@citrix.com>
To: Jan Beulich <jbeulich@suse.com>
Cc: "xen-devel@lists.xenproject.org" <xen-devel@lists.xenproject.org>,
Andrew Cooper <andrew.cooper3@citrix.com>,
Oleksii Kurochko <oleksii.kurochko@gmail.com>
Subject: Re: [PATCH for-4.20 2/3] x86/PCI: init segments earlier
Date: Mon, 3 Feb 2025 13:45:49 +0100 [thread overview]
Message-ID: <Z6C6fUeB4mFfGfJc@macbook.local> (raw)
In-Reply-To: <940ccd1b-9ad8-4b68-a035-36f45326872b@suse.com>
On Thu, Jan 30, 2025 at 12:12:31PM +0100, Jan Beulich wrote:
> In order for amd_iommu_detect_one_acpi()'s call to pci_ro_device() to
> have permanent effect, pci_segments_init() needs to be called ahead of
> making it there. Without this we're losing segment 0's r/o map, and thus
> we're losing write-protection of the PCI devices representing IOMMUs.
> Which in turn means that half-way recent Linux Dom0 will, as it boots,
> turn off MSI on these devices, thus preventing any IOMMU events (faults
> in particular) from being reported on pre-x2APIC hardware.
>
> As the acpi_iommu_init() invocation was moved ahead of
> acpi_mmcfg_init()'s by the offending commit, move the call to
> pci_segments_init() accordingly.
>
> Fixes: 3950f2485bbc ("x86/x2APIC: defer probe until after IOMMU ACPI table parsing")
> Signed-off-by: Jan Beulich <jbeulich@suse.com>
> ---
> Of course it would have been quite a bit easier to notice this issue if
> radix_tree_insert() wouldn't work fine ahead of radix_tree_init() being
> invoked for a given radix tree, when the index inserted at is 0.
>
> While hunting down various other dead paths to actually find the root
> cause, it occurred to me that it's probably not a good idea to fully
> disallow config space writes for r/o devices: Dom0 won't be able to size
> their BARs (luckily the IOMMU "devices" don't have any, but e.g. serial
> ones generally will have at least one), for example. Without being able
> to size BARs it also will likely be unable to correctly account for the
> address space taken by these BARs. However, outside of vPCI it's not
> really clear to me how we could reasonably emulate such BAR sizing
> writes - we can't, after all, allow Dom0 to actually write to the
> underlying physical registers, yet we don't intercept reads (i.e. we
> can't mimic expected behavior then).
For properly sizing the domain will also attempt to toggle the memory
decoding bit ahead of sizing the BARs, and letting that trough will
break the usage of the device from Xen. IOW: we would likely need to
emulate a fair amount of device state to make the view coherent from a
guest PoV, but is it worth it for a device that the hardware domain
cannot interact with?
Would it make more sense to just hide those devices instead of
allowing read-only access to their PCI config space?
> --- a/xen/arch/x86/x86_64/mmconfig-shared.c
> +++ b/xen/arch/x86/x86_64/mmconfig-shared.c
> @@ -402,8 +402,6 @@ void __init acpi_mmcfg_init(void)
> {
> bool valid = true;
>
> - pci_segments_init();
> -
> /* MMCONFIG disabled */
> if ((pci_probe & PCI_PROBE_MMCONF) == 0)
> return;
> --- a/xen/drivers/passthrough/x86/iommu.c
> +++ b/xen/drivers/passthrough/x86/iommu.c
> @@ -55,6 +55,8 @@ void __init acpi_iommu_init(void)
> {
> int ret = -ENODEV;
>
> + pci_segments_init();
My preference might be to just place the pci_segments_init() call in
__start_xen(), instead of hiding it again in what might look like an
unrelated function (there's no mention of PCI in acpi_iommu_init()
function name for example).
Thanks, Roger.
next prev parent reply other threads:[~2025-02-03 12:46 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-01-30 11:10 [PATCH for-4.20 0/3] AMD/IOMMU: assorted corrections Jan Beulich
2025-01-30 11:11 ` [PATCH for-4.20? 1/3] AMD/IOMMU: drop stray MSI enabling Jan Beulich
2025-01-31 18:46 ` Jason Andryuk
2025-02-02 13:50 ` Andrew Cooper
2025-02-03 8:41 ` Jan Beulich
2025-02-03 14:19 ` Andrew Cooper
2025-02-03 15:53 ` Jan Beulich
2025-02-03 16:19 ` Andrew Cooper
2025-01-30 11:12 ` [PATCH for-4.20 2/3] x86/PCI: init segments earlier Jan Beulich
2025-01-31 18:47 ` Jason Andryuk
2025-02-02 14:46 ` Andrew Cooper
2025-02-03 9:09 ` Jan Beulich
2025-02-03 15:31 ` Andrew Cooper
2025-02-03 12:45 ` Roger Pau Monné [this message]
2025-02-03 13:00 ` Jan Beulich
2025-02-03 13:03 ` Jan Beulich
2025-02-03 14:23 ` Andrew Cooper
2025-02-03 15:55 ` Jan Beulich
2025-01-30 11:13 ` [PATCH for-4.20? 3/3] AMD/IOMMU: log IVHD contents Jan Beulich
2025-01-31 18:47 ` Jason Andryuk
2025-02-02 13:57 ` Andrew Cooper
2025-01-31 11:18 ` [PATCH for-4.20 0/3] AMD/IOMMU: assorted corrections Oleksii Kurochko
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=Z6C6fUeB4mFfGfJc@macbook.local \
--to=roger.pau@citrix.com \
--cc=andrew.cooper3@citrix.com \
--cc=jbeulich@suse.com \
--cc=oleksii.kurochko@gmail.com \
--cc=xen-devel@lists.xenproject.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 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.