* Re: [PATCH] PCI: Accept AtomicOps already enabled by the hypervisor
2026-09-03 12:12 [PATCH] PCI: Accept AtomicOps already enabled by the hypervisor Nikola Prica
@ 2026-09-03 12:09 ` Christian König
0 siblings, 0 replies; 2+ messages in thread
From: Christian König @ 2026-09-03 12:09 UTC (permalink / raw)
To: Nikola Prica, bhelgaas
Cc: linux-pci, linux-kernel, jerry.jiang, haijun.chang, andy.zhang,
Nikola Prica
On 9/3/26 14:12, 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.
>
> Signed-off-by: Nikola Prica <nikola.prica@amd.com>
> ---
> drivers/pci/pci.c | 8 ++++++++
> 1 file changed, 8 insertions(+)
>
> diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
> index b2879a6be5f8..7c62c7f31757 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;
> +
I think for a bit more defensiveness we should only do this when we can't find a root port. E.g. under the if (!root) below.
Apart from that looks totally sane to me.
Regards,
Christian.
> root = pcie_find_root_port(dev);
> if (!root)
> return -EINVAL;
>
> base-commit: 89a312991dc6e638a36adc43ccb91dbc25504c04
^ permalink raw reply [flat|nested] 2+ messages in thread
* [PATCH] PCI: Accept AtomicOps already enabled by the hypervisor
@ 2026-09-03 12:12 Nikola Prica
2026-09-03 12:09 ` Christian König
0 siblings, 1 reply; 2+ messages in thread
From: Nikola Prica @ 2026-09-03 12:12 UTC (permalink / raw)
To: bhelgaas
Cc: linux-pci, linux-kernel, jerry.jiang, haijun.chang, andy.zhang,
christian.koenig, Nikola Prica
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.
Signed-off-by: Nikola Prica <nikola.prica@amd.com>
---
drivers/pci/pci.c | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c
index b2879a6be5f8..7c62c7f31757 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;
+
root = pcie_find_root_port(dev);
if (!root)
return -EINVAL;
base-commit: 89a312991dc6e638a36adc43ccb91dbc25504c04
--
2.34.1
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2026-09-03 12:09 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-09-03 12:12 [PATCH] PCI: Accept AtomicOps already enabled by the hypervisor Nikola Prica
2026-09-03 12:09 ` Christian König
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®