summaryrefslogtreecommitdiffstats
path: root/src/svm/message_queue.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/svm/message_queue.c')
-rw-r--r--src/svm/message_queue.c33
1 files changed, 33 insertions, 0 deletions
diff --git a/src/svm/message_queue.c b/src/svm/message_queue.c
index e97cab898e8..d6a77e783e3 100644
--- a/src/svm/message_queue.c
+++ b/src/svm/message_queue.c
@@ -15,6 +15,7 @@
#include <svm/message_queue.h>
#include <vppinfra/mem.h>
+#include <sys/eventfd.h>
static inline svm_msg_q_ring_t *
svm_msg_q_ring_inline (svm_msg_q_t * mq, u32 ring_index)
@@ -235,6 +236,38 @@ svm_msg_q_sub_w_lock (svm_msg_q_t * mq, svm_msg_q_msg_t * msg)
svm_queue_sub_raw (mq->q, (u8 *) msg);
}
+void
+svm_msg_q_set_consumer_eventfd (svm_msg_q_t * mq, int fd)
+{
+ mq->q->consumer_evtfd = fd;
+}
+
+void
+svm_msg_q_set_producer_eventfd (svm_msg_q_t * mq, int fd)
+{
+ mq->q->producer_evtfd = fd;
+}
+
+int
+svm_msg_q_alloc_consumer_eventfd (svm_msg_q_t * mq)
+{
+ int fd;
+ if ((fd = eventfd (0, EFD_NONBLOCK)) < 0)
+ return -1;
+ svm_msg_q_set_consumer_eventfd (mq, fd);
+ return 0;
+}
+
+int
+svm_msg_q_alloc_producer_eventfd (svm_msg_q_t * mq)
+{
+ int fd;
+ if ((fd = eventfd (0, EFD_NONBLOCK)) < 0)
+ return -1;
+ svm_msg_q_set_producer_eventfd (mq, fd);
+ return 0;
+}
+
/*
* fd.io coding-style-patch-verification: ON
*