From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 7D9E0A04B1; Tue, 10 Nov 2020 15:10:17 +0100 (CET) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 52D005937; Tue, 10 Nov 2020 15:09:56 +0100 (CET) Received: from mail-wm1-f68.google.com (mail-wm1-f68.google.com [209.85.128.68]) by dpdk.org (Postfix) with ESMTP id CACC2592C for ; Tue, 10 Nov 2020 15:09:54 +0100 (CET) Received: by mail-wm1-f68.google.com with SMTP id p19so2095225wmg.0 for ; Tue, 10 Nov 2020 06:09:54 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=6wind.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=hqmTb0Y+tpX4y+uu4PNRau4umDuu9/oMZ99XkWohBzc=; b=RRIR2m+qzDsnYCvLxsLFlAAmY30y2lMPC+kjOgtdZdZSHEMrfDWdKWdPKNFRGzkU83 tA//k0G4sCE+k2De7vbxc8sAPuhSI71++RT4p/3Ocf6UWjxnnKO7coctOJZMg/C5QLsy X3LRwaaFLQ3OaAoYFOYjhxXBHLotSIHcgWal7mDLOmG4x+XhxcaIMEs5LElNdTZETOKE RP9mrge9FNJ4i8BmHThb4kMM054nxilytuUXGkA1wl1+6zZDx/b0frzGyauMgNaxZDUG YJp+KcOW6H/WqagMKP8BTShba67L8tAJPelkuzwqO+czwAwXxJJbFePXqqn0UEPJ3ofc Fviw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=hqmTb0Y+tpX4y+uu4PNRau4umDuu9/oMZ99XkWohBzc=; b=L0g4ju6uLEAXj1oqmDHNyJNsnVJARbB3h5k9sZYIxZQSQ5sIXYXj3YfFuThVrvVUS8 TA4Mq05A0Bfg2byKQ988qxBwJ6su8jjseN88qp0PZ8dwRgxGAoRwJN6BDN+qsR8mM6QY hRQEhPc6g4CF9cNF5nCnfNpFuDRe+vKsUWqXHiNL92b2bVK/+bFTiuLaHwW6sORO8lDZ meCNEWSVFyEgvhVxS9fuh5PwkPtqNagvkdgcJfkvfSmvOUbFL/N/G7QND4XymXR5RKSt YD63JHj07TmTEFsHCAe8vAQJaZ1QGVmtI0D9hA5UmlzmlYQooW4iWwQNmD9hnmwSjbuK ddvQ== X-Gm-Message-State: AOAM532EDP8UO+xTZQXQln2DsEYthHGUCF5VFLKS8hjypHvQ91uFAz3S Xr5IpEqcISjWblOLlxO5RswaZFmEYwKpPA== X-Google-Smtp-Source: ABdhPJwCv9viCF4WmuhGpAM332zEKxjmmZVv1xoO+h/JK9RRQaLqYYvZV0NoabSfubF3pBJjdePNbw== X-Received: by 2002:a05:600c:2285:: with SMTP id 5mr4359738wmf.149.1605017393592; Tue, 10 Nov 2020 06:09:53 -0800 (PST) Received: from bolet.dev.6wind.com. (host.78.145.23.62.rev.coltfrance.com. [62.23.145.78]) by smtp.gmail.com with ESMTPSA id y187sm3112158wmg.33.2020.11.10.06.09.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 10 Nov 2020 06:09:52 -0800 (PST) From: Maxime Leroy To: Matan Azrad , Shahaf Shuler , Viacheslav Ovsiienko Cc: dev@dpdk.org, Nelio Laranjeiro Date: Tue, 10 Nov 2020 15:09:35 +0100 Message-Id: <20201110140938.15046-2-maxime.leroy@6wind.com> X-Mailer: git-send-email 2.27.0 In-Reply-To: <20201110140938.15046-1-maxime.leroy@6wind.com> References: <20201110140938.15046-1-maxime.leroy@6wind.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: [dpdk-dev] [PATCH 1/4] Revert "net/mlx5: fix Rx queue count calculation" X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" This reverts commit d2d57605522d4a43be17e22e649e54033f6d8835. This fix is uncorrect for at least two reasons. First issue, when there are more than 8 CQEs to uncompress, the computation done in this commit cannot work. Because the zip-ai variable describes the current index inside the CQE8 array and thus is limited from 0 to 7 included. So if we are decompressed the 9 packets, ai is 0. So in this case, n is equals to cqe_cnt - 0. Example with 11 packets we will have: C | a | e0 | e1 | e2 | e3 | e4 | e5 | C | a | e0 c <-- CQE compressed a <-- Array of minicqe ex <-- emptry entry to store uncompressed CQE. If the 9th packet is decompressed by the soft, n is equals to 9. But with this commit, n is equals to 11 (i.e. 11 - 0). Second issue is to count the next packet. Example: packet 1 | packet 2 C | a | e0 | e1 | e2 | e3 | e4 | e5 | C | a | e0 There are 2 packets compressed in the first queue. For the first packet, n is computed correctly. But for the second, n is not computed properly. Because the zip context is for the first packet. The second packet is not yet decompressed, so there are no context. Signed-off-by: Maxime Leroy Signed-off-by: Nelio Laranjeiro --- drivers/net/mlx5/mlx5_rxtx.c | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/drivers/net/mlx5/mlx5_rxtx.c b/drivers/net/mlx5/mlx5_rxtx.c index 844a1c63..4c566486 100644 --- a/drivers/net/mlx5/mlx5_rxtx.c +++ b/drivers/net/mlx5/mlx5_rxtx.c @@ -462,11 +462,19 @@ rx_queue_count(struct mlx5_rxq_data *rxq) { struct rxq_zip *zip = &rxq->zip; volatile struct mlx5_cqe *cqe; - unsigned int cq_ci = rxq->cq_ci; const unsigned int cqe_n = (1 << rxq->cqe_n); const unsigned int cqe_cnt = cqe_n - 1; - unsigned int used = 0; + unsigned int cq_ci; + unsigned int used; + /* if we are processing a compressed cqe */ + if (zip->ai) { + used = zip->cqe_cnt - zip->ca; + cq_ci = zip->cq_ci; + } else { + used = 0; + cq_ci = rxq->cq_ci; + } cqe = &(*rxq->cqes)[cq_ci & cqe_cnt]; while (check_cqe(cqe, cqe_n, cq_ci) != MLX5_CQE_STATUS_HW_OWN) { int8_t op_own; @@ -474,17 +482,14 @@ rx_queue_count(struct mlx5_rxq_data *rxq) op_own = cqe->op_own; if (MLX5_CQE_FORMAT(op_own) == MLX5_COMPRESSED) - if (unlikely(zip->ai)) - n = zip->cqe_cnt - zip->ai; - else - n = rte_be_to_cpu_32(cqe->byte_cnt); + n = rte_be_to_cpu_32(cqe->byte_cnt); else n = 1; cq_ci += n; used += n; cqe = &(*rxq->cqes)[cq_ci & cqe_cnt]; } - used = RTE_MIN(used, cqe_n); + used = RTE_MIN(used, (1U << rxq->elts_n) - 1); return used; } @@ -507,12 +512,11 @@ mlx5_rx_descriptor_status(void *rx_queue, uint16_t offset) container_of(rxq, struct mlx5_rxq_ctrl, rxq); struct rte_eth_dev *dev = ETH_DEV(rxq_ctrl->priv); - if (dev->rx_pkt_burst == NULL || - dev->rx_pkt_burst == removed_rx_burst) { + if (dev->rx_pkt_burst != mlx5_rx_burst) { rte_errno = ENOTSUP; return -rte_errno; } - if (offset >= (1 << rxq->cqe_n)) { + if (offset >= (1 << rxq->elts_n)) { rte_errno = EINVAL; return -rte_errno; } @@ -642,8 +646,7 @@ mlx5_rx_queue_count(struct rte_eth_dev *dev, uint16_t rx_queue_id) struct mlx5_priv *priv = dev->data->dev_private; struct mlx5_rxq_data *rxq; - if (dev->rx_pkt_burst == NULL || - dev->rx_pkt_burst == removed_rx_burst) { + if (dev->rx_pkt_burst != mlx5_rx_burst) { rte_errno = ENOTSUP; return -rte_errno; } -- 2.27.0