[dpdk-stable] [dpdk-dev] [PATCH v3 1/1] ring: enforce reading the tail before reading ring slots

Thomas Monjalon thomas at monjalon.net
Thu Mar 28 01:21:55 CET 2019


> > 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: stable at dpdk.org
> > 
> > Signed-off-by: gavin hu <gavin.hu at arm.com>
> > Reviewed-by: Ola Liljedahl <Ola.Liljedahl at arm.com>
> > Tested-by: Nipun Gupta <nipun.gupta at nxp.com>
> 
> Acked-by: Konstantin Ananyev <konstantin.ananyev at intel.com>

Applied, thanks




More information about the stable mailing list