#include <svm/message_queue.h>
#include <vppinfra/mem.h>
+#include <vppinfra/format.h>
#include <sys/eventfd.h>
static inline svm_msg_q_ring_t *
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];
/* 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
return 0;
}
+u8 *
+format_svm_msg_q (u8 * s, va_list * args)
+{
+ svm_msg_q_t *mq = va_arg (*args, svm_msg_q_t *);
+ s = format (s, " [Q:%d/%d]", mq->q->cursize, mq->q->maxsize);
+ for (u32 i = 0; i < vec_len (mq->rings); i++)
+ {
+ s = format (s, " [R%d:%d/%d]", i, mq->rings[i].cursize,
+ mq->rings[i].nitems);
+ }
+ return s;
+}
+
/*
* fd.io coding-style-patch-verification: ON
*