[PATCH v1] ntb_transport: replace wmb() with dma_wmb() in TX paths
From: Xingbang Liu
Date: Fri Apr 24 2026 - 05:23:56 EST
The TX paths currently use wmb() after memcpy_toio() to ensure that
writes to the peer memory window are visible before subsequent
notification.
The actual ordering requirement is to ensure that data written to the
peer memory is observed before the associated notification or status
update. This matches the semantics of dma_wmb(), which orders memory
writes with respect to external observers.
The peer memory window is mapped with ioremap_wc(), allowing
write-combining. On weakly ordered architectures such as arm64,
dma_wmb() ensures that prior writes are committed from write-combining
buffers and become visible to the peer before subsequent operations.
This aligns with common patterns in PCIe-based drivers, where it is
used to order descriptor or payload writes before notification, while
avoiding the stronger ordering semantics of wmb().
The ordering with respect to peer observation is completed by the
subsequent notification mechanism.
No functional change is intended.
Signed-off-by: Xingbang Liu <liu.airalert@xxxxxxxxx>
---
drivers/ntb/ntb_transport.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/ntb/ntb_transport.c b/drivers/ntb/ntb_transport.c
index 7cabc82305d6..c8ef46ddcc57 100644
--- a/drivers/ntb/ntb_transport.c
+++ b/drivers/ntb/ntb_transport.c
@@ -1791,7 +1791,7 @@ static void ntb_memcpy_tx_on_stack(struct ntb_queue_entry *entry, void __iomem *
#endif
/* Ensure that the data is fully copied out before setting the flags */
- wmb();
+ dma_wmb();
ntb_tx_copy_callback(entry, NULL);
}
--
2.34.1