e DT_FEND before DT_FEND * TODO: Add explanation about compiler optimised code etc. */ if (num_tx_desc > 1) { desc->die_dt = DT_FEND; desc--; die_dt = DT_FSTART; } /* Descriptor type must be set after all the above writes */ dma_wmb(); desc->die_dt = die_dt; I think my main complaint is that evaluating num_tx_desc > 1 multiple times makes the code read as stuff was just thrown into the driver until a test-case passed without understanding the root cause. Have you observed any issues without the wmb() here? What I'm trying to understand is why a new barrier is needed here when it have worked without one before. I'm likely just slow but what I'm trying to grasp is the need for the intermittent dma_wmb() above in relation to this one. Should it not be, setup the descriptors, barrier to ensure it's in RAM, ring doorbell. The staggered method of setup descriptors, barrier, setup more descriptors, barrier, ring doorbell is what confuses me, I think :-) -- Kind Regards, Niklas Söderlund[PATCH 3/3] net: ravb: Enforce descriptor type ordering to prevent early DMA startNiklas Söderlund undefined"Lad, Prabhakar" undefined undefined undefined undefined undefined undefined undefined undefined undefined undefined undefined undefined undefined undefined undefined-