From: Mohsin Kazmi Date: Thu, 11 Nov 2021 15:40:10 +0000 (+0000) Subject: memif: fix the default txq placement X-Git-Tag: v22.06-rc0~262 X-Git-Url: https://gerrit.fd.io/r/gitweb?a=commitdiff_plain;h=2bae16b238bdc446c865ce79508c0d2e2c710f16;p=vpp.git memif: fix the default txq placement Type: fix Fixes: 3effb4e63068 ("memif: integrate with new tx infra") "memif: integrate with new tx infra" patch integrated memif with new tx infra. There might be scenarios when txqs were less than vpp threads, in which case, txqs should be shared among threads. This patch fixes it. Signed-off-by: Mohsin Kazmi Change-Id: I1c64a1370f5024240ab56311f75665db31714b60 --- diff --git a/src/plugins/memif/memif.c b/src/plugins/memif/memif.c index 4d662faae9e..31dd4a539da 100644 --- a/src/plugins/memif/memif.c +++ b/src/plugins/memif/memif.c @@ -235,7 +235,8 @@ memif_connect (memif_if_t * mif) vnet_main_t *vnm = vnet_get_main (); clib_file_t template = { 0 }; memif_region_t *mr; - int i; + int i, j; + u32 n_txqs, n_threads = vlib_get_n_threads (); clib_error_t *err = NULL; memif_log_debug (mif, "connect %u", mif->dev_instance); @@ -268,7 +269,6 @@ memif_connect (memif_if_t * mif) template.write_function = memif_int_fd_write_ready; /* *INDENT-OFF* */ - u32 n_threads = vlib_get_n_threads (); vec_foreach_index (i, mif->tx_queues) { memif_queue_t *mq = vec_elt_at_index (mif->tx_queues, i); @@ -281,10 +281,16 @@ memif_connect (memif_if_t * mif) } mq->queue_index = vnet_hw_if_register_tx_queue (vnm, mif->hw_if_index, i); - vnet_hw_if_tx_queue_assign_thread (vnm, mq->queue_index, i % n_threads); clib_spinlock_init (&mq->lockp); } + n_txqs = vec_len (mif->tx_queues); + for (j = 0; j < n_threads; j++) + { + u32 qi = mif->tx_queues[j % n_txqs].queue_index; + vnet_hw_if_tx_queue_assign_thread (vnm, qi, j); + } + vec_foreach_index (i, mif->rx_queues) { memif_queue_t *mq = vec_elt_at_index (mif->rx_queues, i);