From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id EC02945450; Wed, 19 Jun 2024 00:58:28 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id D7387410D0; Wed, 19 Jun 2024 00:58:28 +0200 (CEST) Received: from mail-lj1-f182.google.com (mail-lj1-f182.google.com [209.85.208.182]) by mails.dpdk.org (Postfix) with ESMTP id E5BBA402F2 for ; Wed, 19 Jun 2024 00:58:27 +0200 (CEST) Received: by mail-lj1-f182.google.com with SMTP id 38308e7fff4ca-2e724bc46c4so66358361fa.2 for ; Tue, 18 Jun 2024 15:58:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1718751507; x=1719356307; darn=dpdk.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=YAfkaRtUzB2116zHdCBLwArifde1dpXKfJ7xC9RmMIs=; b=Tm3E0Wv/cLDbUOOX3wAsOUasamVBhWDYf5G7ZHItpa6f2dRQCAz1Ex3Fgv3r9ZvhLB eCF2ScLqUDkbANEUAoIcic24PFPPSU3Tg1RellrzM04kxrgpfgSQ/5PuigTgWZnIkIPu QTcVryFkf2nF/iLLE2TxLiQCAK9wXn9tzCfvz/+/w05Uz7ErMcrq48MjzIS/kkyTImaA I8XBd+OHttenJxpMQGqFQiqyxau0eY4q+VGalap/60M8ihc1wcHJlLhM435T3aYsiUQU l+RfI1cQ2rwvbD1pdG560kJq9jESj/us2nQz7j2v7QLot4LbvA1nKhW1pAw6mmpShXWX LNtA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718751507; x=1719356307; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=YAfkaRtUzB2116zHdCBLwArifde1dpXKfJ7xC9RmMIs=; b=Xm9e3a0UTnvJF0DmRMzvnYQMgdu/0GhaCzdAB9q415sAZwUZzMSmwlPnQRI8G7H51O v/d7NLUzwVP848ShdF5FBY9ab8cx2CsYdY6xxi8mZaEUHDY+ayambUgIdZAZ3HP/URMI 1CDTDi+y6JqFS40JkhdA4m5sI2Nf7zbqAXhT3xzsnk4qipNvdXCKZp2NNQXyaL7xG5v0 xJFILauTPowQ9qaRrhO2TbULYMUWZj6PARumSMi+iLLhvytoIVBagyYr++ueSJe+SV3j Yv3+Ey3oH81Eb/IXAlV1vf7JHDo6aRUKi6BOzA/4RNroD6S2RFGFX4iljzB6yOpnYDPD 7t/g== X-Gm-Message-State: AOJu0Yzs2upxmlrCnaCJy0oEzJv0wzdnoLyXy9YUd78nZg0UrDRlTE3B RTSJ5sYoIimuvOCNIPwJrMRX250cCXbPMYcJomTJnPkPM6nlq1um X-Google-Smtp-Source: AGHT+IGItF7vHpR5GYdIFbCHFDbHD+Xxt1sUI0y6K0vfs3pKMmOth4bfwZH6o3L7RZWAX2vMkgJhqA== X-Received: by 2002:a2e:3203:0:b0:2eb:de2b:940 with SMTP id 38308e7fff4ca-2ec3cff2e67mr5517511fa.41.1718751507101; Tue, 18 Jun 2024 15:58:27 -0700 (PDT) Received: from saturn.. ([85.174.194.30]) by smtp.gmail.com with ESMTPSA id 38308e7fff4ca-2ec05c783e3sm18032881fa.77.2024.06.18.15.58.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 Jun 2024 15:58:26 -0700 (PDT) From: Igor Gutorov To: viacheslavo@nvidia.com Cc: dev@dpdk.org, dsosnowski@nvidia.com, igootorov@gmail.com, matan@nvidia.com, orika@nvidia.com, suanmingm@nvidia.com Subject: [PATCH v2] net/mlx5: fix incorrect rx/tx descriptor limitations in rte_eth_dev_info Date: Wed, 19 Jun 2024 01:56:42 +0300 Message-ID: <20240618225642.1036624-2-igootorov@gmail.com> X-Mailer: git-send-email 2.45.2 In-Reply-To: <20240618225642.1036624-1-igootorov@gmail.com> References: <20240618225642.1036624-1-igootorov@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Currently, `rte_eth_dev_info.rx_desc_lim.nb_max` as well as `rte_eth_dev_info.tx_desc_lim.nb_max` shows 65535 as the limit, which results in a few problems: * It is an incorrect value * Allocating an RX queue and passing `rx_desc_lim.nb_max` results in an integer overflow and 0 ring size: ``` rte_eth_rx_queue_setup(0, 0, rx_desc_lim.nb_max, 0, NULL, mb_pool); ``` Which overflows ring size and generates the following log: ``` mlx5_net: port 0 increased number of descriptors in Rx queue 0 to the next power of two (0) ``` The same holds for allocating a TX queue. This patch fixes these issues. Signed-off-by: Igor Gutorov --- drivers/common/mlx5/mlx5_devx_cmds.c | 1 + drivers/common/mlx5/mlx5_devx_cmds.h | 1 + drivers/net/mlx5/mlx5_ethdev.c | 4 ++++ drivers/net/mlx5/mlx5_rxq.c | 8 ++++++++ drivers/net/mlx5/mlx5_txq.c | 8 ++++++++ 5 files changed, 22 insertions(+) diff --git a/drivers/common/mlx5/mlx5_devx_cmds.c b/drivers/common/mlx5/mlx5_devx_cmds.c index 9b7ababae7..fe7a53835a 100644 --- a/drivers/common/mlx5/mlx5_devx_cmds.c +++ b/drivers/common/mlx5/mlx5_devx_cmds.c @@ -1027,6 +1027,7 @@ mlx5_devx_cmd_query_hca_attr(void *ctx, attr->log_max_qp = MLX5_GET(cmd_hca_cap, hcattr, log_max_qp); attr->log_max_cq_sz = MLX5_GET(cmd_hca_cap, hcattr, log_max_cq_sz); attr->log_max_qp_sz = MLX5_GET(cmd_hca_cap, hcattr, log_max_qp_sz); + attr->log_max_wq_sz = MLX5_GET(cmd_hca_cap, hcattr, log_max_wq_sz); attr->log_max_mrw_sz = MLX5_GET(cmd_hca_cap, hcattr, log_max_mrw_sz); attr->log_max_pd = MLX5_GET(cmd_hca_cap, hcattr, log_max_pd); attr->log_max_srq = MLX5_GET(cmd_hca_cap, hcattr, log_max_srq); diff --git a/drivers/common/mlx5/mlx5_devx_cmds.h b/drivers/common/mlx5/mlx5_devx_cmds.h index c79f8dc48d..abd12ea6e1 100644 --- a/drivers/common/mlx5/mlx5_devx_cmds.h +++ b/drivers/common/mlx5/mlx5_devx_cmds.h @@ -267,6 +267,7 @@ struct mlx5_hca_attr { struct mlx5_hca_flow_attr flow; struct mlx5_hca_flex_attr flex; struct mlx5_hca_crypto_mmo_attr crypto_mmo; + int log_max_wq_sz; int log_max_qp_sz; int log_max_cq_sz; int log_max_qp; diff --git a/drivers/net/mlx5/mlx5_ethdev.c b/drivers/net/mlx5/mlx5_ethdev.c index aea799341c..4ef47b3cc7 100644 --- a/drivers/net/mlx5/mlx5_ethdev.c +++ b/drivers/net/mlx5/mlx5_ethdev.c @@ -345,6 +345,10 @@ mlx5_dev_infos_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *info) info->flow_type_rss_offloads = ~MLX5_RSS_HF_MASK; mlx5_set_default_params(dev, info); mlx5_set_txlimit_params(dev, info); + info->rx_desc_lim.nb_max = + 1 << priv->sh->cdev->config.hca_attr.log_max_wq_sz; + info->tx_desc_lim.nb_max = + 1 << priv->sh->cdev->config.hca_attr.log_max_wq_sz; if (priv->sh->cdev->config.hca_attr.mem_rq_rmp && priv->obj_ops.rxq_obj_new == devx_obj_ops.rxq_obj_new) info->dev_capa |= RTE_ETH_DEV_CAPA_RXQ_SHARE; diff --git a/drivers/net/mlx5/mlx5_rxq.c b/drivers/net/mlx5/mlx5_rxq.c index f67aaa6178..f66a283983 100644 --- a/drivers/net/mlx5/mlx5_rxq.c +++ b/drivers/net/mlx5/mlx5_rxq.c @@ -655,6 +655,14 @@ mlx5_rx_queue_pre_setup(struct rte_eth_dev *dev, uint16_t idx, uint16_t *desc, struct mlx5_rxq_priv *rxq; bool empty; + if (*desc > 1 << priv->sh->cdev->config.hca_attr.log_max_wq_sz) { + DRV_LOG(ERR, + "port %u number of descriptors requested for Rx queue" + " %u is more than supported", + dev->data->port_id, idx); + rte_errno = EINVAL; + return -EINVAL; + } if (!rte_is_power_of_2(*desc)) { *desc = 1 << log2above(*desc); DRV_LOG(WARNING, diff --git a/drivers/net/mlx5/mlx5_txq.c b/drivers/net/mlx5/mlx5_txq.c index da4236f99a..07128c37e7 100644 --- a/drivers/net/mlx5/mlx5_txq.c +++ b/drivers/net/mlx5/mlx5_txq.c @@ -332,6 +332,14 @@ mlx5_tx_queue_pre_setup(struct rte_eth_dev *dev, uint16_t idx, uint16_t *desc) { struct mlx5_priv *priv = dev->data->dev_private; + if (*desc > 1 << priv->sh->cdev->config.hca_attr.log_max_wq_sz) { + DRV_LOG(ERR, + "port %u number of descriptors requested for Tx queue" + " %u is more than supported", + dev->data->port_id, idx); + rte_errno = EINVAL; + return -EINVAL; + } if (*desc <= MLX5_TX_COMP_THRESH) { DRV_LOG(WARNING, "port %u number of descriptors requested for Tx queue" -- 2.45.2