aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins
diff options
context:
space:
mode:
authorFlorin Coras <fcoras@cisco.com>2020-09-04 08:57:27 -0700
committerDave Barach <openvpp@barachs.net>2020-09-08 16:14:08 +0000
commit97d39e3e054ee681335197205e94fbf9a97a40e4 (patch)
tree4a57ae25cf64289f0cb555f9d415f10ca5b12318 /src/plugins
parentfb7e7ed2cd10446d5ecd1b1e8df470e706c448ed (diff)
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 <fcoras@cisco.com> Change-Id: Ic40d020b3f0391fcf022ea3c906b86121744144f
Diffstat (limited to 'src/plugins')
-rw-r--r--src/plugins/unittest/svm_fifo_test.c26
1 files changed, 21 insertions, 5 deletions
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);