From: Bjorn Helgaas <helgaas@kernel.org>
To: "Christian König" <christian.koenig@amd.com>
Cc: Nikola Prica <nikprica@amd.com>,
bhelgaas@google.com, linux-pci@vger.kernel.org,
linux-kernel@vger.kernel.org, stable@vger.kernel.org,
jerry.jiang@amd.com, haijun.chang@amd.com, andy.zhang@amd.com,
jim.chow@broadcom.com, matthew.mcclure@broadcom.com,
gbayer@linux.ibm.com, Nikola Prica <nikola.prica@amd.com>
Subject: Re: [PATCH v3] PCI: Accept AtomicOps already enabled by the hypervisor
Date: Fri, 18 Sep 2026 12:07:35 -0500 [thread overview]
Message-ID: <20260918170735.GA1162623@bhelgaas> (raw)
In-Reply-To: <20021a25-3800-4eb1-9dcd-a2c9fd8eedbc@amd.com>
On Fri, Sep 18, 2026 at 02:07:46PM +0200, Christian König wrote:
> On 9/18/26 11:28, Nikola Prica wrote:
> > From: Nikola Prica <nikola.prica@amd.com>
> >
> > pci_enable_atomic_ops_to_root() currently fails when no Root Port is
> > visible. That is common in passthrough guests (ESXi, Hyper-V): the
> > endpoint is assigned to the VM, but the guest topology has no Root
> > Port above it.
> >
> > In those setups the hypervisor may already have enabled AtomicOp
> > Requester Enable on the device. If PCI_EXP_DEVCTL2_ATOMIC_REQ is set,
> > treat AtomicOps as already enabled and return success instead of
> > failing the Root Port walk.
> >
> > Fixes: 1ae8c4ce1570 ("PCI: Enable AtomicOps only if Root Port supports them")
> > Reviewed-by: Christian König <christian.koenig@amd.com>
> > Reviewed-by: Gerd Bayer <gbayer@linux.ibm.com>
> > Tested-by: Gerd Bayer <gbayer@linux.ibm.com>
> > Signed-off-by: Nikola Prica <nikola.prica@amd.com>
>
> CC: stable@vger.kernel.org # 7.1+
>
> Bjorn do you want to pick that up? Alternative I can push it through
> drm-misc-fixes.
>
> Initially I thought that this is a new feature, but it turned out to
> be an regression and we need to get it fixed ASAP.
Let me just talk through this to make sure I understand it:
Prior to 1ae8c4ce1570, pci_enable_atomic_ops_to_root() enabled
PCI_EXP_DEVCTL2_ATOMIC_REQ unless a switch port didn't support
AtomicOp routing, a switch upstream port blocked AtomicOp egress, or a
Root Port didn't support the requested sizes.
1ae8c4ce1570 added the requirement that the Root Port be visible,
which fixed an s390 case where pci_enable_atomic_ops_to_root() enabled
AtomicOps when the Root Port did not support them but was not visible
to the kernel.
IIUC the regression is on systems where the Root Port is not visible
but *does* support AtomicOps. Prior to 1ae8c4ce1570, we would have
enabled AtomicOps in the endpoint and returned success. After
1ae8c4ce1570, we return -EINVAL because we can't see the Root Port to
verify its support, so the driver thinks it can't use AtomicOps.
This patch fixes the regression by assuming that if we can't see the
Root Port but the endpoint already has AtomicOps enabled, the
hypervisor or host kernel that *can* see the Root Port has already
verified its AtomicOps support, so all we have to do is return success
so the driver can use them.
I'm happy to merge this for v7.3, and I think we should add something
like this to the commit log to make it clear that it's a regression
worthy of a post-merge window fix:
After 1ae8c4ce1570 ("PCI: Enable AtomicOps only if Root Port
supports them"), pci_enable_atomic_ops_to_root() always fails if the
Root Port is not visible. On systems where the Root Port is not
visible but *does* support AtomicOps, this is a regression: prior to
1ae8c4ce1570, it enabled AtomicOps in the endpoint and returned
success.
Is there any problem report for the regression? I don't see anything
at https://linux-regtracking.leemhuis.info/regzbot/mainline/, so my
guess is no.
> > ---
> > v3: Add Fixes tag
> > v2: Be more strict and only apply logic in headless device case.
> > ---
> > drivers/pci/pci.c | 12 +++++++++++-
> > 1 file changed, 11 insertions(+), 1 deletion(-)
> >
> > diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
> > index b2879a6be5f8..62729ade496f 100644
> > --- a/drivers/pci/pci.c
> > +++ b/drivers/pci/pci.c
> > @@ -3769,8 +3769,18 @@ int pci_enable_atomic_ops_to_root(struct pci_dev *dev, u32 cap_mask)
> > }
> >
> > root = pcie_find_root_port(dev);
> > - if (!root)
> > + if (!root) {
> > + /*
> > + * A hypervisor may expose a headless topology with no
> > + * visible root port. If it has already set AtomicOp
> > + * Requester Enable, there is nothing more to do.
> > + */
> > + pcie_capability_read_dword(dev, PCI_EXP_DEVCTL2, &ctl2);
> > + if (ctl2 & PCI_EXP_DEVCTL2_ATOMIC_REQ)
> > + return 0;
> > +
> > return -EINVAL;
> > + }
> >
> > pcie_capability_read_dword(root, PCI_EXP_DEVCAP2, &cap);
> > if ((cap & cap_mask) != cap_mask)
>
prev parent reply other threads:[~2026-09-18 17:07 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <20260903121217.23F751F000E9@smtp.kernel.org>
2026-09-07 16:17 ` [PATCH v2] " Nikola Prica
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 12:07 ` Christian König
2026-09-18 17:07 ` Bjorn Helgaas [this message]
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=20260918170735.GA1162623@bhelgaas \
--to=helgaas@kernel.org \
--cc=andy.zhang@amd.com \
--cc=bhelgaas@google.com \
--cc=christian.koenig@amd.com \
--cc=gbayer@linux.ibm.com \
--cc=haijun.chang@amd.com \
--cc=jerry.jiang@amd.com \
--cc=jim.chow@broadcom.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=matthew.mcclure@broadcom.com \
--cc=nikola.prica@amd.com \
--cc=nikprica@amd.com \
--cc=stable@vger.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
all inboxes | Powered by JetHome®