From 97d39e3e054ee681335197205e94fbf9a97a40e4 Mon Sep 17 00:00:00 2001 From: Florin Coras Date: Fri, 4 Sep 2020 08:57:27 -0700 Subject: svm session: document unsupported fifo deq combinations Type: fix - Document that ooo dequeues with ooo lookups cannot be done in combination with in order dequeues. - Added assert to capture this scenario and de-initialized rbtrees for cut-through tx fifo Signed-off-by: Florin Coras Change-Id: Ic40d020b3f0391fcf022ea3c906b86121744144f --- src/plugins/unittest/svm_fifo_test.c | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) (limited to 'src/plugins/unittest') diff --git a/src/plugins/unittest/svm_fifo_test.c b/src/plugins/unittest/svm_fifo_test.c index ccaffa1f236..f5d4818bfe0 100644 --- a/src/plugins/unittest/svm_fifo_test.c +++ b/src/plugins/unittest/svm_fifo_test.c @@ -1596,9 +1596,12 @@ sfifo_test_fifo_grow (vlib_main_t * vm, unformat_input_t * input) SFIFO_TEST (svm_fifo_is_sane (f), "fifo should be sane"); /* - * Dequeue just a part of data + * Dequeue just a part of data. Because we're tracking ooo data, we can't + * call dequeue. Therefore, first peek and then dequeue drop */ - rv = svm_fifo_dequeue (f, fifo_inc, data_buf); + rv = svm_fifo_peek (f, 0, fifo_inc, data_buf); + SFIFO_TEST (rv == fifo_inc, "should dequeue all data"); + rv = svm_fifo_dequeue_drop (f, fifo_inc); SFIFO_TEST (rv == fifo_inc, "should dequeue all data"); rv = svm_fifo_n_chunks (f); SFIFO_TEST (rv == 1, "should have %u chunks has %u", 1, rv); @@ -1624,10 +1627,11 @@ sfifo_test_fifo_grow (vlib_main_t * vm, unformat_input_t * input) SFIFO_TEST (c->length == 4096, "end chunk length should be %u", 4096); /* - * Dequeue all + * Dequeue all. Don't call dequeue see above */ - rv = svm_fifo_dequeue (f, fifo_size, data_buf + fifo_inc); + rv = svm_fifo_peek (f, 0, fifo_size, data_buf + fifo_inc); SFIFO_TEST (rv == fifo_size, "should dequeue all data"); + SFIFO_TEST (svm_fifo_is_sane (f), "fifo should be sane"); rv = compare_data (data_buf, test_data, 0, vec_len (test_data), (u32 *) & i); @@ -1635,6 +1639,10 @@ sfifo_test_fifo_grow (vlib_main_t * vm, unformat_input_t * input) vlib_cli_output (vm, "[%d] dequeued %u expected %u", i, data_buf[i], test_data[i]); SFIFO_TEST ((rv == 0), "dequeued compared to original returned %d", rv); + + rv = svm_fifo_dequeue_drop (f, fifo_size); + SFIFO_TEST (rv == fifo_size, "should dequeue all data"); + SFIFO_TEST (svm_fifo_is_sane (f), "fifo should be sane"); /* fifo does not end on chunk boundary because of the - 100 */ SFIFO_TEST (f->head_chunk != 0, "should have head chunk"); @@ -1711,7 +1719,10 @@ sfifo_test_fifo_grow (vlib_main_t * vm, unformat_input_t * input) /* * Dequeue all */ - rv = svm_fifo_dequeue (f, fifo_size, data_buf); + + /* Because we're tracking ooo data, we can't call dequeue. Therefore, + * first peek and then dequeue drop */ + rv = svm_fifo_peek (f, 0, fifo_size, data_buf); SFIFO_TEST (rv == fifo_size, "should dequeue all data"); rv = compare_data (data_buf, test_data, 0, vec_len (test_data), @@ -1721,6 +1732,11 @@ sfifo_test_fifo_grow (vlib_main_t * vm, unformat_input_t * input) test_data[i]); SFIFO_TEST (svm_fifo_is_sane (f), "fifo should be sane"); SFIFO_TEST ((rv == 0), "dequeued compared to original returned %d", rv); + + + rv = svm_fifo_dequeue_drop (f, fifo_size); + SFIFO_TEST ((rv == fifo_size), "all bytes should be dropped %u", rv); + SFIFO_TEST (svm_fifo_is_sane (f), "fifo should be sane"); SFIFO_TEST (f->ooo_deq == 0, "should have no ooo deq chunk"); rv = svm_fifo_n_chunks (f); SFIFO_TEST (rv == 1, "should have %u chunks has %u", 1, rv); -- cgit 1.2.3-korg