diff options
Diffstat (limited to 'src/svm')
-rw-r--r-- | src/svm/svm_fifo.c | 4 | ||||
-rw-r--r-- | src/svm/svm_fifo.h | 4 |
2 files changed, 4 insertions, 4 deletions
diff --git a/src/svm/svm_fifo.c b/src/svm/svm_fifo.c index c8fd263c094..4c84fce4c01 100644 --- a/src/svm/svm_fifo.c +++ b/src/svm/svm_fifo.c @@ -819,7 +819,7 @@ svm_fifo_enqueue_with_offset (svm_fifo_t * f, u32 offset, u32 len, u8 * src) ooo_segment_add (f, offset, head, tail, len); - tail_idx = (tail + offset) % f->size; + tail_idx = (tail % f->size + offset) % f->size; if (!svm_fifo_chunk_includes_pos (f->ooo_enq, tail_idx)) f->ooo_enq = svm_fifo_find_chunk (f, tail_idx); @@ -871,7 +871,7 @@ svm_fifo_peek (svm_fifo_t * f, u32 offset, u32 len, u8 * dst) return -2; /* nothing in the fifo */ len = clib_min (cursize - offset, len); - head_idx = (head + offset) % f->size; + head_idx = (head % f->size + offset) % f->size; if (!svm_fifo_chunk_includes_pos (f->ooo_deq, head_idx)) f->ooo_deq = svm_fifo_find_chunk (f, head_idx); diff --git a/src/svm/svm_fifo.h b/src/svm/svm_fifo.h index 7c84fc82198..c9370955dfb 100644 --- a/src/svm/svm_fifo.h +++ b/src/svm/svm_fifo.h @@ -527,13 +527,13 @@ svm_fifo_newest_ooo_segment_reset (svm_fifo_t * f) always_inline u32 ooo_segment_distance_from_tail (svm_fifo_t * f, u32 pos, u32 tail) { - return ((pos - tail) % f->size); + return ((f->size + pos - tail) % f->size); } always_inline u32 ooo_segment_distance_to_tail (svm_fifo_t * f, u32 pos, u32 tail) { - return ((tail - pos) % f->size); + return ((f->size + tail - pos) % f->size); } always_inline u32 |