On 29-May-18 6:28 AM, Honnappa Nagarahalli wrote:
rte_ring implementation is not preemptible only under certain
circumstances. This clarification is helpful for data plane and
control plane communication using rte_ring.
Signed-off-by: Honnappa Nagarahalli <honnappa.nagaraha...@arm.com>
Reviewed-by: Gavin Hu <gavin...@arm.com>
Reviewed-by: Ola Liljedahl <ola.liljed...@arm.com>
---
v2:
* Fixed checkpatch warnings
lib/librte_ring/rte_ring.h | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
diff --git a/lib/librte_ring/rte_ring.h b/lib/librte_ring/rte_ring.h
index d3d3f7f..2f9c945 100644
--- a/lib/librte_ring/rte_ring.h
+++ b/lib/librte_ring/rte_ring.h
@@ -26,8 +26,13 @@
* - Bulk dequeue.
* - Bulk enqueue.
*
- * Note: the ring implementation is not preemptable. A lcore must not
- * be interrupted by another task that uses the same ring.
+ * Note: the ring implementation can block threads from completing their
+ * operation under the following circumstances.
+ * A preempted thread can block other threads (operating on the same ring)
+ * from completing their operations, only if those threads are performing
+ * the same ring operation (enqueue/dequeue) as the preempted thread.
+ * In other words, a preempted consumer thread will not block any producer
+ * threads and vice versa.
*
*/
Similar clarification is already present in Programmer's Guide for
rte_ring section. Perhaps it would be good to reference it here?
--
Thanks,
Anatoly