From patchwork Tue Jan 26 18:32:22 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michal Krawczyk X-Patchwork-Id: 87352 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 7B005A052A; Tue, 26 Jan 2021 19:33:02 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 99343140F4F; Tue, 26 Jan 2021 19:32:57 +0100 (CET) Received: from mail-lj1-f182.google.com (mail-lj1-f182.google.com [209.85.208.182]) by mails.dpdk.org (Postfix) with ESMTP id 3E459140F33 for ; Tue, 26 Jan 2021 19:32:55 +0100 (CET) Received: by mail-lj1-f182.google.com with SMTP id s18so7672535ljg.7 for ; Tue, 26 Jan 2021 10:32:55 -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=AnkbjRWgUFQuWI96Jjxyf2fH2TO3ShGWhi5akGNri7UcowbODS+TTCQz88H40lb+vq vgsF2MsJP+RhKqfRhQhyVghi8q0qG8nGnBNKoQ+vFKH2I8qWF7ChcX7+IUFDRFqUpnAB M87bU/AJLk02e1ouyzcJcNtMbJA6nCw6xaX1brQUF0AgNjVTlh7xGWqjONhEVumwOdud vMPx/P0mNHgfdzkyMFAax0IDj0Yy1gJMd/ydwAGs4Agi8AZy58gO5o1OJUKcj4QrdS0P LPiXNdzJmIkMKrwDfSe7fGcYDy/cv10cbb79LL/lVhMA+/1evYvsqR70Cww5KmaMdokB Zbbw== 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=nvDTIbiikqkhh4CnczTtenrcaPZjSIiwobxf+Biak3ZlATG/S2Z5Y8qn9BzG98KS1Z SvXsimJ1KiNq6IG7aGjKDMasHQpMzYTycvxvIzEbaXs57o9PDgxTM4tb3ddCEY7e8AAP yt88aBN5tQCrKDs6KLrPQuJeNZFOVjhJU8EFcdeTTvUijyNSMo66J9yE1+26z+rztrQh U98WtzsTLx7Vh/gUKPntHqMfZWMx4ZtiDu58060Ll/Vmxuv/sZDWc+aK7nPohjJSp1K4 uVXN7u0NAAKy2wDfYMGjZX8S6gm/yVzwVf1e9m5dtUTbOMaSiwvJjy+P1t3Q5HCFMU/h h63A== X-Gm-Message-State: AOAM531UQGSpfCPPznvTKFifUChioB1zJewMbOGb1EYSou2S+FgUy2Qc GOpW6W4BaDxLJ8s+17ZTDkjOkY18DE5y0/2z X-Google-Smtp-Source: ABdhPJzC4w4fodL1NU0TXtmGmt7BEDP4S82KiqF7CPf/rfgnPyCzY/L7mkcL1kpOIfs0yzTIxhQYJA== X-Received: by 2002:a2e:bc0e:: with SMTP id b14mr3528247ljf.212.1611685974536; Tue, 26 Jan 2021 10:32:54 -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 s3sm3351036ljo.41.2021.01.26.10.32.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Jan 2021 10:32:53 -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: Tue, 26 Jan 2021 19:32:22 +0100 Message-Id: <20210126183226.2420903-2-mk@semihalf.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210126183226.2420903-1-mk@semihalf.com> References: <20210126183226.2420903-1-mk@semihalf.com> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH v2 1/5] 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 Tue Jan 26 18:32:23 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michal Krawczyk X-Patchwork-Id: 87353 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 E718DA052A; Tue, 26 Jan 2021 19:33:09 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 08023140F56; Tue, 26 Jan 2021 19:33:01 +0100 (CET) Received: from mail-lj1-f177.google.com (mail-lj1-f177.google.com [209.85.208.177]) by mails.dpdk.org (Postfix) with ESMTP id 9FF21140F4A for ; Tue, 26 Jan 2021 19:32:56 +0100 (CET) Received: by mail-lj1-f177.google.com with SMTP id t8so13482130ljk.10 for ; Tue, 26 Jan 2021 10:32:56 -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=XK9/2t6ZCNscyZXYfDFP4P3I0wLhGceKc9/oAg2N5CHIQ9f3H1QoBeSo01u4AFNXXR oXBkzvsvuZOQFO/UtCgVV5f7eWeM8G4NwzstsfcK9DnWIhaMg+5EP/AY2Cs+gDBJBD7f t+SxpNcGtTCbSL6QxJTGWKxcAnYW0lm4Pj20Agp3iM0GW8OwKrbjrpix4jv0Fur493Wy qZ9RyudU0TKWMuJGNQ6x/HIoHD6XRc3Q9JJjNkRH6BQ3j+XEOvHWNSiIvgVmappi8fFh /y5JF/nSrsrfWRkyqvqYlFStt0IZzyNO5lqsZO7TxB9TvpvSyV/FFq+paS8ayvap4Eyp 3mRw== 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=D2TuyRJ0yqQrkcLWElUE4ZIgLO3OI9Gk2rEdLhT6MyZ0V1UpljZfEDlFX5YNowIw0q mXmo/TD0keB973B5h0yMuCYFxkXLd8eCky4HU5DqGmrPioNotmG/SZIViACQRxovF2tx caa32k6RKjyq7nhV3edb3p8C5wODrS7Of+5PfzSuz5lt6QLu9W5I7pMgKVXRcMD82r4W Aw7CYzz0c39Wb1V16Lt8yK5D/49tkbleAXGY0XanfoV2QCUt9LBDif/XOFH1UoPK+wyj lRRPIT9Pi5gMI3NDMXIaRBqZVE8cWJjjuVMmxFrBJbnfJ4dDdYtNFwsqDGJTN1DlqObN 6lqQ== X-Gm-Message-State: AOAM530AmL516BQmyEydoGXqqVW8cMiCEuFoIsfsMYbf8lI51Q1C0ce7 cvpQQ10nHZw0Yllne5LtUzYlhOm13EA6Tg5G X-Google-Smtp-Source: ABdhPJzFrb5eDd1gdj8JEnN32wnv5nD/EJ811Zcu+vqdpbH4IPQeo4wTR2ElG+znUYF/RZeonef0sw== X-Received: by 2002:a2e:8085:: with SMTP id i5mr3646614ljg.5.1611685976093; Tue, 26 Jan 2021 10:32:56 -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 s3sm3351036ljo.41.2021.01.26.10.32.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Jan 2021 10:32:55 -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: Tue, 26 Jan 2021 19:32:23 +0100 Message-Id: <20210126183226.2420903-3-mk@semihalf.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210126183226.2420903-1-mk@semihalf.com> References: <20210126183226.2420903-1-mk@semihalf.com> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH v2 2/5] 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 Tue Jan 26 18:32:24 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michal Krawczyk X-Patchwork-Id: 87354 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 D357FA052A; Tue, 26 Jan 2021 19:33:16 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 55032140F5E; Tue, 26 Jan 2021 19:33:02 +0100 (CET) Received: from mail-lj1-f174.google.com (mail-lj1-f174.google.com [209.85.208.174]) by mails.dpdk.org (Postfix) with ESMTP id 726E2140F3A for ; Tue, 26 Jan 2021 19:32:57 +0100 (CET) Received: by mail-lj1-f174.google.com with SMTP id a25so19696892ljn.0 for ; Tue, 26 Jan 2021 10:32:57 -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=V1NI6D7ZTLJhddgySqIM0LfLWHgx+TiMYgiSY4yFQzDP0jRUSAWIdsiUZxhH22zxAZ /mtYpUp8wV1WYxzSuY3MEy7O15ZKjroTis/kZtClECr8nqNOfIi4ZTiSfkk2CEIyvK7+ 6wo10bT1xdGZozRECi9fipjhh3cCRPgkQYC5yyPbj2mFa1EkTGetfgxHqbAy3XKzKkbE QyoDAe9kGnO0zQxUKGwRkAdlG/TzSPTkGEyNrycXupbq4QSl5GQRV67j5asD6//nRFoz Lr2UbSHsD8YDjAzXhMgqj+P++KV3BM8PvBTKFjLN+kzIwM1kXlgbwOv2XqHoVgr9p9dd GLsw== 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=BIKmMJSiP4rkmrAC1PzAsE8huU/h+GdHcAwqy+5wMTiTEz0RIpq3KCUdisUgUfaJW8 aJn8r7ovYSf6u4YJ2LE1/B/2eMQc9vP6zjxx27yr/v1Vsh+Qw4WL9kPenZIwcQUObQm+ DsI1z5kicT4xk21SW4vvlo5tR8OSZg+jqwAHq05cIK8pnXa13iJqP8QJuVbAub+fNwwh HvqH/DACkqmFHeupjb5lm/URbW1sY22yiV6iIfed3VwZjWfrH2v+XBEiFBWKLvSlPOO9 zQRjwkHEJkwC/n22vSNuQtR3sciYBmtmmxOHO9ZT6Ozit1JJxid/7y9Xv3UGw0Ty9ta4 hNSQ== X-Gm-Message-State: AOAM5317d2gJ5EigAIZU0CZhFDSXZQAp9Jf50v6dwn3uK2kcrOyXAUZ2 xScKx3AAuejIkpxZTijSaZTpjJkGkvNwNrh6 X-Google-Smtp-Source: ABdhPJzvWINqWhTxI9tUP3ZqptYq9IuYrLCW4/W6GLYjOuBlI3YMYhwQylJieiBzaey6WwINLPJ+3g== X-Received: by 2002:a2e:574c:: with SMTP id r12mr3417519ljd.290.1611685977327; Tue, 26 Jan 2021 10:32:57 -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 s3sm3351036ljo.41.2021.01.26.10.32.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Jan 2021 10:32:56 -0800 (PST) From: Michal Krawczyk To: dev@dpdk.org Cc: gtzalik@amazon.com, igorch@amazon.com, mw@semihalf.com, Michal Krawczyk , Ido Segev Date: Tue, 26 Jan 2021 19:32:24 +0100 Message-Id: <20210126183226.2420903-4-mk@semihalf.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210126183226.2420903-1-mk@semihalf.com> References: <20210126183226.2420903-1-mk@semihalf.com> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH v2 3/5] 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 Tue Jan 26 18:32:25 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michal Krawczyk X-Patchwork-Id: 87355 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 819B1A052A; Tue, 26 Jan 2021 19:33:23 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 97C48140F62; Tue, 26 Jan 2021 19:33:03 +0100 (CET) Received: from mail-lj1-f177.google.com (mail-lj1-f177.google.com [209.85.208.177]) by mails.dpdk.org (Postfix) with ESMTP id 89B53140F4B for ; Tue, 26 Jan 2021 19:32:59 +0100 (CET) Received: by mail-lj1-f177.google.com with SMTP id a25so19696983ljn.0 for ; Tue, 26 Jan 2021 10:32:59 -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=GHz8VniXDoXtZL0Mt6PFs8rzO00QK0yPEk7qqQrppuU34MklxqQpMfNMqAOdoUv8kH dOQ43ltt/zhyHQL3AUXLJYyGyxS1JOzDpQK8IU0QNEwvyg+BfGHUJxMRs+7M7qEGHdy6 Lrz9dRJTFIlAoQVuKAZd/fLNKctEGf8X++gAbcrwwBnUHU/+T3RY70pRte9A6dCP4cM9 njzpaBGFm/FP46sd1FKRcwNIweMIPK/GO6cqgjJrYMpJh8IvnpydHD9/wUf9zOcgfuFS h+fkDSR2Rf4QkzKP3rq4YO4vfnqCVlf2H+CZVuU37qUeFHxWm/2m79Uw8/02LVQmcW+J jiyQ== 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=F/TXrX1+La1htEoP3IsLlhYef855DAXWRAKYEgAW7dYeeQBMtkwi8JO/zxAn5dP5S6 ltewFqczNsRttaCd0UDBoTjY02FndvUXEkQhfPneYjKmqMJvOxVOjSh6+xCyXJ+jCBWN zacQceM5tHsLHT9lvAUWPh/LPbQJvXCyMK6hGeyXFVw7SWMlKewBWDHYtXM51y/VRNkS HavE1wrIE/a9QuGajGUSxas9urx18K2jim/fAUUC041g2tswW2M2iVK8OMILeGm+Ex5l xT2aA7KSYliy5XpK04/mQtwY38kOqlX3+mihMkXR+rb6Tv+uCjhcWGxS47FBv49uetwS dfjQ== X-Gm-Message-State: AOAM530dCpZahOFO7+53+gELv4KQg5KycOcw1UzlWpU2X97dYH/D2oVc FH1PtIBCtIeqfby10Ym98sGn2VBmW27cMRrB X-Google-Smtp-Source: ABdhPJw3NrNLCr/hVHjLfRuMenHBtma61n5oGoAoXgV2zEkmGc4ukNpu+t/QbRSSmXGEYFoqq2AGRA== X-Received: by 2002:a2e:6c02:: with SMTP id h2mr3630213ljc.277.1611685978918; Tue, 26 Jan 2021 10:32:58 -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 s3sm3351036ljo.41.2021.01.26.10.32.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Jan 2021 10:32:58 -0800 (PST) From: Michal Krawczyk To: dev@dpdk.org Cc: gtzalik@amazon.com, igorch@amazon.com, mw@semihalf.com, Michal Krawczyk Date: Tue, 26 Jan 2021 19:32:25 +0100 Message-Id: <20210126183226.2420903-5-mk@semihalf.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210126183226.2420903-1-mk@semihalf.com> References: <20210126183226.2420903-1-mk@semihalf.com> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH v2 4/5] 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; From patchwork Tue Jan 26 18:32:26 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michal Krawczyk X-Patchwork-Id: 87356 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 C4764A052A; Tue, 26 Jan 2021 19:33:32 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 53E0E140F6F; Tue, 26 Jan 2021 19:33:06 +0100 (CET) Received: from mail-lj1-f178.google.com (mail-lj1-f178.google.com [209.85.208.178]) by mails.dpdk.org (Postfix) with ESMTP id 01463140F5C for ; Tue, 26 Jan 2021 19:33:02 +0100 (CET) Received: by mail-lj1-f178.google.com with SMTP id f2so15608499ljp.11 for ; Tue, 26 Jan 2021 10:33:01 -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=iAUKnSEG4wzEy9lEZEGtBaDUlAxNZ9xcGjnjAY5dzrw=; b=EXVkcpseNBC3e7YZSkttJjQDdSOYXUN9NyAXMOEv2Yl1AU4RxZUs4GnlwUgqLtKj5I IsXSKkBXMzXroG0XTPg6WFEO5Bcvbk9twDyrS7stQp40dl+izCZ1sxnewEBwhb0D+gXy 5ZkHKfFVwyFl6DBArDIBRvrfLNL89hGrL3LEKs4RyAcp1EqKdMBnt47XgDbfYgPu6baH 70Uo1IMRlxxz+R3YaKMWo/LCcLX/jzOkCczXK9GjLVwXHpJOLBmb7IdulW0S9VNk09TD Z1tHSzMJzT5NTsy4FCYycSni73cCUvVtOYzSa2S+fxVPhOjtG25lghDzgoqIeSM1jcvV XmWw== 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=iAUKnSEG4wzEy9lEZEGtBaDUlAxNZ9xcGjnjAY5dzrw=; b=USCR0oaIRyHyv424zIYzEVEd2Q1DpxeRfWDv/G3AMajAXASMw2OtQF2CPZt3ZvU6Gb 5Wd0I5j3PHkRngZsbCFTjJe2rKSr0e+EcG+llZrHsgNKNOWN6YFD0iAF13OlKBirt1WZ icJ46taDTqDgDXPhSvYfJyN2yqysoezISGEO5XapNiQQpqUj+FZKMXaJqfqEgjryO+yb ejw8MVHmwqbChgdfMgHaYrx+9MGsWZt+cIx08w27oFp4kOyRLxXtm9FSbYVWGarZ/Q38 VXZhIXlkgNHWJwhWuunuJIUU264pwzHozVNPptMtpYwmDLWlY+J1u2bpIpytp+IJ0oxs HVPA== X-Gm-Message-State: AOAM533g7LI2mXSTvjBdq5+7Y4xIVCg94iv1YVVEv7Z6SuBBh9axYk6w zG3O8IDhpnXs/DlMLC9ZsW8TROPkH1kw4wxS X-Google-Smtp-Source: ABdhPJye4O+/d3D8GCwlhdccdwjrgsBn7O021rJ26MwdsQKoW32SBy//MFbYNDs7jFI8y9J1zgss8Q== X-Received: by 2002:a2e:8608:: with SMTP id a8mr3543053lji.89.1611685981345; Tue, 26 Jan 2021 10:33:01 -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 s3sm3351036ljo.41.2021.01.26.10.32.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 26 Jan 2021 10:33:00 -0800 (PST) From: Michal Krawczyk To: dev@dpdk.org Cc: gtzalik@amazon.com, igorch@amazon.com, mw@semihalf.com, Michal Krawczyk Date: Tue, 26 Jan 2021 19:32:26 +0100 Message-Id: <20210126183226.2420903-6-mk@semihalf.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210126183226.2420903-1-mk@semihalf.com> References: <20210126183226.2420903-1-mk@semihalf.com> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH v2 5/5] net/ena: prevent double doorbell 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 Add per-tx-ring flag for packets that were pushed to HW but await doorbell. That is to prevent a situation when a doorbell is sent due to reaching Tx burst threshold and next send fails (e.g., due to queue full). In such case we shouldn't send another doorbell because there are no actual packets waiting for transmission. Signed-off-by: Igor Chauskin Reviewed-by: Michal Krawczyk --- drivers/net/ena/ena_ethdev.c | 7 +++++-- drivers/net/ena/ena_ethdev.h | 4 ++++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/drivers/net/ena/ena_ethdev.c b/drivers/net/ena/ena_ethdev.c index 4083568d5d..8baec80040 100644 --- a/drivers/net/ena/ena_ethdev.c +++ b/drivers/net/ena/ena_ethdev.c @@ -1282,6 +1282,7 @@ static int ena_tx_queue_setup(struct rte_eth_dev *dev, txq->ring_size = nb_desc; txq->size_mask = nb_desc - 1; txq->numa_socket_id = socket_id; + txq->pkts_without_db = false; txq->tx_buffer_info = rte_zmalloc("txq->tx_buffer_info", sizeof(struct ena_tx_buffer) * @@ -2522,6 +2523,7 @@ static int ena_xmit_mbuf(struct ena_ring *tx_ring, struct rte_mbuf *mbuf) tx_ring->id); ena_com_write_sq_doorbell(tx_ring->ena_com_io_sq); tx_ring->tx_stats.doorbells++; + tx_ring->pkts_without_db = false; } /* prepare the packet's descriptors to dma engine */ @@ -2603,7 +2605,7 @@ static uint16_t eth_ena_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, for (sent_idx = 0; sent_idx < nb_pkts; sent_idx++) { if (ena_xmit_mbuf(tx_ring, tx_pkts[sent_idx])) break; - + tx_ring->pkts_without_db = true; rte_prefetch0(tx_pkts[ENA_IDX_ADD_MASKED(sent_idx, 4, tx_ring->size_mask)]); } @@ -2612,10 +2614,11 @@ static uint16_t eth_ena_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, ena_com_free_q_entries(tx_ring->ena_com_io_sq); /* If there are ready packets to be xmitted... */ - if (sent_idx > 0) { + if (likely(tx_ring->pkts_without_db)) { /* ...let HW do its best :-) */ ena_com_write_sq_doorbell(tx_ring->ena_com_io_sq); tx_ring->tx_stats.doorbells++; + tx_ring->pkts_without_db = false; } ena_tx_cleanup(tx_ring); diff --git a/drivers/net/ena/ena_ethdev.h b/drivers/net/ena/ena_ethdev.h index 7bb74a1d06..ae235897ee 100644 --- a/drivers/net/ena/ena_ethdev.h +++ b/drivers/net/ena/ena_ethdev.h @@ -100,6 +100,10 @@ struct ena_ring { enum ena_ring_type type; enum ena_admin_placement_policy_type tx_mem_queue_type; + + /* Indicate there are Tx packets pushed to the device and wait for db */ + bool pkts_without_db; + /* Holds the empty requests for TX/RX OOO completions */ union { uint16_t *empty_tx_reqs;