aboutsummaryrefslogtreecommitdiffstats
path: root/src/svm/message_queue.c
diff options
context:
space:
mode:
authorFlorin Coras <fcoras@cisco.com>2019-12-27 10:26:56 -0800
committerDave Wallace <dwallacelf@gmail.com>2020-08-12 14:37:52 +0000
commit34ccf72c4adabfb06081917b702b017b85f8e21b (patch)
treee8e6215316064ca8058d2af0c8ce9d884f18809c /src/svm/message_queue.c
parent1144fb0f98ad4c7b84aad6b480933fa409c6f4c7 (diff)
svm: broadcast on raw dequeues and full rings
Type: fix Change-Id: I0cac9001290e7ed4e2e318ae62c56e97ec75a3db Signed-off-by: Florin Coras <fcoras@cisco.com> (cherry picked from commit fea813ae3de5343a2bc91306fddf6dbd1832f93d)
Diffstat (limited to 'src/svm/message_queue.c')
-rw-r--r--src/svm/message_queue.c6
1 files changed, 6 insertions, 0 deletions
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