From 34ccf72c4adabfb06081917b702b017b85f8e21b Mon Sep 17 00:00:00 2001 From: Florin Coras Date: Fri, 27 Dec 2019 10:26:56 -0800 Subject: svm: broadcast on raw dequeues and full rings Type: fix Change-Id: I0cac9001290e7ed4e2e318ae62c56e97ec75a3db Signed-off-by: Florin Coras (cherry picked from commit fea813ae3de5343a2bc91306fddf6dbd1832f93d) --- src/svm/message_queue.c | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'src/svm/message_queue.c') diff --git a/src/svm/message_queue.c b/src/svm/message_queue.c index 6113450e7cb..c8c54184dbe 100644 --- a/src/svm/message_queue.c +++ b/src/svm/message_queue.c @@ -169,6 +169,7 @@ void svm_msg_q_free_msg (svm_msg_q_t * mq, svm_msg_q_msg_t * msg) { svm_msg_q_ring_t *ring; + int need_signal; ASSERT (vec_len (mq->rings) > msg->ring_index); ring = &mq->rings[msg->ring_index]; @@ -182,7 +183,12 @@ svm_msg_q_free_msg (svm_msg_q_t * mq, svm_msg_q_msg_t * msg) /* for now, expect messages to be processed in order */ ASSERT (0); } + + need_signal = ring->cursize == ring->nitems; clib_atomic_fetch_sub (&ring->cursize, 1); + + if (PREDICT_FALSE (need_signal)) + svm_queue_send_signal (mq->q, 0); } static int -- cgit 1.2.3-korg