Thread (17 messages) flat view 17 messages, 3 authors, 1d ago

Re: [PATCH net-next 10/14] mlxsw: pci: Remove obsolete 32-bit DMA mask fallback

From: Petr Machata <petrm@nvidia.com>
Date: 2026-09-04 16:01:34
Also in: lkml

Ruizhe Zhou [off-list ref] writes:
The DMA API guarantees support for masks of 32 bits or wider and
explicitly identifies retrying a 32-bit mask after a 64-bit request as
incorrect:
https://docs.kernel.org/core-api/dma-api-howto.html#dma-addressing-capabilities

Remove the obsolete fallback while retaining the error check so that a
genuine DMA setup failure is still reported and aborts initialization.
Update the error message to identify the combined streaming and coherent
DMA mask operation.

Signed-off-by: Ruizhe Zhou <redacted>
Doco: "dma_set_mask_and_coherent() never return fail when DMA_BIT_MASK(64)."

Checking code, the only way that I see that dma_set_mask_and_coherent()
returns error is if dma_supported() returns 0. This could happen if:

- use_dma_iommu() fails, but that doesn't consider mask, so retrying
  with 32 doesn't help.

- if ops->dma_supported fails. But I checked several architectures where
  mlxsw could even theoretically be relevant, and it's basically always
  some mask > X type of expression, so retrying with a smaller mask does
  not help.

- The fallback of dma_direct_supported() is like that as well.

So yeah. I think this is correct.

Reviewed-by: Petr Machata <petrm@nvidia.com>
quoted hunk ↗ jump to hunk
---
 drivers/net/ethernet/mellanox/mlxsw/pci.c | 7 ++-----
 1 file changed, 2 insertions(+), 5 deletions(-)
diff --git a/drivers/net/ethernet/mellanox/mlxsw/pci.c b/drivers/net/ethernet/mellanox/mlxsw/pci.c
index bfe3268dfdc1..dceb69945d26 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/pci.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/pci.c
@@ -2429,11 +2429,8 @@ static int mlxsw_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id)
 
 	err = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(64));
 	if (err) {
-		err = dma_set_mask(&pdev->dev, DMA_BIT_MASK(32));
-		if (err) {
-			dev_err(&pdev->dev, "dma_set_mask failed\n");
-			goto err_pci_set_dma_mask;
-		}
+		dev_err(&pdev->dev, "dma_set_mask_and_coherent failed\n");
+		goto err_pci_set_dma_mask;
 	}
 
 	if (pci_resource_len(pdev, 0) < MLXSW_PCI_BAR0_SIZE) {
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help