The doorbell is written with rte_write64_relaxed(), so the barrier before it is what orders the queued instructions against the device. That is device ordering, not SMP ordering: use rte_io_wmb().
Signed-off-by: Stephen Hemminger <[email protected]> --- drivers/crypto/octeontx/otx_cryptodev_hw_access.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/crypto/octeontx/otx_cryptodev_hw_access.h b/drivers/crypto/octeontx/otx_cryptodev_hw_access.h index 3104e6d31e..096dcf8f87 100644 --- a/drivers/crypto/octeontx/otx_cryptodev_hw_access.h +++ b/drivers/crypto/octeontx/otx_cryptodev_hw_access.h @@ -203,8 +203,8 @@ static __rte_always_inline void otx_cpt_ring_dbell(struct cpt_instance *instance, uint16_t count) { struct cpt_vf *cptvf = (struct cpt_vf *)instance; - /* Memory barrier to flush pending writes */ - rte_smp_wmb(); + /* Instructions must be visible to the device before the doorbell */ + rte_io_wmb(); otx_cpt_write_vq_doorbell(cptvf, count); } -- 2.53.0

