From 344ce4277885e448912fdfc35bcfaf130c74d086 Mon Sep 17 00:00:00 2001 From: Florin Coras Date: Fri, 3 May 2019 11:46:55 -0700 Subject: session/svm: apis for fifo shrinking Change-Id: Ie519683bb90aae6fb95f2a09e251cded1890ed41 Signed-off-by: Florin Coras --- src/vnet/session/segment_manager.c | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) (limited to 'src/vnet/session/segment_manager.c') diff --git a/src/vnet/session/segment_manager.c b/src/vnet/session/segment_manager.c index 9a8af3b42fc..6213cd517f6 100644 --- a/src/vnet/session/segment_manager.c +++ b/src/vnet/session/segment_manager.c @@ -682,6 +682,37 @@ segment_manager_grow_fifo (segment_manager_t * sm, svm_fifo_t * f, u32 size) return rv; } +int +segment_manager_collect_fifo_chunks (segment_manager_t * sm, svm_fifo_t * f) +{ + fifo_segment_t *fs; + int rv; + + fs = segment_manager_get_segment_w_lock (sm, f->segment_index); + rv = fifo_segment_collect_fifo_chunks (fs, f); + segment_manager_segment_reader_unlock (sm); + + return rv; +} + +int +segment_manager_shrink_fifo (segment_manager_t * sm, svm_fifo_t * f, u32 size, + u8 is_producer) +{ + int rv; + + rv = svm_fifo_reduce_size (f, size, is_producer); + + /* Nothing to collect at this point */ + if (!is_producer) + return rv; + + if (f->flags & SVM_FIFO_F_COLLECT_CHUNKS) + segment_manager_collect_fifo_chunks (sm, f); + + return rv; +} + u32 segment_manager_evt_q_expected_size (u32 q_len) { -- cgit 1.2.3-korg