From: "Prica, Nikola" <nikola.prica@amd.com>
To: sashiko-reviews@lists.linux.dev, Nikola Prica <nikprica@amd.com>
Cc: linux-pci@vger.kernel.org
Subject: Re: [PATCH] PCI: Accept AtomicOps already enabled by the hypervisor
Date: Mon, 7 Sep 2026 17:59:37 +0200 [thread overview]
Message-ID: <d22d089d-7539-4555-be84-29bcd519c224@amd.com> (raw)
In-Reply-To: <20260903121217.23F751F000E9@smtp.kernel.org>
Ok. That makes sense. I'll address it in v2 and incorporate Christians comment too.
On 9/3/2026 2:12 PM, sashiko-bot@kernel.org wrote:
> [You don't often get email from sashiko-bot@kernel.org. Learn why this is important at https://aka.ms/LearnAboutSenderIdentification ]
>
> Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
> - [High] Unconditionally returning success when ATOMIC_REQ is already set bypasses root port and bridge capability validation.
> --
>
> commit 174dddecfad7749ccba344bb23492b342569e86c
> Author: Nikola Prica <nikola.prica@amd.com>
>
> PCI: Accept AtomicOps already enabled by the hypervisor
>
> This commit modifies pci_enable_atomic_ops_to_root() to check if the
> PCI_EXP_DEVCTL2_ATOMIC_REQ bit is already set by a hypervisor. If it is, the
> function returns success early to avoid failing in passthrough topologies
> without a visible Root Port.
>
>> diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
>> index b2879a6be5f80..7c62c7f317572 100644
>> --- a/drivers/pci/pci.c
>> +++ b/drivers/pci/pci.c
>> @@ -3768,6 +3768,14 @@ int pci_enable_atomic_ops_to_root(struct pci_dev *dev, u32 cap_mask)
>> return -EINVAL;
>> }
>>
>> + /*
>> + * Some hypervisors already set AtomicOp Requester Enable. If it
>> + * is already set, there is nothing more to do.
>> + */
>> + pcie_capability_read_dword(dev, PCI_EXP_DEVCTL2, &ctl2);
>> + if (ctl2 & PCI_EXP_DEVCTL2_ATOMIC_REQ)
>> + return 0;
>
> [Severity: High]
> Will this unconditional early return bypass the capability validation for newly
> requested atomic sizes?
>
> When drivers or subsystems sequentially check for atomic support, they call
> pci_enable_atomic_ops_to_root() for different sizes. For example, in
> drivers/vfio/pci/vfio_pci_core.c:vfio_pci_info_atomic_cap() (around line
> 1059), the code sequentially checks for 32-bit and 64-bit atomic support:
>
> vfio_pci_core.c:vfio_pci_info_atomic_cap() {
> ...
> if ((devcap2 & PCI_EXP_DEVCAP2_ATOMIC_COMP64) &&
> !pci_enable_atomic_ops_to_root(pdev, PCI_EXP_DEVCAP2_ATOMIC_COMP64))
> cap.flags |= VFIO_PCI_ATOMIC_COMP64;
> ...
> }
>
> A similar sequential check occurs in
> drivers/infiniband/hw/bnxt_re/qplib_res.c:bnxt_qplib_determine_atomics()
> (around line 1001).
>
> The first successful call (e.g., for COMP32) validates the topology and sets
> the ATOMIC_REQ bit on the endpoint. If a subsequent call is made for a larger
> size (like COMP64), this new logic sees the ATOMIC_REQ bit is already set and
> instantly returns success.
>
> By returning early, doesn't this bypass the cap_mask checks on the root port
> and bridges for the larger atomic size?
>
> Could this cause the kernel to incorrectly advertise 64-bit or 128-bit atomic
> support to VMs or drivers when the root port only supports 32-bit? If a driver
> or VM attempts to use these unsupported sizes, the root port would treat them
> as an Unsupported Request (UR), potentially triggering a fatal AER error and
> crashing the system or terminating the VM.
>
> --
> Sashiko AI review · https://sashiko.dev/#/patchset/20260903121218.4955-1-nikprica@amd.com?part=1
next prev parent reply other threads:[~2026-09-07 15:59 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-03 12:12 [PATCH] PCI: Accept AtomicOps already enabled by the hypervisor Nikola Prica
2026-09-03 12:09 ` Christian König
2026-09-03 12:12 ` sashiko-bot
2026-09-07 15:59 ` Prica, Nikola [this message]
2026-09-07 16:17 ` [PATCH v2] " Nikola Prica
2026-09-07 16:15 ` sashiko-bot
2026-09-07 18:23 ` Prica, Nikola
2026-09-08 8:47 ` Christian König
2026-09-11 14:09 ` Prica, Nikola
2026-09-14 13:41 ` Gerd Bayer
2026-09-14 13:54 ` Christian König
2026-09-18 9:07 ` Prica, Nikola
2026-09-18 9:28 ` [PATCH v3] " Nikola Prica
2026-09-18 9:28 ` sashiko-bot
2026-09-18 12:07 ` Christian König
2026-09-18 17:07 ` Bjorn Helgaas
2026-09-21 11:04 ` Prica, Nikola
2026-09-21 11:05 ` Prica, Nikola
2026-09-21 11:19 ` [PATCH v4] " Nikola Prica
2026-09-21 11:13 ` sashiko-bot
2026-10-01 16:23 ` Bjorn Helgaas
2026-09-21 11:58 ` [PATCH v3] " Christian König
2026-09-21 12:12 ` Thorsten Leemhuis
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=d22d089d-7539-4555-be84-29bcd519c224@amd.com \
--to=nikola.prica@amd.com \
--cc=linux-pci@vger.kernel.org \
--cc=nikprica@amd.com \
--cc=sashiko-reviews@lists.linux.dev \
/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.