From patchwork Tue Feb 22 16:06:14 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michal Krawczyk X-Patchwork-Id: 107977 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 AADC3A0352; Tue, 22 Feb 2022 17:06:57 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 8B9CB41147; Tue, 22 Feb 2022 17:06:53 +0100 (CET) Received: from mail-ed1-f45.google.com (mail-ed1-f45.google.com [209.85.208.45]) by mails.dpdk.org (Postfix) with ESMTP id 595F940DF4 for ; Tue, 22 Feb 2022 17:06:52 +0100 (CET) Received: by mail-ed1-f45.google.com with SMTP id x5so37985946edd.11 for ; Tue, 22 Feb 2022 08:06:52 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=semihalf-com.20210112.gappssmtp.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=uE0gGgbjGOCvTbimjYy8T+rOvfXFdNAgY9VNEyHZ80g=; b=wglDHkkikWvlWoNSse7uuOOlLQ391xu9vt5LvpKQmDqx+EYXB+mfN8kNi+A2yQkA35 AVohMXCU9KmTWIX7E6KTUpYw0FM7AorpNXOP5uu7HNtIGeIJVp4emwDXjE9o5X6ky5Rp 4ku8PjiDo7MD1hAZNwbwWwZGtNjaYaFPoxMdU8bnIxQ6M2fIR8Qa9Wq4ocE/nxWfpIwi ZiilaX/EgLRMaF4A21TAwKL1vPD0Pxii+v8Rr7vmo+2xuTtx/oFKnlIzTB8qUR7jSz+W o9rAU7uKvmnBVKt76n+zdZPhA3Bu956lqmbY1WhvV/acyslwNbcyj8MeJBxXa/3rFoS+ 9HCw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=uE0gGgbjGOCvTbimjYy8T+rOvfXFdNAgY9VNEyHZ80g=; b=Qt27PLRwuGqzEz5Hf3PSVnv0uc2IR5K19m0yI7fwoAmL3H+dHBQ/i6FkC0sXKaRAwN 1CKFUZO5CmdDketY8WcQg75vgOqPfCHqlYf7VqgEzZYHpawLw9p7p7+Tr1bjOSZtZN0V W8moxZCDE5nHgoMePkJHvkl02CKS7aa4eUE5hXNtQ25nl0ThVJNAVK+kdL/uFYPe8LxC IjZVZahR9rtt7c2/jyocz2cK3X3xHEiq67wNekQfUM8viN/EFx3EgtzPcnt87Jc4GHli 6IMSBEbJix7+YOirwRhw8g93HkKwyIdJ6KZ54ZTa+1x2tCextsoZTBVLotda53/gjLXX HrAw== X-Gm-Message-State: AOAM531kxmTXyMnfP2rG3e9r0ibx5c+CWHxOQ402otqxifziDlGQ4jGw mVydeEw5PNWX0fD9oNOe9oCKSAE74W+BTA== X-Google-Smtp-Source: ABdhPJzMyxc+TTvKsl/3MllvJdW2O8ldRpJUBXRSF75F0B+VrrzCXZMJjQVbMMhmXqHNvH/AR4sNrQ== X-Received: by 2002:aa7:cf15:0:b0:410:d26b:c8d5 with SMTP id a21-20020aa7cf15000000b00410d26bc8d5mr27267833edy.134.1645546011781; Tue, 22 Feb 2022 08:06:51 -0800 (PST) Received: from DESKTOP-U5LNN3J.localdomain (89-79-181-52.dynamic.chello.pl. [89.79.181.52]) by smtp.gmail.com with ESMTPSA id x6sm10013477edv.109.2022.02.22.08.06.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 22 Feb 2022 08:06:51 -0800 (PST) From: Michal Krawczyk To: dev@dpdk.org Cc: shaibran@amazon.com, upstream@semihalf.com, Michal Krawczyk , Artur Rojek , Dawid Gorecki , Igor Chauskin Subject: [PATCH 01/21] net/ena: remove linearization function Date: Tue, 22 Feb 2022 17:06:14 +0100 Message-Id: <20220222160634.24489-2-mk@semihalf.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220222160634.24489-1-mk@semihalf.com> References: <20220222160634.24489-1-mk@semihalf.com> MIME-Version: 1.0 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 The linearization of the mbuf isn't common practice for the PMD, as it can expose it's capabilities to the upper layer using rte_eth_dev_info_get(). Moreover, the rte_eth_tx_prepare() function should also verify if the number of segments inside the mbuf isn't too high. Because of those 2 circumstances, it may be safer to avoid modifying mbuf on PMD's Tx side and remove linearization at all. Instead, add verification of the number of segments to the eth_ena_prep_pkts(). Signed-off-by: Michal Krawczyk Reviewed-by: Artur Rojek Reviewed-by: Dawid Gorecki Reviewed-by: Igor Chauskin Reviewed-by: Shai Brandes --- drivers/net/ena/ena_ethdev.c | 74 +++++++++--------------------------- drivers/net/ena/ena_ethdev.h | 2 - 2 files changed, 19 insertions(+), 57 deletions(-) diff --git a/drivers/net/ena/ena_ethdev.c b/drivers/net/ena/ena_ethdev.c index db2b5ec8e7..deaee30664 100644 --- a/drivers/net/ena/ena_ethdev.c +++ b/drivers/net/ena/ena_ethdev.c @@ -93,8 +93,6 @@ static const struct ena_stats ena_stats_tx_strings[] = { ENA_STAT_TX_ENTRY(cnt), ENA_STAT_TX_ENTRY(bytes), ENA_STAT_TX_ENTRY(prepare_ctx_err), - ENA_STAT_TX_ENTRY(linearize), - ENA_STAT_TX_ENTRY(linearize_failed), ENA_STAT_TX_ENTRY(tx_poll), ENA_STAT_TX_ENTRY(doorbells), ENA_STAT_TX_ENTRY(bad_req_id), @@ -2408,6 +2406,17 @@ eth_ena_prep_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, return i; } + if (unlikely(m->nb_segs >= tx_ring->sgl_size && + !(tx_ring->tx_mem_queue_type == ENA_ADMIN_PLACEMENT_POLICY_DEV && + m->nb_segs == tx_ring->sgl_size && + m->data_len < tx_ring->tx_max_header_size))) { + PMD_TX_LOG(DEBUG, + "mbuf[%" PRIu32 "] has too many segments: %" PRIu16 "\n", + i, m->nb_segs); + rte_errno = EINVAL; + return i; + } + #ifdef RTE_LIBRTE_ETHDEV_DEBUG /* Check if requested offload is also enabled for the queue */ if ((ol_flags & RTE_MBUF_F_TX_IP_CKSUM && @@ -2554,56 +2563,6 @@ static void ena_update_hints(struct ena_adapter *adapter, } } -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; - - ena_dev = &tx_ring->adapter->ena_dev; - num_segments = mbuf->nb_segs; - header_len = mbuf->data_len; - - if (likely(num_segments < tx_ring->sgl_size)) - 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)) - 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_TX_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)) { - PMD_TX_LOG(WARNING, "Mbuf linearize failed\n"); - rte_atomic64_inc(&tx_ring->adapter->drv_stats->ierrors); - ++tx_ring->tx_stats.linearize_failed; - 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_TX_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, struct ena_tx_buffer *tx_info, struct rte_mbuf *mbuf, @@ -2688,9 +2647,14 @@ static int ena_xmit_mbuf(struct ena_ring *tx_ring, struct rte_mbuf *mbuf) int nb_hw_desc; int rc; - rc = ena_check_space_and_linearize_mbuf(tx_ring, mbuf); - if (unlikely(rc)) - return rc; + /* 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, + mbuf->nb_segs + 2)) { + PMD_DRV_LOG(DEBUG, "Not enough space in the tx queue\n"); + return ENA_COM_NO_MEM; + } next_to_use = tx_ring->next_to_use; diff --git a/drivers/net/ena/ena_ethdev.h b/drivers/net/ena/ena_ethdev.h index f99e4f3984..f47ba3fb02 100644 --- a/drivers/net/ena/ena_ethdev.h +++ b/drivers/net/ena/ena_ethdev.h @@ -103,8 +103,6 @@ struct ena_stats_tx { u64 cnt; u64 bytes; u64 prepare_ctx_err; - u64 linearize; - u64 linearize_failed; u64 tx_poll; u64 doorbells; u64 bad_req_id; From patchwork Tue Feb 22 16:06:15 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michal Krawczyk X-Patchwork-Id: 107978 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 DC6E1A0352; Tue, 22 Feb 2022 17:07:03 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 595D94114E; Tue, 22 Feb 2022 17:06:56 +0100 (CET) Received: from mail-ed1-f41.google.com (mail-ed1-f41.google.com [209.85.208.41]) by mails.dpdk.org (Postfix) with ESMTP id 8538041144 for ; Tue, 22 Feb 2022 17:06:53 +0100 (CET) Received: by mail-ed1-f41.google.com with SMTP id s14so20717238edw.0 for ; Tue, 22 Feb 2022 08:06:53 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=semihalf-com.20210112.gappssmtp.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=7KiXXJkZFs2qCSF+Mclhm1PBHziNSclPNxIDnRkxyaY=; b=37CN8PI2wln9l+Ej6bC27GHN6/adnwzjRqC4e3MTuOPo0s2SbwYf7EGB7FiPfMn3/6 3Dgb3XqrgU76zQGK8KSpr28KyAI6gy+u7tbLTrlfX7T572wdSRJesR+U/iIbi/fYgWwO STJBvjFfa+K9O7WFXl8THozSEmNBNSLCqNMbDRZ+uL/tMPexTukL8hTHLRvY6UoIh9p2 Qsq1gNKJ0l96fUqlT2uNUbDWEAQsV9XcxbQcZBRSLQfLcRZW2+RZT7No0kwUlcnRoWaz 59/coZunLLwNiOe6a9U2dKUhvxFI4Sld6/mM1U/zEtA/fDZdKOvTfVks04CsZHPFZTkg mSSw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=7KiXXJkZFs2qCSF+Mclhm1PBHziNSclPNxIDnRkxyaY=; b=tUfuJo49YtfcGmi0VJJCKaFZc/L2FalKWQ+bNBNPcSW+6e+BPRnNBq5FFNArGWLFF4 NzF3Gal6bU/36tlBUHbOqPMzWUKAb57837nvBGKuwzhTK6jfajDzeYFYCyS+TxdeqHJZ bbZhcIyIXpy21QjcqvqTHZFnGDr5iIiVtdNpmXFSeHnWe+V5zWVXc7qf/CuwGJ2Hdn5o C7YkdWWg+pGyAaYqjyX124PeCr6ozuEjlo6PoqNSfZb64u2Wt+KIdS0nnKvBdkgK8mxE +7S0b8VAvT1r+0y8cAfqAFA47W0cN2Bo3ASY0QbcFor4W5stTqfmSod4z7ZOg5H8GLkK BJVA== X-Gm-Message-State: AOAM532lZikwsV/rcISFfSlN6qlAP7Z9AJRvh88qDGbJYA1Wrriw3IyJ Y8jKkpUqepQb0z7QXzSHGJU/HdgWPp87PA== X-Google-Smtp-Source: ABdhPJzwqdFe1WKNZSYsD7eUqO5yCVHeT6m/FAvgzd8dN1YM8IxQpor/cRoA7MtElS/jyQgzVSgbbQ== X-Received: by 2002:aa7:d1d7:0:b0:410:d6cf:82b2 with SMTP id g23-20020aa7d1d7000000b00410d6cf82b2mr26423464edp.193.1645546012916; Tue, 22 Feb 2022 08:06:52 -0800 (PST) Received: from DESKTOP-U5LNN3J.localdomain (89-79-181-52.dynamic.chello.pl. [89.79.181.52]) by smtp.gmail.com with ESMTPSA id x6sm10013477edv.109.2022.02.22.08.06.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 22 Feb 2022 08:06:52 -0800 (PST) From: Michal Krawczyk To: dev@dpdk.org Cc: shaibran@amazon.com, upstream@semihalf.com, Michal Krawczyk , Dawid Gorecki Subject: [PATCH 02/21] net/ena: add assertion on Tx info mbuf Date: Tue, 22 Feb 2022 17:06:15 +0100 Message-Id: <20220222160634.24489-3-mk@semihalf.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220222160634.24489-1-mk@semihalf.com> References: <20220222160634.24489-1-mk@semihalf.com> MIME-Version: 1.0 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 To make sure there is no outstanding mbuf in the reused Tx queue (due to unproper cleanup, or some invalid logic on Tx path), the assertion was added on the Tx path. As it's being compiled out in the release version, it won't affect the IO path performance. Signed-off-by: Michal Krawczyk Reviewed-by: Dawid Gorecki Reviewed-by: Shai Brandes --- 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 deaee30664..34fb43cb00 100644 --- a/drivers/net/ena/ena_ethdev.c +++ b/drivers/net/ena/ena_ethdev.c @@ -2661,6 +2661,7 @@ static int ena_xmit_mbuf(struct ena_ring *tx_ring, struct rte_mbuf *mbuf) req_id = tx_ring->empty_tx_reqs[next_to_use]; tx_info = &tx_ring->tx_buffer_info[req_id]; tx_info->num_of_bufs = 0; + RTE_ASSERT(tx_info->mbuf == NULL); ena_tx_map_mbuf(tx_ring, tx_info, mbuf, &push_header, &header_len); From patchwork Tue Feb 22 16:06:16 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michal Krawczyk X-Patchwork-Id: 107979 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 DA14AA0352; Tue, 22 Feb 2022 17:07:10 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 36D5341153; Tue, 22 Feb 2022 17:06:57 +0100 (CET) Received: from mail-ej1-f41.google.com (mail-ej1-f41.google.com [209.85.218.41]) by mails.dpdk.org (Postfix) with ESMTP id 52C1440E64 for ; Tue, 22 Feb 2022 17:06:55 +0100 (CET) Received: by mail-ej1-f41.google.com with SMTP id qk11so44466690ejb.2 for ; Tue, 22 Feb 2022 08:06:55 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=semihalf-com.20210112.gappssmtp.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=6/lJVfQbO9eZClbwbnrmXXzYJvD9qdB7Eow4nLZwcQ4=; b=JU4qAC1mqIHoZXqlWAOJ1RuItNtFsKvO2bTsWkCYm4TrIm7JBi1D3gwVy2k2IWzRIS xXO851CzeLFd1z/7nQ/NMpcpEt9BlDAiwJTwUOVfgNnI9QNByeD41khtYLkO+BFvAvmn ZY2+P8RhFj15N+DfYTL0WFshnnma5wqkdD133UBWrTz4A6IAc/u2fvlALf8iIQf6jUh3 a+qY/UCH+VArhGZtPI1Qf1LfeYCMDiQIgQzxcJhG35MNsIijXNo1Bp/DogqO/eWecsKf U+sEpKE2/W4uU3Uib5d0NEba8o/3cXUVgXDFPq1jowPjoc8Pb6r9F2oAodyVTzkoRfvO GFvw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=6/lJVfQbO9eZClbwbnrmXXzYJvD9qdB7Eow4nLZwcQ4=; b=pdx/EqNq91HFks/i6qjw7VoSirfylxixX3gR5XGgDRtbqfs9e59vU6Me9qLxxFDjAg 6OlIIkNLJRTexJ7DyhwXSeuni+y0CidBunuZLJjVOm8gujDyjH1At7NwT9SxSd2gpUu+ hEsU1g1PCdgiRHoW5oOo2exFszr5XTM96yc2uggKKagjkf5gC9wy4jKcyPB0NKaE9wrN 4vPA5NGCGt8bqesWFG/kiaWtPCyebMKlgUz99PfJgXVxuAk9yEVNF8uZoQMJ5wfQjwzB JmvzkFX7t74Rt4BK1828ZJlH4l212eG0a0qu5lVApTQBC7CPKHr8S4l8VdNA14rADL5G zSyw== X-Gm-Message-State: AOAM532CudeT6rK/cO4OD+IMTYzTkG3bzrUgdW8pPDzU9hIFK/7Hx6fR 0+eb2DeXzf6LP/oCGicVpNpCigDDQkliyA== X-Google-Smtp-Source: ABdhPJx5qjavifJlqZ9Xn2Dr3CWibHvdXQwtcc0e7iJu+gz1fAHIB5frAzd6eRIxzgc3C96W70YbVQ== X-Received: by 2002:a17:906:4752:b0:6ce:61d9:b632 with SMTP id j18-20020a170906475200b006ce61d9b632mr20606778ejs.694.1645546014447; Tue, 22 Feb 2022 08:06:54 -0800 (PST) Received: from DESKTOP-U5LNN3J.localdomain (89-79-181-52.dynamic.chello.pl. [89.79.181.52]) by smtp.gmail.com with ESMTPSA id x6sm10013477edv.109.2022.02.22.08.06.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 22 Feb 2022 08:06:53 -0800 (PST) From: Michal Krawczyk To: dev@dpdk.org Cc: shaibran@amazon.com, upstream@semihalf.com, Michal Krawczyk , Artur Rojek , Dawid Gorecki , Igor Chauskin Subject: [PATCH 03/21] net/ena: remove unused enumeration Date: Tue, 22 Feb 2022 17:06:16 +0100 Message-Id: <20220222160634.24489-4-mk@semihalf.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220222160634.24489-1-mk@semihalf.com> References: <20220222160634.24489-1-mk@semihalf.com> MIME-Version: 1.0 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 The enumeration seems to be leftover from porting the Linux driver to the DPDK. It was used nowhere and refers to the ethtool which is not present in the DPDK. Signed-off-by: Michal Krawczyk Reviewed-by: Artur Rojek Reviewed-by: Dawid Gorecki Reviewed-by: Igor Chauskin Reviewed-by: Shai Brandes --- drivers/net/ena/ena_ethdev.c | 5 ----- 1 file changed, 5 deletions(-) diff --git a/drivers/net/ena/ena_ethdev.c b/drivers/net/ena/ena_ethdev.c index 34fb43cb00..2de2dcf12f 100644 --- a/drivers/net/ena/ena_ethdev.c +++ b/drivers/net/ena/ena_ethdev.c @@ -38,11 +38,6 @@ #define ENA_PTYPE_HAS_HASH (RTE_PTYPE_L4_TCP | RTE_PTYPE_L4_UDP) -enum ethtool_stringset { - ETH_SS_TEST = 0, - ETH_SS_STATS, -}; - struct ena_stats { char name[ETH_GSTRING_LEN]; int stat_offset; From patchwork Tue Feb 22 16:06:17 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michal Krawczyk X-Patchwork-Id: 107980 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 40C05A0352; Tue, 22 Feb 2022 17:07:18 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 2819B41154; Tue, 22 Feb 2022 17:06:59 +0100 (CET) Received: from mail-ed1-f41.google.com (mail-ed1-f41.google.com [209.85.208.41]) by mails.dpdk.org (Postfix) with ESMTP id 5720C41148 for ; Tue, 22 Feb 2022 17:06:56 +0100 (CET) Received: by mail-ed1-f41.google.com with SMTP id z22so38070307edd.1 for ; Tue, 22 Feb 2022 08:06:56 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=semihalf-com.20210112.gappssmtp.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=essxYOnKPPe+crKy13EzyluvIY0P3kBRk7ehFkEAhZ4=; b=hOQHz1kwLPn7GPUXZTFys1RXUIwSP1XDQjX7Pt96KHtRJTCk0RV/3cCMPmUIieu6Te z6h3M3KwSLO/LO8mQqIRQi1lZGYYoiv2ZrniEwF4tL04l7HSMLKvmCb5CFQYuOxhbjhR H3vIr/rrBYkBYnYq7J6diXCa570rf3iMg0KsyWn/NFFBUm7mx5rkzQnbLS5l1sSZBk/+ IoBM1+d5JrJVaqLTpFoCF4l84TPosrQ1+dqqE8wVDb3yIMEgJob9+Jagz5bbYileclef X1J9Wi7vFTLo60hxXu3rBrk3kJQUfrytXgIeWc+EzbpmZtLm+QE7xIYGdg3Zyb/PaItW p7Gg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=essxYOnKPPe+crKy13EzyluvIY0P3kBRk7ehFkEAhZ4=; b=Lk3FpCzdnWzt9qJ8D1qmL+L6sp/MQeTm3usJyCKGTFgS0EGH3cr0zdtBwOaRSvQAvU aTG2lYOqm6RRDkfbpFbvYiUunyqZ1yL8rxTykeGhnNq8YahqbWMntokDQIVInshOV317 LHIuNOSMtu7N8cB++lRBqgOWnWhPEZeyE5TpfSfdpBOqiHChE/SiJkcEBh6R3zoNuIFu FxwTtTdOg7WvpMqXnB6lldyA4Wm2+SnEk2/IhNTAxI3KQRrTLocdN4t2Bqv/rkvyhDtj CdBInZiCmthyDOf1Rg+N7X63mcXbylvVhKovzZ3tFW0iTrHHYWO1hjsla/YSVTIpIbmL B6KA== X-Gm-Message-State: AOAM532JcBnZjAsin/qWWu8zCIStBSbUsLiW2H7ZlshRS8O6otalLMZq CIgo58sEdnBpGgjUGFioBC4fByqfHs3Png== X-Google-Smtp-Source: ABdhPJyzgpSC45nET7TPGC2XG4GRTO9OZY8B+22FZNI5fy1gibVeYbBlBV1lkRRP9xJ3lYJWwH9T1w== X-Received: by 2002:a50:fc09:0:b0:40f:e199:b266 with SMTP id i9-20020a50fc09000000b0040fe199b266mr26576854edr.350.1645546015742; Tue, 22 Feb 2022 08:06:55 -0800 (PST) Received: from DESKTOP-U5LNN3J.localdomain (89-79-181-52.dynamic.chello.pl. [89.79.181.52]) by smtp.gmail.com with ESMTPSA id x6sm10013477edv.109.2022.02.22.08.06.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 22 Feb 2022 08:06:55 -0800 (PST) From: Michal Krawczyk To: dev@dpdk.org Cc: shaibran@amazon.com, upstream@semihalf.com, Michal Krawczyk , Artur Rojek , Dawid Gorecki , Igor Chauskin Subject: [PATCH 04/21] net/ena: remove unused offloads variables Date: Tue, 22 Feb 2022 17:06:17 +0100 Message-Id: <20220222160634.24489-5-mk@semihalf.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220222160634.24489-1-mk@semihalf.com> References: <20220222160634.24489-1-mk@semihalf.com> MIME-Version: 1.0 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 Those variables are being set, but never read. As they seem to be leftover from the old offloads API and don't have any purpose right now, they are simply being removed. Signed-off-by: Michal Krawczyk Reviewed-by: Artur Rojek Reviewed-by: Dawid Gorecki Reviewed-by: Igor Chauskin Reviewed-by: Shai Brandes --- drivers/net/ena/ena_ethdev.c | 3 --- drivers/net/ena/ena_ethdev.h | 5 ----- 2 files changed, 8 deletions(-) diff --git a/drivers/net/ena/ena_ethdev.c b/drivers/net/ena/ena_ethdev.c index 2de2dcf12f..de5fdb8f1d 100644 --- a/drivers/net/ena/ena_ethdev.c +++ b/drivers/net/ena/ena_ethdev.c @@ -2015,9 +2015,6 @@ static int ena_dev_configure(struct rte_eth_dev *dev) */ adapter->tx_cleanup_stall_delay = adapter->missing_tx_completion_to / 2; - adapter->tx_selected_offloads = dev->data->dev_conf.txmode.offloads; - adapter->rx_selected_offloads = dev->data->dev_conf.rxmode.offloads; - return 0; } diff --git a/drivers/net/ena/ena_ethdev.h b/drivers/net/ena/ena_ethdev.h index f47ba3fb02..4dfa604d51 100644 --- a/drivers/net/ena/ena_ethdev.h +++ b/drivers/net/ena/ena_ethdev.h @@ -278,11 +278,6 @@ struct ena_adapter { struct ena_driver_stats *drv_stats; enum ena_adapter_state state; - uint64_t tx_supported_offloads; - uint64_t tx_selected_offloads; - uint64_t rx_supported_offloads; - uint64_t rx_selected_offloads; - bool link_status; enum ena_regs_reset_reason_types reset_reason; From patchwork Tue Feb 22 16:06:18 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michal Krawczyk X-Patchwork-Id: 107981 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 2B516A0352; Tue, 22 Feb 2022 17:07:28 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 529F141163; Tue, 22 Feb 2022 17:07:00 +0100 (CET) Received: from mail-ej1-f44.google.com (mail-ej1-f44.google.com [209.85.218.44]) by mails.dpdk.org (Postfix) with ESMTP id 04D4341154 for ; Tue, 22 Feb 2022 17:06:57 +0100 (CET) Received: by mail-ej1-f44.google.com with SMTP id p15so44257340ejc.7 for ; Tue, 22 Feb 2022 08:06:57 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=semihalf-com.20210112.gappssmtp.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=l1kx888eKfNexEvUoiLHNaU4h6I1k9z/A18uzo1khc0=; b=T/Llk93ij/M6Q1HpHlfSQYrJKGQdU/UA+Z5hgFOSO/e5msNT/T6oLzdMVamN4Pt+Lb Vsr5CUCRDpk4q258CPDEye/IQSEMhd6DXx6xnOomB0F9A2nDpYAQ2EauWdgibt8zBTDF 7XHrYQ8QU6z0+2D6sr1vd14Q8RBlnprXO0dBtI6QCOEdEr3IoD8AW4oAaY2xRtnxLMU2 PvRJXvfNSdTVLTEYOn7BCQjBHbPVxX+61FHjBHUM4jWamVxsxjmiaYFScOXrwOSIigsN Yvh0BFnZWQPmZMpMb1fUIeRmrOM2Yyq0BCqCavsUBvRozrrZecvSamLSwW101dp9T9zP /JEw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=l1kx888eKfNexEvUoiLHNaU4h6I1k9z/A18uzo1khc0=; b=UFCLkllBfVbpNbQqj704JqPV1MVRLzIFwBOMWGOVWv2Bd2bbBgQDm9iZNsUyxGNFlu wmsbBhe/+JzF+K8w9pqTui5Y8cJqc0uQKDIYzm4bI7PeTDnDArreODcGEW/2Vgtsk8RO GQtIyHp409musT8xMwVomIosK8SwFO7oTvHGwJEgmlMzd8kEcRWBCOLVYVqNp6ho1mbR Z8bMIJe/vd1crRWvGXnGhQqf1simt1KzDGWq0fNt4Qu2MOf0uUqiQzFuHMykd5RzRPKK /xJG2T4MTFbb+sGwkXx2qeRZ4tsYcso674qzpI0jZHzz5lxp2F2eJttdqt2hutX9Xytp I9Dg== X-Gm-Message-State: AOAM532x/o+CgsjhxO1erau+mEiWKJtE7yPDHlSo0JeXa0yAL08hb5+h bs0VV2KWP+A3rgSw9Lb+hjYhyYiVn9HJhw== X-Google-Smtp-Source: ABdhPJzdrx91MIeFJnJkbHNoA2EvGkOa1FxILlqnd6abiElF9UBAHSLH51Y9pOKcAbNMLIwUGgZPyg== X-Received: by 2002:a17:906:8a5b:b0:6ce:2a05:813b with SMTP id gx27-20020a1709068a5b00b006ce2a05813bmr20131160ejc.589.1645546017161; Tue, 22 Feb 2022 08:06:57 -0800 (PST) Received: from DESKTOP-U5LNN3J.localdomain (89-79-181-52.dynamic.chello.pl. [89.79.181.52]) by smtp.gmail.com with ESMTPSA id x6sm10013477edv.109.2022.02.22.08.06.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 22 Feb 2022 08:06:56 -0800 (PST) From: Michal Krawczyk To: dev@dpdk.org Cc: shaibran@amazon.com, upstream@semihalf.com, Michal Krawczyk , Dawid Gorecki Subject: [PATCH 05/21] net/ena: add extra Rx checksum related xstats Date: Tue, 22 Feb 2022 17:06:18 +0100 Message-Id: <20220222160634.24489-6-mk@semihalf.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220222160634.24489-1-mk@semihalf.com> References: <20220222160634.24489-1-mk@semihalf.com> MIME-Version: 1.0 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 * Split 'bad_csum' Rx statistic into 'l3_csum_bad' and 'l4_csum_bad' to be able to check which checksum was not calculated properly. * Add l4_csum_good statistic, which shows how many times L4 Rx checksum was properly offloaded. Signed-off-by: Michal Krawczyk Reviewed-by: Dawid Gorecki Reviewed-by: Shai Brandes --- doc/guides/rel_notes/release_22_03.rst | 8 +++++++ drivers/net/ena/ena_ethdev.c | 32 ++++++++++++++++---------- drivers/net/ena/ena_ethdev.h | 4 +++- 3 files changed, 31 insertions(+), 13 deletions(-) diff --git a/doc/guides/rel_notes/release_22_03.rst b/doc/guides/rel_notes/release_22_03.rst index 41923f50e6..6b69763f85 100644 --- a/doc/guides/rel_notes/release_22_03.rst +++ b/doc/guides/rel_notes/release_22_03.rst @@ -104,6 +104,14 @@ New Features * Added support for libxdp >=v1.2.2. * Re-enabled secondary process support. RX/TX is not supported. +* **Updated Amazon ENA PMD.** + + Updated the Amazon ENA PMD. The new driver version (v2.6.0) introduced + bug fixes and improvements, including: + + * Added new checksum related xstats: ``l3_csum_bad``, ``l4_csum_bad`` and + ``l4_csum_good``. + * **Updated Cisco enic driver.** * Added rte_flow support for matching GENEVE packets. diff --git a/drivers/net/ena/ena_ethdev.c b/drivers/net/ena/ena_ethdev.c index de5fdb8f1d..d534b93749 100644 --- a/drivers/net/ena/ena_ethdev.c +++ b/drivers/net/ena/ena_ethdev.c @@ -99,7 +99,9 @@ static const struct ena_stats ena_stats_rx_strings[] = { ENA_STAT_RX_ENTRY(cnt), ENA_STAT_RX_ENTRY(bytes), ENA_STAT_RX_ENTRY(refill_partial), - ENA_STAT_RX_ENTRY(bad_csum), + ENA_STAT_RX_ENTRY(l3_csum_bad), + ENA_STAT_RX_ENTRY(l4_csum_bad), + ENA_STAT_RX_ENTRY(l4_csum_good), ENA_STAT_RX_ENTRY(mbuf_alloc_fail), ENA_STAT_RX_ENTRY(bad_desc_num), ENA_STAT_RX_ENTRY(bad_req_id), @@ -273,10 +275,12 @@ static const struct eth_dev_ops ena_dev_ops = { .rss_hash_conf_get = ena_rss_hash_conf_get, }; -static inline void ena_rx_mbuf_prepare(struct rte_mbuf *mbuf, +static inline void ena_rx_mbuf_prepare(struct ena_ring *rx_ring, + struct rte_mbuf *mbuf, struct ena_com_rx_ctx *ena_rx_ctx, bool fill_hash) { + struct ena_stats_rx *rx_stats = &rx_ring->rx_stats; uint64_t ol_flags = 0; uint32_t packet_type = 0; @@ -287,21 +291,27 @@ static inline void ena_rx_mbuf_prepare(struct rte_mbuf *mbuf, if (ena_rx_ctx->l3_proto == ENA_ETH_IO_L3_PROTO_IPV4) { packet_type |= RTE_PTYPE_L3_IPV4; - if (unlikely(ena_rx_ctx->l3_csum_err)) + if (unlikely(ena_rx_ctx->l3_csum_err)) { + ++rx_stats->l3_csum_bad; ol_flags |= RTE_MBUF_F_RX_IP_CKSUM_BAD; - else + } else { ol_flags |= RTE_MBUF_F_RX_IP_CKSUM_GOOD; + } } else if (ena_rx_ctx->l3_proto == ENA_ETH_IO_L3_PROTO_IPV6) { packet_type |= RTE_PTYPE_L3_IPV6; } - if (!ena_rx_ctx->l4_csum_checked || ena_rx_ctx->frag) + if (!ena_rx_ctx->l4_csum_checked || ena_rx_ctx->frag) { ol_flags |= RTE_MBUF_F_RX_L4_CKSUM_UNKNOWN; - else - if (unlikely(ena_rx_ctx->l4_csum_err)) + } else { + if (unlikely(ena_rx_ctx->l4_csum_err)) { + ++rx_stats->l4_csum_bad; ol_flags |= RTE_MBUF_F_RX_L4_CKSUM_BAD; - else + } else { + ++rx_stats->l4_csum_good; ol_flags |= RTE_MBUF_F_RX_L4_CKSUM_GOOD; + } + } if (fill_hash && likely((packet_type & ENA_PTYPE_HAS_HASH) && !ena_rx_ctx->frag)) { @@ -2336,13 +2346,11 @@ static uint16_t eth_ena_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, } /* fill mbuf attributes if any */ - ena_rx_mbuf_prepare(mbuf, &ena_rx_ctx, fill_hash); + ena_rx_mbuf_prepare(rx_ring, mbuf, &ena_rx_ctx, fill_hash); if (unlikely(mbuf->ol_flags & - (RTE_MBUF_F_RX_IP_CKSUM_BAD | RTE_MBUF_F_RX_L4_CKSUM_BAD))) { + (RTE_MBUF_F_RX_IP_CKSUM_BAD | RTE_MBUF_F_RX_L4_CKSUM_BAD))) rte_atomic64_inc(&rx_ring->adapter->drv_stats->ierrors); - ++rx_ring->rx_stats.bad_csum; - } rx_pkts[completed] = mbuf; rx_ring->rx_stats.bytes += mbuf->pkt_len; diff --git a/drivers/net/ena/ena_ethdev.h b/drivers/net/ena/ena_ethdev.h index 4dfa604d51..42c47c9455 100644 --- a/drivers/net/ena/ena_ethdev.h +++ b/drivers/net/ena/ena_ethdev.h @@ -114,7 +114,9 @@ struct ena_stats_rx { u64 cnt; u64 bytes; u64 refill_partial; - u64 bad_csum; + u64 l3_csum_bad; + u64 l4_csum_bad; + u64 l4_csum_good; u64 mbuf_alloc_fail; u64 bad_desc_num; u64 bad_req_id; From patchwork Tue Feb 22 16:06:19 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michal Krawczyk X-Patchwork-Id: 107982 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 E511EA0352; Tue, 22 Feb 2022 17:07:35 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 49B0741145; Tue, 22 Feb 2022 17:07:01 +0100 (CET) Received: from mail-ej1-f47.google.com (mail-ej1-f47.google.com [209.85.218.47]) by mails.dpdk.org (Postfix) with ESMTP id 9F87F4115B for ; Tue, 22 Feb 2022 17:06:59 +0100 (CET) Received: by mail-ej1-f47.google.com with SMTP id p15so44257605ejc.7 for ; Tue, 22 Feb 2022 08:06:59 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=semihalf-com.20210112.gappssmtp.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=q3Vs8v0DzviJaKbmyC2cPdlagzNUgAm/fkn2vY416do=; b=s7EsaCxKwL3wOCzfEhyux84jraBf1aujpLNrM4U9ERGE5HfI9mkFc17hWBNUKE1Vuv 3fFdEaAlWA00+Vf27JiUqminEtqq0SLHguMhcksONy4j7kB8rKtR3qApWhHURilqOj+X guvwmB6qGBR9ySV28zeGcS1dHdU1Qbloqxc6im7rgUXR78cLvJvDiv66GH84nCU6dz/H XYzSt5Z5EigJ/mMLcJaS4vFaUJsqzXf+v4oWu7Y0uBMyi7kp/cXiozK8JJVEcWpgMID6 /uxVGl6KYfNf3ALbIKOzsYGO0UZjHb4TiDhLB73/oZxTJMCy+8vXZOVR6AZgmzttXz8O Ok8w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=q3Vs8v0DzviJaKbmyC2cPdlagzNUgAm/fkn2vY416do=; b=64QYXQFqPsQ2wk3gkOdLEduiOyk7o1oHgS6I7AYSkf60zJZz6cOwU/Zr6QFpj5htwp UvevQWRVElznmTd8NsnWjZUcaWhqPgi6o0r+xeMkGFYxR12uxhuc9WtPONEHrqMeMOXX 5K00KhmeO2baSZUWX6N6mMt2Yc846tjZPhpXXnauOJbIHoJHb78CaQzWP56FlXPAJK5B Tze2KAIrniiM2Gn5p23kdKcZ6jHc3FjpnJSy3B+GvkjgI7RYMwVhWf0KaSggS9Mabcc0 xqGzG7Lf7c8sccG4iXRwwUBWL850zmsHk/v+gBTMdnGgckhzVBrhJ+dphyec0v9sgTkg YjGA== X-Gm-Message-State: AOAM532SKJ8gAlxhE5/AypFgM4xeaS156rFgPn7fDk3qz3Ds0N+/QjRY j3BNwWKeaJtLVUpT/5pexQK5dXk4SmakfA== X-Google-Smtp-Source: ABdhPJw0ylGN+Zdj+ISoCpYFXUi2ewb/98ZJVMFtUDhUwehdArawpVmnXijKn9jnIt9TvIrHBoQ+3g== X-Received: by 2002:a17:906:edb5:b0:6b8:1a5a:f3a0 with SMTP id sa21-20020a170906edb500b006b81a5af3a0mr20661115ejb.501.1645546018605; Tue, 22 Feb 2022 08:06:58 -0800 (PST) Received: from DESKTOP-U5LNN3J.localdomain (89-79-181-52.dynamic.chello.pl. [89.79.181.52]) by smtp.gmail.com with ESMTPSA id x6sm10013477edv.109.2022.02.22.08.06.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 22 Feb 2022 08:06:58 -0800 (PST) From: Michal Krawczyk To: dev@dpdk.org Cc: shaibran@amazon.com, upstream@semihalf.com, Michal Krawczyk , Dawid Gorecki Subject: [PATCH 06/21] net/ena: make LSC configurable Date: Tue, 22 Feb 2022 17:06:19 +0100 Message-Id: <20220222160634.24489-7-mk@semihalf.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220222160634.24489-1-mk@semihalf.com> References: <20220222160634.24489-1-mk@semihalf.com> MIME-Version: 1.0 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 ENA uses AENQ for notification about various events, like LSC, keep alive etc. By default it was enabling all AENQ that were supported by both the driver and the device. As a result the LSC was always processed even if the application turned it off explicitly. As the DPDK provides application with the possibility to configure the LSC, ENA should respect that. AENQ groups are now being updated upon configure step, thus LSC can be activated or disabled between ENA PMD reconfigurations. Moreover, the LSC capability for the device is being determined dynamically. Signed-off-by: Michal Krawczyk Reviewed-by: Dawid Gorecki Reviewed-by: Shai Brandes --- doc/guides/rel_notes/release_22_03.rst | 1 + drivers/net/ena/ena_ethdev.c | 66 +++++++++++++++++++------- drivers/net/ena/ena_ethdev.h | 5 +- 3 files changed, 53 insertions(+), 19 deletions(-) diff --git a/doc/guides/rel_notes/release_22_03.rst b/doc/guides/rel_notes/release_22_03.rst index 6b69763f85..f803402138 100644 --- a/doc/guides/rel_notes/release_22_03.rst +++ b/doc/guides/rel_notes/release_22_03.rst @@ -111,6 +111,7 @@ New Features * Added new checksum related xstats: ``l3_csum_bad``, ``l4_csum_bad`` and ``l4_csum_good``. + * Added support for the link status configuration. * **Updated Cisco enic driver.** diff --git a/drivers/net/ena/ena_ethdev.c b/drivers/net/ena/ena_ethdev.c index d534b93749..a2793f13cd 100644 --- a/drivers/net/ena/ena_ethdev.c +++ b/drivers/net/ena/ena_ethdev.c @@ -160,10 +160,9 @@ static const struct rte_pci_id pci_id_ena_map[] = { static struct ena_aenq_handlers aenq_handlers; -static int ena_device_init(struct ena_com_dev *ena_dev, +static int ena_device_init(struct ena_adapter *adapter, struct rte_pci_device *pdev, - struct ena_com_dev_get_features_ctx *get_feat_ctx, - bool *wd_state); + struct ena_com_dev_get_features_ctx *get_feat_ctx); static int ena_dev_configure(struct rte_eth_dev *dev); static void ena_tx_map_mbuf(struct ena_ring *tx_ring, struct ena_tx_buffer *tx_info, @@ -249,6 +248,7 @@ static int ena_rx_queue_intr_enable(struct rte_eth_dev *dev, uint16_t queue_id); static int ena_rx_queue_intr_disable(struct rte_eth_dev *dev, uint16_t queue_id); +static int ena_configure_aenq(struct ena_adapter *adapter); static const struct eth_dev_ops ena_dev_ops = { .dev_configure = ena_dev_configure, @@ -1416,11 +1416,11 @@ static int ena_populate_rx_queue(struct ena_ring *rxq, unsigned int count) return i; } -static int ena_device_init(struct ena_com_dev *ena_dev, +static int ena_device_init(struct ena_adapter *adapter, struct rte_pci_device *pdev, - struct ena_com_dev_get_features_ctx *get_feat_ctx, - bool *wd_state) + struct ena_com_dev_get_features_ctx *get_feat_ctx) { + struct ena_com_dev *ena_dev = &adapter->ena_dev; uint32_t aenq_groups; int rc; bool readless_supported; @@ -1485,13 +1485,8 @@ static int ena_device_init(struct ena_com_dev *ena_dev, BIT(ENA_ADMIN_WARNING); aenq_groups &= get_feat_ctx->aenq.supported_groups; - rc = ena_com_set_aenq_config(ena_dev, aenq_groups); - if (rc) { - PMD_DRV_LOG(ERR, "Cannot configure AENQ groups, rc: %d\n", rc); - goto err_admin_init; - } - *wd_state = !!(aenq_groups & BIT(ENA_ADMIN_KEEP_ALIVE)); + adapter->all_aenq_groups = aenq_groups; return 0; @@ -1517,7 +1512,7 @@ static void ena_interrupt_handler_rte(void *cb_arg) static void check_for_missing_keep_alive(struct ena_adapter *adapter) { - if (!adapter->wd_state) + if (!(adapter->active_aenq_groups & BIT(ENA_ADMIN_KEEP_ALIVE))) return; if (adapter->keep_alive_timeout == ENA_HW_HINTS_NO_TIMEOUT) @@ -1798,7 +1793,6 @@ static int eth_ena_dev_init(struct rte_eth_dev *eth_dev) int rc; static int adapters_found; bool disable_meta_caching; - bool wd_state = false; eth_dev->dev_ops = &ena_dev_ops; eth_dev->rx_pkt_burst = ð_ena_recv_pkts; @@ -1850,12 +1844,15 @@ static int eth_ena_dev_init(struct rte_eth_dev *eth_dev) } /* device specific initialization routine */ - rc = ena_device_init(ena_dev, pci_dev, &get_feat_ctx, &wd_state); + rc = ena_device_init(adapter, pci_dev, &get_feat_ctx); if (rc) { PMD_INIT_LOG(CRIT, "Failed to init ENA device\n"); goto err; } - adapter->wd_state = wd_state; + + /* Check if device supports LSC */ + if (!(adapter->all_aenq_groups & BIT(ENA_ADMIN_LINK_CHANGE))) + adapter->edev_data->dev_flags &= ~RTE_ETH_DEV_INTR_LSC; set_default_llq_configurations(&llq_config, &get_feat_ctx.llq, adapter->use_large_llq_hdr); @@ -1999,6 +1996,7 @@ static int eth_ena_dev_uninit(struct rte_eth_dev *eth_dev) static int ena_dev_configure(struct rte_eth_dev *dev) { struct ena_adapter *adapter = dev->data->dev_private; + int rc; adapter->state = ENA_ADAPTER_STATE_CONFIG; @@ -2025,7 +2023,9 @@ static int ena_dev_configure(struct rte_eth_dev *dev) */ adapter->tx_cleanup_stall_delay = adapter->missing_tx_completion_to / 2; - return 0; + rc = ena_configure_aenq(adapter); + + return rc; } static void ena_init_rings(struct ena_adapter *adapter, @@ -3165,6 +3165,38 @@ static int ena_rx_queue_intr_disable(struct rte_eth_dev *dev, return 0; } +static int ena_configure_aenq(struct ena_adapter *adapter) +{ + uint32_t aenq_groups = adapter->all_aenq_groups; + int rc; + + /* All_aenq_groups holds all AENQ functions supported by the device and + * the HW, so at first we need to be sure the LSC request is valid. + */ + if (adapter->edev_data->dev_conf.intr_conf.lsc != 0) { + if (!(aenq_groups & BIT(ENA_ADMIN_LINK_CHANGE))) { + PMD_DRV_LOG(ERR, + "LSC requested, but it's not supported by the AENQ\n"); + return -EINVAL; + } + } else { + /* If LSC wasn't enabled by the app, let's enable all supported + * AENQ procedures except the LSC. + */ + aenq_groups &= ~BIT(ENA_ADMIN_LINK_CHANGE); + } + + rc = ena_com_set_aenq_config(&adapter->ena_dev, aenq_groups); + if (rc != 0) { + PMD_DRV_LOG(ERR, "Cannot configure AENQ groups, rc=%d\n", rc); + return rc; + } + + adapter->active_aenq_groups = aenq_groups; + + return 0; +} + /********************************************************************* * PMD configuration *********************************************************************/ diff --git a/drivers/net/ena/ena_ethdev.h b/drivers/net/ena/ena_ethdev.h index 42c47c9455..f660b6a7cb 100644 --- a/drivers/net/ena/ena_ethdev.h +++ b/drivers/net/ena/ena_ethdev.h @@ -291,9 +291,10 @@ struct ena_adapter { struct ena_stats_dev dev_stats; struct ena_stats_eni eni_stats; - bool trigger_reset; + uint32_t all_aenq_groups; + uint32_t active_aenq_groups; - bool wd_state; + bool trigger_reset; bool use_large_llq_hdr; From patchwork Tue Feb 22 16:06:20 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michal Krawczyk X-Patchwork-Id: 107983 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 94B26A0352; Tue, 22 Feb 2022 17:07:43 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 5EF6241174; Tue, 22 Feb 2022 17:07:02 +0100 (CET) Received: from mail-ed1-f54.google.com (mail-ed1-f54.google.com [209.85.208.54]) by mails.dpdk.org (Postfix) with ESMTP id 0C48641145 for ; Tue, 22 Feb 2022 17:07:01 +0100 (CET) Received: by mail-ed1-f54.google.com with SMTP id u18so38116480edt.6 for ; Tue, 22 Feb 2022 08:07:00 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=semihalf-com.20210112.gappssmtp.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=acXqad0cBO68hPVlAp7yRXivrVnQ/a65u/HLvvhrlMk=; b=eGA6zgP/Jq1+ORcLu8RFRdQEGnVqYf+L0fAK4ABYHmgey6rb+X15dOILXpGXUbePNq Kx7McmGpgmqNv6Ub5KZt6ioCyvq5gznBYOJeib1grVV8Vr8WNYVDZ9mTOYRihzGvqzjt EmPMl2O3RcgrXXpNFmFS3QYRwGyctpNnx+EGcOWIfgJkRBQhM/7kaLyFUOKMHXcE5ZrR DTkhpNQ1cnu14e7+VzSqUflb5EbLbYbhOezK6gU8MMHLVO/IRBFl8NPYLM0aDbEE2qhK lsAV+agi0S9Kg0SSq9cv7yz1QHaOzgSqNe8OkdpO8PfncKLcNAgGmCzxORot8yCsinTY br8Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=acXqad0cBO68hPVlAp7yRXivrVnQ/a65u/HLvvhrlMk=; b=7pf5pQMXhSWwbHoB5qVz6P4GMLQ8WrtgaUdMaPlZjDbEV2Jku1BvY4dybuI7uY6ZcU /JuASi7lU8kEAdFZ7JyaLXwjE8y2B4MmsQiqky+CugLMzbELAVn/B8+JIAn/eb8Nh6LO Vk9N93V4ELqXStOwJlyAWq2udBzo0XaBgqaawrZ5qySABUi9zcBlVInMq7KTa7I7cXU2 ynnWbr6uTUb6PS75W60NRnh+k66eUljMxrd5AuVY7iIdvjSyFKdsH/Psp6cCaNAs9gHV VXHLtiwSSJP7Lwrt72hE6sLeQFQTU8xSIcDd+1H6Oq2A1sIakniZMMn5LuPW0pv+u3Ve 4tgQ== X-Gm-Message-State: AOAM532VlGmaA2ik99WjakV9ZffxAx7bmmth9/W0Qr35L5Wp5CrKf9kM MDscmw2nIKX9C2gAqkLl4TR6t5LHLk61Bw== X-Google-Smtp-Source: ABdhPJwl0/9Tbf9J9lmUfS3roJfUD91Y69bsRQwqiBQs3QPes2OsYn3/w+BVwR1casN+aNJrHlJACw== X-Received: by 2002:a05:6402:3583:b0:410:a99b:59ee with SMTP id y3-20020a056402358300b00410a99b59eemr27430560edc.454.1645546019969; Tue, 22 Feb 2022 08:06:59 -0800 (PST) Received: from DESKTOP-U5LNN3J.localdomain (89-79-181-52.dynamic.chello.pl. [89.79.181.52]) by smtp.gmail.com with ESMTPSA id x6sm10013477edv.109.2022.02.22.08.06.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 22 Feb 2022 08:06:59 -0800 (PST) From: Michal Krawczyk To: dev@dpdk.org Cc: shaibran@amazon.com, upstream@semihalf.com, Michal Krawczyk , stable@dpdk.org Subject: [PATCH 07/21] net/ena: skip timer if the reset is triggered Date: Tue, 22 Feb 2022 17:06:20 +0100 Message-Id: <20220222160634.24489-8-mk@semihalf.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220222160634.24489-1-mk@semihalf.com> References: <20220222160634.24489-1-mk@semihalf.com> MIME-Version: 1.0 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 Some user applications may not support PMD reset handling. If they will support timer service it could cause a situation, when information about the reset trigger is being showed every time the timer service is being called. Timer service is now being skipped if the reset was already triggered. Fixes: d9b8b106bf9d ("net/ena: add watchdog and keep alive AENQ handler") Cc: stable@dpdk.org Signed-off-by: Michal Krawczyk Reviewed-by: Shai Brandes --- drivers/net/ena/ena_ethdev.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/net/ena/ena_ethdev.c b/drivers/net/ena/ena_ethdev.c index a2793f13cd..4b82372155 100644 --- a/drivers/net/ena/ena_ethdev.c +++ b/drivers/net/ena/ena_ethdev.c @@ -1624,6 +1624,9 @@ static void ena_timer_wd_callback(__rte_unused struct rte_timer *timer, struct rte_eth_dev *dev = arg; struct ena_adapter *adapter = dev->data->dev_private; + if (unlikely(adapter->trigger_reset)) + return; + check_for_missing_keep_alive(adapter); check_for_admin_com_state(adapter); check_for_tx_completions(adapter); From patchwork Tue Feb 22 16:06:21 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michal Krawczyk X-Patchwork-Id: 107984 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 943AEA0352; Tue, 22 Feb 2022 17:07:50 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 583A54117E; Tue, 22 Feb 2022 17:07:03 +0100 (CET) Received: from mail-ed1-f53.google.com (mail-ed1-f53.google.com [209.85.208.53]) by mails.dpdk.org (Postfix) with ESMTP id B1F8840E64 for ; Tue, 22 Feb 2022 17:07:02 +0100 (CET) Received: by mail-ed1-f53.google.com with SMTP id m3so32116306eda.10 for ; Tue, 22 Feb 2022 08:07:02 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=semihalf-com.20210112.gappssmtp.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=kJsrYm2uvyrl1AjemrWrKMybiEz+usep4Zai6FZc+2s=; b=J7o3UHT0ZgGA71X20WOdj9sxiN4waGp874+y9gZO/26y5IEJp7VeztPL0xYbhE62Gc twTLBjMA95viaY6YcFGIrJIVQE4v/E0L8f9mo8HBR7NRjZjtCMDgBpyaAQ+XN2TCxYNu S91TRe5FNypM2dZDeApbYXNo71lSlfyKsKmxgYRcIk1fcp1ZkzEB2ym2imr6UJUXmYz0 hlhCWhvakS/bM9o6P9XVx7eEAeBFmS2sXiklXhsjVfZysdAQOcg8iwiRKlKpI3gU895h 2Tjois0GfgW9NIMPhxWahM7ubxuPmw43at9bLhlS1KO8jGT26co/pukG0mXWpTeZBevx K8Dg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=kJsrYm2uvyrl1AjemrWrKMybiEz+usep4Zai6FZc+2s=; b=GJ7DKn4egPegOdZ80HvPDUr71dryvXNmtwhM7ABtMMBO9BCX1JF7YZdqwOyW7J3KwW 1P+Nnc0UIt89C4cBr0nIQkKpBWPVobRED3/myH8WeUT2XfGy7dfyitLPufFETPrZDUrJ 7mXdgw4GQFA8BxDaCGKtBOlux/NvnZ4LiG80Wd/VP1CjlYaB8bQWZYdF/B+ELUbV/R5m bVXfIsAMot47geSZlo7Kc/NZATEcFJwljccT3kruM6qNo/iMTjww/W3VIDP4wTiy74SX Mstz2tSPWYrB4XJSUZ4igfndWkmjKIq9r8B/RoqZkoijzXHpT72txIYJqol61RUhADQt 4DRw== X-Gm-Message-State: AOAM530XzU4aH1m4clYxUheRrgs89sUBEKVpaXYA0xwQ3v+IA8yMWESQ 9hi/yrGdAatuRGvGAxvna9NNdsNc4oiP4g== X-Google-Smtp-Source: ABdhPJzvF8KvXb2fclAIIRFWJHYcZagukB26l3o8FhUstEflhFhTEtGXPvgteOx/A/TDi6DFpHGDcg== X-Received: by 2002:a05:6402:4245:b0:410:ee7d:8f0b with SMTP id g5-20020a056402424500b00410ee7d8f0bmr27145001edb.295.1645546021984; Tue, 22 Feb 2022 08:07:01 -0800 (PST) Received: from DESKTOP-U5LNN3J.localdomain (89-79-181-52.dynamic.chello.pl. [89.79.181.52]) by smtp.gmail.com with ESMTPSA id x6sm10013477edv.109.2022.02.22.08.07.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 22 Feb 2022 08:07:01 -0800 (PST) From: Michal Krawczyk To: dev@dpdk.org Cc: shaibran@amazon.com, upstream@semihalf.com, Michal Krawczyk , Dawid Gorecki Subject: [PATCH 08/21] net/ena: perform Tx cleanup before sending pkts Date: Tue, 22 Feb 2022 17:06:21 +0100 Message-Id: <20220222160634.24489-9-mk@semihalf.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220222160634.24489-1-mk@semihalf.com> References: <20220222160634.24489-1-mk@semihalf.com> MIME-Version: 1.0 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 To increase likehood that current burst will fit in the HW rings, perform Tx cleanup before pushing packets to the HW. It may increase latency a bit for sparse bursts, but the Tx flow now should be more smooth. It's also common order in the Tx burst function for other PMDs. Signed-off-by: Michal Krawczyk Reviewed-by: Dawid Gorecki Reviewed-by: Shai Brandes --- drivers/net/ena/ena_ethdev.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/drivers/net/ena/ena_ethdev.c b/drivers/net/ena/ena_ethdev.c index 4b82372155..ed3dd162ba 100644 --- a/drivers/net/ena/ena_ethdev.c +++ b/drivers/net/ena/ena_ethdev.c @@ -2776,6 +2776,10 @@ static uint16_t eth_ena_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, } #endif + available_desc = ena_com_free_q_entries(tx_ring->ena_com_io_sq); + if (available_desc < tx_ring->tx_free_thresh) + ena_tx_cleanup(tx_ring); + for (sent_idx = 0; sent_idx < nb_pkts; sent_idx++) { if (ena_xmit_mbuf(tx_ring, tx_pkts[sent_idx])) break; @@ -2784,9 +2788,6 @@ static uint16_t eth_ena_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, tx_ring->size_mask)]); } - available_desc = ena_com_free_q_entries(tx_ring->ena_com_io_sq); - tx_ring->tx_stats.available_desc = available_desc; - /* If there are ready packets to be xmitted... */ if (likely(tx_ring->pkts_without_db)) { /* ...let HW do its best :-) */ @@ -2795,9 +2796,6 @@ static uint16_t eth_ena_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, tx_ring->pkts_without_db = false; } - if (available_desc < tx_ring->tx_free_thresh) - ena_tx_cleanup(tx_ring); - tx_ring->tx_stats.available_desc = ena_com_free_q_entries(tx_ring->ena_com_io_sq); tx_ring->tx_stats.tx_poll++; From patchwork Tue Feb 22 16:06:22 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michal Krawczyk X-Patchwork-Id: 107985 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 0E8D8A0352; Tue, 22 Feb 2022 17:07:57 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 4C4CC41181; Tue, 22 Feb 2022 17:07:05 +0100 (CET) Received: from mail-ed1-f46.google.com (mail-ed1-f46.google.com [209.85.208.46]) by mails.dpdk.org (Postfix) with ESMTP id CA81D41181 for ; Tue, 22 Feb 2022 17:07:03 +0100 (CET) Received: by mail-ed1-f46.google.com with SMTP id q17so38298311edd.4 for ; Tue, 22 Feb 2022 08:07:03 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=semihalf-com.20210112.gappssmtp.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=z5O689j1ezCEDVukRr7AfqRyaoZFEZhxJBB2GWCige4=; b=UfqfzXq5Ukr4SrMepjzCyK/n6J8nGN7GulIDTdo2brPBKm5AzGHgoE+NXb6xgdtRq+ fL8nyhXwJ0ON7vE07bLYcQvwqIF/FxIwOYkVKwNtbt8krqiZhbo6WmgH5vvps1ku6dYn Kvbw4O9RhEWVUUgsE6h/8J4mvtQ22oc8QOAEW/Y8P+5eGBm6ey4+kK4DTu/7rOZx3LLd 7GEaW9bq6TOadDlZv+eIgbuITOID8DLgYvisjtC1JlsfDSoki1+h9y0Fdy7EbYKNJ5Gz a18eyVL5c5yWd7txLy+aZ4u0bg1KIvd9cyzHQ8wqscKkiRumvnHRzR80VbRAXbh5+0QQ LjrA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=z5O689j1ezCEDVukRr7AfqRyaoZFEZhxJBB2GWCige4=; b=0CP+J0abfueihS+D/CmHwzsRAl/8XhnESg5J7DbyO/fRqc3u1Rf/xPyDdfoZ3y1FAK AoMf+Z6oesILY08wtZoMKGRqpxCZXlGP7j9gqhzvWuJYYU+AfGgWvHhQ8sgtkJYXf4al c3q/cE65sTFVtcZIAe8Rj0J3Q1BuZeg7Z9VMlN7YBNo0t9mT6BJgZSSF2AvGp6cCD7Zj V+lhAPnONAOh4QklAuHGPw3zVvMfVR9M+m9UpdMSDujKLVDUwduXY6ttTBdrQsMr7OrI d+ByrLwFExpQThAxlEmO0Y/3AbQxtBnjl42GGcPeILsBZ44U/LkRxMBDidws8X/92jzR qLVA== X-Gm-Message-State: AOAM532Tl+YeDNGnMGCEuFc94J9wO1221wuvzd12nz+g9gAyq08axd3r KBVYg4+Cvx/NSlglPSlbsPjuq01vvWSD7w== X-Google-Smtp-Source: ABdhPJzoiHtOj/9gj7kpFqUpDAAqZJBlE18l4GrtcHY0f16iB2BB4ISqsebueF7N4BO3+sScTSNziw== X-Received: by 2002:a05:6402:2748:b0:408:c807:8db7 with SMTP id z8-20020a056402274800b00408c8078db7mr27081184edd.4.1645546023217; Tue, 22 Feb 2022 08:07:03 -0800 (PST) Received: from DESKTOP-U5LNN3J.localdomain (89-79-181-52.dynamic.chello.pl. [89.79.181.52]) by smtp.gmail.com with ESMTPSA id x6sm10013477edv.109.2022.02.22.08.07.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 22 Feb 2022 08:07:02 -0800 (PST) From: Michal Krawczyk To: dev@dpdk.org Cc: shaibran@amazon.com, upstream@semihalf.com, Michal Krawczyk , Dawid Gorecki Subject: [PATCH 09/21] net/ena/base: use optimized memcpy version also on Arm Date: Tue, 22 Feb 2022 17:06:22 +0100 Message-Id: <20220222160634.24489-10-mk@semihalf.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220222160634.24489-1-mk@semihalf.com> References: <20220222160634.24489-1-mk@semihalf.com> MIME-Version: 1.0 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 As the default behavior for arm64 is to alias rte_memcpy as memcpy, ENA cannot redefine memcpy as rte_memcpy as it would cause nested declaration. To make it possible to use optimized memcpy in the ena_com layer on Arm, the driver now redefines memcpy when it is beneficial: * For arm64 only when the flag RTE_ARCH_ARM64_MEMCPY was defined * For arm only when the flag RTE_ARCH_ARM_NEON_MEMCPY was defined Signed-off-by: Michal Krawczyk Reviewed-by: Dawid Gorecki Reviewed-by: Shai Brandes --- doc/guides/rel_notes/release_22_03.rst | 1 + drivers/net/ena/base/ena_plat_dpdk.h | 7 +++++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/doc/guides/rel_notes/release_22_03.rst b/doc/guides/rel_notes/release_22_03.rst index f803402138..9c7e246348 100644 --- a/doc/guides/rel_notes/release_22_03.rst +++ b/doc/guides/rel_notes/release_22_03.rst @@ -112,6 +112,7 @@ New Features * Added new checksum related xstats: ``l3_csum_bad``, ``l4_csum_bad`` and ``l4_csum_good``. * Added support for the link status configuration. + * Added optimized memcpy support for the ARM platforms. * **Updated Cisco enic driver.** diff --git a/drivers/net/ena/base/ena_plat_dpdk.h b/drivers/net/ena/base/ena_plat_dpdk.h index 4e7f52881a..41db883c63 100644 --- a/drivers/net/ena/base/ena_plat_dpdk.h +++ b/drivers/net/ena/base/ena_plat_dpdk.h @@ -66,8 +66,11 @@ typedef uint64_t dma_addr_t; #define ENA_UDELAY(x) rte_delay_us_block(x) #define ENA_TOUCH(x) ((void)(x)) -/* Avoid nested declaration on arm64, as it may define rte_memcpy as memcpy. */ -#if defined(RTE_ARCH_X86) +/* Redefine memcpy with caution: rte_memcpy can be simply aliased to memcpy, so + * make the redefinition only if it's safe (and beneficial) to do so. + */ +#if defined(RTE_ARCH_X86) || defined(RTE_ARCH_ARM64_MEMCPY) || \ + defined(RTE_ARCH_ARM_NEON_MEMCPY) #undef memcpy #define memcpy rte_memcpy #endif From patchwork Tue Feb 22 16:06:23 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michal Krawczyk X-Patchwork-Id: 107986 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 5BF70A0352; Tue, 22 Feb 2022 17:08:03 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 3849B4115D; Tue, 22 Feb 2022 17:07:08 +0100 (CET) Received: from mail-ej1-f41.google.com (mail-ej1-f41.google.com [209.85.218.41]) by mails.dpdk.org (Postfix) with ESMTP id DA9F941186 for ; Tue, 22 Feb 2022 17:07:05 +0100 (CET) Received: by mail-ej1-f41.google.com with SMTP id p14so44285748ejf.11 for ; Tue, 22 Feb 2022 08:07:05 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=semihalf-com.20210112.gappssmtp.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=++O2rX+Ea8Lq4HVs7x+X7Ox1oABdoULmfxJs6o9Y56o=; b=prpSQoTkbG1PMKfsXjK1Du4Nc13ARO2Kw4kS1MArBRcf0rpfb+tgGFdUP1YdDMyisr sIsIy33QHozS0AeNJOX47yB+IDo2zlzdXv0E9mA8YN4g1iqOJ1KOGsc5HZHBUd2sed4G jaHqhvmRbm7JDWs/IrAzkpSfd3vito35Ldesa24aAh7sgb0rmF/aZ6pDzHaGKQpgbcd3 EwkRYbZTgqfnaR9esrPZRfUGJ5OxKXnJRrMudoWK0ZSKlUdelZd/e64C2WrLuyb75ELj VOs/Ky5gC05Y531bxztlnA4dqcO7Zfck5paEnFi760+XIiRDIYo9cTvX4CNUM2Aucosm DcbQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=++O2rX+Ea8Lq4HVs7x+X7Ox1oABdoULmfxJs6o9Y56o=; b=s3CZC093Ot8IJJRySuxjSwBZIfRLZ5sq6CSnEI3oNGby9DSB3ePT7KrdoKADVUdN6C XfyRizAW+y+bNZ62ScEv1LVme3l7v/eZCurnuVv84rcJKhxdmp1Ig63ysnN7Rf1OKZK8 YoiKCdBmGkh9kM0ugagwPQuktL3NZTgz2ikB+lvAI4Wn+FMJluv5eKTzusldsJ+jCiue 07/ttisB+NgdQY7VpFBtTds6whOgoIYDjr1QGaiqIeK799vLLdVoolL3oLjVI1Ipgxkz vx94j4bJq1viKuOG4X9/kszst+EtDL/Ua/Z7epVFfOfN/e5M1DgNhIuI4F8PmEhVS3Wv QGvA== X-Gm-Message-State: AOAM530Wq43IjEjiaoukw1RbFh2BCUkYxMObS1hpBXR5UJiUquiwEE1W sjjDZq9bX6DneuZQh+896O/DEpj/I+fCzg== X-Google-Smtp-Source: ABdhPJyRd/ACN6i5D2h14bk7y4gSRQF6FKpzaAlSo5JXo8ilzln7RG6S0pnasSIEmh6P3imvw/QsNw== X-Received: by 2002:a17:906:2ecd:b0:6d3:d7c9:8fa4 with SMTP id s13-20020a1709062ecd00b006d3d7c98fa4mr1559702eji.144.1645546024716; Tue, 22 Feb 2022 08:07:04 -0800 (PST) Received: from DESKTOP-U5LNN3J.localdomain (89-79-181-52.dynamic.chello.pl. [89.79.181.52]) by smtp.gmail.com with ESMTPSA id x6sm10013477edv.109.2022.02.22.08.07.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 22 Feb 2022 08:07:04 -0800 (PST) From: Michal Krawczyk To: dev@dpdk.org Cc: shaibran@amazon.com, upstream@semihalf.com, Stanislaw Kardach , Michal Krawczyk , Dawid Gorecki Subject: [PATCH 10/21] net/ena: proxy AQ calls to primary process Date: Tue, 22 Feb 2022 17:06:23 +0100 Message-Id: <20220222160634.24489-11-mk@semihalf.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220222160634.24489-1-mk@semihalf.com> References: <20220222160634.24489-1-mk@semihalf.com> MIME-Version: 1.0 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 From: Stanislaw Kardach Due to how the ena_com compatibility layer is written, all AQ commands triggering functions use stack to save results of AQ and then copy them to user given function. Therefore to keep the compatibility layer common, introduce ENA_PROXY macro. It either calls the wrapped function directly (in primary process) or proxies it to the primary via DPDK IPC mechanism. Since all proxied calls are taken under a lock share the result data through shared memory (in struct ena_adapter) to work around 256B IPC parameter size limit. New proxy calls can be added by 1. Adding a new message type at the end of enum ena_mp_req 2. Adding new message arguments to the struct ena_mp_body if needed 3. Defining proxy request descriptor with ENA_PROXY_DESC. Its arguments include handlers for request preparation and response processing. Any of those may be empty (aside of marking arguments as used). 4. Adding request handling logic to ena_mp_primary_handle() 5. Replacing proxied function calls with ENA_PROXY(adapter, , ...) Signed-off-by: Stanislaw Kardach Reviewed-by: Michal Krawczyk Reviewed-by: Dawid Gorecki Reviewed-by: Shai Brandes --- doc/guides/rel_notes/release_22_03.rst | 1 + drivers/net/ena/ena_ethdev.c | 384 ++++++++++++++++++++++++- drivers/net/ena/ena_ethdev.h | 9 + drivers/net/ena/ena_rss.c | 10 +- 4 files changed, 384 insertions(+), 20 deletions(-) diff --git a/doc/guides/rel_notes/release_22_03.rst b/doc/guides/rel_notes/release_22_03.rst index 9c7e246348..92f36fa8ab 100644 --- a/doc/guides/rel_notes/release_22_03.rst +++ b/doc/guides/rel_notes/release_22_03.rst @@ -113,6 +113,7 @@ New Features ``l4_csum_good``. * Added support for the link status configuration. * Added optimized memcpy support for the ARM platforms. + * Added ENA admin queue support for the MP applications. * **Updated Cisco enic driver.** diff --git a/drivers/net/ena/ena_ethdev.c b/drivers/net/ena/ena_ethdev.c index ed3dd162ba..bb532923b6 100644 --- a/drivers/net/ena/ena_ethdev.c +++ b/drivers/net/ena/ena_ethdev.c @@ -242,13 +242,16 @@ static int ena_process_bool_devarg(const char *key, void *opaque); static int ena_parse_devargs(struct ena_adapter *adapter, struct rte_devargs *devargs); -static int ena_copy_eni_stats(struct ena_adapter *adapter); +static int ena_copy_eni_stats(struct ena_adapter *adapter, + struct ena_stats_eni *stats); static int ena_setup_rx_intr(struct rte_eth_dev *dev); static int ena_rx_queue_intr_enable(struct rte_eth_dev *dev, uint16_t queue_id); static int ena_rx_queue_intr_disable(struct rte_eth_dev *dev, uint16_t queue_id); static int ena_configure_aenq(struct ena_adapter *adapter); +static int ena_mp_primary_handle(const struct rte_mp_msg *mp_msg, + const void *peer); static const struct eth_dev_ops ena_dev_ops = { .dev_configure = ena_dev_configure, @@ -275,6 +278,261 @@ static const struct eth_dev_ops ena_dev_ops = { .rss_hash_conf_get = ena_rss_hash_conf_get, }; +/********************************************************************* + * Multi-Process communication bits + *********************************************************************/ +/* rte_mp IPC message name */ +#define ENA_MP_NAME "net_ena_mp" +/* Request timeout in seconds */ +#define ENA_MP_REQ_TMO 5 + +/** Proxy request type */ +enum ena_mp_req { + ENA_MP_DEV_STATS_GET, + ENA_MP_ENI_STATS_GET, + ENA_MP_MTU_SET, + ENA_MP_IND_TBL_GET, + ENA_MP_IND_TBL_SET +}; + +/** Proxy message body. Shared between requests and responses. */ +struct ena_mp_body { + /* Message type */ + enum ena_mp_req type; + int port_id; + /* Processing result. Set in replies. 0 if message succeeded, negative + * error code otherwise. + */ + int result; + union { + int mtu; /* For ENA_MP_MTU_SET */ + } args; +}; + +/** + * Initialize IPC message. + * + * @param[out] msg + * Pointer to the message to initialize. + * @param[in] type + * Message type. + * @param[in] port_id + * Port ID of target device. + * + */ +static void +mp_msg_init(struct rte_mp_msg *msg, enum ena_mp_req type, int port_id) +{ + struct ena_mp_body *body = (struct ena_mp_body *)&msg->param; + + memset(msg, 0, sizeof(*msg)); + strlcpy(msg->name, ENA_MP_NAME, sizeof(msg->name)); + msg->len_param = sizeof(*body); + body->type = type; + body->port_id = port_id; +} + +/********************************************************************* + * Multi-Process communication PMD API + *********************************************************************/ +/** + * Define proxy request descriptor + * + * Used to define all structures and functions required for proxying a given + * function to the primary process including the code to perform to prepare the + * request and process the response. + * + * @param[in] f + * Name of the function to proxy + * @param[in] t + * Message type to use + * @param[in] prep + * Body of a function to prepare the request in form of a statement + * expression. It is passed all the original function arguments along with two + * extra ones: + * - struct ena_adapter *adapter - PMD data of the device calling the proxy. + * - struct ena_mp_body *req - body of a request to prepare. + * @param[in] proc + * Body of a function to process the response in form of a statement + * expression. It is passed all the original function arguments along with two + * extra ones: + * - struct ena_adapter *adapter - PMD data of the device calling the proxy. + * - struct ena_mp_body *rsp - body of a response to process. + * @param ... + * Proxied function's arguments + * + * @note Inside prep and proc any parameters which aren't used should be marked + * as such (with ENA_TOUCH or __rte_unused). + */ +#define ENA_PROXY_DESC(f, t, prep, proc, ...) \ + static const enum ena_mp_req mp_type_ ## f = t; \ + static const char *mp_name_ ## f = #t; \ + static void mp_prep_ ## f(struct ena_adapter *adapter, \ + struct ena_mp_body *req, \ + __VA_ARGS__) \ + { \ + prep; \ + } \ + static void mp_proc_ ## f(struct ena_adapter *adapter, \ + struct ena_mp_body *rsp, \ + __VA_ARGS__) \ + { \ + proc; \ + } + +/** + * Proxy wrapper for calling primary functions in a secondary process. + * + * Depending on whether called in primary or secondary process, calls the + * @p func directly or proxies the call to the primary process via rte_mp IPC. + * This macro requires a proxy request descriptor to be defined for @p func + * using ENA_PROXY_DESC() macro. + * + * @param[in/out] a + * Device PMD data. Used for sending the message and sharing message results + * between primary and secondary. + * @param[in] f + * Function to proxy. + * @param ... + * Arguments of @p func. + * + * @return + * - 0: Processing succeeded and response handler was called. + * - -EPERM: IPC is unavailable on this platform. This means only primary + * process may call the proxied function. + * - -ECOMM: IPC returned error on request send. Inspect rte_errno detailed + * error code. + * - Negative error code from the proxied function. + * + * @note This mechanism is geared towards control-path tasks. Avoid calling it + * in fast-path unless unbound delays are allowed. This is due to the IPC + * mechanism itself (socket based). + * @note Due to IPC parameter size limitations the proxy logic shares call + * results through the struct ena_adapter shared memory. This makes the + * proxy mechanism strictly single-threaded. Therefore be sure to make all + * calls to the same proxied function under the same lock. + */ +#define ENA_PROXY(a, f, ...) \ +({ \ + struct ena_adapter *_a = (a); \ + struct timespec ts = { .tv_sec = ENA_MP_REQ_TMO }; \ + struct ena_mp_body *req, *rsp; \ + struct rte_mp_reply mp_rep; \ + struct rte_mp_msg mp_req; \ + int ret; \ + \ + if (rte_eal_process_type() == RTE_PROC_PRIMARY) { \ + ret = f(__VA_ARGS__); \ + } else { \ + /* Prepare and send request */ \ + req = (struct ena_mp_body *)&mp_req.param; \ + mp_msg_init(&mp_req, mp_type_ ## f, _a->edev_data->port_id); \ + mp_prep_ ## f(_a, req, ## __VA_ARGS__); \ + \ + ret = rte_mp_request_sync(&mp_req, &mp_rep, &ts); \ + if (likely(!ret)) { \ + RTE_ASSERT(mp_rsp.nb_received == 1); \ + rsp = (struct ena_mp_body *)&mp_rep.msgs[0].param; \ + ret = rsp->result; \ + if (ret == 0) { \ + mp_proc_##f(_a, rsp, ## __VA_ARGS__); \ + } else { \ + PMD_DRV_LOG(ERR, \ + "%s returned error: %d\n", \ + mp_name_ ## f, rsp->result);\ + } \ + free(mp_rep.msgs); \ + } else if (rte_errno == ENOTSUP) { \ + PMD_DRV_LOG(ERR, \ + "No IPC, can't proxy to primary\n");\ + ret = -rte_errno; \ + } else { \ + PMD_DRV_LOG(ERR, "Request %s failed: %s\n", \ + mp_name_ ## f, \ + rte_strerror(rte_errno)); \ + ret = -ECOMM; \ + } \ + } \ + ret; \ +}) + +/********************************************************************* + * Multi-Process communication request descriptors + *********************************************************************/ + +ENA_PROXY_DESC(ena_com_get_dev_basic_stats, ENA_MP_DEV_STATS_GET, +({ + ENA_TOUCH(adapter); + ENA_TOUCH(req); + ENA_TOUCH(ena_dev); + ENA_TOUCH(stats); +}), +({ + ENA_TOUCH(rsp); + ENA_TOUCH(ena_dev); + if (stats != &adapter->basic_stats) + rte_memcpy(stats, &adapter->basic_stats, sizeof(*stats)); +}), + struct ena_com_dev *ena_dev, struct ena_admin_basic_stats *stats); + +ENA_PROXY_DESC(ena_com_get_eni_stats, ENA_MP_ENI_STATS_GET, +({ + ENA_TOUCH(adapter); + ENA_TOUCH(req); + ENA_TOUCH(ena_dev); + ENA_TOUCH(stats); +}), +({ + ENA_TOUCH(rsp); + ENA_TOUCH(ena_dev); + if (stats != (struct ena_admin_eni_stats *)&adapter->eni_stats) + rte_memcpy(stats, &adapter->eni_stats, sizeof(*stats)); +}), + struct ena_com_dev *ena_dev, struct ena_admin_eni_stats *stats); + +ENA_PROXY_DESC(ena_com_set_dev_mtu, ENA_MP_MTU_SET, +({ + ENA_TOUCH(adapter); + ENA_TOUCH(ena_dev); + req->args.mtu = mtu; +}), +({ + ENA_TOUCH(adapter); + ENA_TOUCH(rsp); + ENA_TOUCH(ena_dev); + ENA_TOUCH(mtu); +}), + struct ena_com_dev *ena_dev, int mtu); + +ENA_PROXY_DESC(ena_com_indirect_table_set, ENA_MP_IND_TBL_SET, +({ + ENA_TOUCH(adapter); + ENA_TOUCH(req); + ENA_TOUCH(ena_dev); +}), +({ + ENA_TOUCH(adapter); + ENA_TOUCH(rsp); + ENA_TOUCH(ena_dev); +}), + struct ena_com_dev *ena_dev); + +ENA_PROXY_DESC(ena_com_indirect_table_get, ENA_MP_IND_TBL_GET, +({ + ENA_TOUCH(adapter); + ENA_TOUCH(req); + ENA_TOUCH(ena_dev); + ENA_TOUCH(ind_tbl); +}), +({ + ENA_TOUCH(rsp); + ENA_TOUCH(ena_dev); + if (ind_tbl != adapter->indirect_table) + rte_memcpy(ind_tbl, adapter->indirect_table, + sizeof(adapter->indirect_table)); +}), + struct ena_com_dev *ena_dev, u32 *ind_tbl); + static inline void ena_rx_mbuf_prepare(struct ena_ring *rx_ring, struct rte_mbuf *mbuf, struct ena_com_rx_ctx *ena_rx_ctx, @@ -816,7 +1074,8 @@ static int ena_stats_get(struct rte_eth_dev *dev, memset(&ena_stats, 0, sizeof(ena_stats)); rte_spinlock_lock(&adapter->admin_lock); - rc = ena_com_get_dev_basic_stats(ena_dev, &ena_stats); + rc = ENA_PROXY(adapter, ena_com_get_dev_basic_stats, ena_dev, + &ena_stats); rte_spinlock_unlock(&adapter->admin_lock); if (unlikely(rc)) { PMD_DRV_LOG(ERR, "Could not retrieve statistics from ENA\n"); @@ -882,7 +1141,7 @@ static int ena_mtu_set(struct rte_eth_dev *dev, uint16_t mtu) return -EINVAL; } - rc = ena_com_set_dev_mtu(ena_dev, mtu); + rc = ENA_PROXY(adapter, ena_com_set_dev_mtu, ena_dev, mtu); if (rc) PMD_DRV_LOG(ERR, "Could not set MTU: %d\n", mtu); else @@ -1782,6 +2041,24 @@ ena_set_offloads(struct ena_offloads *offloads, offloads->rx_offloads |= ENA_RX_RSS_HASH; } +static int ena_init_once(void) +{ + static bool init_done; + + if (init_done) + return 0; + + if (rte_eal_process_type() == RTE_PROC_PRIMARY) { + /* Init timer subsystem for the ENA timer service. */ + rte_timer_subsystem_init(); + /* Register handler for requests from secondary processes. */ + rte_mp_action_register(ENA_MP_NAME, ena_mp_primary_handle); + } + + init_done = true; + return 0; +} + static int eth_ena_dev_init(struct rte_eth_dev *eth_dev) { struct ena_calc_queue_size_ctx calc_queue_ctx = { 0 }; @@ -1802,6 +2079,10 @@ static int eth_ena_dev_init(struct rte_eth_dev *eth_dev) eth_dev->tx_pkt_burst = ð_ena_xmit_pkts; eth_dev->tx_pkt_prepare = ð_ena_prep_pkts; + rc = ena_init_once(); + if (rc != 0) + return rc; + if (rte_eal_process_type() != RTE_PROC_PRIMARY) return 0; @@ -1938,8 +2219,6 @@ static int eth_ena_dev_init(struct rte_eth_dev *eth_dev) ena_com_set_admin_polling_mode(ena_dev, false); ena_com_admin_aenq_enable(ena_dev); - if (adapters_found == 0) - rte_timer_subsystem_init(); rte_timer_init(&adapter->timer_wd); adapters_found++; @@ -2803,13 +3082,16 @@ static uint16_t eth_ena_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, return sent_idx; } -int ena_copy_eni_stats(struct ena_adapter *adapter) +int ena_copy_eni_stats(struct ena_adapter *adapter, struct ena_stats_eni *stats) { - struct ena_admin_eni_stats admin_eni_stats; int rc; rte_spinlock_lock(&adapter->admin_lock); - rc = ena_com_get_eni_stats(&adapter->ena_dev, &admin_eni_stats); + /* Retrieve and store the latest statistics from the AQ. This ensures + * that previous value is returned in case of a com error. + */ + rc = ENA_PROXY(adapter, ena_com_get_eni_stats, &adapter->ena_dev, + (struct ena_admin_eni_stats *)stats); rte_spinlock_unlock(&adapter->admin_lock); if (rc != 0) { if (rc == ENA_COM_UNSUPPORTED) { @@ -2822,9 +3104,6 @@ int ena_copy_eni_stats(struct ena_adapter *adapter) return rc; } - rte_memcpy(&adapter->eni_stats, &admin_eni_stats, - sizeof(struct ena_stats_eni)); - return 0; } @@ -2895,6 +3174,7 @@ static int ena_xstats_get(struct rte_eth_dev *dev, { struct ena_adapter *adapter = dev->data->dev_private; unsigned int xstats_count = ena_xstats_calc_num(dev->data); + struct ena_stats_eni eni_stats; unsigned int stat, i, count = 0; int stat_offset; void *stats_begin; @@ -2917,10 +3197,10 @@ static int ena_xstats_get(struct rte_eth_dev *dev, /* Even if the function below fails, we should copy previous (or initial * values) to keep structure of rte_eth_xstat consistent. */ - ena_copy_eni_stats(adapter); + ena_copy_eni_stats(adapter, &eni_stats); for (stat = 0; stat < ENA_STATS_ARRAY_ENI; stat++, count++) { stat_offset = ena_stats_eni_strings[stat].stat_offset; - stats_begin = &adapter->eni_stats; + stats_begin = &eni_stats; xstats[count].id = count; xstats[count].value = *((uint64_t *) @@ -2958,6 +3238,7 @@ static int ena_xstats_get_by_id(struct rte_eth_dev *dev, unsigned int n) { struct ena_adapter *adapter = dev->data->dev_private; + struct ena_stats_eni eni_stats; uint64_t id; uint64_t rx_entries, tx_entries; unsigned int i; @@ -2983,9 +3264,9 @@ static int ena_xstats_get_by_id(struct rte_eth_dev *dev, */ if (!was_eni_copied) { was_eni_copied = true; - ena_copy_eni_stats(adapter); + ena_copy_eni_stats(adapter, &eni_stats); } - values[i] = *((uint64_t *)&adapter->eni_stats + id); + values[i] = *((uint64_t *)&eni_stats + id); ++valid; continue; } @@ -3198,6 +3479,18 @@ static int ena_configure_aenq(struct ena_adapter *adapter) return 0; } +int ena_mp_indirect_table_set(struct ena_adapter *adapter) +{ + return ENA_PROXY(adapter, ena_com_indirect_table_set, &adapter->ena_dev); +} + +int ena_mp_indirect_table_get(struct ena_adapter *adapter, + uint32_t *indirect_table) +{ + return ENA_PROXY(adapter, ena_com_indirect_table_get, &adapter->ena_dev, + indirect_table); +} + /********************************************************************* * PMD configuration *********************************************************************/ @@ -3316,3 +3609,64 @@ static struct ena_aenq_handlers aenq_handlers = { }, .unimplemented_handler = unimplemented_aenq_handler }; + +/********************************************************************* + * Multi-Process communication request handling (in primary) + *********************************************************************/ +static int +ena_mp_primary_handle(const struct rte_mp_msg *mp_msg, const void *peer) +{ + const struct ena_mp_body *req = + (const struct ena_mp_body *)mp_msg->param; + struct ena_adapter *adapter; + struct ena_com_dev *ena_dev; + struct ena_mp_body *rsp; + struct rte_mp_msg mp_rsp; + struct rte_eth_dev *dev; + int res = 0; + + rsp = (struct ena_mp_body *)&mp_rsp.param; + mp_msg_init(&mp_rsp, req->type, req->port_id); + + if (!rte_eth_dev_is_valid_port(req->port_id)) { + rte_errno = ENODEV; + res = -rte_errno; + PMD_DRV_LOG(ERR, "Unknown port %d in request %d\n", + req->port_id, req->type); + goto end; + } + dev = &rte_eth_devices[req->port_id]; + adapter = dev->data->dev_private; + ena_dev = &adapter->ena_dev; + + switch (req->type) { + case ENA_MP_DEV_STATS_GET: + res = ena_com_get_dev_basic_stats(ena_dev, + &adapter->basic_stats); + break; + case ENA_MP_ENI_STATS_GET: + res = ena_com_get_eni_stats(ena_dev, + (struct ena_admin_eni_stats *)&adapter->eni_stats); + break; + case ENA_MP_MTU_SET: + res = ena_com_set_dev_mtu(ena_dev, req->args.mtu); + break; + case ENA_MP_IND_TBL_GET: + res = ena_com_indirect_table_get(ena_dev, + adapter->indirect_table); + break; + case ENA_MP_IND_TBL_SET: + res = ena_com_indirect_table_set(ena_dev); + break; + default: + PMD_DRV_LOG(ERR, "Unknown request type %d\n", req->type); + res = -EINVAL; + break; + } + +end: + /* Save processing result in the reply */ + rsp->result = res; + /* Return just IPC processing status */ + return rte_mp_reply(&mp_rsp, peer); +} diff --git a/drivers/net/ena/ena_ethdev.h b/drivers/net/ena/ena_ethdev.h index f660b6a7cb..01cf0ef5db 100644 --- a/drivers/net/ena/ena_ethdev.h +++ b/drivers/net/ena/ena_ethdev.h @@ -29,6 +29,9 @@ #define ENA_RX_BUF_MIN_SIZE 1400 #define ENA_DEFAULT_RING_SIZE 1024 +#define ENA_RX_RSS_TABLE_LOG_SIZE 7 +#define ENA_RX_RSS_TABLE_SIZE (1 << ENA_RX_RSS_TABLE_LOG_SIZE) + #define ENA_MIN_MTU 128 #define ENA_MMIO_DISABLE_REG_READ BIT(0) @@ -290,6 +293,9 @@ struct ena_adapter { struct ena_stats_dev dev_stats; struct ena_stats_eni eni_stats; + struct ena_admin_basic_stats basic_stats; + + u32 indirect_table[ENA_RX_RSS_TABLE_SIZE]; uint32_t all_aenq_groups; uint32_t active_aenq_groups; @@ -304,6 +310,9 @@ struct ena_adapter { uint64_t tx_cleanup_stall_delay; }; +int ena_mp_indirect_table_set(struct ena_adapter *adapter); +int ena_mp_indirect_table_get(struct ena_adapter *adapter, + uint32_t *indirect_table); int ena_rss_reta_update(struct rte_eth_dev *dev, struct rte_eth_rss_reta_entry64 *reta_conf, uint16_t reta_size); diff --git a/drivers/net/ena/ena_rss.c b/drivers/net/ena/ena_rss.c index be4007e3f3..b6c4f76e38 100644 --- a/drivers/net/ena/ena_rss.c +++ b/drivers/net/ena/ena_rss.c @@ -89,6 +89,8 @@ int ena_rss_reta_update(struct rte_eth_dev *dev, return -EINVAL; } + /* Prevent RETA table structure update races */ + rte_spinlock_lock(&adapter->admin_lock); for (i = 0 ; i < reta_size ; i++) { /* Each reta_conf is for 64 entries. * To support 128 we use 2 conf of 64. @@ -109,8 +111,7 @@ int ena_rss_reta_update(struct rte_eth_dev *dev, } } - rte_spinlock_lock(&adapter->admin_lock); - rc = ena_com_indirect_table_set(ena_dev); + rc = ena_mp_indirect_table_set(adapter); rte_spinlock_unlock(&adapter->admin_lock); if (unlikely(rc != 0)) { PMD_DRV_LOG(ERR, "Cannot set the indirection table\n"); @@ -128,9 +129,8 @@ int ena_rss_reta_query(struct rte_eth_dev *dev, struct rte_eth_rss_reta_entry64 *reta_conf, uint16_t reta_size) { - uint32_t indirect_table[ENA_RX_RSS_TABLE_SIZE] = { 0 }; + uint32_t indirect_table[ENA_RX_RSS_TABLE_SIZE]; struct ena_adapter *adapter = dev->data->dev_private; - struct ena_com_dev *ena_dev = &adapter->ena_dev; int rc; int i; int reta_conf_idx; @@ -146,7 +146,7 @@ int ena_rss_reta_query(struct rte_eth_dev *dev, } rte_spinlock_lock(&adapter->admin_lock); - rc = ena_com_indirect_table_get(ena_dev, indirect_table); + rc = ena_mp_indirect_table_get(adapter, indirect_table); rte_spinlock_unlock(&adapter->admin_lock); if (unlikely(rc != 0)) { PMD_DRV_LOG(ERR, "Cannot get indirection table\n"); From patchwork Tue Feb 22 16:06:24 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michal Krawczyk X-Patchwork-Id: 107987 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 163EFA0353; Tue, 22 Feb 2022 17:08:13 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 5D867411B2; Tue, 22 Feb 2022 17:07:11 +0100 (CET) Received: from mail-ej1-f49.google.com (mail-ej1-f49.google.com [209.85.218.49]) by mails.dpdk.org (Postfix) with ESMTP id 838C341152 for ; Tue, 22 Feb 2022 17:07:07 +0100 (CET) Received: by mail-ej1-f49.google.com with SMTP id d10so44373837eje.10 for ; Tue, 22 Feb 2022 08:07:07 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=semihalf-com.20210112.gappssmtp.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=6uFCn7H1lU9J4Hxp3duay2jjD9fxRXy3q9+WvOU614o=; b=heKgS0A5H6Kfuv0zBPxwHYCFXuGAi2Ll2KTekeig4CUEQNICRw4kTkyoEuT5y3KIx5 6f6gvkLzmRx35b5McDqAsFX4APOPhKqVavseDijSFFBYvxmAzmaZlgrbb5xzTmaBaclh QEFDahLnCsvlAG6sayhh3Qqgjz1/PlzKNnifXKEc73YjFTsgvmj/3FimYG6bCJa0y27c vkxNO1CUWLgr4hHkAmJkByrNfIO/x+kYY7KTHqQ2Pydd1bN2fK89ksIZqSRK67ywWtBn LSEcOxLMlNj47NQsZy+mORJbxINGtMjvnQPNHR/pcZtTT6NQAYNZrrdW+n8G4hb3ueF/ hjEQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=6uFCn7H1lU9J4Hxp3duay2jjD9fxRXy3q9+WvOU614o=; b=aKIE3VpZg/EuIQxsU/iovr+q06vnP0XN5Iqq+9I5mlj2o09VNV3h0Ii67rCyhNGDAf 2sttOutYI8p3o21eL58f3xDgxbg7U052KjBYhN6AsWnC+3fr4nZwuiZ1eh2/gGCyAqEk zkrBRJElIoWenFJhiX69cYdHpjhnuLFyaxmaXoDUSDiKLMzqGZh8ZFgvfUljJ+tcay+A qaIRBZ7ob5rH5XVsut10XUhWaDPFfBvIIRLsFy2g4WyZ2/hwxMfWPsvFSyd+2r3UehK0 K0Sep84P8eoBMwaTHOvIRGPn1bDy7Fp/0/OHJk5LxPx9pfIGwP0H9n+vgkkPVX3suR9o 8Nuw== X-Gm-Message-State: AOAM530ivyu8fTd/GEfv/qEW6JkyvyFsFnrlaJFSfMWuzKI2T1Y0kNU4 lq8VHpjAPtznQmSENqVFcVrMo1TlioRm4A== X-Google-Smtp-Source: ABdhPJyzJjQGsj2y87M9bC81e/sLa2jAflyydQxqHui10FVH7Vpnfq4lG8INoAzyi3NMhVXYdfMovA== X-Received: by 2002:a17:906:7b91:b0:6cd:19b4:edfa with SMTP id s17-20020a1709067b9100b006cd19b4edfamr19629639ejo.227.1645546026001; Tue, 22 Feb 2022 08:07:06 -0800 (PST) Received: from DESKTOP-U5LNN3J.localdomain (89-79-181-52.dynamic.chello.pl. [89.79.181.52]) by smtp.gmail.com with ESMTPSA id x6sm10013477edv.109.2022.02.22.08.07.04 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 22 Feb 2022 08:07:05 -0800 (PST) From: Michal Krawczyk To: dev@dpdk.org Cc: shaibran@amazon.com, upstream@semihalf.com, Stanislaw Kardach , Michal Krawczyk Subject: [PATCH 11/21] net/ena: enable stats get function for MP mode Date: Tue, 22 Feb 2022 17:06:24 +0100 Message-Id: <20220222160634.24489-12-mk@semihalf.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220222160634.24489-1-mk@semihalf.com> References: <20220222160634.24489-1-mk@semihalf.com> MIME-Version: 1.0 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 From: Stanislaw Kardach Since statistic gathering is now proxied safely to primary process, it can be enabled in secondary processes. Signed-off-by: Stanislaw Kardach Reviewed-by: Michal Krawczyk Reviewed-by: Shai Brandes --- drivers/net/ena/ena_ethdev.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/drivers/net/ena/ena_ethdev.c b/drivers/net/ena/ena_ethdev.c index bb532923b6..ff6f27e4ad 100644 --- a/drivers/net/ena/ena_ethdev.c +++ b/drivers/net/ena/ena_ethdev.c @@ -1068,9 +1068,6 @@ static int ena_stats_get(struct rte_eth_dev *dev, int i; int max_rings_stats; - if (rte_eal_process_type() != RTE_PROC_PRIMARY) - return -ENOTSUP; - memset(&ena_stats, 0, sizeof(ena_stats)); rte_spinlock_lock(&adapter->admin_lock); From patchwork Tue Feb 22 16:06:25 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michal Krawczyk X-Patchwork-Id: 107988 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 2D4CCA0352; Tue, 22 Feb 2022 17:08:19 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 3A66B411B6; Tue, 22 Feb 2022 17:07:12 +0100 (CET) Received: from mail-ed1-f47.google.com (mail-ed1-f47.google.com [209.85.208.47]) by mails.dpdk.org (Postfix) with ESMTP id 579B74118A for ; Tue, 22 Feb 2022 17:07:08 +0100 (CET) Received: by mail-ed1-f47.google.com with SMTP id s24so31657094edr.5 for ; Tue, 22 Feb 2022 08:07:08 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=semihalf-com.20210112.gappssmtp.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=wsL5kvTgfiP7scsd7yePv7KAW02qOZL1ZMXv+Vm2eNw=; b=dYJyJCNeoSLRruklQhvPU3z+wyvpUqLg8ASOXIKCsyWQz2b5v3qdCIV1cwTfYola8a 7VYdRFZ9+FAwaMntF+nz0G1pEcQpsX5eXu7eaMKcHNy6vY+VfWhNBSqTTWIcm+qZq/tp hhVYFxFQhBseiyRTH3QjEUd5o3B6jgDdY93GJuNbSjxJgq587XwstDoRlUyjDy6MC94I xsPfJVrtVc1MQUwZ4CdYqhptOPCSLFiJeT2F44w7E0YFpC/LYrUg22IrywBlSscvpGU3 KZGtwax09jVhT7XziRVmMWSBpv0V5fvQuNOb/WsZe2i4K1hHeqwF/3Ni4UYP7sMwHJ1r DceA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=wsL5kvTgfiP7scsd7yePv7KAW02qOZL1ZMXv+Vm2eNw=; b=GZ8pwNqIbEfgkx0XN6wZo0NiweUR/Sgq4WWu9ie/Vw68+F+PVXkqP0GpohMqh8CkgS H3Pv4QpGOYckhAskuKSqfcCFjlbhA3KuPPeDVFLw1KQNfK0ABsEtQImxyuIty95mkzZL zHo56J61o7eK5T3CuExu0uZaAIZUzPIolHgPFeI9nAzq2UEjyQn3LfUQTYInigsVh85v vwOvUH3Kf78g3ev54r935po9r5ts0OV9QnJetkGzJEkAZrKOQPVz0xUIdMI5ecDBce78 UvNw4UaTOyQTg3mMU7ZQB8kRIg2Dm8v1u0N4oVJwKK1vAMGMv+vbXXl2k8PxiI1xMQSC uilw== X-Gm-Message-State: AOAM530I4zNrxcJ9CU6aYKZpPGBZrCP7npgO6PIfz3iDY3GQg2yXV3Fj 7AWTwjgUU4skM2iH1pFKU2kvQRdQLdjpRQ== X-Google-Smtp-Source: ABdhPJxku4FJJOT/PRgSDza7AdCCWA2ZlJkjWbJLyrExVN4W4UmIdOD7yNYHe4g1ykvjg+sr6mCGfg== X-Received: by 2002:aa7:cc82:0:b0:410:d2b0:1a07 with SMTP id p2-20020aa7cc82000000b00410d2b01a07mr26487041edt.359.1645546027711; Tue, 22 Feb 2022 08:07:07 -0800 (PST) Received: from DESKTOP-U5LNN3J.localdomain (89-79-181-52.dynamic.chello.pl. [89.79.181.52]) by smtp.gmail.com with ESMTPSA id x6sm10013477edv.109.2022.02.22.08.07.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 22 Feb 2022 08:07:07 -0800 (PST) From: Michal Krawczyk To: dev@dpdk.org Cc: shaibran@amazon.com, upstream@semihalf.com, Michal Krawczyk , Dawid Gorecki Subject: [PATCH 12/21] net/ena/base: make IO memzone unique per port Date: Tue, 22 Feb 2022 17:06:25 +0100 Message-Id: <20220222160634.24489-13-mk@semihalf.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220222160634.24489-1-mk@semihalf.com> References: <20220222160634.24489-1-mk@semihalf.com> MIME-Version: 1.0 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 Originally, the ena_com memzone counter was shared by ports, which caused the memzones to be harder to indentify and could potentially lead to race and beucase of that the counter had to be atomic. This atomic counter was global variable and it couldn't work in the multiprocess implementation. The memzone is now being identified by the local to port memzone counter and the port ID - both of those information can be found in the shared data, so it can be probed easily. Signed-off-by: Michal Krawczyk Reviewed-by: Dawid Gorecki Reviewed-by: Shai Brandes --- doc/guides/nics/features/ena.ini | 1 + drivers/net/ena/base/ena_plat_dpdk.h | 62 ++++++++-------------------- drivers/net/ena/ena_ethdev.c | 52 ++++++++++++++++++++++- drivers/net/ena/ena_ethdev.h | 2 + 4 files changed, 71 insertions(+), 46 deletions(-) diff --git a/doc/guides/nics/features/ena.ini b/doc/guides/nics/features/ena.ini index 4db1db11f4..55690aaf5a 100644 --- a/doc/guides/nics/features/ena.ini +++ b/doc/guides/nics/features/ena.ini @@ -17,6 +17,7 @@ L3 checksum offload = Y L4 checksum offload = Y Basic stats = Y Extended stats = Y +Multiprocess aware = Y Linux = Y ARMv8 = Y x86-32 = Y diff --git a/drivers/net/ena/base/ena_plat_dpdk.h b/drivers/net/ena/base/ena_plat_dpdk.h index 41db883c63..8f2b3a87c2 100644 --- a/drivers/net/ena/base/ena_plat_dpdk.h +++ b/drivers/net/ena/base/ena_plat_dpdk.h @@ -14,6 +14,7 @@ #include #include +#include #include #include #include @@ -202,35 +203,20 @@ typedef struct { #define ENA_GET_SYSTEM_TIMEOUT(timeout_us) \ ((timeout_us) * rte_get_timer_hz() / 1000000 + rte_get_timer_cycles()) -/* - * Each rte_memzone should have unique name. - * To satisfy it, count number of allocations and add it to name. - */ -extern rte_atomic64_t ena_alloc_cnt; +const struct rte_memzone * +ena_mem_alloc_coherent(struct rte_eth_dev_data *data, size_t size, + int socket_id, unsigned int alignment, void **virt_addr, + dma_addr_t *phys_addr); #define ENA_MEM_ALLOC_COHERENT_ALIGNED( \ dmadev, size, virt, phys, mem_handle, alignment) \ do { \ - const struct rte_memzone *mz = NULL; \ - ENA_TOUCH(dmadev); \ - if ((size) > 0) { \ - char z_name[RTE_MEMZONE_NAMESIZE]; \ - snprintf(z_name, sizeof(z_name), \ - "ena_alloc_%" PRIi64 "", \ - rte_atomic64_add_return(&ena_alloc_cnt, 1)); \ - mz = rte_memzone_reserve_aligned(z_name, (size), \ - SOCKET_ID_ANY, RTE_MEMZONE_IOVA_CONTIG,\ - alignment); \ - mem_handle = mz; \ - } \ - if (mz == NULL) { \ - virt = NULL; \ - phys = 0; \ - } else { \ - memset(mz->addr, 0, (size)); \ - virt = mz->addr; \ - phys = mz->iova; \ - } \ + void *virt_addr; \ + dma_addr_t phys_addr; \ + (mem_handle) = ena_mem_alloc_coherent((dmadev), (size), \ + SOCKET_ID_ANY, (alignment), &virt_addr, &phys_addr); \ + (virt) = virt_addr; \ + (phys) = phys_addr; \ } while (0) #define ENA_MEM_ALLOC_COHERENT(dmadev, size, virt, phys, mem_handle) \ ENA_MEM_ALLOC_COHERENT_ALIGNED(dmadev, size, virt, phys, \ @@ -242,25 +228,13 @@ extern rte_atomic64_t ena_alloc_cnt; #define ENA_MEM_ALLOC_COHERENT_NODE_ALIGNED( \ dmadev, size, virt, phys, mem_handle, node, dev_node, alignment) \ do { \ - const struct rte_memzone *mz = NULL; \ - ENA_TOUCH(dmadev); ENA_TOUCH(dev_node); \ - if ((size) > 0) { \ - char z_name[RTE_MEMZONE_NAMESIZE]; \ - snprintf(z_name, sizeof(z_name), \ - "ena_alloc_%" PRIi64 "", \ - rte_atomic64_add_return(&ena_alloc_cnt, 1)); \ - mz = rte_memzone_reserve_aligned(z_name, (size), \ - node, RTE_MEMZONE_IOVA_CONTIG, alignment); \ - mem_handle = mz; \ - } \ - if (mz == NULL) { \ - virt = NULL; \ - phys = 0; \ - } else { \ - memset(mz->addr, 0, (size)); \ - virt = mz->addr; \ - phys = mz->iova; \ - } \ + void *virt_addr; \ + dma_addr_t phys_addr; \ + ENA_TOUCH(dev_node); \ + (mem_handle) = ena_mem_alloc_coherent((dmadev), (size), \ + (node), (alignment), &virt_addr, &phys_addr); \ + (virt) = virt_addr; \ + (phys) = phys_addr; \ } while (0) #define ENA_MEM_ALLOC_COHERENT_NODE( \ dmadev, size, virt, phys, mem_handle, node, dev_node) \ diff --git a/drivers/net/ena/ena_ethdev.c b/drivers/net/ena/ena_ethdev.c index ff6f27e4ad..8f30718f2c 100644 --- a/drivers/net/ena/ena_ethdev.c +++ b/drivers/net/ena/ena_ethdev.c @@ -2110,8 +2110,10 @@ static int eth_ena_dev_init(struct rte_eth_dev *eth_dev) } ena_dev->reg_bar = adapter->regs; - /* This is a dummy pointer for ena_com functions. */ - ena_dev->dmadev = adapter; + /* Pass device data as a pointer which can be passed to the IO functions + * by the ena_com (for example - the memory allocation). + */ + ena_dev->dmadev = eth_dev->data; adapter->id_number = adapters_found; @@ -3488,6 +3490,52 @@ int ena_mp_indirect_table_get(struct ena_adapter *adapter, indirect_table); } +/********************************************************************* + * ena_plat_dpdk.h functions implementations + *********************************************************************/ + +const struct rte_memzone * +ena_mem_alloc_coherent(struct rte_eth_dev_data *data, size_t size, + int socket_id, unsigned int alignment, void **virt_addr, + dma_addr_t *phys_addr) +{ + char z_name[RTE_MEMZONE_NAMESIZE]; + struct ena_adapter *adapter = data->dev_private; + const struct rte_memzone *memzone; + int rc; + + rc = snprintf(z_name, RTE_MEMZONE_NAMESIZE, "ena_p%d_mz%" PRIu64 "", + data->port_id, adapter->memzone_cnt); + if (rc >= RTE_MEMZONE_NAMESIZE) { + PMD_DRV_LOG(ERR, + "Name for the ena_com memzone is too long. Port: %d, mz_num: %" PRIu64 "\n", + data->port_id, adapter->memzone_cnt); + goto error; + } + adapter->memzone_cnt++; + + memzone = rte_memzone_reserve_aligned(z_name, size, socket_id, + RTE_MEMZONE_IOVA_CONTIG, alignment); + if (memzone == NULL) { + PMD_DRV_LOG(ERR, "Failed to allocate ena_com memzone: %s\n", + z_name); + goto error; + } + + memset(memzone->addr, 0, size); + *virt_addr = memzone->addr; + *phys_addr = memzone->iova; + + return memzone; + +error: + *virt_addr = NULL; + *phys_addr = 0; + + return NULL; +} + + /********************************************************************* * PMD configuration *********************************************************************/ diff --git a/drivers/net/ena/ena_ethdev.h b/drivers/net/ena/ena_ethdev.h index 01cf0ef5db..ca3e5ed691 100644 --- a/drivers/net/ena/ena_ethdev.h +++ b/drivers/net/ena/ena_ethdev.h @@ -308,6 +308,8 @@ struct ena_adapter { uint64_t missing_tx_completion_to; uint64_t missing_tx_completion_budget; uint64_t tx_cleanup_stall_delay; + + uint64_t memzone_cnt; }; int ena_mp_indirect_table_set(struct ena_adapter *adapter); From patchwork Tue Feb 22 16:06:26 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michal Krawczyk X-Patchwork-Id: 107989 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 6F6F1A0352; Tue, 22 Feb 2022 17:08:25 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 226E6411CE; Tue, 22 Feb 2022 17:07:13 +0100 (CET) Received: from mail-ed1-f41.google.com (mail-ed1-f41.google.com [209.85.208.41]) by mails.dpdk.org (Postfix) with ESMTP id 6BF2241190 for ; Tue, 22 Feb 2022 17:07:09 +0100 (CET) Received: by mail-ed1-f41.google.com with SMTP id m3so32117119eda.10 for ; Tue, 22 Feb 2022 08:07:09 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=semihalf-com.20210112.gappssmtp.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=mDhQnzFWHG4t0egd6mvppeslz6lKUKkj8/9ZbLux+YI=; b=J/3h8za5yxSFOkMsTeNdX0m6keIQFyRNnkbd7wte3DAIuMXhdIIp5T0n6YTAvaSBUm Tzci3GH59h5DVn/jTD8JQDN6ZoIj7obY0L7itxR61bvvNnWhFxDWKXBxMpjGOjcr01w+ Z9sFdcmY2wT1XUyXleE7FSQORGRj+NP1MQwrKXUUSSLz3LKPIawZpWApVMfdU7dO27md 6rit/by7NLadVlixftmRqPCgUVzn97QF02pNMzfeM52eMjtILDvtNtfvFg7buKNeQz1/ zErNhHeCUh1Aq8gcPVguqv5b56uCvzCHAGzDb+cea0rnmjpTNyBPhaGh0z9vUcAmDFU4 pUdA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=mDhQnzFWHG4t0egd6mvppeslz6lKUKkj8/9ZbLux+YI=; b=UjaI2MtNo4ukEm6QIks1/5dlzaoU3DpdGzLWv6m0ffjOb+bZufJ4SvUR1RuBVc8lg+ ybEGJ+Vd3x7p75MVbC7BtdTT3Yj/6UBYaytZLc63n3Q7BldQbBYWAv01wrbHm/EdCRub 0AZwogi1K/8LMnG5AQFmLImrRKU7vnjWQApAaVwqdbiRyQYgXI+B8dHObQioD14BElZh XMx/Kb4PXdZV3EUaFozJVn11TLIdKHJP/ME3JYyODSZumdA2DY9cpav/XTSRiDOI+3f7 /euDye9JtI6QZ1LZNOtSWaG6LDsiRqHGn3YTv3kiObvhJWrgOtj4m9qukHZQ8i41MgU9 Ynuw== X-Gm-Message-State: AOAM531BbRRuK+UyRHC5EVquhstan5eQAG/4G3I/nqlSMAw++IpIVgr6 SNuw3r8YZu1P9sLzzKlDAYAPf0PfQD5GPQ== X-Google-Smtp-Source: ABdhPJx0+bI9agIT+GooyVcK5dDyYTiA/BQfkaRH9FIlO4FHvagsdg98WJRLsQpnz1aL3zpyU84bIA== X-Received: by 2002:a50:a44f:0:b0:410:a0b2:aca8 with SMTP id v15-20020a50a44f000000b00410a0b2aca8mr27392526edb.47.1645546028893; Tue, 22 Feb 2022 08:07:08 -0800 (PST) Received: from DESKTOP-U5LNN3J.localdomain (89-79-181-52.dynamic.chello.pl. [89.79.181.52]) by smtp.gmail.com with ESMTPSA id x6sm10013477edv.109.2022.02.22.08.07.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 22 Feb 2022 08:07:08 -0800 (PST) From: Michal Krawczyk To: dev@dpdk.org Cc: shaibran@amazon.com, upstream@semihalf.com, Dawid Gorecki , Michal Krawczyk Subject: [PATCH 13/21] net/ena: expose Tx cleanup function Date: Tue, 22 Feb 2022 17:06:26 +0100 Message-Id: <20220222160634.24489-14-mk@semihalf.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220222160634.24489-1-mk@semihalf.com> References: <20220222160634.24489-1-mk@semihalf.com> MIME-Version: 1.0 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 From: Dawid Gorecki ENA driver did not allow applications to call tx_cleanup. Freeing Tx mbufs was always done by the driver and it was not possible to manually request the driver to free mbufs. Modify ena_tx_cleanup function to accept maximum number of packets to free and return number of packets that was freed. Signed-off-by: Dawid Gorecki Reviewed-by: Michal Krawczyk Reviewed-by: Shai Brandes --- doc/guides/nics/features/ena.ini | 1 + doc/guides/rel_notes/release_22_03.rst | 1 + drivers/net/ena/ena_ethdev.c | 27 ++++++++++++++++++-------- 3 files changed, 21 insertions(+), 8 deletions(-) diff --git a/doc/guides/nics/features/ena.ini b/doc/guides/nics/features/ena.ini index 55690aaf5a..59c1ae85fa 100644 --- a/doc/guides/nics/features/ena.ini +++ b/doc/guides/nics/features/ena.ini @@ -7,6 +7,7 @@ Link status = Y Link status event = Y Rx interrupt = Y +Free Tx mbuf on demand = Y MTU update = Y Scattered Rx = Y TSO = Y diff --git a/doc/guides/rel_notes/release_22_03.rst b/doc/guides/rel_notes/release_22_03.rst index 92f36fa8ab..91324dae18 100644 --- a/doc/guides/rel_notes/release_22_03.rst +++ b/doc/guides/rel_notes/release_22_03.rst @@ -114,6 +114,7 @@ New Features * Added support for the link status configuration. * Added optimized memcpy support for the ARM platforms. * Added ENA admin queue support for the MP applications. + * Added free Tx mbuf on demand feature support. * **Updated Cisco enic driver.** diff --git a/drivers/net/ena/ena_ethdev.c b/drivers/net/ena/ena_ethdev.c index 8f30718f2c..eecdd447dd 100644 --- a/drivers/net/ena/ena_ethdev.c +++ b/drivers/net/ena/ena_ethdev.c @@ -170,7 +170,7 @@ static void ena_tx_map_mbuf(struct ena_ring *tx_ring, void **push_header, uint16_t *header_len); static int ena_xmit_mbuf(struct ena_ring *tx_ring, struct rte_mbuf *mbuf); -static void ena_tx_cleanup(struct ena_ring *tx_ring); +static int ena_tx_cleanup(void *txp, uint32_t free_pkt_cnt); static uint16_t eth_ena_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, uint16_t nb_pkts); static uint16_t eth_ena_prep_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, @@ -276,6 +276,7 @@ static const struct eth_dev_ops ena_dev_ops = { .rx_queue_intr_disable = ena_rx_queue_intr_disable, .rss_hash_update = ena_rss_hash_update, .rss_hash_conf_get = ena_rss_hash_conf_get, + .tx_done_cleanup = ena_tx_cleanup, }; /********************************************************************* @@ -2990,16 +2991,22 @@ static int ena_xmit_mbuf(struct ena_ring *tx_ring, struct rte_mbuf *mbuf) return 0; } -static void ena_tx_cleanup(struct ena_ring *tx_ring) +static int ena_tx_cleanup(void *txp, uint32_t free_pkt_cnt) { + struct ena_ring *tx_ring = (struct ena_ring *)txp; unsigned int total_tx_descs = 0; + unsigned int total_tx_pkts = 0; uint16_t cleanup_budget; uint16_t next_to_clean = tx_ring->next_to_clean; - /* Attempt to release all Tx descriptors (ring_size - 1 -> size_mask) */ - cleanup_budget = tx_ring->size_mask; + /* + * If free_pkt_cnt is equal to 0, it means that the user requested + * full cleanup, so attempt to release all Tx descriptors + * (ring_size - 1 -> size_mask) + */ + cleanup_budget = (free_pkt_cnt == 0) ? tx_ring->size_mask : free_pkt_cnt; - while (likely(total_tx_descs < cleanup_budget)) { + while (likely(total_tx_pkts < cleanup_budget)) { struct rte_mbuf *mbuf; struct ena_tx_buffer *tx_info; uint16_t req_id; @@ -3021,6 +3028,7 @@ static void ena_tx_cleanup(struct ena_ring *tx_ring) tx_ring->empty_tx_reqs[next_to_clean] = req_id; total_tx_descs += tx_info->tx_descs; + total_tx_pkts++; /* Put back descriptor to the ring for reuse */ next_to_clean = ENA_IDX_NEXT_MASKED(next_to_clean, @@ -3034,8 +3042,11 @@ static void ena_tx_cleanup(struct ena_ring *tx_ring) ena_com_update_dev_comp_head(tx_ring->ena_com_io_cq); } - /* Notify completion handler that the cleanup was just called */ - tx_ring->last_cleanup_ticks = rte_get_timer_cycles(); + /* Notify completion handler that full cleanup was performed */ + if (free_pkt_cnt == 0 || total_tx_pkts < cleanup_budget) + tx_ring->last_cleanup_ticks = rte_get_timer_cycles(); + + return total_tx_pkts; } static uint16_t eth_ena_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, @@ -3056,7 +3067,7 @@ static uint16_t eth_ena_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, available_desc = ena_com_free_q_entries(tx_ring->ena_com_io_sq); if (available_desc < tx_ring->tx_free_thresh) - ena_tx_cleanup(tx_ring); + ena_tx_cleanup((void *)tx_ring, 0); for (sent_idx = 0; sent_idx < nb_pkts; sent_idx++) { if (ena_xmit_mbuf(tx_ring, tx_pkts[sent_idx])) From patchwork Tue Feb 22 16:06:27 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michal Krawczyk X-Patchwork-Id: 107990 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 57236A0352; Tue, 22 Feb 2022 17:08:31 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id ED543411E6; Tue, 22 Feb 2022 17:07:13 +0100 (CET) Received: from mail-ej1-f54.google.com (mail-ej1-f54.google.com [209.85.218.54]) by mails.dpdk.org (Postfix) with ESMTP id 92D3F411AE for ; Tue, 22 Feb 2022 17:07:10 +0100 (CET) Received: by mail-ej1-f54.google.com with SMTP id qx21so44284723ejb.13 for ; Tue, 22 Feb 2022 08:07:10 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=semihalf-com.20210112.gappssmtp.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=HexrzqMhOSZQMQXdYhbCJ6UgcGMV1Vcs7Dsbc7kZMJQ=; b=TzfRPlzju06SMg+lH3C8lmRVOTSpypPjlfjVZX4kkxczzUVjOcNFHyl6qEnnITyyX8 svXdJR2azav8ImEJPtzP8Hk2ZdzvRh5QDiZRfJD0oZz4KJrYYJar9/ST0QzXEZZon9lb sBVQ0sk14uarjFJJk8p0Av80Vmc1+kyt7Hn2Z0TbEv9ZTrZZ/c3K5X1hTEuMipRM0780 vlJWY4Wi4zEqg2RQ9gd5QdTxFazhhzFEZmcnyf5hp1LPJuknRrkI7os3SEeY5I/duLOH nyLfXnerwFHIh7cOoWyM9GFwNRg+wszvGivtrIzSP6cHVJNOu5RuQEnmii0Tl7juO6rd NRug== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=HexrzqMhOSZQMQXdYhbCJ6UgcGMV1Vcs7Dsbc7kZMJQ=; b=e7AWMWdvRM/JV2BRQLHGF/hhWYYJIgwzUvSCbXHIKeyYg+1Yu6K6V5TC9D1fYhdT1X ZT1wmmtOkwZG1euWPoxeqd8lq7irFhXhm6bIn2sSuZwfQcR+j3T7SGMc/wfcj5uCNHej WamC9slcEeHcJIIQpiW/CxBEiIzO7th9usiTqQQyGw/Ym4GWVpvTmVSaXQ1WB4cLK2R9 T1Q1lauQEsxmi7JYCz+8ueSMOJFmmqXu+Anu8bFOSqdmaInCwSQU48Pf5Ngc4HiW0QPJ YbkyYGjAiKYwWCWlCTWgf+yDPJzW2WQ2Ad6CE6ojID9e08xqYAePTTI0rMEkvajmPS/f DBFA== X-Gm-Message-State: AOAM532VHOWaeJu6zuXVPXD4QdmE+yimcACwdl1JYhd6Xnk/yDjN/KmT HHXCQ5OOm8K6S3Rpbl09+31hUNEpjqUvzQ== X-Google-Smtp-Source: ABdhPJxFdvrIdl5AFVhbRmtbrXJX6dW5y3YnLnvERrXq+JH6EtMB7M4vQnj8VLO83VQ+LT8v+DUUmg== X-Received: by 2002:a17:907:2bf6:b0:6b9:725e:4e1f with SMTP id gv54-20020a1709072bf600b006b9725e4e1fmr19899566ejc.527.1645546029993; Tue, 22 Feb 2022 08:07:09 -0800 (PST) Received: from DESKTOP-U5LNN3J.localdomain (89-79-181-52.dynamic.chello.pl. [89.79.181.52]) by smtp.gmail.com with ESMTPSA id x6sm10013477edv.109.2022.02.22.08.07.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 22 Feb 2022 08:07:09 -0800 (PST) From: Michal Krawczyk To: dev@dpdk.org Cc: shaibran@amazon.com, upstream@semihalf.com, Michal Krawczyk , Dawid Gorecki Subject: [PATCH 14/21] net/ena: add API for probing xstat names by ID Date: Tue, 22 Feb 2022 17:06:27 +0100 Message-Id: <20220222160634.24489-15-mk@semihalf.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220222160634.24489-1-mk@semihalf.com> References: <20220222160634.24489-1-mk@semihalf.com> MIME-Version: 1.0 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 ENA was only supporting retrieval of all the xstats name and wasn't implementing the eth_xstats_get_names_by_id API. As this API may be more efficient than retrieving all the names, it tries to avoid excessive string copying. Signed-off-by: Michal Krawczyk Reviewed-by: Dawid Gorecki Reviewed-by: Shai Brandes --- doc/guides/rel_notes/release_22_03.rst | 1 + drivers/net/ena/ena_ethdev.c | 130 ++++++++++++++++++++----- 2 files changed, 108 insertions(+), 23 deletions(-) diff --git a/doc/guides/rel_notes/release_22_03.rst b/doc/guides/rel_notes/release_22_03.rst index 91324dae18..1b87b9c174 100644 --- a/doc/guides/rel_notes/release_22_03.rst +++ b/doc/guides/rel_notes/release_22_03.rst @@ -115,6 +115,7 @@ New Features * Added optimized memcpy support for the ARM platforms. * Added ENA admin queue support for the MP applications. * Added free Tx mbuf on demand feature support. + * Added ``rte_eth_xstats_get_names_by_id`` API support. * **Updated Cisco enic driver.** diff --git a/drivers/net/ena/ena_ethdev.c b/drivers/net/ena/ena_ethdev.c index eecdd447dd..0766f613b0 100644 --- a/drivers/net/ena/ena_ethdev.c +++ b/drivers/net/ena/ena_ethdev.c @@ -230,6 +230,10 @@ static int eth_ena_dev_init(struct rte_eth_dev *eth_dev); static int ena_xstats_get_names(struct rte_eth_dev *dev, struct rte_eth_xstat_name *xstats_names, unsigned int n); +static int ena_xstats_get_names_by_id(struct rte_eth_dev *dev, + const uint64_t *ids, + struct rte_eth_xstat_name *xstats_names, + unsigned int size); static int ena_xstats_get(struct rte_eth_dev *dev, struct rte_eth_xstat *stats, unsigned int n); @@ -254,29 +258,30 @@ static int ena_mp_primary_handle(const struct rte_mp_msg *mp_msg, const void *peer); static const struct eth_dev_ops ena_dev_ops = { - .dev_configure = ena_dev_configure, - .dev_infos_get = ena_infos_get, - .rx_queue_setup = ena_rx_queue_setup, - .tx_queue_setup = ena_tx_queue_setup, - .dev_start = ena_start, - .dev_stop = ena_stop, - .link_update = ena_link_update, - .stats_get = ena_stats_get, - .xstats_get_names = ena_xstats_get_names, - .xstats_get = ena_xstats_get, - .xstats_get_by_id = ena_xstats_get_by_id, - .mtu_set = ena_mtu_set, - .rx_queue_release = ena_rx_queue_release, - .tx_queue_release = ena_tx_queue_release, - .dev_close = ena_close, - .dev_reset = ena_dev_reset, - .reta_update = ena_rss_reta_update, - .reta_query = ena_rss_reta_query, - .rx_queue_intr_enable = ena_rx_queue_intr_enable, - .rx_queue_intr_disable = ena_rx_queue_intr_disable, - .rss_hash_update = ena_rss_hash_update, - .rss_hash_conf_get = ena_rss_hash_conf_get, - .tx_done_cleanup = ena_tx_cleanup, + .dev_configure = ena_dev_configure, + .dev_infos_get = ena_infos_get, + .rx_queue_setup = ena_rx_queue_setup, + .tx_queue_setup = ena_tx_queue_setup, + .dev_start = ena_start, + .dev_stop = ena_stop, + .link_update = ena_link_update, + .stats_get = ena_stats_get, + .xstats_get_names = ena_xstats_get_names, + .xstats_get_names_by_id = ena_xstats_get_names_by_id, + .xstats_get = ena_xstats_get, + .xstats_get_by_id = ena_xstats_get_by_id, + .mtu_set = ena_mtu_set, + .rx_queue_release = ena_rx_queue_release, + .tx_queue_release = ena_tx_queue_release, + .dev_close = ena_close, + .dev_reset = ena_dev_reset, + .reta_update = ena_rss_reta_update, + .reta_query = ena_rss_reta_query, + .rx_queue_intr_enable = ena_rx_queue_intr_enable, + .rx_queue_intr_disable = ena_rx_queue_intr_disable, + .rss_hash_update = ena_rss_hash_update, + .rss_hash_conf_get = ena_rss_hash_conf_get, + .tx_done_cleanup = ena_tx_cleanup, }; /********************************************************************* @@ -3165,6 +3170,85 @@ static int ena_xstats_get_names(struct rte_eth_dev *dev, return xstats_count; } +/** + * DPDK callback to retrieve names of extended device statistics for the given + * ids. + * + * @param dev + * Pointer to Ethernet device structure. + * @param[out] xstats_names + * Buffer to insert names into. + * @param ids + * IDs array for which the names should be retrieved. + * @param size + * Number of ids. + * + * @return + * Positive value: number of xstats names. Negative value: error code. + */ +static int ena_xstats_get_names_by_id(struct rte_eth_dev *dev, + const uint64_t *ids, + struct rte_eth_xstat_name *xstats_names, + unsigned int size) +{ + uint64_t xstats_count = ena_xstats_calc_num(dev->data); + uint64_t id, qid; + unsigned int i; + + if (xstats_names == NULL) + return xstats_count; + + for (i = 0; i < size; ++i) { + id = ids[i]; + if (id > xstats_count) { + PMD_DRV_LOG(ERR, + "ID value out of range: id=%" PRIu64 ", xstats_num=%" PRIu64 "\n", + id, xstats_count); + return -EINVAL; + } + + if (id < ENA_STATS_ARRAY_GLOBAL) { + strcpy(xstats_names[i].name, + ena_stats_global_strings[id].name); + continue; + } + + id -= ENA_STATS_ARRAY_GLOBAL; + if (id < ENA_STATS_ARRAY_ENI) { + strcpy(xstats_names[i].name, + ena_stats_eni_strings[id].name); + continue; + } + + id -= ENA_STATS_ARRAY_ENI; + if (id < ENA_STATS_ARRAY_RX) { + qid = id / dev->data->nb_rx_queues; + id %= dev->data->nb_rx_queues; + snprintf(xstats_names[i].name, + sizeof(xstats_names[i].name), + "rx_q%" PRIu64 "d_%s", + qid, ena_stats_rx_strings[id].name); + continue; + } + + id -= ENA_STATS_ARRAY_RX; + /* Although this condition is not needed, it was added for + * compatibility if new xstat structure would be ever added. + */ + if (id < ENA_STATS_ARRAY_TX) { + qid = id / dev->data->nb_tx_queues; + id %= dev->data->nb_tx_queues; + snprintf(xstats_names[i].name, + sizeof(xstats_names[i].name), + "tx_q%" PRIu64 "_%s", + qid, ena_stats_tx_strings[id].name); + continue; + } + } + + return i; +} + /** * DPDK callback to get extended device statistics. * From patchwork Tue Feb 22 16:06:28 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michal Krawczyk X-Patchwork-Id: 107991 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 019A7A0352; Tue, 22 Feb 2022 17:08:40 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 24B8C41238; Tue, 22 Feb 2022 17:07:15 +0100 (CET) Received: from mail-ed1-f47.google.com (mail-ed1-f47.google.com [209.85.208.47]) by mails.dpdk.org (Postfix) with ESMTP id D538D41161 for ; Tue, 22 Feb 2022 17:07:11 +0100 (CET) Received: by mail-ed1-f47.google.com with SMTP id u18so38117678edt.6 for ; Tue, 22 Feb 2022 08:07:11 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=semihalf-com.20210112.gappssmtp.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=EU2sNq8h4OGxdI9TjoX+eE93TiCn/ruYSicdnRNgwMI=; b=elSCK0SDMhHXxUYVdqn0aIsOJA7fPd6xIt0DI2s72pBirKnYTLpFYDQNRbjMouf5Us QsDCuYVWSs9hdhp0jhkU21k58dTQ1LBlcsNNOP+rXtIZY9aUcjAkbA7A3QWglUqAMZbM JUJbhoPEmBPn1YwxYtEz8F40dkZARexm8MQxN0MogjKNlb7oBFW5ZSE+yKzfgeIaL3Tv AfYKmjPZ1WdL4d2bopkETWPmcH2aNdpF0JpRxsBBOBLC/Orf8g+AKqwvsXSdcEtKrYm4 jyUvaKeVkE0MKdszD9NgC2sSBHG9uwe3pgc7sINcKAXOBcs6uO732zSssT2c9ILH41sI w8XA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=EU2sNq8h4OGxdI9TjoX+eE93TiCn/ruYSicdnRNgwMI=; b=1pQq7eJOY8qaHd9gdT66W9yM2bw9olMsF9DNqhLFoHRxjoy6MotK+4T+8iyAShoIAn B8fHO1BAms0Uu8/K16Ub5OZj81pndmvM3A9S0XXcIoopqlquSLmAfarNHMvibIlGRret SPhnYUeSxV/apruWnQdbnzWUFfPk/X2jCTmt2QNbMmWOisRnrYwaz827p5fo5C6DNZJK FDu4p42UYKpaniCxM8teVl+03RyM6pRPxu+KvI2wiEncwc+KFiKHjPmPavOYGRWcCDtB FOmbX99HLERAxIdoflsYHtR0wMoGPAdYYQC7UdFkeFlGEUm3nF0g5N3rLKEiIWgP2k/e cdHA== X-Gm-Message-State: AOAM533nhO35x2cTWXd+i/jezsQ6a9NTp7PyRtj4KQ5AHiKfBGj7Pfew gY577iRCrLbBphsa9XnKWi5/302HoePaaQ== X-Google-Smtp-Source: ABdhPJwX1xmXAtq4iH2q0y3g+svgnuuFN1HD6w4qkYhtdFgRLFSlMuu8BkcKT8Qq6AwHfHFQl0rpjQ== X-Received: by 2002:a05:6402:1148:b0:413:11e0:1f58 with SMTP id g8-20020a056402114800b0041311e01f58mr8521242edw.113.1645546031204; Tue, 22 Feb 2022 08:07:11 -0800 (PST) Received: from DESKTOP-U5LNN3J.localdomain (89-79-181-52.dynamic.chello.pl. [89.79.181.52]) by smtp.gmail.com with ESMTPSA id x6sm10013477edv.109.2022.02.22.08.07.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 22 Feb 2022 08:07:10 -0800 (PST) From: Michal Krawczyk To: dev@dpdk.org Cc: shaibran@amazon.com, upstream@semihalf.com, Dawid Gorecki , stable@dpdk.org, Michal Krawczyk Subject: [PATCH 15/21] net/ena: check if reset was already triggered Date: Tue, 22 Feb 2022 17:06:28 +0100 Message-Id: <20220222160634.24489-16-mk@semihalf.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220222160634.24489-1-mk@semihalf.com> References: <20220222160634.24489-1-mk@semihalf.com> MIME-Version: 1.0 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 From: Dawid Gorecki When triggering the reset, no check was performed to see if the reset was already triggered. This could result in original reset reaon being overwritten. Add ena_trigger_reset helper function, which checks if the reset was triggered and only sets the reset reason if the reset wasn't triggered yet. Replace all occurences of manually setting the reset with ena_trigger_reset call. Fixes: 2081d5e2e92d ("net/ena: add reset routine") Cc: stable@dpdk.org Signed-off-by: Dawid Gorecki Reviewed-by: Michal Krawczyk Reviewed-by: Shai Brandes --- drivers/net/ena/ena_ethdev.c | 32 ++++++++++++++++++-------------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/drivers/net/ena/ena_ethdev.c b/drivers/net/ena/ena_ethdev.c index 0766f613b0..d413111b08 100644 --- a/drivers/net/ena/ena_ethdev.c +++ b/drivers/net/ena/ena_ethdev.c @@ -539,6 +539,15 @@ ENA_PROXY_DESC(ena_com_indirect_table_get, ENA_MP_IND_TBL_GET, }), struct ena_com_dev *ena_dev, u32 *ind_tbl); +static inline void ena_trigger_reset(struct ena_adapter *adapter, + enum ena_regs_reset_reason_types reason) +{ + if (likely(!adapter->trigger_reset)) { + adapter->reset_reason = reason; + adapter->trigger_reset = true; + } +} + static inline void ena_rx_mbuf_prepare(struct ena_ring *rx_ring, struct rte_mbuf *mbuf, struct ena_com_rx_ctx *ena_rx_ctx, @@ -666,8 +675,7 @@ static int validate_tx_req_id(struct ena_ring *tx_ring, u16 req_id) /* Trigger device reset */ ++tx_ring->tx_stats.bad_req_id; - tx_ring->adapter->reset_reason = ENA_REGS_RESET_INV_TX_REQ_ID; - tx_ring->adapter->trigger_reset = true; + ena_trigger_reset(tx_ring->adapter, ENA_REGS_RESET_INV_TX_REQ_ID); return -EFAULT; } @@ -1783,8 +1791,7 @@ static void check_for_missing_keep_alive(struct ena_adapter *adapter) if (unlikely((rte_get_timer_cycles() - adapter->timestamp_wd) >= adapter->keep_alive_timeout)) { PMD_DRV_LOG(ERR, "Keep alive timeout\n"); - adapter->reset_reason = ENA_REGS_RESET_KEEP_ALIVE_TO; - adapter->trigger_reset = true; + ena_trigger_reset(adapter, ENA_REGS_RESET_KEEP_ALIVE_TO); ++adapter->dev_stats.wd_expired; } } @@ -1794,8 +1801,7 @@ static void check_for_admin_com_state(struct ena_adapter *adapter) { if (unlikely(!ena_com_get_admin_running_state(&adapter->ena_dev))) { PMD_DRV_LOG(ERR, "ENA admin queue is not in running state\n"); - adapter->reset_reason = ENA_REGS_RESET_ADMIN_TO; - adapter->trigger_reset = true; + ena_trigger_reset(adapter, ENA_REGS_RESET_ADMIN_TO); } } @@ -2606,14 +2612,13 @@ static uint16_t eth_ena_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, rc); 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; + ena_trigger_reset(rx_ring->adapter, + 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; + ena_trigger_reset(rx_ring->adapter, + ENA_REGS_RESET_INV_RX_REQ_ID); } - rx_ring->adapter->trigger_reset = true; return 0; } @@ -2978,9 +2983,8 @@ static int ena_xmit_mbuf(struct ena_ring *tx_ring, struct rte_mbuf *mbuf) if (unlikely(rc)) { PMD_DRV_LOG(ERR, "Failed to prepare Tx buffers, rc: %d\n", rc); ++tx_ring->tx_stats.prepare_ctx_err; - tx_ring->adapter->reset_reason = - ENA_REGS_RESET_DRIVER_INVALID_STATE; - tx_ring->adapter->trigger_reset = true; + ena_trigger_reset(tx_ring->adapter, + ENA_REGS_RESET_DRIVER_INVALID_STATE); return rc; } From patchwork Tue Feb 22 16:06:29 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michal Krawczyk X-Patchwork-Id: 107992 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 71378A0352; Tue, 22 Feb 2022 17:08:46 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 0DCEE41C2E; Tue, 22 Feb 2022 17:07:16 +0100 (CET) Received: from mail-ej1-f52.google.com (mail-ej1-f52.google.com [209.85.218.52]) by mails.dpdk.org (Postfix) with ESMTP id 3306F411DF for ; Tue, 22 Feb 2022 17:07:13 +0100 (CET) Received: by mail-ej1-f52.google.com with SMTP id r13so21335714ejd.5 for ; Tue, 22 Feb 2022 08:07:13 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=semihalf-com.20210112.gappssmtp.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=oCWqJTcYdWnvA0jll4GvmUtKZbrObkrt69QJcxg4sj8=; b=71RUBrUd6J90dgpL9mEfkJsqD5eAUF+7l1WjGN0HmXMBgSd064O46bQKAMVwtjTCf+ AxFQ3qo1Y7p44ZosBBFkyU+VBa2iFfQgQxZOxB6CCKCUURZUPlvuz7Ypz9EfWtE47nyi mRqELMr4QyGh7z7oSxSFbxi21PeC7LpCGy05C6qVv6TU/dTdU9DjiSm6wMMGTS+goU69 nQlo7Vm0shLyur1LC6sH5hV/He5nVyOb1oGVNArhpd6dJmjB+ZfJGH2RXJBlHQ/OhonO x4Ja+t5feynNZxMkcRzA/qnRaIb0MEiESPAhEPZlulb5LhkVW7eRloQfZfNaY0rFZPF5 tEtg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=oCWqJTcYdWnvA0jll4GvmUtKZbrObkrt69QJcxg4sj8=; b=dxnHUWFLikdF0RK8bHOS0K5/cIAkAiRWa7BSIM7iZLvx2ZX9ThQ8dKIFNGv7fCcr72 3CAckE8Tl5N7vwxlGpgNYbD/DJftHF08dlMtHkzqf+4HNN2S1vv1tlLckWqr9ZiWLQ9q VGAXheIpigFZdw24E5/u8OIEniqRxiBqhXF51+IrWkkDBo687D6UJIWrSmCGXbvaWYUN bmXgMV+GJHTxBT8RWfUMxgTUtPu7B16boD3a3fUUI60RC6zCld6FcQoD0lm6u/2BzWky C9p4KCX7Ow1e4dVLLAcJFiiAznlyXI52lYPUCnJN4Wk4M3wBD19wDdvPkKgp737QZ8hA jHnQ== X-Gm-Message-State: AOAM530CkpGdhy+wBvL2mJEcvZFQSz1aLL806Ye8rX4piuK5tebnccFH Y3l6NXUmBY6RgRa6Rsf+ILurzsMzO3vOcg== X-Google-Smtp-Source: ABdhPJxJztcRitKwv7T0W0xAcc6D6CWo70Vcp8gyh8htGib4lliG7pycSA8CXJWuYS5oV9VsvNN3cw== X-Received: by 2002:a17:906:6d12:b0:6cd:6970:2d4c with SMTP id m18-20020a1709066d1200b006cd69702d4cmr19888009ejr.323.1645546032419; Tue, 22 Feb 2022 08:07:12 -0800 (PST) Received: from DESKTOP-U5LNN3J.localdomain (89-79-181-52.dynamic.chello.pl. [89.79.181.52]) by smtp.gmail.com with ESMTPSA id x6sm10013477edv.109.2022.02.22.08.07.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 22 Feb 2022 08:07:11 -0800 (PST) From: Michal Krawczyk To: dev@dpdk.org Cc: shaibran@amazon.com, upstream@semihalf.com, Michal Krawczyk , Dawid Gorecki Subject: [PATCH 16/21] net/ena: make Tx completion timeout configurable Date: Tue, 22 Feb 2022 17:06:29 +0100 Message-Id: <20220222160634.24489-17-mk@semihalf.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220222160634.24489-1-mk@semihalf.com> References: <20220222160634.24489-1-mk@semihalf.com> MIME-Version: 1.0 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 The default missing Tx completion timeout was set to 5 seconds. In order to provide users with the interface to control this timeout to adjust it with the application's watchdog, the device argument for controlling this value was added. The parameter is called 'miss_txc_to' and can be modified using the devargs interface: ./app -a ,miss_txc_to=UINT_NUMBER This parameter accepts values from 0 to 60 and indicates number of seconds after which the Tx packet will be considered as missing. HW hints for the Tx completions timeout were removed to do not overwrite parameter from the user. Also specyfing default Tx completion timeout value was moved from the configuration to init phase in order to simplify default value assignment. Signed-off-by: Michal Krawczyk Reviewed-by: Dawid Gorecki Reviewed-by: Shai Brandes --- doc/guides/nics/ena.rst | 9 ++++ doc/guides/rel_notes/release_22_03.rst | 1 + drivers/net/ena/ena_ethdev.c | 66 ++++++++++++++++++++------ drivers/net/ena/ena_ethdev.h | 1 + 4 files changed, 62 insertions(+), 15 deletions(-) diff --git a/doc/guides/nics/ena.rst b/doc/guides/nics/ena.rst index 85c790e80f..3d780acac9 100644 --- a/doc/guides/nics/ena.rst +++ b/doc/guides/nics/ena.rst @@ -87,6 +87,15 @@ Configuration information effect only if the device also supports large LLQ headers. Otherwise, the default value will be used. + * **miss_txc_to** (default 5) + + Number of seconds after which the Tx packet will be considered missing. + If the missing packets number will exceed dynamically calculated threshold, + the driver will trigger the device reset which should be handled by the + application. Checking for missing Tx completions happens in the driver's + timer service. Setting this parameter to 0 disables this feature. Maximum + allowed value is 60 seconds. + **ENA Configuration Parameters** * **Number of Queues** diff --git a/doc/guides/rel_notes/release_22_03.rst b/doc/guides/rel_notes/release_22_03.rst index 1b87b9c174..d0d2824371 100644 --- a/doc/guides/rel_notes/release_22_03.rst +++ b/doc/guides/rel_notes/release_22_03.rst @@ -116,6 +116,7 @@ New Features * Added ENA admin queue support for the MP applications. * Added free Tx mbuf on demand feature support. * Added ``rte_eth_xstats_get_names_by_id`` API support. + * Added ``miss_txc_to`` device argument for setting the Tx completion timeout. * **Updated Cisco enic driver.** diff --git a/drivers/net/ena/ena_ethdev.c b/drivers/net/ena/ena_ethdev.c index d413111b08..4bb2b195b1 100644 --- a/drivers/net/ena/ena_ethdev.c +++ b/drivers/net/ena/ena_ethdev.c @@ -62,6 +62,10 @@ struct ena_stats { /* Device arguments */ #define ENA_DEVARG_LARGE_LLQ_HDR "large_llq_hdr" +/* Timeout in seconds after which a single uncompleted Tx packet should be + * considered as a missing. + */ +#define ENA_DEVARG_MISS_TXC_TO "miss_txc_to" /* * Each rte_memzone should have unique name. @@ -2132,6 +2136,8 @@ static int eth_ena_dev_init(struct rte_eth_dev *eth_dev) snprintf(adapter->name, ENA_NAME_MAX_LEN, "ena_%d", adapter->id_number); + adapter->missing_tx_completion_to = ENA_TX_TIMEOUT; + rc = ena_parse_devargs(adapter, pci_dev->device.devargs); if (rc != 0) { PMD_INIT_LOG(CRIT, "Failed to parse devargs\n"); @@ -2307,7 +2313,6 @@ static int ena_dev_configure(struct rte_eth_dev *dev) adapter->missing_tx_completion_budget = RTE_MIN(ENA_MONITORED_TX_QUEUES, dev->data->nb_tx_queues); - adapter->missing_tx_completion_to = ENA_TX_TIMEOUT; /* To avoid detection of the spurious Tx completion timeout due to * application not calling the Tx cleanup function, set timeout for the * Tx queue which should be half of the missing completion timeout for a @@ -2830,20 +2835,6 @@ static void ena_update_hints(struct ena_adapter *adapter, adapter->ena_dev.mmio_read.reg_read_to = hints->mmio_read_timeout * 1000; - if (hints->missing_tx_completion_timeout) { - if (hints->missing_tx_completion_timeout == - ENA_HW_HINTS_NO_TIMEOUT) { - adapter->missing_tx_completion_to = - ENA_HW_HINTS_NO_TIMEOUT; - } else { - /* Convert from msecs to ticks */ - adapter->missing_tx_completion_to = rte_get_timer_hz() * - hints->missing_tx_completion_timeout / 1000; - adapter->tx_cleanup_stall_delay = - adapter->missing_tx_completion_to / 2; - } - } - if (hints->driver_watchdog_timeout) { if (hints->driver_watchdog_timeout == ENA_HW_HINTS_NO_TIMEOUT) adapter->keep_alive_timeout = ENA_HW_HINTS_NO_TIMEOUT; @@ -3396,6 +3387,45 @@ static int ena_xstats_get_by_id(struct rte_eth_dev *dev, return valid; } +static int ena_process_uint_devarg(const char *key, + const char *value, + void *opaque) +{ + struct ena_adapter *adapter = opaque; + char *str_end; + uint64_t uint_value; + + uint_value = strtoull(value, &str_end, 10); + if (value == str_end) { + PMD_INIT_LOG(ERR, + "Invalid value for key '%s'. Only uint values are accepted.\n", + key); + return -EINVAL; + } + + if (strcmp(key, ENA_DEVARG_MISS_TXC_TO) == 0) { + if (uint_value > ENA_MAX_TX_TIMEOUT_SECONDS) { + PMD_INIT_LOG(ERR, + "Tx timeout too high: %" PRIu64 " sec. Maximum allowed: %d sec.\n", + uint_value, ENA_MAX_TX_TIMEOUT_SECONDS); + return -EINVAL; + } else if (uint_value == 0) { + PMD_INIT_LOG(INFO, + "Check for missing Tx completions has been disabled.\n"); + adapter->missing_tx_completion_to = + ENA_HW_HINTS_NO_TIMEOUT; + } else { + PMD_INIT_LOG(INFO, + "Tx packet completion timeout set to %" PRIu64 " seconds.\n", + uint_value); + adapter->missing_tx_completion_to = + uint_value * rte_get_timer_hz(); + } + } + + return 0; +} + static int ena_process_bool_devarg(const char *key, const char *value, void *opaque) @@ -3427,6 +3457,7 @@ static int ena_parse_devargs(struct ena_adapter *adapter, { static const char * const allowed_args[] = { ENA_DEVARG_LARGE_LLQ_HDR, + ENA_DEVARG_MISS_TXC_TO, NULL, }; struct rte_kvargs *kvlist; @@ -3444,7 +3475,12 @@ static int ena_parse_devargs(struct ena_adapter *adapter, rc = rte_kvargs_process(kvlist, ENA_DEVARG_LARGE_LLQ_HDR, ena_process_bool_devarg, adapter); + if (rc != 0) + goto exit; + rc = rte_kvargs_process(kvlist, ENA_DEVARG_MISS_TXC_TO, + ena_process_uint_devarg, adapter); +exit: rte_kvargs_free(kvlist); return rc; diff --git a/drivers/net/ena/ena_ethdev.h b/drivers/net/ena/ena_ethdev.h index ca3e5ed691..c0094b03ee 100644 --- a/drivers/net/ena/ena_ethdev.h +++ b/drivers/net/ena/ena_ethdev.h @@ -40,6 +40,7 @@ #define ENA_DEVICE_KALIVE_TIMEOUT (ENA_WD_TIMEOUT_SEC * rte_get_timer_hz()) #define ENA_TX_TIMEOUT (5 * rte_get_timer_hz()) +#define ENA_MAX_TX_TIMEOUT_SECONDS 60 #define ENA_MONITORED_TX_QUEUES 3 #define ENA_DEFAULT_MISSING_COMP 256U From patchwork Tue Feb 22 16:06:30 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michal Krawczyk X-Patchwork-Id: 107993 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 35A79A0352; Tue, 22 Feb 2022 17:08:55 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 53A5D4122E; Tue, 22 Feb 2022 17:07:20 +0100 (CET) Received: from mail-ej1-f52.google.com (mail-ej1-f52.google.com [209.85.218.52]) by mails.dpdk.org (Postfix) with ESMTP id 58A33411DB for ; Tue, 22 Feb 2022 17:07:14 +0100 (CET) Received: by mail-ej1-f52.google.com with SMTP id hw13so44163724ejc.9 for ; Tue, 22 Feb 2022 08:07:14 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=semihalf-com.20210112.gappssmtp.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=znSlkHpQNYP232kLsAZdHOWoyjBMjyEFlRi8W+WIbLM=; b=VGklU7ca+OwOg1J+Hq7CJpl3+9MutUfwjWEUYqmnQrRf2JcTEEdUnkKElk21ZZhjM0 l4KjaNNf2muxaYna5N22Mbwa0GC9JbCzHNt+QT5KxoPYGvkKWc1moKgR4CQ+zzIrqGLH WsSjE8xrVavSqPE9+TGbxox7jlBmsq+yMuIpD25Cjuaxj2kUzpvmRsAKhgelfJ0giexN xT1xrkJG40HNd+tW+GL4/KwQlqkGsJmbiKXTPJ39g82nfY3WB+cQ6W6t8dN/IKUOD69/ A3zCcA8gBWAbfGBUnPaPCqfJANz/THeUAOSanJl2WWRY3P0F9RozbhDmt0LF45F3wORX JP7g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=znSlkHpQNYP232kLsAZdHOWoyjBMjyEFlRi8W+WIbLM=; b=PP1yCYbGw/1ThSh8J7azWXFa1MSnworEEPqAgMTOjtzligSfMMMIyMl25DZK8i17PA LAsHilUG19Iqy8V5YvWMxqJf5EM0CDzDnq8inbSXEb+HEpj3wtO87fQsU+1ihJH90luU 5uCuE9EDT5HYxh143+d6HfPspuhXilkikMaRkt3L/dmVO2XcWaQeKCQNRkfVA0K5G0Vo aWRTap/ttoYfOe3iDKj5tbqXFYF5scm6BYpL7Wz8+bhFdZqNXyp6ks3ztZN4TVxsxdM8 uGNBBcLgkMpi68v5ZJE7an4R5P/fwwmrokwHScQSbPSnUlvBzwAhb0v38wJNEiMcGcxa cAsw== X-Gm-Message-State: AOAM530B9ZggefYDxKsmaTd/I2CFHn38UtsuuBYMeS4YOd2W9z7x5LBw +ovzRQZqBxD2Y1GLts2/hj0//TFJNmWskA== X-Google-Smtp-Source: ABdhPJymCZsUV+yHTf/rT9K/NJGeg/AXjU7Ysv6IIHVrm5rIDXHkytCjudZdM1UddeEwLXDm9XGrnw== X-Received: by 2002:a17:906:a85:b0:6d0:827a:89d0 with SMTP id y5-20020a1709060a8500b006d0827a89d0mr18872677ejf.230.1645546033784; Tue, 22 Feb 2022 08:07:13 -0800 (PST) Received: from DESKTOP-U5LNN3J.localdomain (89-79-181-52.dynamic.chello.pl. [89.79.181.52]) by smtp.gmail.com with ESMTPSA id x6sm10013477edv.109.2022.02.22.08.07.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 22 Feb 2022 08:07:13 -0800 (PST) From: Michal Krawczyk To: dev@dpdk.org Cc: shaibran@amazon.com, upstream@semihalf.com, Michal Krawczyk , stable@dpdk.org, Dawid Gorecki Subject: [PATCH 17/21] net/ena: fix meta-desc DF flag setup Date: Tue, 22 Feb 2022 17:06:30 +0100 Message-Id: <20220222160634.24489-18-mk@semihalf.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220222160634.24489-1-mk@semihalf.com> References: <20220222160634.24489-1-mk@semihalf.com> MIME-Version: 1.0 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 Whenever Tx checksum offload is being used, the meta descriptor content is taken into consideration. Setting DF field properly in the meta descriptor may have huge impact on the performance both for the IPv4 and IPv6 packets. The requirements for the df field are as below: * No offload used - value doesn't matter * IPv4 - 0 or 1, depending on the DF flag in the IPv4 header * IPv6 - 1 Setting DF to 0 causes the packet to enter the slow-path in the HW and as a result can noticeable impact the performance. Moreover, as 'true' may not always be mapped to 1 depending on it's definition for the given platform/compiler, for safety DF field is being set explicitly to 1. Fixes: 1173fca25af9 ("ena: add polling-mode driver") Cc: stable@dpdk.org Signed-off-by: Michal Krawczyk Reviewed-by: Dawid Gorecki Reviewed-by: Shai Brandes --- drivers/net/ena/ena_ethdev.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/drivers/net/ena/ena_ethdev.c b/drivers/net/ena/ena_ethdev.c index 4bb2b195b1..02b4144388 100644 --- a/drivers/net/ena/ena_ethdev.c +++ b/drivers/net/ena/ena_ethdev.c @@ -624,6 +624,8 @@ static inline void ena_tx_mbuf_prepare(struct rte_mbuf *mbuf, if (mbuf->ol_flags & RTE_MBUF_F_TX_IPV6) { ena_tx_ctx->l3_proto = ENA_ETH_IO_L3_PROTO_IPV6; + /* For the IPv6 packets, DF always needs to be true. */ + ena_tx_ctx->df = 1; } else { ena_tx_ctx->l3_proto = ENA_ETH_IO_L3_PROTO_IPV4; @@ -631,7 +633,7 @@ static inline void ena_tx_mbuf_prepare(struct rte_mbuf *mbuf, if (mbuf->packet_type & (RTE_PTYPE_L4_NONFRAG | RTE_PTYPE_INNER_L4_NONFRAG)) - ena_tx_ctx->df = true; + ena_tx_ctx->df = 1; } /* check if L4 checksum is needed */ From patchwork Tue Feb 22 16:06:31 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michal Krawczyk X-Patchwork-Id: 107994 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 C52CDA0352; Tue, 22 Feb 2022 17:09:01 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 31C0A426DB; Tue, 22 Feb 2022 17:07:21 +0100 (CET) Received: from mail-ed1-f53.google.com (mail-ed1-f53.google.com [209.85.208.53]) by mails.dpdk.org (Postfix) with ESMTP id 73F9641C27 for ; Tue, 22 Feb 2022 17:07:15 +0100 (CET) Received: by mail-ed1-f53.google.com with SMTP id cm8so28496542edb.3 for ; Tue, 22 Feb 2022 08:07:15 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=semihalf-com.20210112.gappssmtp.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=vcddAaizyn5sLXx3xZcAF+hqmtWlFvZ5hFLtEZeVVmg=; b=ci5We/P2zKUqihn+tYH0vl2Mk2+SduSmwuH/6Ek+Jo4m1iHwZME0Ru5fjgq8omqlcc SQklHEaQp5cbse1AUJorjDHOS1aQ/pO51ZkoGy1fRavHzjaWSs/FLG5Qb4FSJqYjxpoi XFZyNC4QXeTCsLoEIk1gNUomgI62f+EJ9e5Tr0rMSSnzIj4qT0//7eqJTrwsyrC2TK4B uhDuGNmNOZcfHg4+6YEBlCzGsAxrGljEPSP9Vg/m4dckuWBPeew+i/bHBtGaYX39hnNT YdWygqHfoSt0El4xr2xqyhS4Jz+TqFMij4IlMsOSViN5W+IDLASi2XE5iLB65z7oSf7n EPAw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=vcddAaizyn5sLXx3xZcAF+hqmtWlFvZ5hFLtEZeVVmg=; b=ALCXMDfH5mqEB6TqZLn6TFCnTpe6KJnkLQd8xRzW/1G0RgcIjzxExgP8aJ86nYTAtP PuW2Rzc7tKh2hhhnslbWuxOg7hGuTzcp83i66Kzk+LC0niOwfhaEOIhvXOGgtSi5YKQP +nGoYYaGM8QO+UjNsskDjQXw80Vjd/QiUOfHh8GrrKgwX1DNPIXIbwPIaHlQ2EsP8ROG Kof5CTWPipnUWUam8qtb4NXXX3gFuoGrLIaQFeZSpFB5T1/x+Gb3K86OKK0gV8T1FrID EDwYBPHGXxxlh+Fv0v2lRRTU/LzYXCv10QmEZFbmm67k6oFMV4WTgrV6/u5JTneJlNLI mEgQ== X-Gm-Message-State: AOAM531372rxE4VG7VL3VOogoSbzCIxi5vdqcNNfNDg9Q/KR1S2kmmaO LNLKDchzkQYJ/dgLrzE6Kkbj+cWHW9sStg== X-Google-Smtp-Source: ABdhPJxLp4jt60uRH/lICWoBcGg33sNjLq8WvhiHfOYl6GUDjJsm4pBwEp6RzZCgQ5PNAcC7ZI4tGA== X-Received: by 2002:aa7:c391:0:b0:410:83fb:abab with SMTP id k17-20020aa7c391000000b0041083fbababmr27349858edq.435.1645546034941; Tue, 22 Feb 2022 08:07:14 -0800 (PST) Received: from DESKTOP-U5LNN3J.localdomain (89-79-181-52.dynamic.chello.pl. [89.79.181.52]) by smtp.gmail.com with ESMTPSA id x6sm10013477edv.109.2022.02.22.08.07.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 22 Feb 2022 08:07:14 -0800 (PST) From: Michal Krawczyk To: dev@dpdk.org Cc: shaibran@amazon.com, upstream@semihalf.com, Dawid Gorecki , Michal Krawczyk Subject: [PATCH 18/21] net/ena: extend debug prints for invalid req ID resets Date: Tue, 22 Feb 2022 17:06:31 +0100 Message-Id: <20220222160634.24489-19-mk@semihalf.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220222160634.24489-1-mk@semihalf.com> References: <20220222160634.24489-1-mk@semihalf.com> MIME-Version: 1.0 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 From: Dawid Gorecki Add information about port id, queue id and req_id to error logs in validate_tx_req_id. Signed-off-by: Dawid Gorecki Reviewed-by: Michal Krawczyk Reviewed-by: Shai Brandes --- drivers/net/ena/ena_ethdev.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/drivers/net/ena/ena_ethdev.c b/drivers/net/ena/ena_ethdev.c index 02b4144388..f4be79d240 100644 --- a/drivers/net/ena/ena_ethdev.c +++ b/drivers/net/ena/ena_ethdev.c @@ -675,9 +675,11 @@ static int validate_tx_req_id(struct ena_ring *tx_ring, u16 req_id) } if (tx_info) - PMD_TX_LOG(ERR, "tx_info doesn't have valid mbuf\n"); + PMD_TX_LOG(ERR, "tx_info doesn't have valid mbuf. queue %d:%d req_id %u\n", + tx_ring->port_id, tx_ring->id, req_id); else - PMD_TX_LOG(ERR, "Invalid req_id: %hu\n", req_id); + PMD_TX_LOG(ERR, "Invalid req_id: %hu in queue %d:%d\n", + req_id, tx_ring->port_id, tx_ring->id); /* Trigger device reset */ ++tx_ring->tx_stats.bad_req_id; From patchwork Tue Feb 22 16:06:32 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michal Krawczyk X-Patchwork-Id: 107995 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 1952FA0352; Tue, 22 Feb 2022 17:09:08 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 36089426E1; Tue, 22 Feb 2022 17:07:22 +0100 (CET) Received: from mail-ej1-f41.google.com (mail-ej1-f41.google.com [209.85.218.41]) by mails.dpdk.org (Postfix) with ESMTP id A4E13411FB for ; Tue, 22 Feb 2022 17:07:16 +0100 (CET) Received: by mail-ej1-f41.google.com with SMTP id qx21so44285685ejb.13 for ; Tue, 22 Feb 2022 08:07:16 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=semihalf-com.20210112.gappssmtp.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=OKB/CU445X5X42Y+zx85f36U5ryCc+4ZUCXLwigi7Dg=; b=o5WgD2jAiDr1mozW7godLhBk4CAMlf9cjajwGwUnkL6wn6aILv5L3gsNG5oIqphnx/ sWZi4bqU2XyPgv0sXtrdEJW6n1fey65RHHzHETCor0ZYhP30RgjeMKHw9MicoKxDFieQ mTb6e8r/Ck1v96bHyGAwUxu/t3DtGj81tDqq98wxNzIMUDHhthEyUy0teLzsbf8mtVhN vHVsPvt1blpGukpPgRkwDT29qFJWCOUIBCNwqEhthMnYOP4SPDWO8oN5dyaqDggNFHs0 O0fPUdrotgetpmYGAtLX5648U3ZRuucU7Wks1K3td1AwvgK/eoqZRHH6RLreub+HHOKp fyDA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=OKB/CU445X5X42Y+zx85f36U5ryCc+4ZUCXLwigi7Dg=; b=XWuH/fI9EgYkWZFYBlWMpHDpIDtinl4VVY6NgttFQAz0Ze7kk7F6/j6ijZhat0KD6k 1J0LBmHs1hr2wVVFrvRrbqiwCr55TIkcZeBCUydg+Mx9YuSQ9VyIvrP/uHdV2RoaNfob pQLi+ZDX57a8GIempkffufsewDRKfEA28JiqVz5bo1m0lJhSyuVKh121dwup6HKKsrZn rfjt9+/kM58AuJ1iCGarkqLwqloD2dsAkBRKQO3Y/ENg8dsLOGmkLQa7+d0ijPNRPILn wCgIhltyyA41bgl4JCgTTPkAvntWR9CKl+4GupZ6D8ezfbB8TVnS9TWHO9RLWa5Y7gFr 1jDQ== X-Gm-Message-State: AOAM531iTDRMljVJOz70lYIPyMibJkoH1i/vF3F9hhG1TlVJANI2AtQZ 9riAmXWJ1dkGypVMX8KQLMBmM5QsQEVKyw== X-Google-Smtp-Source: ABdhPJwKd12bPcJQCTcntuqyZ6VmKr8/zJjswDQMWpEgXER0zlMFzUKbDP1EELKeKsOjgnpTsbUU9w== X-Received: by 2002:a17:906:130a:b0:6b7:5e48:350a with SMTP id w10-20020a170906130a00b006b75e48350amr19583574ejb.184.1645546036111; Tue, 22 Feb 2022 08:07:16 -0800 (PST) Received: from DESKTOP-U5LNN3J.localdomain (89-79-181-52.dynamic.chello.pl. [89.79.181.52]) by smtp.gmail.com with ESMTPSA id x6sm10013477edv.109.2022.02.22.08.07.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 22 Feb 2022 08:07:15 -0800 (PST) From: Michal Krawczyk To: dev@dpdk.org Cc: shaibran@amazon.com, upstream@semihalf.com, Dawid Gorecki , stable@dpdk.org, Michal Krawczyk Subject: [PATCH 19/21] net/ena: don't initialize LLQ when membar isn't exposed Date: Tue, 22 Feb 2022 17:06:32 +0100 Message-Id: <20220222160634.24489-20-mk@semihalf.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220222160634.24489-1-mk@semihalf.com> References: <20220222160634.24489-1-mk@semihalf.com> MIME-Version: 1.0 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 From: Dawid Gorecki The ena_com_config_dev_mode() performs many calculations related to LLQ and then performs an admin queue call to configure LLQ in the device. All of the operations performed by ena_com_config_dev_mode() are unnecessary if membar hasn't been found. Move the dev_mem_base check before ena_com_config_dev_mode() call. This prevents the unnecessary operations from being performed. Fixes: 2fca2a98c0d1 ("net/ena: support LLQv2") Cc: stable@dpdk.org Signed-off-by: Dawid Gorecki Reviewed-by: Michal Krawczyk Reviewed-by: Shai Brandes --- drivers/net/ena/ena_ethdev.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/drivers/net/ena/ena_ethdev.c b/drivers/net/ena/ena_ethdev.c index f4be79d240..9f29cf04ac 100644 --- a/drivers/net/ena/ena_ethdev.c +++ b/drivers/net/ena/ena_ethdev.c @@ -1953,6 +1953,13 @@ ena_set_queues_placement_policy(struct ena_adapter *adapter, return 0; } + if (adapter->dev_mem_base == NULL) { + PMD_DRV_LOG(ERR, + "LLQ is advertised as supported, but device doesn't expose mem bar\n"); + ena_dev->tx_mem_queue_type = ENA_ADMIN_PLACEMENT_POLICY_HOST; + return 0; + } + rc = ena_com_config_dev_mode(ena_dev, llq, llq_default_configurations); if (unlikely(rc)) { PMD_INIT_LOG(WARNING, @@ -1965,13 +1972,6 @@ ena_set_queues_placement_policy(struct ena_adapter *adapter, if (ena_dev->tx_mem_queue_type == ENA_ADMIN_PLACEMENT_POLICY_HOST) return 0; - if (!adapter->dev_mem_base) { - PMD_DRV_LOG(ERR, - "Unable to access LLQ BAR resource. Fallback to host mode policy.\n"); - ena_dev->tx_mem_queue_type = ENA_ADMIN_PLACEMENT_POLICY_HOST; - return 0; - } - ena_dev->mem_bar = adapter->dev_mem_base; return 0; From patchwork Tue Feb 22 16:06:33 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michal Krawczyk X-Patchwork-Id: 107996 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 0630BA0352; Tue, 22 Feb 2022 17:09:21 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 02171426EC; Tue, 22 Feb 2022 17:07:24 +0100 (CET) Received: from mail-ed1-f48.google.com (mail-ed1-f48.google.com [209.85.208.48]) by mails.dpdk.org (Postfix) with ESMTP id C14E64116A for ; Tue, 22 Feb 2022 17:07:17 +0100 (CET) Received: by mail-ed1-f48.google.com with SMTP id x5so37988953edd.11 for ; Tue, 22 Feb 2022 08:07:17 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=semihalf-com.20210112.gappssmtp.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=14NUlgp7/uwht08EEffkISHQVyhpeQZpdRvDSsgGcy4=; b=AcIUZGq+VO/yvAcKAuUJHJhZsdch7/Oso943NP5XgMSAV8FsudjS/cnMyhOXPH66LQ 6+a3VkbWKkmEKbyQGrqpO49L5KfiC5DwQqyk9LORMxOhAIzNEThzagcsWcTgofabxnSf G7eZYjfg71uBRNLZxubzuj3J1+miJwZf+ygYHIlRf/FIj/LZcPM0KRImM61IfnTn/pbj NC6TeL0m33RcIaSoMOCacHhGdB0jfBR6XfoBvAAdhyiGQW2ZQDtkZmyXbNWQCijqn5GB HoC49nVQq4TgsRrkG7/qYmrO3B2zoRv/8VuXL+jzQK7OcebI2An1KXbdEYZRaMUFv4HZ iJzQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=14NUlgp7/uwht08EEffkISHQVyhpeQZpdRvDSsgGcy4=; b=ljbLDNlTSGekH6pF7jGHgu4eJxuki18vGeIrtieuqaqeu4+FCd6ATJlg+nY0+yNBOt K+VEEEzmGJFxODTCckwVglqU0ruO0wsBh2CPp9dvHpymgAIM+zLBBsfty6YdFTOf/XLV eBeJHisASo0DheZI+zjPh6oTEV59g5D7mYHJEDx8gAv4arH/VP5FMc8sXNoyextTH8Tg czMABe4eyw2nCuGPnsPhel0Z2KsSdJYSfe8esKFqPoS9FgqoqnPWkItpIxgO9LxgsE2m hWbTNR9aFzDQqMCiWmy3yaYPclJZ1H0+4ezIgAwgYyzjqSdlUIkiLnJMq1KwghSvWmeS 7DSQ== X-Gm-Message-State: AOAM532dUD7KMEyeCemcz2cLPHLNh7NHg9uvV9HPZi5hOCuJNaPPvFdx LJpmD1M7pr9p5345x588LPQi25EMs7NoKw== X-Google-Smtp-Source: ABdhPJwec77IkJVhMcKhcG2c2Fv51uu5+SuGWRUj6NQE+seFtJfnmV2Kw4QOfpKZ49fwDvQ88RsSBA== X-Received: by 2002:aa7:cac8:0:b0:410:cc6c:6512 with SMTP id l8-20020aa7cac8000000b00410cc6c6512mr26698410edt.408.1645546037251; Tue, 22 Feb 2022 08:07:17 -0800 (PST) Received: from DESKTOP-U5LNN3J.localdomain (89-79-181-52.dynamic.chello.pl. [89.79.181.52]) by smtp.gmail.com with ESMTPSA id x6sm10013477edv.109.2022.02.22.08.07.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 22 Feb 2022 08:07:16 -0800 (PST) From: Michal Krawczyk To: dev@dpdk.org Cc: shaibran@amazon.com, upstream@semihalf.com, Michal Krawczyk , stable@dpdk.org Subject: [PATCH 20/21] net/ena: don't indicate bad csum for L4 csum error Date: Tue, 22 Feb 2022 17:06:33 +0100 Message-Id: <20220222160634.24489-21-mk@semihalf.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220222160634.24489-1-mk@semihalf.com> References: <20220222160634.24489-1-mk@semihalf.com> MIME-Version: 1.0 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 Some HW may invalidly set checksum error bit for the valid L4 checksum. To avoid drop of the packets in that situation, do not indicate bad checksum for L4 Rx csum offloads. Instead, set it as unknown, so the application will re-verify this value. The statistics counters will still work as previously. Fixes: 05817057faba ("net/ena: fix indication of bad L4 Rx checksums") Cc: stable@dpdk.org Signed-off-by: Michal Krawczyk --- drivers/net/ena/ena_ethdev.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/drivers/net/ena/ena_ethdev.c b/drivers/net/ena/ena_ethdev.c index 9f29cf04ac..0861206ea4 100644 --- a/drivers/net/ena/ena_ethdev.c +++ b/drivers/net/ena/ena_ethdev.c @@ -583,7 +583,13 @@ static inline void ena_rx_mbuf_prepare(struct ena_ring *rx_ring, } else { if (unlikely(ena_rx_ctx->l4_csum_err)) { ++rx_stats->l4_csum_bad; - ol_flags |= RTE_MBUF_F_RX_L4_CKSUM_BAD; + /* + * For the L4 Rx checksum offload the HW may indicate + * bad checksum although it's valid. Because of that, + * we're setting the UNKNOWN flag to let the app + * re-verify the checksum. + */ + ol_flags |= RTE_MBUF_F_RX_L4_CKSUM_UNKNOWN; } else { ++rx_stats->l4_csum_good; ol_flags |= RTE_MBUF_F_RX_L4_CKSUM_GOOD; From patchwork Tue Feb 22 16:06:34 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michal Krawczyk X-Patchwork-Id: 107997 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 58F74A0352; Tue, 22 Feb 2022 17:09:27 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id DF289426F0; Tue, 22 Feb 2022 17:07:24 +0100 (CET) Received: from mail-ej1-f46.google.com (mail-ej1-f46.google.com [209.85.218.46]) by mails.dpdk.org (Postfix) with ESMTP id 041C841203 for ; Tue, 22 Feb 2022 17:07:19 +0100 (CET) Received: by mail-ej1-f46.google.com with SMTP id lw4so44392552ejb.12 for ; Tue, 22 Feb 2022 08:07:19 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=semihalf-com.20210112.gappssmtp.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=P9LAeLJfbpS55A6c9aY6O1nnq5/hEOGY4lGibqqfb8c=; b=gZPT+ptsOv3xdSZH25tIJoFu4+Fq2syzmjCx8mK3JkdWufaf6IJmBdHbMIRsX2X2sP Li64ixJoTPb198CUcVp+/DWLOMEK/5rp7QI6aUC+qz/1757KGM9IHES0SeNh6OCWLv/d +fOHrPLJmvjINWFHKvPpi7X36r/BXOWgCZzkNPBmzftFmFUowQA+nYJOboaeT4jrAtb0 IZCmiLPBQ7HZ2suzcx2fmrVaU0lD3OJVPDpl1LSf9O2r65EpYzDuLXqfGTnS1NztI1/K CUAN0/2ClLQ8MFvJcwYjQA2aAYliN0d5QgOhIf0D6K/DMEdgPVdPJjf/bEC608Ey7DL0 tePw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=P9LAeLJfbpS55A6c9aY6O1nnq5/hEOGY4lGibqqfb8c=; b=yJoJgS88htDw8TTMcdGyb6Aeg7cHpAx9t2OR2D5AwFfEObTQ1rVbBIWCZRvETL4nbF l8Rk3MgTe5VFcObxnsB2DrKU6P15TTirDq550E8sCwfclfD15UXMUY2LpSCj5PkYKTgq EI3sPqJWh546+QIF1s95nqltc5Dx5iruo9zlsKBT20eIvXmp1NZCv2gTDR9v4eyDpp66 HRRWH166uepTpxS4PLw4P7BvaEONqh1TdnyB5EppE2Hutt5TvGvLL65Ua0IfizLsy0JN HtnNIEGvWfn7BJUj8nnD5ux3sE4IodN9T6YkLFSR7zfizIhiHBZYd6QXeZQXQYFXfjZE vdlA== X-Gm-Message-State: AOAM532FIElaCIHxgGKFNUdvj7XQBc9hCnqho3X7FlwMFNWtaqmARKt3 XyqWQEqGt+tWTlPFScqw4Dne2bAP1AOXiQ== X-Google-Smtp-Source: ABdhPJy0o4g/3TQnxC/Tn2VcVAw03vlWDx2SmNEJ4dHPYz840hjh1PeadBpcrytsKlsUBWaUOYUvcg== X-Received: by 2002:a17:906:edb5:b0:6b8:1a5a:f3a0 with SMTP id sa21-20020a170906edb500b006b81a5af3a0mr20662384ejb.501.1645546038386; Tue, 22 Feb 2022 08:07:18 -0800 (PST) Received: from DESKTOP-U5LNN3J.localdomain (89-79-181-52.dynamic.chello.pl. [89.79.181.52]) by smtp.gmail.com with ESMTPSA id x6sm10013477edv.109.2022.02.22.08.07.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 22 Feb 2022 08:07:17 -0800 (PST) From: Michal Krawczyk To: dev@dpdk.org Cc: shaibran@amazon.com, upstream@semihalf.com, Michal Krawczyk Subject: [PATCH 21/21] net/ena: update version to 2.6.0 Date: Tue, 22 Feb 2022 17:06:34 +0100 Message-Id: <20220222160634.24489-22-mk@semihalf.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220222160634.24489-1-mk@semihalf.com> References: <20220222160634.24489-1-mk@semihalf.com> MIME-Version: 1.0 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 This release contains multiple bug fixes and improvements, including - Removal of the linearization function from the xmit Tx path. The DPDK assumes checking for the mbuf segments number in the Tx prepare function. - Extra logs, statistics, checks... - Cleanup of the unused variables and definitions. - Configurable Link Status event. - Improvements for the timer service and the reset. - Usage of the optimized memcpy on ARM. - MP awareness improvements - extra API support for the secondary processes (like reading basic statistics). - Support of the xstats API to get xstat names by ID. - Configurable Tx completions timeout. - Proper setting of the meta-descriptor's DF flag. Signed-off-by: Michal Krawczyk --- drivers/net/ena/ena_ethdev.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/net/ena/ena_ethdev.c b/drivers/net/ena/ena_ethdev.c index 0861206ea4..53b2983d27 100644 --- a/drivers/net/ena/ena_ethdev.c +++ b/drivers/net/ena/ena_ethdev.c @@ -21,7 +21,7 @@ #include #define DRV_MODULE_VER_MAJOR 2 -#define DRV_MODULE_VER_MINOR 5 +#define DRV_MODULE_VER_MINOR 6 #define DRV_MODULE_VER_SUBMINOR 0 #define __MERGE_64B_H_L(h, l) (((uint64_t)h << 32) | l)