From 46b8b1a4c0743ef91d41db6dea582eb590f5f31b Mon Sep 17 00:00:00 2001 From: Florin Coras Date: Mon, 17 May 2021 19:09:33 -0700 Subject: [PATCH] session: cleanup event llist usage Type: refactor Signed-off-by: Florin Coras Change-Id: I750c856ac81d951e8c0e62c710e0f35a0c80d6f9 --- src/vnet/session/session.h | 30 ++++++++---------------------- src/vnet/session/session_cli.c | 4 ++-- src/vnet/session/session_node.c | 34 +++++++++++++++++----------------- 3 files changed, 27 insertions(+), 41 deletions(-) diff --git a/src/vnet/session/session.h b/src/vnet/session/session.h index b583c3ef0dd..db9220d8c3b 100644 --- a/src/vnet/session/session.h +++ b/src/vnet/session/session.h @@ -257,32 +257,18 @@ typedef enum session_q_process_evt_ #define TRANSPORT_PROTO_INVALID (session_main.last_transport_proto_type + 1) #define TRANSPORT_N_PROTOS (session_main.last_transport_proto_type + 1) -static inline session_evt_elt_t * -session_evt_elt_alloc (session_worker_t * wrk) -{ - session_evt_elt_t *elt; - pool_get (wrk->event_elts, elt); - return elt; -} - -static inline void -session_evt_elt_free (session_worker_t * wrk, session_evt_elt_t * elt) -{ - pool_put (wrk->event_elts, elt); -} - static inline void session_evt_add_old (session_worker_t * wrk, session_evt_elt_t * elt) { clib_llist_add_tail (wrk->event_elts, evt_list, elt, - pool_elt_at_index (wrk->event_elts, wrk->old_head)); + clib_llist_elt (wrk->event_elts, wrk->old_head)); } static inline void session_evt_add_head_old (session_worker_t * wrk, session_evt_elt_t * elt) { clib_llist_add (wrk->event_elts, evt_list, elt, - pool_elt_at_index (wrk->event_elts, wrk->old_head)); + clib_llist_elt (wrk->event_elts, wrk->old_head)); } @@ -298,9 +284,9 @@ static inline session_evt_elt_t * session_evt_alloc_ctrl (session_worker_t * wrk) { session_evt_elt_t *elt; - elt = session_evt_elt_alloc (wrk); + clib_llist_get (wrk->event_elts, elt); clib_llist_add_tail (wrk->event_elts, evt_list, elt, - pool_elt_at_index (wrk->event_elts, wrk->ctrl_head)); + clib_llist_elt (wrk->event_elts, wrk->ctrl_head)); return elt; } @@ -322,9 +308,9 @@ static inline session_evt_elt_t * session_evt_alloc_new (session_worker_t * wrk) { session_evt_elt_t *elt; - elt = session_evt_elt_alloc (wrk); + clib_llist_get (wrk->event_elts, elt); clib_llist_add_tail (wrk->event_elts, evt_list, elt, - pool_elt_at_index (wrk->event_elts, wrk->new_head)); + clib_llist_elt (wrk->event_elts, wrk->new_head)); return elt; } @@ -332,9 +318,9 @@ static inline session_evt_elt_t * session_evt_alloc_old (session_worker_t * wrk) { session_evt_elt_t *elt; - elt = session_evt_elt_alloc (wrk); + clib_llist_get (wrk->event_elts, elt); clib_llist_add_tail (wrk->event_elts, evt_list, elt, - pool_elt_at_index (wrk->event_elts, wrk->old_head)); + clib_llist_elt (wrk->event_elts, wrk->old_head)); return elt; } diff --git a/src/vnet/session/session_cli.c b/src/vnet/session/session_cli.c index 1505a95f41a..24d8cfb1e24 100644 --- a/src/vnet/session/session_cli.c +++ b/src/vnet/session/session_cli.c @@ -455,9 +455,9 @@ session_cli_show_events_thread (vlib_main_t * vm, u32 thread_index) vlib_cli_output (vm, "Thread %d:\n", thread_index); vlib_cli_output (vm, " evt elements alloc: %u", - pool_elts (wrk->event_elts)); + clib_llist_elts (wrk->event_elts)); vlib_cli_output (vm, " ctrl evt elt data alloc: %d", - pool_elts (wrk->ctrl_evts_data)); + clib_llist_elts (wrk->ctrl_evts_data)); } static void diff --git a/src/vnet/session/session_node.c b/src/vnet/session/session_node.c index 6e3afa57664..af7a6ed50fe 100644 --- a/src/vnet/session/session_node.c +++ b/src/vnet/session/session_node.c @@ -216,7 +216,7 @@ session_mq_handle_connects_rpc (void *arg) vlib_worker_thread_barrier_sync (vm); - he = pool_elt_at_index (fwrk->event_elts, fwrk->pending_connects); + he = clib_llist_elt (fwrk->event_elts, fwrk->pending_connects); elt = clib_llist_next (fwrk->event_elts, evt_list, he); /* Avoid holding the barrier for too long */ @@ -225,7 +225,7 @@ session_mq_handle_connects_rpc (void *arg) next = clib_llist_next (fwrk->event_elts, evt_list, elt); clib_llist_remove (fwrk->event_elts, evt_list, elt); session_mq_connect_one (session_evt_ctrl_data (fwrk, elt)); - session_evt_elt_free (fwrk, elt); + clib_llist_put (fwrk->event_elts, elt); elt = next; n_connects += 1; } @@ -289,7 +289,7 @@ session_mq_connect_handler (session_worker_t *wrk, session_evt_elt_t *elt) } /* Add to pending list to be handled by main thread */ - he = pool_elt_at_index (wrk->event_elts, wrk->pending_connects); + he = clib_llist_elt (wrk->event_elts, wrk->pending_connects); clib_llist_add_tail (wrk->event_elts, evt_list, elt, he); if (!wrk->pending_connects_ntf) @@ -1504,13 +1504,13 @@ session_event_dispatch_ctrl (session_worker_t * wrk, session_evt_elt_t * elt) } /* Regrab elements in case pool moved */ - elt = pool_elt_at_index (wrk->event_elts, ei); + elt = clib_llist_elt (wrk->event_elts, ei); if (!clib_llist_elt_is_linked (elt, evt_list)) { e = &elt->evt; if (e->event_type >= SESSION_CTRL_EVT_BOUND) session_evt_ctrl_data_free (wrk, elt); - session_evt_elt_free (wrk, elt); + clib_llist_put (wrk->event_elts, elt); } SESSION_EVT (SESSION_EVT_COUNTS, CNT_CTRL_EVTS, 1, wrk); } @@ -1569,9 +1569,9 @@ session_event_dispatch_io (session_worker_t * wrk, vlib_node_runtime_t * node, SESSION_EVT (SESSION_IO_EVT_COUNTS, e->event_type, 1, wrk); /* Regrab elements in case pool moved */ - elt = pool_elt_at_index (wrk->event_elts, ei); + elt = clib_llist_elt (wrk->event_elts, ei); if (!clib_llist_elt_is_linked (elt, evt_list)) - session_evt_elt_free (wrk, elt); + clib_llist_put (wrk->event_elts, elt); } /* *INDENT-OFF* */ @@ -1648,7 +1648,7 @@ session_wrk_update_state (session_worker_t *wrk) if (wrk->state == SESSION_WRK_POLLING) { - if (pool_elts (wrk->event_elts) == 3 && + if (clib_llist_elts (wrk->event_elts) == 4 && vlib_last_vectors_per_main_loop (vm) < 1) { session_wrk_set_state (wrk, SESSION_WRK_INTERRUPT); @@ -1658,7 +1658,7 @@ session_wrk_update_state (session_worker_t *wrk) } else if (wrk->state == SESSION_WRK_INTERRUPT) { - if (pool_elts (wrk->event_elts) > 3 || + if (clib_llist_elts (wrk->event_elts) > 4 || vlib_last_vectors_per_main_loop (vm) > 1) { session_wrk_set_state (wrk, SESSION_WRK_POLLING); @@ -1672,7 +1672,7 @@ session_wrk_update_state (session_worker_t *wrk) } else { - if (pool_elts (wrk->event_elts)) + if (clib_llist_elts (wrk->event_elts)) { session_wrk_set_state (wrk, SESSION_WRK_INTERRUPT); } @@ -1713,13 +1713,13 @@ session_queue_node_fn (vlib_main_t * vm, vlib_node_runtime_t * node, */ ei = wrk->ctrl_head; - ctrl_he = pool_elt_at_index (wrk->event_elts, ei); + ctrl_he = clib_llist_elt (wrk->event_elts, ei); next_ei = clib_llist_next_index (ctrl_he, evt_list); old_ti = clib_llist_prev_index (ctrl_he, evt_list); while (ei != old_ti) { ei = next_ei; - elt = pool_elt_at_index (wrk->event_elts, next_ei); + elt = clib_llist_elt (wrk->event_elts, next_ei); next_ei = clib_llist_next_index (elt, evt_list); clib_llist_remove (wrk->event_elts, evt_list, elt); session_event_dispatch_ctrl (wrk, elt); @@ -1731,14 +1731,14 @@ session_queue_node_fn (vlib_main_t * vm, vlib_node_runtime_t * node, * Handle the new io events. */ - new_he = pool_elt_at_index (wrk->event_elts, wrk->new_head); - old_he = pool_elt_at_index (wrk->event_elts, wrk->old_head); + new_he = clib_llist_elt (wrk->event_elts, wrk->new_head); + old_he = clib_llist_elt (wrk->event_elts, wrk->old_head); old_ti = clib_llist_prev_index (old_he, evt_list); ei = clib_llist_next_index (new_he, evt_list); while (ei != wrk->new_head && n_tx_packets < SESSION_NODE_FRAME_SIZE) { - elt = pool_elt_at_index (wrk->event_elts, ei); + elt = clib_llist_elt (wrk->event_elts, ei); ei = clib_llist_next_index (elt, evt_list); clib_llist_remove (wrk->event_elts, evt_list, elt); session_event_dispatch_io (wrk, node, elt, &n_tx_packets); @@ -1752,12 +1752,12 @@ session_queue_node_fn (vlib_main_t * vm, vlib_node_runtime_t * node, if (old_ti != wrk->old_head) { - old_he = pool_elt_at_index (wrk->event_elts, wrk->old_head); + old_he = clib_llist_elt (wrk->event_elts, wrk->old_head); ei = clib_llist_next_index (old_he, evt_list); while (n_tx_packets < SESSION_NODE_FRAME_SIZE) { - elt = pool_elt_at_index (wrk->event_elts, ei); + elt = clib_llist_elt (wrk->event_elts, ei); next_ei = clib_llist_next_index (elt, evt_list); clib_llist_remove (wrk->event_elts, evt_list, elt); -- 2.16.6