svm: release mem order for fifo chunk list CAS 46/32546/5
authorFlorin Coras <fcoras@cisco.com>
Wed, 2 Jun 2021 18:17:29 +0000 (11:17 -0700)
committerDave Wallace <dwallacelf@gmail.com>
Thu, 3 Jun 2021 17:17:43 +0000 (17:17 +0000)
Type: fix

Signed-off-by: Florin Coras <fcoras@cisco.com>
Signed-off-by: Dave Wallace <dwallacelf@gmail.com>
Change-Id: Ifad679f46abd6e9c18a3eaf7e55800a09f3791ab

src/svm/fifo_segment.c

index cb1f08a..b680d27 100644 (file)
@@ -161,8 +161,9 @@ fss_chunk_free_list_push (fifo_segment_header_t *fsh,
       c->next = old_head & FS_CL_HEAD_MASK;
       new_head = csp + ((old_head + FS_CL_HEAD_TINC) & FS_CL_HEAD_TMASK);
     }
-  while (!clib_atomic_cmp_and_swap_acq_relax (
-    &fss->free_chunks[fl_index], &old_head, &new_head, 1 /* weak */));
+  while (!__atomic_compare_exchange (&fss->free_chunks[fl_index], &old_head,
+                                    &new_head, 0 /* weak */, __ATOMIC_RELEASE,
+                                    __ATOMIC_ACQUIRE));
 }
 
 static void
@@ -181,8 +182,9 @@ fss_chunk_free_list_push_list (fifo_segment_header_t *fsh,
       tail->next = old_head & FS_CL_HEAD_MASK;
       new_head = headsp + ((old_head + FS_CL_HEAD_TINC) & FS_CL_HEAD_TMASK);
     }
-  while (!clib_atomic_cmp_and_swap_acq_relax (
-    &fss->free_chunks[fl_index], &old_head, &new_head, 1 /* weak */));
+  while (!__atomic_compare_exchange (&fss->free_chunks[fl_index], &old_head,
+                                    &new_head, 0 /* weak */, __ATOMIC_RELEASE,
+                                    __ATOMIC_ACQUIRE));
 }
 
 static svm_fifo_chunk_t *
@@ -210,8 +212,9 @@ fss_chunk_free_list_pop (fifo_segment_header_t *fsh, fifo_segment_slice_t *fss,
       c = fs_chunk_ptr (fsh, old_head & FS_CL_HEAD_MASK);
       new_head = c->next + ((old_head + FS_CL_HEAD_TINC) & FS_CL_HEAD_TMASK);
     }
-  while (!clib_atomic_cmp_and_swap_acq_relax (
-    &fss->free_chunks[fl_index], &old_head, &new_head, 1 /* weak */));
+  while (!__atomic_compare_exchange (&fss->free_chunks[fl_index], &old_head,
+                                    &new_head, 0 /* weak */, __ATOMIC_RELEASE,
+                                    __ATOMIC_ACQUIRE));
 
   return c;
 }