geneve: API cleanup
[vpp.git] / src / svm / svm_fifo.c
index 56f53a3..6bd6f91 100644 (file)
@@ -400,7 +400,7 @@ svm_fifo_init (svm_fifo_t * f, u32 size)
   f->ooos_list_head = OOO_SEGMENT_INVALID_INDEX;
   f->segment_index = SVM_FIFO_INVALID_INDEX;
   f->refcnt = 1;
-  f->flags = 0;
+  f->head = f->tail = f->flags = 0;
   f->head_chunk = f->tail_chunk = f->ooo_enq = f->ooo_deq = f->start_chunk;
 }
 
@@ -967,6 +967,9 @@ svm_fifo_dequeue_drop (svm_fifo_t * f, u32 len)
   if (!svm_fifo_chunk_includes_pos (f->head_chunk, head))
     f->head_chunk = svm_fifo_find_chunk (f, head);
 
+  if (PREDICT_FALSE (f->flags & SVM_FIFO_F_GROW))
+    svm_fifo_try_grow (f, head);
+
   /* store-rel: consumer owned index (paired with load-acq in producer) */
   clib_atomic_store_rel_n (&f->head, head);
 
@@ -982,6 +985,9 @@ svm_fifo_dequeue_drop_all (svm_fifo_t * f)
   if (!svm_fifo_chunk_includes_pos (f->head_chunk, tail))
     f->head_chunk = svm_fifo_find_chunk (f, tail);
 
+  if (PREDICT_FALSE (f->flags & SVM_FIFO_F_GROW))
+    svm_fifo_try_grow (f, tail);
+
   /* store-rel: consumer owned index (paired with load-acq in producer) */
   clib_atomic_store_rel_n (&f->head, tail);
 }