Hi Lazaros, On 03/17/2016 04:49 PM, Lazaros Koromilas wrote: > Issuing a zero objects dequeue with a single consumer has no effect. > Doing so with multiple consumers, can get more than one thread to succeed > the compare-and-set operation and observe starvation or even deadlock in > the while loop that checks for preceding dequeues. The problematic piece > of code when n = 0: > > cons_next = cons_head + n; > success = rte_atomic32_cmpset(&r->cons.head, cons_head, cons_next); > > The same is possible on the enqueue path.
Just a question about this patch (that has been applied). Thomas retitled the commit from your log message: ring: fix deadlock in zero object multi enqueue or dequeue http://dpdk.org/browse/dpdk/commit/?id=d0979646166e I think this patch does not fix a deadlock, or did I miss something? As explained in the following links, the ring may not perform well if several threads running on the same cpu use it: http://dpdk.org/ml/archives/dev/2013-November/000714.html http://www.dpdk.org/ml/archives/dev/2014-January/001070.html http://www.dpdk.org/ml/archives/dev/2014-January/001162.html http://dpdk.org/ml/archives/dev/2015-July/020659.html A deadlock could occur if the threads running on the same core have different priority. Regards, Olivier