]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
net: ionic: add dma_wmb() before ringing TX doorbell
authorMohammad Heib <mheib@redhat.com>
Fri, 31 Oct 2025 15:52:02 +0000 (17:52 +0200)
committerJakub Kicinski <kuba@kernel.org>
Tue, 4 Nov 2025 01:19:21 +0000 (17:19 -0800)
The TX path currently writes descriptors and then immediately writes to
the MMIO doorbell register to notify the NIC.  On weakly ordered
architectures, descriptor writes may still be pending in CPU or DMA
write buffers when the doorbell is issued, leading to the device
fetching stale or incomplete descriptors.

Add a dma_wmb() in ionic_txq_post() to ensure all descriptor writes are
visible to the device before the doorbell MMIO write.

Fixes: 0f3154e6bcb3 ("ionic: Add Tx and Rx handling")
Signed-off-by: Mohammad Heib <mheib@redhat.com>
Link: https://patch.msgid.link/20251031155203.203031-1-mheib@redhat.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/pensando/ionic/ionic_txrx.c

index d10b58ebf6034afa219612fac98119673382e46f..2e571d0a0d8a282a51ce7266ec4de63c1f645c01 100644 (file)
@@ -29,6 +29,10 @@ static void ionic_tx_clean(struct ionic_queue *q,
 
 static inline void ionic_txq_post(struct ionic_queue *q, bool ring_dbell)
 {
+       /* Ensure TX descriptor writes reach memory before NIC reads them.
+        * Prevents device from fetching stale descriptors.
+        */
+       dma_wmb();
        ionic_q_post(q, ring_dbell);
 }