From patchwork Fri Jan 22 16:04:58 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michal Krawczyk X-Patchwork-Id: 87096 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id E98C2A0A0A; Fri, 22 Jan 2021 17:05:20 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 3266C141011; Fri, 22 Jan 2021 17:05:14 +0100 (CET) Received: from mail-lj1-f179.google.com (mail-lj1-f179.google.com [209.85.208.179]) by mails.dpdk.org (Postfix) with ESMTP id B0F5B140FF2 for ; Fri, 22 Jan 2021 17:05:11 +0100 (CET) Received: by mail-lj1-f179.google.com with SMTP id a25so5950719ljn.0 for ; Fri, 22 Jan 2021 08:05:11 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=semihalf-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=qAGcbE/8C6YZSmDnpwVlRU0MfE/Vd8NZ+9YBGVzN+kY=; b=m+zlQdLgqoACoC0yqF12WgmmoOsRmGmU3pNgcXo3GzMubiz98bkoCD5Fqyzz4crkol 65FO5VJxfxj8CP6PzetSnl0ogjGRXuZheaYxOuvlzEEktEhfVK0tEkqaQCAX1YCOWyhB Med64Rw2em6viBFwzLgUqcKe+8ThF4eQbSRKWqOpg1O7l89W76ZYHX57oHHOaJj0ugNP d7aGVQRkPU2wQbDb7yjJZc1/ekm1yMo6LOrP+JcaSHYE5GJL5puh6h/voNJOoWLaWzOH wBM2D3+q9eI9a9y1mFW82PFa0z3TvhkIbDzw+1xvRtfTaJwQUWElHGWlosf3a9gqEf4P oivw== 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=qAGcbE/8C6YZSmDnpwVlRU0MfE/Vd8NZ+9YBGVzN+kY=; b=Wn4npjfLZPCxSb8clnrcpTiGQ3ZyiA9WzveE5WCSyeouUdt3genEeXnUkIEZK6uUdu XJwkFoET9nQbHomqqijvOgbXzZJz+cVnnHLxgDXKj+KvucK8VMGeB5qwq3sm3Kpih/ux bJSL5nxZ3RCvBJpshn0VIok4vxCW8kopTstrjS+KqilEz9znqXJ5lCZE0DkSq/MY7Kme tO1ZF/BehpgP+13Z8kCYDeVxAtYZ/zoyZu+7hqIJZL1BW95CHysAN+hBB6yYzR30JgiD 4oPd86DG1aAkCoRgpvx2kbmERw4D6LS32ctsU6V9akYBhMYr7ZHyC+CJCJBVN/mocjLO jfkg== X-Gm-Message-State: AOAM532CksgIvUuRaIa9+CUw1ypQQmNs00TNy48iiaD4xfQE7KymznWt 3IrQ3N4JrAF3WT8iLRxSocRFOm7o9DMvNniq X-Google-Smtp-Source: ABdhPJxCKDb2YL8rLS9TgCt8LQuP7yxy7SshKTLXwc+zqnLY7XH4QxQoisd3pv9RLbd8rlp3sqU0Ow== X-Received: by 2002:a2e:8695:: with SMTP id l21mr563129lji.151.1611331510994; Fri, 22 Jan 2021 08:05:10 -0800 (PST) Received: from mkPC.int.semihalf.com (193-106-246-138.noc.fibertech.net.pl. [193.106.246.138]) by smtp.gmail.com with ESMTPSA id s2sm934063lfs.2.2021.01.22.08.05.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 22 Jan 2021 08:05:10 -0800 (PST) From: Michal Krawczyk To: dev@dpdk.org Cc: gtzalik@amazon.com, igorch@amazon.com, mw@semihalf.com, Ido Segev , stable@dpdk.org, Michal Krawczyk Date: Fri, 22 Jan 2021 17:04:58 +0100 Message-Id: <20210122160501.2273782-2-mk@semihalf.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210122160501.2273782-1-mk@semihalf.com> References: <20210122160501.2273782-1-mk@semihalf.com> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH 1/4] net/ena: flush Rx buffers memory pool cache 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 Sender: "dev" From: Ido Segev As the refill called as part of ena_start(), we end up the refill progress with stuck buffers at the caller core cache. Calling to flush the cache results with invalidate this cache and free those stuck buffers. Fixes: 1173fca25af9 ("ena: add polling-mode driver") Cc: stable@dpdk.org Signed-off-by: Ido Segev Reviewed-by: Michal Krawczyk Reviewed-by: Igor Chauskin --- drivers/net/ena/ena_ethdev.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/drivers/net/ena/ena_ethdev.c b/drivers/net/ena/ena_ethdev.c index 20ff3653c6..516e244295 100644 --- a/drivers/net/ena/ena_ethdev.c +++ b/drivers/net/ena/ena_ethdev.c @@ -1246,6 +1246,10 @@ static int ena_queue_start(struct ena_ring *ring) PMD_INIT_LOG(ERR, "Failed to populate rx ring !"); return ENA_COM_FAULT; } + /* Flush per-core RX buffers pools cache as they can be used on other + * cores as well. + */ + rte_mempool_cache_flush(NULL, ring->mb_pool); return 0; } From patchwork Fri Jan 22 16:04:59 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michal Krawczyk X-Patchwork-Id: 87097 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id BB439A0A0A; Fri, 22 Jan 2021 17:05:30 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 84120141019; Fri, 22 Jan 2021 17:05:15 +0100 (CET) Received: from mail-lj1-f180.google.com (mail-lj1-f180.google.com [209.85.208.180]) by mails.dpdk.org (Postfix) with ESMTP id 1EE4A14100C for ; Fri, 22 Jan 2021 17:05:13 +0100 (CET) Received: by mail-lj1-f180.google.com with SMTP id j3so7091778ljb.9 for ; Fri, 22 Jan 2021 08:05:13 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=semihalf-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=xKsiPwgK9JCQHpFxekftFwZoJ8MkDnBQ1cpbltlOuqc=; b=ZLglUYvklfBqEUE1GNWFBWsEcjXLKQf8Lt9JwteiCLizezcHZmBMXdgLHqjw+z/0TU pVt7xvfO6xKD7hZY621+eUtD66wutOHvOqbZC/yisqz4ponn2M3qCxkSxXyWvK3a1vAr SvzdnKaywSPNDP34W3TvVhcDPD88xlFVa8TaL7xJIDAMl1TIk4S9ZGcEdL/2DEtEYspQ G9LLT9bb9bEi80xEV7XOedI4SmKnOXM66chmuZ6TaXo1XjJpjYmpBWN7mXRZO7E0Tto6 iCLFcbY4QSGVOHWAscGPUh28uL5UI9t4alrKt6hdOPZIqlPIoP936LPDK5fK5NacIypo euCA== 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=xKsiPwgK9JCQHpFxekftFwZoJ8MkDnBQ1cpbltlOuqc=; b=AeWYpMrMdBjc6s62XKqhIIhWpC9P32gPDQObc35tF0R8rwXDAmuPCnqZRXcaNWPQp0 2JI3Ppjd89o2nLPJtNx295JzYkPkgz3DxxDBB0CEaNZEsA26okdB4vyLPVi7A7tzhWox a61d22fdB4CASamaSVMBQDa0L3EkvG9gVgr/l1BuIWexQPgG1mI3vnhAPYJwnGLBUxOE QYwFPwBedENnAS8x/Q8YttM05LDC4c3qQB4CJWw9UJ4cD3+Ijnm4x5PA2GQCo8GPev4n lIf8voajoOR5zVnFXlD+dgNHMdtEzKCUIogNkVCaWh88uRkccVbvJfA0JQYOGJdd8fLn UjkQ== X-Gm-Message-State: AOAM531OQGRPvootRW4GEUpGxWC8dpTjh+uyBBdSTijB97Nyf67ts6kb U7fj7eU2Ni2ywB9peQUOw5tZkIzhPlSIo5LC X-Google-Smtp-Source: ABdhPJyIHX3wXrAK7P4mlxrBrloLFVfZkBuhwpV3dVWP3M/SO5QVYFrxZDuARfqPfKSJcC0FLW4OnA== X-Received: by 2002:a2e:81c5:: with SMTP id s5mr728898ljg.197.1611331512584; Fri, 22 Jan 2021 08:05:12 -0800 (PST) Received: from mkPC.int.semihalf.com (193-106-246-138.noc.fibertech.net.pl. [193.106.246.138]) by smtp.gmail.com with ESMTPSA id s2sm934063lfs.2.2021.01.22.08.05.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 22 Jan 2021 08:05:11 -0800 (PST) From: Michal Krawczyk To: dev@dpdk.org Cc: gtzalik@amazon.com, igorch@amazon.com, mw@semihalf.com, Amit Bernstein , stable@dpdk.org, Michal Krawczyk Date: Fri, 22 Jan 2021 17:04:59 +0100 Message-Id: <20210122160501.2273782-3-mk@semihalf.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210122160501.2273782-1-mk@semihalf.com> References: <20210122160501.2273782-1-mk@semihalf.com> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH 2/4] net/ena: Tx doorbell statistics fix 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 Sender: "dev" From: Amit Bernstein Increment Tx doorbell statistics on tx_pkt_burst after writing to doorbell and in case max burst size achieved Fixes: c7519ea5eb8d ("net/ena: call additional doorbells if needed") Cc: stable@dpdk.org Signed-off-by: Amit Bernstein Reviewed-by: Michal Krawczyk Reviewed-by: Igor Chauskin --- drivers/net/ena/ena_ethdev.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/net/ena/ena_ethdev.c b/drivers/net/ena/ena_ethdev.c index 516e244295..111e830bfa 100644 --- a/drivers/net/ena/ena_ethdev.c +++ b/drivers/net/ena/ena_ethdev.c @@ -2519,6 +2519,7 @@ static int ena_xmit_mbuf(struct ena_ring *tx_ring, struct rte_mbuf *mbuf) "llq tx max burst size of queue %d achieved, writing doorbell to send burst\n", tx_ring->id); ena_com_write_sq_doorbell(tx_ring->ena_com_io_sq); + tx_ring->tx_stats.doorbells++; } /* prepare the packet's descriptors to dma engine */ From patchwork Fri Jan 22 16:05:00 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michal Krawczyk X-Patchwork-Id: 87098 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id AF01CA0A0A; Fri, 22 Jan 2021 17:05:38 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id AD69814101F; Fri, 22 Jan 2021 17:05:17 +0100 (CET) Received: from mail-lf1-f45.google.com (mail-lf1-f45.google.com [209.85.167.45]) by mails.dpdk.org (Postfix) with ESMTP id 7CB50141014 for ; Fri, 22 Jan 2021 17:05:14 +0100 (CET) Received: by mail-lf1-f45.google.com with SMTP id v24so8229150lfr.7 for ; Fri, 22 Jan 2021 08:05:14 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=semihalf-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=S3Vtrcvx7t+OntBjXn+Ak3frgp4zUzqhdNZghDTINPM=; b=wCDb0bSjenvOBXGcGzj+z/LDXGRw17Ij4gS+p44WSytDv3QcTqDtiRSdaKG+IHxGF7 IZT0rXtXw6ryElGQOi9Nt5DKY75kkW5OfqJZf3VdXaCmS9dDMlcKwZ6kyVgJwyxDVWYJ yTk9sNm9/yh5lsYF+0JXqduaUrV9lT1YB2gVoq2r8A8KhLFvU/yWFb/jb/Fp/dzLPWKn EYWVrF1DHhkm85Nf9C00oR6kgPwlUS3ewxvPbaeXoVGozUiFReSCPUQrP1zvfjtYDqD/ lu9fKkhaxxlRaGIOmLKT7LQpkGYC/+fBV17WM7MRULBVAZ1hzAdOwl8uo+eq3J1jJ8Sl k16Q== 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=S3Vtrcvx7t+OntBjXn+Ak3frgp4zUzqhdNZghDTINPM=; b=mLes42gSJ1QmE5FSiYQIP8CBnyKytf+eKYy+WjR+ISCxhT7hnR+WOW+cuybQsIe64M Q7n+YlYi5RHfyGPLRpkK0ec+CCbijAcAZ/773thEJQ2jfGnQBeF8KEEi+egl37haIRKl qm4WJGlvNLAPzWFYhnaQbLRWqP3mhM/K90L5RvLeASrsm49FNRVTGE9Z/S+5XIkiBQwG jrKB320GRcjh/4PIn/YpSX3xswJ8WNNTT/f9qYRU70BHB0pMLvLLL4rtGG6p/W6TYomn J08Jo7p8jqXJWpSr7HTz3fyhZEY8rWaBVt+ztaWmlpW015XSk2eTYpnjlSEt8iqz4Qza 56uQ== X-Gm-Message-State: AOAM53066Shw0xMEPfnjjfkjoXmUM2BL/LXDEtGqTUZ12UFy7qUksn/g GHwhLDrvEMsQOEsUbpjVA08nnwfrPqVjd2b0 X-Google-Smtp-Source: ABdhPJwznwkbapYGs/eH5O5MEjKhPFc2WK4p8KxZ0KmTOvKz8GSoWEJgGj9Ad/0Ny/0QKizJqhVNTQ== X-Received: by 2002:a19:8bd4:: with SMTP id n203mr144617lfd.403.1611331513837; Fri, 22 Jan 2021 08:05:13 -0800 (PST) Received: from mkPC.int.semihalf.com (193-106-246-138.noc.fibertech.net.pl. [193.106.246.138]) by smtp.gmail.com with ESMTPSA id s2sm934063lfs.2.2021.01.22.08.05.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 22 Jan 2021 08:05:13 -0800 (PST) From: Michal Krawczyk To: dev@dpdk.org Cc: gtzalik@amazon.com, igorch@amazon.com, mw@semihalf.com, Michal Krawczyk , Ido Segev Date: Fri, 22 Jan 2021 17:05:00 +0100 Message-Id: <20210122160501.2273782-4-mk@semihalf.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210122160501.2273782-1-mk@semihalf.com> References: <20210122160501.2273782-1-mk@semihalf.com> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH 3/4] net/ena: validate Rx req id upon acquiring the desc 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 Sender: "dev" Instead of veryfing the Rx descriptor each time it's being used in the driver code, now the verification happens on the HAL side. This simplifies code a lot as instead of doing 2 validations, only single one is needed. The driver have to check the rc value returned by the ena_com upon reading the Rx descriptor and trigger the reset if needed. It was previously the responsibility of the validate_rx_req_id() function. As part of the change, the version of the driver was bumped to v2.2.1. Fixes: 2061fe41f212 ("net/ena: linearize Tx mbuf") Signed-off-by: Ido Segev Signed-off-by: Michal Krawczyk Reviewed-by: Igor Chauskin --- drivers/net/ena/base/ena_eth_com.c | 3 +++ drivers/net/ena/base/ena_plat_dpdk.h | 1 + drivers/net/ena/ena_ethdev.c | 38 ++++++++-------------------- 3 files changed, 14 insertions(+), 28 deletions(-) diff --git a/drivers/net/ena/base/ena_eth_com.c b/drivers/net/ena/base/ena_eth_com.c index a35d92fbd3..5583a310a1 100644 --- a/drivers/net/ena/base/ena_eth_com.c +++ b/drivers/net/ena/base/ena_eth_com.c @@ -531,6 +531,7 @@ int ena_com_rx_pkt(struct ena_com_io_cq *io_cq, { struct ena_com_rx_buf_info *ena_buf = &ena_rx_ctx->ena_bufs[0]; struct ena_eth_io_rx_cdesc_base *cdesc = NULL; + u16 q_depth = io_cq->q_depth; u16 cdesc_idx = 0; u16 nb_hw_desc; u16 i = 0; @@ -559,6 +560,8 @@ int ena_com_rx_pkt(struct ena_com_io_cq *io_cq, do { ena_buf[i].len = cdesc->length; ena_buf[i].req_id = cdesc->req_id; + if (unlikely(ena_buf[i].req_id >= q_depth)) + return ENA_COM_EIO; if (++i >= nb_hw_desc) break; diff --git a/drivers/net/ena/base/ena_plat_dpdk.h b/drivers/net/ena/base/ena_plat_dpdk.h index 48c77f0c19..a1d749f83f 100644 --- a/drivers/net/ena/base/ena_plat_dpdk.h +++ b/drivers/net/ena/base/ena_plat_dpdk.h @@ -51,6 +51,7 @@ typedef uint64_t dma_addr_t; #define ENA_COM_FAULT -EFAULT #define ENA_COM_TRY_AGAIN -EAGAIN #define ENA_COM_UNSUPPORTED -EOPNOTSUPP +#define ENA_COM_EIO -EIO #define ____cacheline_aligned __rte_cache_aligned diff --git a/drivers/net/ena/ena_ethdev.c b/drivers/net/ena/ena_ethdev.c index 111e830bfa..9ee9de6eb9 100644 --- a/drivers/net/ena/ena_ethdev.c +++ b/drivers/net/ena/ena_ethdev.c @@ -28,7 +28,7 @@ #define DRV_MODULE_VER_MAJOR 2 #define DRV_MODULE_VER_MINOR 2 -#define DRV_MODULE_VER_SUBMINOR 0 +#define DRV_MODULE_VER_SUBMINOR 1 #define ENA_IO_TXQ_IDX(q) (2 * (q)) #define ENA_IO_RXQ_IDX(q) (2 * (q) + 1) @@ -380,20 +380,6 @@ static inline void ena_tx_mbuf_prepare(struct rte_mbuf *mbuf, } } -static inline int validate_rx_req_id(struct ena_ring *rx_ring, uint16_t req_id) -{ - if (likely(req_id < rx_ring->ring_size)) - return 0; - - PMD_DRV_LOG(ERR, "Invalid rx req_id: %hu\n", req_id); - - rx_ring->adapter->reset_reason = ENA_REGS_RESET_INV_RX_REQ_ID; - rx_ring->adapter->trigger_reset = true; - ++rx_ring->rx_stats.bad_req_id; - - return -EFAULT; -} - static int validate_tx_req_id(struct ena_ring *tx_ring, u16 req_id) { struct ena_tx_buffer *tx_info = NULL; @@ -1486,10 +1472,6 @@ static int ena_populate_rx_queue(struct ena_ring *rxq, unsigned int count) rte_prefetch0(mbufs[i + 4]); req_id = rxq->empty_rx_reqs[next_to_use]; - rc = validate_rx_req_id(rxq, req_id); - if (unlikely(rc)) - break; - rx_info = &rxq->rx_buffer_info[req_id]; rc = ena_add_single_rx_desc(rxq->ena_com_io_sq, mbuf, req_id); @@ -2114,8 +2096,6 @@ static struct rte_mbuf *ena_rx_mbuf(struct ena_ring *rx_ring, len = ena_bufs[buf].len; req_id = ena_bufs[buf].req_id; - if (unlikely(validate_rx_req_id(rx_ring, req_id))) - return NULL; rx_info = &rx_ring->rx_buffer_info[req_id]; @@ -2139,10 +2119,6 @@ static struct rte_mbuf *ena_rx_mbuf(struct ena_ring *rx_ring, ++buf; len = ena_bufs[buf].len; req_id = ena_bufs[buf].req_id; - if (unlikely(validate_rx_req_id(rx_ring, req_id))) { - rte_mbuf_raw_free(mbuf_head); - return NULL; - } rx_info = &rx_ring->rx_buffer_info[req_id]; RTE_ASSERT(rx_info->mbuf != NULL); @@ -2230,10 +2206,16 @@ static uint16_t eth_ena_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, &ena_rx_ctx); if (unlikely(rc)) { PMD_DRV_LOG(ERR, "ena_com_rx_pkt error %d\n", rc); - rx_ring->adapter->reset_reason = - ENA_REGS_RESET_TOO_MANY_RX_DESCS; + if (rc == ENA_COM_NO_SPACE) { + ++rx_ring->rx_stats.bad_desc_num; + rx_ring->adapter->reset_reason = + ENA_REGS_RESET_TOO_MANY_RX_DESCS; + } else { + ++rx_ring->rx_stats.bad_req_id; + rx_ring->adapter->reset_reason = + ENA_REGS_RESET_INV_RX_REQ_ID; + } rx_ring->adapter->trigger_reset = true; - ++rx_ring->rx_stats.bad_desc_num; return 0; } From patchwork Fri Jan 22 16:05:01 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michal Krawczyk X-Patchwork-Id: 87099 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id C7AFCA0A0A; Fri, 22 Jan 2021 17:05:46 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id D7AD9141025; Fri, 22 Jan 2021 17:05:18 +0100 (CET) Received: from mail-lj1-f180.google.com (mail-lj1-f180.google.com [209.85.208.180]) by mails.dpdk.org (Postfix) with ESMTP id CA21B14101C for ; Fri, 22 Jan 2021 17:05:15 +0100 (CET) Received: by mail-lj1-f180.google.com with SMTP id f11so7070565ljm.8 for ; Fri, 22 Jan 2021 08:05:15 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=semihalf-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=1qN6fNNWj09UtYtiff0PLCi5B5S6zrA6/F/OsStTVgg=; b=B2njhR0daxwmihIctmRHzKtOrmUUosdz2L5c64CCx/oPzq4q/vBHif+6ukqJFsMgpV FSqfcwKmfn1s9HhR4UFF5kiGdFKb+Itgqvduv2OAf4vj5gjaoILy5vMPnQ6mVO2xk74k FF/QzNjhQcvDi2bADzGzCZM4/FAiBlUm7gZrUycVfKqRjCof8SUY7fciIJVOZyDNW31r Buh6v6s3Ohr8DpYyC+QfvIlNI0PUaRFJYqPpXApPOOP+S9OU0TLlI3bTksfOgoGU4Zri pWbqp4unkftuAu9mpYZ9PM6EaOa1tf6h65dk494/fWwyn/3hPlzoJqijWJ3Q2GTi8SYp IMUw== 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=1qN6fNNWj09UtYtiff0PLCi5B5S6zrA6/F/OsStTVgg=; b=V2mEiPwEHZ/w3dRqSIhEHe/eRDqsO4lLyJy7Gdgbbi8vYLn1S04ML/eHofjpu0vIFJ O5paeFvnxu43uDbrWnW2pPulcTrilwovNhk0iIIS+6aDST18Djd0jRQmo0rx9e5DrvaL n9JYgGeN5BTl6v146NrZer5xZTVWbE9RfDX+R3t3VAE+eKuxTgK5riovalf0rWOAJGrQ KejprHddKH73metgQgx88/w1K0QDT48JzI2vKUPXDX8k0QA+a+jLhUU6h+PimQP+LKze TOtmbBc2s46dD1IwjlZmvgSjaxX1kaViXGYoVVG6OuiIGWHP6FQJhQy9aM5YNS5ervmQ BjjA== X-Gm-Message-State: AOAM530qpVQqlJjp2FpWn5ePRu/oGBIVoUhQ6BhlLvtS+F3qO/hrqfrE CaJdxAXe4CxbE8p5dt/4wyLL9M1x6apFkoIf X-Google-Smtp-Source: ABdhPJyZOty6DGOP7jz+xa+kpZESXaoySfuypx3Gf/eC68z9xXVu4Qdx8Wc1oDeHVZ5dVmX65d5EKw== X-Received: by 2002:a2e:b819:: with SMTP id u25mr2648145ljo.458.1611331515206; Fri, 22 Jan 2021 08:05:15 -0800 (PST) Received: from mkPC.int.semihalf.com (193-106-246-138.noc.fibertech.net.pl. [193.106.246.138]) by smtp.gmail.com with ESMTPSA id s2sm934063lfs.2.2021.01.22.08.05.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 22 Jan 2021 08:05:14 -0800 (PST) From: Michal Krawczyk To: dev@dpdk.org Cc: gtzalik@amazon.com, igorch@amazon.com, mw@semihalf.com, Michal Krawczyk Date: Fri, 22 Jan 2021 17:05:01 +0100 Message-Id: <20210122160501.2273782-5-mk@semihalf.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210122160501.2273782-1-mk@semihalf.com> References: <20210122160501.2273782-1-mk@semihalf.com> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH 4/4] net/ena: fix Tx sq free space assessment 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 Sender: "dev" From: Igor Chauskin Before starting transmission of Tx burst, the driver checked the available space in the sq and limited the number of packets for transmission accordingly. The calculation was incorrect for fragmented packets and potentially had significantly limited the length of Tx bursts. This patch removes the assessment and pushes packets to the sq as long as the burst is not exhausted and space is available in the sq. Correct evaluation of the required space isn't possible before the burst because it depends on the number of segments of each packet. This patch adds per-packet space evaluation for each packet before attempting to process it. In case there is not enough queue space, the burst will just stop without error. Signed-off-by: Igor Chauskin Reviewed-by: Michal Krawczyk --- drivers/net/ena/ena_ethdev.c | 35 ++++++++++++++++++++++++++--------- 1 file changed, 26 insertions(+), 9 deletions(-) diff --git a/drivers/net/ena/ena_ethdev.c b/drivers/net/ena/ena_ethdev.c index 9ee9de6eb9..4083568d5d 100644 --- a/drivers/net/ena/ena_ethdev.c +++ b/drivers/net/ena/ena_ethdev.c @@ -2359,8 +2359,8 @@ static void ena_update_hints(struct ena_adapter *adapter, } } -static int ena_check_and_linearize_mbuf(struct ena_ring *tx_ring, - struct rte_mbuf *mbuf) +static int ena_check_space_and_linearize_mbuf(struct ena_ring *tx_ring, + struct rte_mbuf *mbuf) { struct ena_com_dev *ena_dev; int num_segments, header_len, rc; @@ -2370,13 +2370,21 @@ static int ena_check_and_linearize_mbuf(struct ena_ring *tx_ring, header_len = mbuf->data_len; if (likely(num_segments < tx_ring->sgl_size)) - return 0; + goto checkspace; if (ena_dev->tx_mem_queue_type == ENA_ADMIN_PLACEMENT_POLICY_DEV && (num_segments == tx_ring->sgl_size) && (header_len < tx_ring->tx_max_header_size)) - return 0; + goto checkspace; + /* Checking for space for 2 additional metadata descriptors due to + * possible header split and metadata descriptor. Linearization will + * be needed so we reduce the segments number from num_segments to 1 + */ + if (!ena_com_sq_have_enough_space(tx_ring->ena_com_io_sq, 3)) { + PMD_DRV_LOG(DEBUG, "Not enough space in the tx queue\n"); + return ENA_COM_NO_MEM; + } ++tx_ring->tx_stats.linearize; rc = rte_pktmbuf_linearize(mbuf); if (unlikely(rc)) { @@ -2386,7 +2394,19 @@ static int ena_check_and_linearize_mbuf(struct ena_ring *tx_ring, return rc; } - return rc; + return 0; + +checkspace: + /* Checking for space for 2 additional metadata descriptors due to + * possible header split and metadata descriptor + */ + if (!ena_com_sq_have_enough_space(tx_ring->ena_com_io_sq, + num_segments + 2)) { + PMD_DRV_LOG(DEBUG, "Not enough space in the tx queue\n"); + return ENA_COM_NO_MEM; + } + + return 0; } static void ena_tx_map_mbuf(struct ena_ring *tx_ring, @@ -2473,7 +2493,7 @@ static int ena_xmit_mbuf(struct ena_ring *tx_ring, struct rte_mbuf *mbuf) int nb_hw_desc; int rc; - rc = ena_check_and_linearize_mbuf(tx_ring, mbuf); + rc = ena_check_space_and_linearize_mbuf(tx_ring, mbuf); if (unlikely(rc)) return rc; @@ -2580,9 +2600,6 @@ static uint16_t eth_ena_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, return 0; } - nb_pkts = RTE_MIN(ena_com_free_q_entries(tx_ring->ena_com_io_sq), - nb_pkts); - for (sent_idx = 0; sent_idx < nb_pkts; sent_idx++) { if (ena_xmit_mbuf(tx_ring, tx_pkts[sent_idx])) break;