vppinfra: add spinlock inline functions
[vpp.git] / src / vnet / devices / af_packet / device.c
index e3bf9bb..2ba3f57 100644 (file)
@@ -92,11 +92,7 @@ af_packet_interface_tx (vlib_main_t * vm,
   struct tpacket2_hdr *tph;
   u32 frame_not_ready = 0;
 
-  if (PREDICT_FALSE (apif->lockp != 0))
-    {
-      while (__sync_lock_test_and_set (apif->lockp, 1))
-       ;
-    }
+  clib_spinlock_lock_if_init (&apif->lockp);
 
   while (n_left > 0)
     {
@@ -125,7 +121,8 @@ af_packet_interface_tx (vlib_main_t * vm,
                       vlib_buffer_get_current (b0), len);
          offset += len;
        }
-      while ((bi = b0->next_buffer));
+      while ((bi =
+             (b0->flags & VLIB_BUFFER_NEXT_PRESENT) ? b0->next_buffer : 0));
 
       tph->tp_len = tph->tp_snaplen = offset;
       tph->tp_status = TP_STATUS_SEND_REQUEST;
@@ -158,8 +155,7 @@ af_packet_interface_tx (vlib_main_t * vm,
        }
     }
 
-  if (PREDICT_FALSE (apif->lockp != 0))
-    *apif->lockp = 0;
+  clib_spinlock_unlock_if_init (&apif->lockp);
 
   if (PREDICT_FALSE (frame_not_ready))
     vlib_error_count (vm, node->node_index,