Pass fully populated capability bit-mask requesting support for all 3 sizes of AtomicOps at once when attempting to enable AtomicOps for PCI function. When called individually, pci_enable_atomic_ops_to_root() may enable the device to send requests as soon as one size is supported. According to PCIe Spec 7.0 Section 6.15.3.1 support of 32-bit and 64-bit AtomicOps completer capabilities are tied together for root-ports. Only the 128-bit/CAS completer capabilities is an optional feature, but still we might end up end up enabling AtomicOps despite 128-bit/CAS is not supported at the root-port. Signed-off-by: Gerd Bayer --- drivers/infiniband/hw/mlx5/data_direct.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/drivers/infiniband/hw/mlx5/data_direct.c b/drivers/infiniband/hw/mlx5/data_direct.c index b81ac5709b56f6ac0d9f60572ce7144258fa2794..112185be53f1ccc6a797e129f24432bdc86008ae 100644 --- a/drivers/infiniband/hw/mlx5/data_direct.c +++ b/drivers/infiniband/hw/mlx5/data_direct.c @@ -179,9 +179,9 @@ static int mlx5_data_direct_probe(struct pci_dev *pdev, const struct pci_device_ if (err) goto err_disable; - if (pci_enable_atomic_ops_to_root(pdev, PCI_EXP_DEVCAP2_ATOMIC_COMP32) && - pci_enable_atomic_ops_to_root(pdev, PCI_EXP_DEVCAP2_ATOMIC_COMP64) && - pci_enable_atomic_ops_to_root(pdev, PCI_EXP_DEVCAP2_ATOMIC_COMP128)) + if (pci_enable_atomic_ops_to_root(pdev, PCI_EXP_DEVCAP2_ATOMIC_COMP32 | + PCI_EXP_DEVCAP2_ATOMIC_COMP64 | + PCI_EXP_DEVCAP2_ATOMIC_COMP128)) dev_dbg(dev->device, "Enabling pci atomics failed\n"); err = mlx5_data_direct_vpd_get_vuid(dev); -- 2.48.1