memif: fix the spinlock and unlock issue. 08/32608/4
authorfangtong <fangtong2007@163.com>
Sat, 5 Jun 2021 13:45:36 +0000 (21:45 +0800)
committerDamjan Marion <dmarion@me.com>
Thu, 10 Jun 2021 15:13:39 +0000 (15:13 +0000)
when the configuration of tx queues is larger than the worker-threads,
the clib_spinlock_lock_if_init will not be executed, and then this function
will executed the clib_spinlock_unlock_if_init, so this may caused the issue.

Type: fix

Signed-off-by: fangtong <fangtong2007@163.com>
Change-Id: I3ce244cd5e1f410e9f14bd060b929238f069b9fa

src/plugins/memif/device.c

index fcbdc0d..8e902fe 100644 (file)
@@ -388,11 +388,12 @@ VNET_DEVICE_CLASS_TX_FN (memif_device_class) (vlib_main_t * vm,
     {
       ASSERT (tx_queues > 0);
       mq = vec_elt_at_index (mif->tx_queues, thread_index % tx_queues);
-      clib_spinlock_lock_if_init (&mif->lockp);
     }
   else
     mq = vec_elt_at_index (mif->tx_queues, thread_index);
 
+  clib_spinlock_lock_if_init (&mif->lockp);
+
   from = vlib_frame_vector_args (frame);
   n_left = frame->n_vectors;
   if (mif->flags & MEMIF_IF_FLAG_ZERO_COPY)