summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorFlorin Coras <fcoras@cisco.com>2020-11-06 16:59:08 -0800
committerDave Barach <openvpp@barachs.net>2020-11-09 16:04:47 +0000
commit8c4fa01d1360cd5315e671de96dfeff7dae246f5 (patch)
tree6a6c112be3060b938294241b22b136db847b579a /src
parent2008e314537500975acbd666e38d3fa6e7261bf5 (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.c6
-rw-r--r--src/vnet/session/application_local.c4
-rw-r--r--src/vnet/session/transport.c8
-rw-r--r--src/vnet/session/transport.h1
-rw-r--r--src/vnet/tcp/tcp_input.c3
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);