From: Nobuhiro Miki Date: Wed, 19 Jan 2022 07:43:16 +0000 (+0900) Subject: net/tap: forbid different Rx/Tx queue number X-Git-Url: http://git.droids-corp.org/?a=commitdiff_plain;h=adcf2717cb158f95c83c69c13b47578b15111b50;p=dpdk.git net/tap: forbid different Rx/Tx queue number Users can create the desired number of RxQ and TxQ in DPDK. For example, if the number of RxQ = 2 and the number of TxQ = 5, a total of 8 file descriptors will be created for a tap device, including RxQ, TxQ, and one for keepalive. The RxQ and TxQ with the same ID are paired by dup(2). In this scenario, Kernel will have 3 RxQ where packets are incoming but not read. The reason for this is that there are only 2 RxQ that are polled by DPDK, while there are 5 queues in Kernel. This patch add a checking if DPDK has appropriate numbers of queues to avoid unexpected packet drop. Signed-off-by: Nobuhiro Miki Reviewed-by: Ferruh Yigit --- diff --git a/doc/guides/nics/tap.rst b/doc/guides/nics/tap.rst index 681010d9ed..3d4564b046 100644 --- a/doc/guides/nics/tap.rst +++ b/doc/guides/nics/tap.rst @@ -298,3 +298,8 @@ Systems supporting flow API | Azure Ubuntu 16.04,| No limitation | | kernel 4.13 | | +--------------------+-----------------------+ + +Limitations +----------- + +* Rx/Tx must have the same number of queues. diff --git a/drivers/net/tap/rte_eth_tap.c b/drivers/net/tap/rte_eth_tap.c index 5bb472f1a6..02eb311e09 100644 --- a/drivers/net/tap/rte_eth_tap.c +++ b/drivers/net/tap/rte_eth_tap.c @@ -940,6 +940,14 @@ tap_dev_configure(struct rte_eth_dev *dev) RTE_PMD_TAP_MAX_QUEUES); return -1; } + if (dev->data->nb_rx_queues != dev->data->nb_tx_queues) { + TAP_LOG(ERR, + "%s: number of rx queues %d must be equal to number of tx queues %d", + dev->device->name, + dev->data->nb_rx_queues, + dev->data->nb_tx_queues); + return -1; + } TAP_LOG(INFO, "%s: %s: TX configured queues number: %u", dev->device->name, pmd->name, dev->data->nb_tx_queues);