From: Nathan Skrzypczak Date: Thu, 20 Jun 2019 07:58:37 +0000 (+0200) Subject: session: full lock on session_send_evt_to_thread X-Git-Tag: v20.01-rc0~349 X-Git-Url: https://gerrit.fd.io/r/gitweb?a=commitdiff_plain;h=refs%2Fchanges%2F50%2F20250%2F4;p=vpp.git session: full lock on session_send_evt_to_thread Type: fix This was causing issues in QUIC when an app client & the protocol app compete for the worker msg_queue. Might not be ideal performance- wise. Change-Id: I629892253d5b5d968f31ad1d56f18463e143d6b4 Signed-off-by: Nathan Skrzypczak --- diff --git a/src/svm/svm_fifo.c b/src/svm/svm_fifo.c index 6b4ea68ca17..87e019ab1f1 100644 --- a/src/svm/svm_fifo.c +++ b/src/svm/svm_fifo.c @@ -909,11 +909,11 @@ svm_fifo_dequeue_drop (svm_fifo_t * f, u32 len) if (PREDICT_FALSE (cursize == 0)) return SVM_FIFO_EEMPTY; - svm_fifo_trace_add (f, tail, total_drop_bytes, 3); - /* number of bytes we're going to drop */ total_drop_bytes = clib_min (cursize, len); + svm_fifo_trace_add (f, tail, total_drop_bytes, 3); + /* move head */ head = (head + total_drop_bytes) % f->size; diff --git a/src/vnet/session/session.c b/src/vnet/session/session.c index 8aa4af935e9..ea52b75086d 100644 --- a/src/vnet/session/session.c +++ b/src/vnet/session/session.c @@ -32,18 +32,10 @@ session_send_evt_to_thread (void *data, void *args, u32 thread_index, session_event_t *evt; svm_msg_q_msg_t msg; svm_msg_q_t *mq; - u32 tries = 0, max_tries; mq = session_main_get_vpp_event_queue (thread_index); - while (svm_msg_q_try_lock (mq)) - { - max_tries = vlib_get_current_process (vlib_get_main ())? 1e6 : 3; - if (tries++ == max_tries) - { - SESSION_DBG ("failed to enqueue evt"); - return -1; - } - } + if (PREDICT_FALSE (svm_msg_q_lock (mq))) + return -1; if (PREDICT_FALSE (svm_msg_q_ring_is_full (mq, SESSION_MQ_IO_EVT_RING))) { svm_msg_q_unlock (mq);