Hi Loic, On Wednesday, April 11, 2018 03:30 PM, Loic Poulain wrote: >> /* Move the head of the ring to the next empty descriptor */ >> - ch->head_blk_ctl = ctl->next; >> + ch->head_blk_ctl = ctl_skb->next; >> + >> + /* Commit all previous writes and set descriptors to VALID */ >> + wmb(); > > Is this first memory barrier really needed? from what I understand, we > only need to ensure that the control descriptor is marked valid at the > end of the procedure and we don't really care about the paylod one.
Well, without documentation or the firmware sources, that's just guesswork at this point. My assumption is only based on the weird comments and workarounds in the downstream driver. I added the second barrier to ensure that no descriptor is ever marked valid unless all other bits are definitely in sync. Thanks, Daniel