vppinfra: AVX512 mask load/stores and compress store
[vpp.git] / src / vnet / session / application_local.c
index 9b0136f..478fc7a 100644 (file)
@@ -208,8 +208,8 @@ ct_init_accepted_session (app_worker_t * server_wrk,
     }
 
   sm_index = segment_manager_index (sm);
-  ls->rx_fifo->master_session_index = ls->session_index;
-  ls->tx_fifo->master_session_index = ls->session_index;
+  ls->rx_fifo->shr->master_session_index = ls->session_index;
+  ls->tx_fifo->shr->master_session_index = ls->session_index;
   ls->rx_fifo->master_thread_index = ls->thread_index;
   ls->tx_fifo->master_thread_index = ls->thread_index;
   ls->rx_fifo->segment_manager = sm_index;
@@ -217,10 +217,6 @@ ct_init_accepted_session (app_worker_t * server_wrk,
   ls->rx_fifo->segment_index = seg_index;
   ls->tx_fifo->segment_index = seg_index;
 
-  /* Disable ooo lookups on the cut-through fifos. TODO remove once init of
-   * chunk lookup rbtrees is delegated to transports */
-  svm_fifo_free_chunk_lookup (ls->tx_fifo);
-
   segment_handle = segment_manager_segment_handle (sm, seg);
   if ((rv = app_worker_add_segment_notify (server_wrk, segment_handle)))
     {
@@ -524,13 +520,14 @@ ct_custom_tx (void *session, transport_send_params_t * sp)
   session_t *s = (session_t *) session;
   if (session_has_transport (s))
     return 0;
-  /* If event enqueued towards peer, remove from scheduler and
-   * remove session tx flag, i.e., accept new tx events */
+  /* If event enqueued towards peer, remove from scheduler and remove
+   * session tx flag, i.e., accept new tx events. Unset fifo flag now to
+   * avoid missing events if peer did not clear fifo flag yet, which is
+   * interpreted as successful notification and session is descheduled. */
+  svm_fifo_unset_event (s->tx_fifo);
   if (!ct_session_tx (s))
-    {
-      sp->flags = TRANSPORT_SND_F_DESCHED;
-      svm_fifo_unset_event (s->tx_fifo);
-    }
+    sp->flags = TRANSPORT_SND_F_DESCHED;
+
   /* The scheduler uses packet count as a means of upper bounding the amount
    * of work done per dispatch. So make it look like we have sent something */
   return 1;