diff options
author | Florin Coras <fcoras@cisco.com> | 2020-11-06 16:59:08 -0800 |
---|---|---|
committer | Dave Barach <openvpp@barachs.net> | 2020-11-09 16:04:47 +0000 |
commit | 8c4fa01d1360cd5315e671de96dfeff7dae246f5 (patch) | |
tree | 6a6c112be3060b938294241b22b136db847b579a /src | |
parent | 2008e314537500975acbd666e38d3fa6e7261bf5 (diff) |
session: delegate fifo ooo lookup init to transports
Fifo chunk ooo lookup data structures are private (not allocated on
segment heap) and should only be initialized by transport protocols that
require out-of-order enqueues/dequeues (like tcp).
Type: improvement
Signed-off-by: Florin Coras <fcoras@cisco.com>
Change-Id: Iaa15d6850385bf903cc501c54c2752e8e811449e
Diffstat (limited to 'src')
-rw-r--r-- | src/svm/fifo_segment.c | 6 | ||||
-rw-r--r-- | src/vnet/session/application_local.c | 4 | ||||
-rw-r--r-- | src/vnet/session/transport.c | 8 | ||||
-rw-r--r-- | src/vnet/session/transport.h | 1 | ||||
-rw-r--r-- | src/vnet/tcp/tcp_input.c | 3 |
5 files changed, 12 insertions, 10 deletions
diff --git a/src/svm/fifo_segment.c b/src/svm/fifo_segment.c index 8503819f42f..a5ffd4af2ed 100644 --- a/src/svm/fifo_segment.c +++ b/src/svm/fifo_segment.c @@ -865,12 +865,6 @@ fifo_segment_alloc_fifo_w_slice (fifo_segment_t * fs, u32 slice_index, { fss_fifo_add_active_list (fss, f); f->flags |= SVM_FIFO_F_LL_TRACKED; - - svm_fifo_init_ooo_lookup (f, 0 /* ooo enq */ ); - } - else - { - svm_fifo_init_ooo_lookup (f, 1 /* ooo deq */ ); } fsh_active_fifos_update (fsh, 1); diff --git a/src/vnet/session/application_local.c b/src/vnet/session/application_local.c index 9b0136f95dc..6e0aee2aae3 100644 --- a/src/vnet/session/application_local.c +++ b/src/vnet/session/application_local.c @@ -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))) { diff --git a/src/vnet/session/transport.c b/src/vnet/session/transport.c index 8e5df3f8418..967ff5d9cba 100644 --- a/src/vnet/session/transport.c +++ b/src/vnet/session/transport.c @@ -770,6 +770,14 @@ transport_connection_reschedule (transport_connection_t * tc) } void +transport_fifos_init_ooo (transport_connection_t * tc) +{ + session_t *s = session_get (tc->s_index, tc->thread_index); + svm_fifo_init_ooo_lookup (s->rx_fifo, 0 /* ooo enq */ ); + svm_fifo_init_ooo_lookup (s->tx_fifo, 1 /* ooo deq */ ); +} + +void transport_update_time (clib_time_type_t time_now, u8 thread_index) { transport_proto_vft_t *vft; diff --git a/src/vnet/session/transport.h b/src/vnet/session/transport.h index 9c873b12caf..c8d4e27be66 100644 --- a/src/vnet/session/transport.h +++ b/src/vnet/session/transport.h @@ -217,6 +217,7 @@ transport_connection_is_cless (transport_connection_t * tc) } void transport_connection_reschedule (transport_connection_t * tc); +void transport_fifos_init_ooo (transport_connection_t * tc); /** * Register transport virtual function table. diff --git a/src/vnet/tcp/tcp_input.c b/src/vnet/tcp/tcp_input.c index 305e2d34461..0f7006a01fa 100644 --- a/src/vnet/tcp/tcp_input.c +++ b/src/vnet/tcp/tcp_input.c @@ -1967,6 +1967,7 @@ tcp46_syn_sent_inline (vlib_main_t * vm, vlib_node_runtime_t * node, goto cleanup_ho; } + transport_fifos_init_ooo (&new_tc0->connection); new_tc0->tx_fifo_size = transport_tx_fifo_size (&new_tc0->connection); /* Update rtt with the syn-ack sample */ @@ -1990,6 +1991,7 @@ tcp46_syn_sent_inline (vlib_main_t * vm, vlib_node_runtime_t * node, goto cleanup_ho; } + transport_fifos_init_ooo (&new_tc0->connection); new_tc0->tx_fifo_size = transport_tx_fifo_size (&new_tc0->connection); new_tc0->rtt_ts = 0; @@ -2646,6 +2648,7 @@ tcp46_listen_inline (vlib_main_t * vm, vlib_node_runtime_t * node, goto done; } + transport_fifos_init_ooo (&child->connection); child->tx_fifo_size = transport_tx_fifo_size (&child->connection); tcp_send_synack (child); |