> > In weak memory models, like arm64, reading the prod.tail may get > > reordered after reading the ring slots, which corrupts the ring and > > stale data is observed. > > > > This issue was reported by NXP on 8-A72 DPAA2 board. The problem is most > > likely caused by missing the acquire semantics when reading > > prod.tail (in SC dequeue) which makes it possible to read a > > stale value from the ring slots. > > > > For MP (and MC) case, rte_atomic32_cmpset() already provides the required > > ordering. For SP case, the control depependency between if-statement(which > > depends on the read of r->cons.tail) and the later stores to the ring slots > > make RMB unnecessary. About the control dependency, read more at: > > https://www.cl.cam.ac.uk/~pes20/ppc-supplemental/test7.pdf > > > > This patch is adding the required read barrier to prevent reading the ring > > slots get reordered before reading prod.tail for SC case. > > > > Fixes: c9fb3c62896f ("ring: move code in a new header file") > > Cc: sta...@dpdk.org > > > > Signed-off-by: gavin hu <gavin...@arm.com> > > Reviewed-by: Ola Liljedahl <ola.liljed...@arm.com> > > Tested-by: Nipun Gupta <nipun.gu...@nxp.com> > > Acked-by: Konstantin Ananyev <konstantin.anan...@intel.com>
Applied, thanks