[dpdk-dev] rte_port_ring and SP/MP, SC/MC flags

Yerden Zhumabekov e_zhumabekov at sts.kz
Mon Jan 30 06:42:56 CET 2017


I'd like to use rte_port_ring abstract in my application and I'm a 
little confused about how it treats underlying ring flags.

According to DPDK API reference, when creating a ring (via 
rte_ring_create()/rte_ring_init()), RING_F_SP_ENQ/RING_F_SC_DEQ may be 
specified. These flags affect the choice of MP/SP, MC/SC operation when 
using 'default' ring enq/deq API, i.e. 

These API then choose which version of enq/deq to use considering the 
flags. If you use designated API straightforward, those API (*_mp_*, 
*_sc_* etc.) don't care about these flags and perform required 
operations right away.

When I use rte_port_ring abstraction, '.f_create()' functions check for 
flags which were used when creating an underlying ring (see 
lib/librte_port/rte_port_ring.c:75). But then different call tables use 
designated ring API which makes checking flags pointless.

I find it confusing to be forced to choose between SP/MP, SC/MC twice, 
when creating ring at first and creating abstraction afterwards. And I 
see no point in checking for ring flags when creating abstraction 
because it really does not affect the operation of this abstraction 
anyway. Is this behaviour anyhow justified?


Yerden Zhumabekov

More information about the dev mailing list