if (svm_fifo_is_empty (rx_fifo))
svm_fifo_unset_event (rx_fifo);
- if (is_ct && svm_fifo_want_tx_evt (rx_fifo))
+ if (is_ct && svm_fifo_needs_tx_ntf (rx_fifo, n_read))
{
- svm_fifo_set_want_tx_evt (s->rx_fifo, 0);
+ svm_fifo_clear_tx_ntf (s->rx_fifo);
app_send_io_evt_to_vpp (s->vpp_evt_q, s->rx_fifo, SESSION_IO_EVT_CT_RX,
SVM_Q_WAIT);
}
}
while (svm_fifo_is_full (tx_fifo))
{
- svm_fifo_set_want_tx_evt (tx_fifo, 1);
+ svm_fifo_add_want_tx_ntf (tx_fifo, SVM_FIFO_WANT_TX_NOTIF);
svm_msg_q_lock (mq);
if (svm_msg_q_is_empty (mq))
svm_msg_q_wait (mq);
bits_set++;
}
else
- svm_fifo_set_want_tx_evt (session->tx_fifo, 1);
+ svm_fifo_add_want_tx_ntf (session->tx_fifo, SVM_FIFO_WANT_TX_NOTIF);
}));
check_rd:
session->is_vep_session = 1;
vep_session->vep.next_sh = session_handle;
+ if (session->tx_fifo)
+ svm_fifo_add_want_tx_ntf (session->tx_fifo,
+ SVM_FIFO_WANT_TX_NOTIF_IF_FULL);
+
VDBG (1, "EPOLL_CTL_ADD: vep_sh %u, sh %u, events 0x%x, data 0x%llx!",
vep_handle, session_handle, event->events, event->data.u64);
vcl_evt (VCL_EVT_EPOLL_CTLADD, session, event->events, event->data.u64);
session->vep.prev_sh = ~0;
session->vep.vep_sh = ~0;
session->is_vep_session = 0;
+
+ if (session->tx_fifo)
+ svm_fifo_del_want_tx_ntf (session->tx_fifo, SVM_FIFO_NO_TX_NOTIF);
+
VDBG (1, "EPOLL_CTL_DEL: vep_idx %u, sid %u!", vep_handle,
session_handle);
vcl_evt (VCL_EVT_EPOLL_CTLDEL, session, vep_sh);
add_event = 1;
events[*num_ev].events |= EPOLLOUT;
session_evt_data = session->vep.ev.data.u64;
+ svm_fifo_reset_tx_ntf (session->tx_fifo);
break;
case SESSION_IO_EVT_CT_TX:
vcl_fifo_rx_evt_valid_or_break (e->fifo);
add_event = 1;
events[*num_ev].events |= EPOLLOUT;
session_evt_data = session->vep.ev.data.u64;
+ svm_fifo_reset_tx_ntf (session->tx_fifo);
break;
case SESSION_CTRL_EVT_ACCEPTED:
session = vcl_session_accepted (wrk,