From c547e91df7083007c87615ac1e37b6f223e575e9 Mon Sep 17 00:00:00 2001 From: Florin Coras Date: Tue, 8 Dec 2020 17:50:45 -0800 Subject: svm: split fifo into private and shared structs Type: improvement Signed-off-by: Florin Coras Change-Id: Id8e77e8b2623be719fd43a95e181eaa5b7df2b6e --- src/plugins/hs_apps/sapi/vpp_echo.c | 48 ++++++++++++++----------------------- 1 file changed, 18 insertions(+), 30 deletions(-) (limited to 'src/plugins/hs_apps/sapi/vpp_echo.c') diff --git a/src/plugins/hs_apps/sapi/vpp_echo.c b/src/plugins/hs_apps/sapi/vpp_echo.c index 4cce41edf95..a47a4d455d8 100644 --- a/src/plugins/hs_apps/sapi/vpp_echo.c +++ b/src/plugins/hs_apps/sapi/vpp_echo.c @@ -69,9 +69,9 @@ echo_session_dequeue_notify (echo_session_t * s) int rv; if (!svm_fifo_set_event (s->rx_fifo)) return; - if ((rv = - app_send_io_evt_to_vpp (s->vpp_evt_q, s->rx_fifo->master_session_index, - SESSION_IO_EVT_RX, SVM_Q_WAIT))) + if ((rv = app_send_io_evt_to_vpp (s->vpp_evt_q, + s->rx_fifo->shr->master_session_index, + SESSION_IO_EVT_RX, SVM_Q_WAIT))) ECHO_FAIL (ECHO_FAIL_SEND_IO_EVT, "app_send_io_evt_to_vpp errored %d", rv); svm_fifo_clear_deq_ntf (s->rx_fifo); @@ -542,7 +542,6 @@ session_accepted_handler (session_accepted_msg_t * mp) { app_session_evt_t _app_evt, *app_evt = &_app_evt; session_accepted_reply_msg_t *rmp; - svm_fifo_t *rx_fifo, *tx_fifo; echo_main_t *em = &echo_main; echo_session_t *session, *ls; @@ -552,24 +551,22 @@ session_accepted_handler (session_accepted_msg_t * mp) "Unknown listener handle 0x%lx", mp->listener_handle); return; } - if (echo_segment_lookup (mp->segment_handle) == ~0) + + /* Allocate local session and set it up */ + session = echo_session_new (em); + + if (echo_attach_session (mp->segment_handle, mp->server_rx_fifo, + mp->server_tx_fifo, session)) { ECHO_FAIL (ECHO_FAIL_ACCEPTED_WAIT_FOR_SEG_ALLOC, "accepted wait_for_segment_allocation errored"); return; } - /* Allocate local session and set it up */ - session = echo_session_new (em); - session->vpp_session_handle = mp->handle; - - rx_fifo = uword_to_pointer (mp->server_rx_fifo, svm_fifo_t *); - rx_fifo->client_session_index = session->session_index; - tx_fifo = uword_to_pointer (mp->server_tx_fifo, svm_fifo_t *); - tx_fifo->client_session_index = session->session_index; + session->vpp_evt_q = + uword_to_pointer (mp->vpp_event_queue_address, svm_msg_q_t *); - session->rx_fifo = rx_fifo; - session->tx_fifo = tx_fifo; + session->vpp_session_handle = mp->handle; /* session->transport needed by app_send_dgram */ clib_memcpy_fast (&session->transport.rmt_ip, &mp->rmt.ip, @@ -581,10 +578,8 @@ session_accepted_handler (session_accepted_msg_t * mp) session->transport.lcl_port = em->uri_elts.port; session->vpp_session_handle = mp->handle; - session->start = clib_time_now (&em->clib_time); - session->vpp_evt_q = uword_to_pointer (mp->vpp_event_queue_address, - svm_msg_q_t *); session->listener_index = ls->session_index; + session->start = clib_time_now (&em->clib_time); /* Add it to lookup table */ ECHO_LOG (2, "Accepted session 0x%lx S[%u] -> 0x%lx S[%u]", @@ -607,7 +602,6 @@ session_connected_handler (session_connected_msg_t * mp) echo_main_t *em = &echo_main; echo_session_t *session; u32 listener_index = htonl (mp->context); - svm_fifo_t *rx_fifo, *tx_fifo; clib_atomic_add_fetch (&em->max_sim_connects, 1); @@ -621,24 +615,18 @@ session_connected_handler (session_connected_msg_t * mp) } session = echo_session_new (em); - if (echo_segment_lookup (mp->segment_handle) == ~0) + + if (echo_attach_session (mp->segment_handle, mp->server_rx_fifo, + mp->server_tx_fifo, session)) { ECHO_FAIL (ECHO_FAIL_CONNECTED_WAIT_FOR_SEG_ALLOC, "connected wait_for_segment_allocation errored"); return; } - - rx_fifo = uword_to_pointer (mp->server_rx_fifo, svm_fifo_t *); - rx_fifo->client_session_index = session->session_index; - tx_fifo = uword_to_pointer (mp->server_tx_fifo, svm_fifo_t *); - tx_fifo->client_session_index = session->session_index; - - session->rx_fifo = rx_fifo; - session->tx_fifo = tx_fifo; - session->vpp_session_handle = mp->handle; - session->start = clib_time_now (&em->clib_time); session->vpp_evt_q = uword_to_pointer (mp->vpp_event_queue_address, svm_msg_q_t *); + session->vpp_session_handle = mp->handle; + session->start = clib_time_now (&em->clib_time); session->listener_index = listener_index; /* session->transport needed by app_send_dgram */ clib_memcpy_fast (&session->transport.lcl_ip, &mp->lcl.ip, -- cgit 1.2.3-korg