From patchwork Tue Feb 22 18:11: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: 108009 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 81B97A034E; Tue, 22 Feb 2022 19:12:15 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 592ED41145; Tue, 22 Feb 2022 19:12:13 +0100 (CET) Received: from mail-ej1-f43.google.com (mail-ej1-f43.google.com [209.85.218.43]) by mails.dpdk.org (Postfix) with ESMTP id 91DA64113C for ; Tue, 22 Feb 2022 19:12:10 +0100 (CET) Received: by mail-ej1-f43.google.com with SMTP id p9so45455638ejd.6 for ; Tue, 22 Feb 2022 10:12: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=bQ7QIk60YocF7MUXrF0scolw6A4Mcpl0quApXme1KiQ=; b=PL80c/fjsplHcCj7iV1vLBHSxxVzKlk+Isp+IfhzC2chokb0u3zCgdYdxorm3cGhS2 xPI7yZywJ0FaWxI4qfi/MqPM1jMzrsHfLYSTosYt9nZzRFKhUO4DGGhMW8+UbMOmHFHm ka2Jc2fE3SRZ26hCHG+dGl8x9RxlaqHSvI/KXovaeFz6HlvIt5rDQEtYYBpcHbJG3ZDk 4Onip22czW9bsOKJp8b3zP9Z6mAD6izmMc3KTllSDRJgaMOaLx6r/u0qZJslSmBOvh+f piX2ZD8BQ+YyGFVupcLBMa8TpL2X4JTGk+deBng39a64Qxajs609eelEsdg1ZLzrquxP SEgw== 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=bQ7QIk60YocF7MUXrF0scolw6A4Mcpl0quApXme1KiQ=; b=tXwBDIvlzLeaG9Ucbs5pI3JWK/upxt19rTO39k3JJ9PXXNliCnTpib1k+GttjPI0ab HNt8Aet8i74LeEN2T1Ta3WQrxTaQRRgHgaKMrTzyMLFwWUSjlqsaqvpAQRhu+tj3uIku st9tKCgOATU7KQ4XgxiCUJNgU7vuR0CUFg4POlZTFVShPCP4GUdBPM8BmbccYbS7U4Qs IV88pHBHVaoBAB5ZPa3o1piKJyp/yxbNwAw20rRIHUByokNLG9hACrP193+/rGQ8AeKd BhKgrKtC/jz2v0codHPAEPvCVvAVEhBxe2yJdHENEI2PpfJFNukSSt2hvUWI9gE+opry 5GIA== X-Gm-Message-State: AOAM532o29zmeeYblBb43S6ytAkW+r2ygfiuLZm9bv3TFZ8BasoXCTkJ /fLBF0D/MNnSXd3lBbudcBBJSMgL5NoOKw== X-Google-Smtp-Source: ABdhPJzSgJlt73vxtJL9ik+RzLLNZpsVEKUXaQY/e+qGvb5ywuVSo9qs1cddWMHXwNWGLeesp1W0YQ== X-Received: by 2002:a17:906:86cc:b0:6ce:698a:bc7 with SMTP id j12-20020a17090686cc00b006ce698a0bc7mr19852343ejy.709.1645553529966; Tue, 22 Feb 2022 10:12: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 y21sm10610153eda.38.2022.02.22.10.12.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 22 Feb 2022 10:12:09 -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 v2 01/21] net/ena: remove linearization function Date: Tue, 22 Feb 2022 19:11:26 +0100 Message-Id: <20220222181146.28882-2-mk@semihalf.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220222181146.28882-1-mk@semihalf.com> References: <20220222160634.24489-1-mk@semihalf.com> <20220222181146.28882-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 18:11: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: 108010 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 02F35A034E; Tue, 22 Feb 2022 19:12:21 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 3F1CF4114E; Tue, 22 Feb 2022 19:12:14 +0100 (CET) Received: from mail-ej1-f50.google.com (mail-ej1-f50.google.com [209.85.218.50]) by mails.dpdk.org (Postfix) with ESMTP id 0687741143 for ; Tue, 22 Feb 2022 19:12:12 +0100 (CET) Received: by mail-ej1-f50.google.com with SMTP id p9so45455798ejd.6 for ; Tue, 22 Feb 2022 10:12:12 -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=YhNhrXaD3F3p0QmJ+ns2dEIxODum2kG++lOfDkuTRocfwAgcVKsHBQZ8tWBrKY6xq7 XTkXUO4ZHVX7Ig/4CAodnH/EDEBJifK9QvVhX1nkEGP9vqS1vNf6kPNQR6H5uKQ5CPZd JE/HR8GmO9N6TS6e8a9PxoHAPMcCxzbBVU8p2O/iVeH+wZVX24vXk8LJfpdcXiScKc6b Hb2Ywc7xhk5az2MQnshRoTEMkZz22wjZreoaTUEyolElYvjX3+9ltUJ78lclcw81k0Lo 9Xb7uqedxvtGRT45G+z/VZ7mSSrWQdEeQ6uHYstXPr0e3Zk/K4MV8vM1Fe56zDQLsHLJ hJlA== 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=07aAPFx8AJ6MMkEiBqArNSK6gr31FrmPRC9u3mWoSpGGFobMJBhTtVnTxlERPvfJRd On6Zua+ldevwOd8FArlHfqezPhGItbX1KU8b0yMB8pupPz2wMFW2L7Ghavbi8GEwKfMh NwjKWGmuss+uPnMs6+I0UMnu0O1IoelU7XWqX4joL/fT4fISZIGWkz0LEXvtVJDXy31O ISeZM1vyspP0nzkoLMhe985Qj+VXAZ7YhCNjpGTLtP/SsIb5kOFStO3i36BFDcGE3KTS DQV67lwcHb8b7zUyCEt4xayExPAPa7pKuLkMOfH11VrjLqSW8Zukx3OzhTcS0j2yTUnT NkHg== X-Gm-Message-State: AOAM53077HoNk/n6MxQUuDThOJWbgyScfdIwdt6xhM7fKtpuOsSrew4L +NG9ojN8l7rRi8kUik/ss+VaXgS8BWTDpA== X-Google-Smtp-Source: ABdhPJyynoX4Xta2zif+tiob5+Nswy1NPFH6Rd6/vtWcXpOJzZ7NzhOZbMwECb02Uo+qLaRxH8HtlA== X-Received: by 2002:a17:907:8a04:b0:6b7:ebf1:efbe with SMTP id sc4-20020a1709078a0400b006b7ebf1efbemr19593518ejc.488.1645553531233; Tue, 22 Feb 2022 10:12: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 y21sm10610153eda.38.2022.02.22.10.12.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 22 Feb 2022 10:12:10 -0800 (PST) From: Michal Krawczyk To: dev@dpdk.org Cc: shaibran@amazon.com, upstream@semihalf.com, Michal Krawczyk , Dawid Gorecki Subject: [PATCH v2 02/21] net/ena: add assertion on Tx info mbuf Date: Tue, 22 Feb 2022 19:11:27 +0100 Message-Id: <20220222181146.28882-3-mk@semihalf.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220222181146.28882-1-mk@semihalf.com> References: <20220222160634.24489-1-mk@semihalf.com> <20220222181146.28882-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 18:11: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: 108011 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 A0D5FA034E; Tue, 22 Feb 2022 19:12:26 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 3C53D4114F; Tue, 22 Feb 2022 19:12:17 +0100 (CET) Received: from mail-ej1-f53.google.com (mail-ej1-f53.google.com [209.85.218.53]) by mails.dpdk.org (Postfix) with ESMTP id 50C0841143 for ; Tue, 22 Feb 2022 19:12:13 +0100 (CET) Received: by mail-ej1-f53.google.com with SMTP id r13so22391076ejd.5 for ; Tue, 22 Feb 2022 10:12: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=HQVN5WLFk6ndlvDQ63a7XsV76XrglgmgzITO0NCFmyU=; b=PwWlZgx058QssY+djWZoAia5vDK23ONqyi7VZStKO/Dd+7KzSHE5XqwEI05AlWC5jS 3IVRO2CSdkDPCydWtSO9cyP8GqFpgKG+zuXfZHC/9NmVM8h39Cxc8k5OguNxpPo6I31U Enzw6NaDN/fKF6SrkU97OGpgRnMxEgSJ2Ro/6Uww/e5tgxVmCs6EbdTw5UAqefdPOoxQ 9cAODNOMMo3YhbgP18WemX9fU6ONH8XrB22cbIuKf/0lw8yV+7Vf9Lzmcbdanwc1B7fk 2cdE78XtDbvhltGREl7O/FIUihobg3l+EIVCF2NmtI7LPUWibtYNWIJvfmWVfpOYZl7d ODmw== 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=HQVN5WLFk6ndlvDQ63a7XsV76XrglgmgzITO0NCFmyU=; b=JB3sLHyhDOWMdNGO9+dwkqWKQ8E5tpt98xzTfx1+rRSIPsdF+7NApFqlkoHz07qKU8 3pbff/6U64HIssSc09t72eDXyqbisVWxowkYxlkpQ7N7EuZBSn0bF/upyf7QRCAlO82S 5ajq7waOFIzDChfHFRTvVqzmS92B47J3F+5y90pLKmcQYjhRup9XHjGQMWEhOqWLjCRx Ki8ID0xPaoHkBKXvvFP4ktkmifOSuxr0U7EIryGH5A4oxLo+3rCHc4eRIEYZ2JKtgiNU BEMhyRbYThPfeUearK5omHvZD8EvGrM6qulvgtqmcu5Sb2m86nGGRRuSeZzJzUuuE4tL lDyw== X-Gm-Message-State: AOAM531gGWsdTuiud0cApTpm9MdHY+UxrCMglNpn77EsddEqUaX4z3UC cM5EXVFktWJZ10OeD1wVaEyfZ5VVm7rV5g== X-Google-Smtp-Source: ABdhPJzHoj5/CAiPS4H4RJLGPHYpgZP0uoqc+ddYhA+ZkV/yWZjiu7ypqttYhktpvM8TqFROtgcSCA== X-Received: by 2002:a17:907:3347:b0:6ce:6bc4:d18a with SMTP id yr7-20020a170907334700b006ce6bc4d18amr19827962ejb.612.1645553532652; Tue, 22 Feb 2022 10:12: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 y21sm10610153eda.38.2022.02.22.10.12.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 22 Feb 2022 10:12:12 -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 v2 03/21] net/ena: remove unused enumeration Date: Tue, 22 Feb 2022 19:11:28 +0100 Message-Id: <20220222181146.28882-4-mk@semihalf.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220222181146.28882-1-mk@semihalf.com> References: <20220222160634.24489-1-mk@semihalf.com> <20220222181146.28882-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 18:11: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: 108012 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 55371A034E; Tue, 22 Feb 2022 19:12:32 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 26AC641156; Tue, 22 Feb 2022 19:12:18 +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 D428641151 for ; Tue, 22 Feb 2022 19:12:14 +0100 (CET) Received: by mail-ej1-f46.google.com with SMTP id d10so45433166eje.10 for ; Tue, 22 Feb 2022 10:12: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=essxYOnKPPe+crKy13EzyluvIY0P3kBRk7ehFkEAhZ4=; b=UhttmVJbsK+wXIzPFcjV/NWMyKs8AQbRMiPxOI9tav7JshWCrD54mgaC5W9SAzjRcj GrSgKlc96CEaBtz51rK8tYJTtjPFXbpWCS2Z7Guq6RGYjn3OKKUBeAMLLNi8ET3scCO3 tRmc+hV5mI4cXrQaWFUOAhGKU/RFSRspDxjQRWsRaGKFiwvSxZwFkqz7gc9pMRZn/DjT Y0+kOJh7UpD3tsh+eXgqIxKwR7cYcofoP3D3f13I9Ne96mShWE47luzUYjzTHCMergym PdD5cGBLoT9n9Mij8jfIL+VgAiw7lVt9x9bNvs0mtoyjKpi8WCP12HBR/Ajk2Pi9lu7S IUOw== 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=5DKsVTkU/mMOHmiYS32ijiGU/X2ckCkWIDCdMYctcL8dnDCY+XSMR/TLADLy10CpjQ DsCYwQ0rp9lvrj/7rwGp39pNQpXNc7Xly60n+8cUoUSwSELmZAF6lw81CFBcNmYXUsJ6 qCCCILPb27H05ZZnGkSreFjL5q4RM2NCQ54nfi9Qj7WFQh1J4Bxu6lCI6TUJIR82z2aJ l3OOxKF5RNHbmlGhiUhw2fhhLc+DC2tE3qnMQN+qI2iiUTPnNqv+wOBBjFmny4FC66/3 Am+mjGUo3Rz9uTcmxx/M95Huqp9uHepb83/KLBIHuRQVFs1yGWsriVZJ4kTZ1EEFORvn YR1Q== X-Gm-Message-State: AOAM531k19aANZtxpADmYqZ6iS28uT8EqfELB2XFWXiweYUUb9c13Ou0 /97dCv8Qjmvgtk2fSlNpZ93hVXEcKhEP0w== X-Google-Smtp-Source: ABdhPJxfV5HJh4kcZRlG9b/UeoDjBhsZuzyG3gS7bRBF7ok06fXXLJiPMLlOOF9UUIrGP9lNKpVu5A== X-Received: by 2002:a17:906:848f:b0:6cf:7234:8ae with SMTP id m15-20020a170906848f00b006cf723408aemr20733070ejx.620.1645553533929; Tue, 22 Feb 2022 10:12: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 y21sm10610153eda.38.2022.02.22.10.12.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 22 Feb 2022 10:12:13 -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 v2 04/21] net/ena: remove unused offloads variables Date: Tue, 22 Feb 2022 19:11:29 +0100 Message-Id: <20220222181146.28882-5-mk@semihalf.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220222181146.28882-1-mk@semihalf.com> References: <20220222160634.24489-1-mk@semihalf.com> <20220222181146.28882-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 18:11: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: 108013 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 4E224A034E; Tue, 22 Feb 2022 19:12:39 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 1AB9A41152; Tue, 22 Feb 2022 19:12:19 +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 0D47F4114F for ; Tue, 22 Feb 2022 19:12:16 +0100 (CET) Received: by mail-ej1-f41.google.com with SMTP id lw4so45453980ejb.12 for ; Tue, 22 Feb 2022 10:12: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=l1kx888eKfNexEvUoiLHNaU4h6I1k9z/A18uzo1khc0=; b=e4DVOqlnrXBrnK3ALNje5WBx0/9SUnc2aPp6PBpMxK0GlZitUaCHkWBXWGELJTqoIr 69tkaF4f7RQK0ANSoazrnaVPzVMNwdXdZu6w+Cvp4Is4T9+Ss8Eqcb2k9SL2QrSpPP5n sXdq5RmzeqbMvXtw9lndwk38peOChV/MwlC/BjBJuH3RTABEBa8uC6j7bxtrS9NnF91G AcOWv7NiczSJzD9ue+ZXIIZrfSnO6DJmBa49l5SD7ZsoBrEK9GI7iI81rLuXbvstVGIg JXk+FeEsvCpIMYK3yNSUnW814Ssgu6r4KI5bhJkXqU4UoiqeKJsSsT+tzpMiDPuI6JDF AhwA== 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=QZsvU+ZkSI5pfXB2CYYrKwyznmfFLwYAIk3WC6KANWBY1qm7cx8egdxicw8yjT2llF RIvwP5olGEe+ngfOk9iwfKlPRftULzO1kwG7qM/vruQOETqmrEXtcR/XHXC4qFiDuOFY wfid+useey1FREmE8IUoNqFxJpoJlOuPJpER/6cXI1cm0h/dNbXe2X0xFH7jFUDVDRcv GK7Ts/Pa9/5rVUKG9dnUOQGWV1cCAV69Lu0PobYOV37D5HhcAjCX9GMBA0NxHNYZ1oAx ufIEvWKOxQWWPUd/uJijF6oc8+xpaYDZLlDL9hmbUddHAnm3qjHnaXZkC8Cbg0EmQr2q TW3g== X-Gm-Message-State: AOAM5300/wP9dD8ZEPvNRJ4iPv4paHOl8mNoJPDURXWw+UMsgqQpSSkp c+/E4uZ3qQf48tpjFaCbJ0BMsIgJAI09HQ== X-Google-Smtp-Source: ABdhPJxdfO+Z4ReNB/twLbHPgexIZTB8eAUPJ5I/7KjE7EmevMv2VZohQ0r/DCatzY1M2mQ4UIyPkA== X-Received: by 2002:a17:907:954f:b0:6ad:3614:73e6 with SMTP id ex15-20020a170907954f00b006ad361473e6mr20491894ejc.731.1645553535451; Tue, 22 Feb 2022 10:12:15 -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 y21sm10610153eda.38.2022.02.22.10.12.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 22 Feb 2022 10:12:14 -0800 (PST) From: Michal Krawczyk To: dev@dpdk.org Cc: shaibran@amazon.com, upstream@semihalf.com, Michal Krawczyk , Dawid Gorecki Subject: [PATCH v2 05/21] net/ena: add extra Rx checksum related xstats Date: Tue, 22 Feb 2022 19:11:30 +0100 Message-Id: <20220222181146.28882-6-mk@semihalf.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220222181146.28882-1-mk@semihalf.com> References: <20220222160634.24489-1-mk@semihalf.com> <20220222181146.28882-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 18:11: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: 108014 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 676D5A034E; Tue, 22 Feb 2022 19:12:46 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 020584115C; Tue, 22 Feb 2022 19:12:20 +0100 (CET) Received: from mail-ed1-f49.google.com (mail-ed1-f49.google.com [209.85.208.49]) by mails.dpdk.org (Postfix) with ESMTP id 5B2D141154 for ; Tue, 22 Feb 2022 19:12:17 +0100 (CET) Received: by mail-ed1-f49.google.com with SMTP id q17so39155859edd.4 for ; Tue, 22 Feb 2022 10:12: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=q3Vs8v0DzviJaKbmyC2cPdlagzNUgAm/fkn2vY416do=; b=WJ+iqSH68Ilfeph+IrJZgUvC89UVvnfJbDNNqLKNbZ9qpVa7pY1iPd48wNpn8izh2X 75ocCuiPV5JtHSbKwf1EAaLV5yMJv1SZvw5MuaDHFX8WgBv/VBy9jlI3wIdfIA3tOBNm fvu//4stCc0cBk8mU/U6ANiGTsNzMWqlJ79GfpboNhEnZs0CpQFF2s/0n+to3HZ9Hif+ LVzmd7D1qjX1V5SQ70PVPrPi11rJdpcu7mBhSyODqcQc9n20BWX6tPeO3Moj9FoIxgGZ J6Wp/BxOS/Kflhm3OoiWu5q8fbUnScF/wrZh0tKVVya3PkbgeTienpU8oA2yJHVufsVI NGbw== 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=Bl6O+8+NawkutbX3l3K9M2pLP4PrqqX6CFtt+aQaFK/kWab7PxkodlSaqbLL8358o0 7RbSimA1Mu/NEHLvRCdOc6gqcrjNIb7gL+fXnsTShhmY9YdmASC9QC7dQ+HVHZzhgS+p rU0CA7Be+1EV4fg60/oUPOJdptYBLf4MwlfXAlsiOYyAroz3+3FicWHoxVJcnvD/eTti yL9AhK1GaGc52jq6bkmbBoZdFtAPdRJMBOQWO1gfLfhgnLQRz2/84EhjoXhKLN2bc7LJ yxSWrgWm1BmtmnY01UhctTxr25GQ2FUbPVF9yM8NHv65ZqJHd7sspQISFWsdiD7zaoJg wZUw== X-Gm-Message-State: AOAM530EZ9vmA695djMymmeA8JqJw0YegNmTTyrgVrc5glyJl+sG+MU1 ssV5eV+fsvx8VVPk4nDysf2/vYiNTiD/lw== X-Google-Smtp-Source: ABdhPJxrtVd4sXb4nu0jEBigFhKuEh/NNhulpoQphbRVRMDys2l7IOiUVCFbL62zDKzZ0pP4RruBbw== X-Received: by 2002:aa7:d80f:0:b0:410:d5c3:f770 with SMTP id v15-20020aa7d80f000000b00410d5c3f770mr27769135edq.279.1645553536735; Tue, 22 Feb 2022 10:12: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 y21sm10610153eda.38.2022.02.22.10.12.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 22 Feb 2022 10:12:16 -0800 (PST) From: Michal Krawczyk To: dev@dpdk.org Cc: shaibran@amazon.com, upstream@semihalf.com, Michal Krawczyk , Dawid Gorecki Subject: [PATCH v2 06/21] net/ena: make LSC configurable Date: Tue, 22 Feb 2022 19:11:31 +0100 Message-Id: <20220222181146.28882-7-mk@semihalf.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220222181146.28882-1-mk@semihalf.com> References: <20220222160634.24489-1-mk@semihalf.com> <20220222181146.28882-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 18:11: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: 108015 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 68DCDA034E; Tue, 22 Feb 2022 19:12:54 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 0B85D4116D; Tue, 22 Feb 2022 19:12:21 +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 AFC9A4115A for ; Tue, 22 Feb 2022 19:12:18 +0100 (CET) Received: by mail-ed1-f46.google.com with SMTP id u18so38969645edt.6 for ; Tue, 22 Feb 2022 10:12:18 -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=RWkHHCjD+8z0SCXZPqa5bvDq2f10kESrNMyh1uw7vH+z7akLYCvahg8Ob5dvpo97S3 +auUA2NJL+4hC46F+At4bElA8l6YpoPg7l6L8hylG4ysScgpYezf4IbrTXB9qntx2jZ8 CTf6cMi7kf3R378DMgA8MVxjhghrhXlR+SoMZEyIbdAT74nVBh2S/r+Rc8ESakCpEA5S jYw3nOJOGheeMv5zMG6qkKY1rZ9QFZZXnZNte1nzcRpDdB02HwtQCuQO3YOLNNuN1Kn9 bJU6xhXaBpxNdeiJQZjGo1QRBXp3r0Y6UZ7yDfXltq/RfGxIug3pJ1a9uzPaHwPG6oxh aoVw== 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=lNUrrbmj3v196BDauZTSCgMTpTFfV2xInuYBPIah8UhMwuGGyqY910AXswh8wBdmOk aGQTkbFA+cxjgcBy0Zi0w6pxQFvbC3DLLldjUyW1lf54EX4MTLCacXT9W+nygTK1ZUQz e9+HHccWBOM1HCZy/MW6oFaEss8j2WIbBg3uD8sRwHdmOuSsIHLQq5nOVflN9PzaNyvt c7gNMVDXDukV1etY04n0zdxFL6rINSUEUMFhkV/Bg4igf35/i38tQeEM25+MP4Pinpxr Y8XmkJpVc71kij7NLCv/+1uomKVd4FqQCa/r6QOs0TqY70KsxZAgIQLLDS/LB98usWBV VWMg== X-Gm-Message-State: AOAM533+cXv2/2ryQ/LFoAVl7uPbGod5io0QJoym1YN7io4E6lNAUA2J ZEgYJkdOHB+hcfiEtzuqt49LJVNtV79Eyw== X-Google-Smtp-Source: ABdhPJwB9SmZhfcJvwE/VzfovgWj0J8+5fgPFvU03lguihmZt5mQiSwtdiWhXnfsD/mU+vULpGHO8g== X-Received: by 2002:a05:6402:375:b0:404:c2be:3b8c with SMTP id s21-20020a056402037500b00404c2be3b8cmr27063493edw.247.1645553537991; Tue, 22 Feb 2022 10:12: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 y21sm10610153eda.38.2022.02.22.10.12.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 22 Feb 2022 10:12:17 -0800 (PST) From: Michal Krawczyk To: dev@dpdk.org Cc: shaibran@amazon.com, upstream@semihalf.com, Michal Krawczyk , stable@dpdk.org Subject: [PATCH v2 07/21] net/ena: skip timer if the reset is triggered Date: Tue, 22 Feb 2022 19:11:32 +0100 Message-Id: <20220222181146.28882-8-mk@semihalf.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220222181146.28882-1-mk@semihalf.com> References: <20220222160634.24489-1-mk@semihalf.com> <20220222181146.28882-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 18:11: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: 108016 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 D4713A034E; Tue, 22 Feb 2022 19:13:03 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 37EFE41157; Tue, 22 Feb 2022 19:12:24 +0100 (CET) Received: from mail-ej1-f48.google.com (mail-ej1-f48.google.com [209.85.218.48]) by mails.dpdk.org (Postfix) with ESMTP id 133C341165 for ; Tue, 22 Feb 2022 19:12:20 +0100 (CET) Received: by mail-ej1-f48.google.com with SMTP id a8so45560610ejc.8 for ; Tue, 22 Feb 2022 10:12:20 -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=vGjUGwcowreTRVhkb3rWICy6jacJCjgNUZLWTuG+82ykBbndU/iAZa5avGSri5aQjb 1G7VyubEw3qsC1HwTfqmqwKkXcr/155tqDBZT9+azixypZHOWHH42t2OT+t78L8fcIxR WtfAZsjfHRWTbF2o+Twg/GxgEkhUo2ERtYCVCYjXgQ+ZO9qeUv9LjacyAzcT8ZSde1Us H0mfGE9SUDCQPtOB9CsdmIqNXQSXqtk2STgfdLq2zy1jA2GglIWUHV56l/JV3HdJx7KW 0gpUjVZC7LiMswUWiRs0UQ0sz+TZFqAjTsv47C7qtJUD4UNlcuSsuEV8pvrW3M1rX8LH ctbw== 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=5Z/vtmaMOl3OGpiQVkPmIJ/g4mI9zUZPTGzNpqm7aZvabSRq+VzVpKYCsRN/8g+4T3 Di3Bjh9Q0VocUleCxNdNwK1g7fQfphq05e3egetXn7KW3Cfz2XAjmf0/04ddU2O22b20 0ZnDJjow9x00IHBi1uN9x68JG4hyTvN3bWujKFf2VcgAxnOaFrXH52F3j97HvUHMzvvu vMdKqbYY8Ohw1dAJkxkNepYMyMB7SpTF7woJzWkuS4Z+s+5xDSHbK+iaWKMMuSw8Xe6F wxTW4zycRx+K7YhocPfGYtRkJSRFHiah9/8WQcmyTo1uPHpU/0Q8RWa0YgUIC7+uJaIc 3cmQ== X-Gm-Message-State: AOAM532uzGSUzw3q1AwuJKA557kzZPt2S7BxJ6zSZD2J2sZKdi3F8k1S Nd+cbSty8mYZK6Yt5sdFmVFBTvAdUwtaZA== X-Google-Smtp-Source: ABdhPJzp9/lGRRRL+Bt8j6FxUcqWb1lx4IO+orEV/+S0PXx5KnvykczlkNw4CReybDROh5USJML9Cg== X-Received: by 2002:a17:906:b348:b0:6cf:5b66:2f80 with SMTP id cd8-20020a170906b34800b006cf5b662f80mr19618521ejb.638.1645553539543; Tue, 22 Feb 2022 10:12:19 -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 y21sm10610153eda.38.2022.02.22.10.12.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 22 Feb 2022 10:12:18 -0800 (PST) From: Michal Krawczyk To: dev@dpdk.org Cc: shaibran@amazon.com, upstream@semihalf.com, Michal Krawczyk , Dawid Gorecki Subject: [PATCH v2 08/21] net/ena: perform Tx cleanup before sending pkts Date: Tue, 22 Feb 2022 19:11:33 +0100 Message-Id: <20220222181146.28882-9-mk@semihalf.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220222181146.28882-1-mk@semihalf.com> References: <20220222160634.24489-1-mk@semihalf.com> <20220222181146.28882-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 18:11: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: 108017 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 B6FB3A034E; Tue, 22 Feb 2022 19:13:10 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 334334117A; Tue, 22 Feb 2022 19:12:25 +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 243F640DF4 for ; Tue, 22 Feb 2022 19:12:22 +0100 (CET) Received: by mail-ej1-f41.google.com with SMTP id d10so45434059eje.10 for ; Tue, 22 Feb 2022 10:12:22 -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=B8oI/cdU62r92opm1dtebocaN9Zav8lhZXftRiMiuJYefP6x2iHjvtyBynQWQeQ+0l S7bgbu7V05kAZPAcY3uK08gc4NtXpm870UDEBQDXh++6bJ8kLoSjBUCh8PpYqFFhqkG5 oEhEkBMYbJdkE8ESzQMuITReFK362kUn7xayjyUAQvh2mhty7gvm9qjq9H8dx+15bgtR Ceh+H4N4UzE0FJGlCdDXrO4NG3v3HB3VtIfXYVJ9SB2KnbUoxcuyxSFkdu8zQf8N85tI BS+ywbwZWBysoYK1hSbATIhrRf095O7T+/t+NSSiA/zydLSByaj1QbpeMPTYqaOZzDHI hHvQ== 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=beODPrHvC1+68ewG771lG8fR6i9HZXHXlYoTzbSjAIY/Ho7hHzc36gP+O8G2qqbv4b E2qlI0LgLoAnlsCTrtnp6VZTy+7jwpq5KuAlu/Dqfw3nwVL0RYeWEVPoSqKVTf3+/HUz epUGeFQUP8KWg5R0ePnQhyp3CBWHNsNPAtOEgAeG56xr55AM1hdAdKIcrpfIONl1hua9 8PZ8N9qwxZbhhCyJRbWrJN8pZcVov0NpYpSXmDScE1zZCbN7oQVrou9Hdf45yPyp7T1g 3qbFtCkbSqhhgoYcPSM5QycJYLRaUlvKcy2mPbsAulgqYJLY2nGQbLCSr+Z9JMQAoB0w 3gCw== X-Gm-Message-State: AOAM532EuA50HKZFIs1VI67FD9ngIK6Sxm7WGY4xcSWkkZRpypzT97Yu 9uED4fnyxs5VqubtL3dfX/EOxhjcQh17pg== X-Google-Smtp-Source: ABdhPJyyIKOYrVxIzHVByKc5KZqbElQvk7SPejPxLN/5nTD6gqP4v+F76potJnDTg/ufY0QbN5Kxhg== X-Received: by 2002:a17:906:d41:b0:6ce:78b0:8113 with SMTP id r1-20020a1709060d4100b006ce78b08113mr20637238ejh.357.1645553541469; Tue, 22 Feb 2022 10:12:21 -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 y21sm10610153eda.38.2022.02.22.10.12.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 22 Feb 2022 10:12:20 -0800 (PST) From: Michal Krawczyk To: dev@dpdk.org Cc: shaibran@amazon.com, upstream@semihalf.com, Michal Krawczyk , Dawid Gorecki Subject: [PATCH v2 09/21] net/ena/base: use optimized memcpy version also on Arm Date: Tue, 22 Feb 2022 19:11:34 +0100 Message-Id: <20220222181146.28882-10-mk@semihalf.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220222181146.28882-1-mk@semihalf.com> References: <20220222160634.24489-1-mk@semihalf.com> <20220222181146.28882-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 18:11:35 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michal Krawczyk X-Patchwork-Id: 108018 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 03389A034E; Tue, 22 Feb 2022 19:13:19 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 6ACCE411A7; Tue, 22 Feb 2022 19:12:26 +0100 (CET) Received: from mail-ed1-f51.google.com (mail-ed1-f51.google.com [209.85.208.51]) by mails.dpdk.org (Postfix) with ESMTP id 157FA40DF4 for ; Tue, 22 Feb 2022 19:12:24 +0100 (CET) Received: by mail-ed1-f51.google.com with SMTP id s24so32505702edr.5 for ; Tue, 22 Feb 2022 10:12:24 -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=Ykmh+Ju4yVzy29nLH3jH8mLEHPh01ojW/+m4MkT7BCPBkj1KNgnbIGUzUkLdUyhXM9 mjYoQGblF0FqGepqxxUmxlI2RXrGe69n4hmm9N772HyiOl2BEc+TXdj38QuIaD3A+zgg ZZE2B4t9YXii/uYYa+XHVjEuWa74Vq2OkMeMLn1r7ZrMmA8MGEvlByWVHN0niohipbh/ DF7zQluk+UYzR8Xsh+G3YddWn2Og3aQulF64Co0b2oHxJo66YqUKzyP5N6rAFzrGDRHI TDiZQo9xTv8z3QSG6lO/5j1DABUmtWTe8uvYxBN4OYihVYi58vo74Wr5LdkxU/KNBz6E 4sMg== 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=36G/NiI9gDKWGZtAnHaMncSdkZVXMP65dYT9BoPP+qOX3rQy2JFX+bSQ280Amkq55x Y+Vn5nIdtmZy+ap3dnmt6SFjiDT9O5vQM+SxfGEGFvDFh8NMIEjumA2b9C11iVMKzAjG 91ha6RDIL4NMiguACXlXIC9+bHbEtqPTsJ/qsuHnSnQMUzJ4YPI43sVa3gUwuEiF5LWf 6dylevnjJnRC9NjEYKYB4is66LUQ3we+T8Qj7GfiWaz4/EE3BlgenVpJ0t/IQPNw7GJU LZVSrKvAlhYJhq3S0pU+H9/ZNCMDgcQVwZqpYQo/MiE9NkaxnmAWuKbjJ0lysWuz4Cj4 pTlg== X-Gm-Message-State: AOAM532Sz2zBI2YRIAHn82gXI+p5o8rZ9poEPiR3RcfJDmHe8eDvr6wE ojaIHkKzs9xSTC1HBEhTeyIiFSzbVRNsew== X-Google-Smtp-Source: ABdhPJxYfaXPbLcX6KRYQvm5lCoGUprhKmqiZSnNPyMfBzibNdSJkhUZbKpBmwvXWbLgcMUClN7eIg== X-Received: by 2002:aa7:c3c5:0:b0:404:c44f:8f94 with SMTP id l5-20020aa7c3c5000000b00404c44f8f94mr27479035edr.277.1645553543080; Tue, 22 Feb 2022 10:12:23 -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 y21sm10610153eda.38.2022.02.22.10.12.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 22 Feb 2022 10:12:22 -0800 (PST) From: Michal Krawczyk To: dev@dpdk.org Cc: shaibran@amazon.com, upstream@semihalf.com, Stanislaw Kardach , Michal Krawczyk , Dawid Gorecki Subject: [PATCH v2 10/21] net/ena: proxy AQ calls to primary process Date: Tue, 22 Feb 2022 19:11:35 +0100 Message-Id: <20220222181146.28882-11-mk@semihalf.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220222181146.28882-1-mk@semihalf.com> References: <20220222160634.24489-1-mk@semihalf.com> <20220222181146.28882-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 18:11:36 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michal Krawczyk X-Patchwork-Id: 108019 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 6AEECA034E; Tue, 22 Feb 2022 19:13:24 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 4C590411B5; Tue, 22 Feb 2022 19:12:27 +0100 (CET) Received: from mail-ed1-f51.google.com (mail-ed1-f51.google.com [209.85.208.51]) by mails.dpdk.org (Postfix) with ESMTP id 2F3A341168 for ; Tue, 22 Feb 2022 19:12:25 +0100 (CET) Received: by mail-ed1-f51.google.com with SMTP id z22so38920843edd.1 for ; Tue, 22 Feb 2022 10:12:25 -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=3dxRwr4gk0n8+tQcPfj2sWDna3e7rCm9RvZila6pBrjS2OQbxiCBlgLB9kxMo72h75 f5/wPz2SVYpZhIMy3+A6hDEqAjYiNL0o2mMP9BTwqIFQ9RqGFsdJZkuKyO4qP58tNIph DjisdP6zVzzouVWp9Ut2YSyuheRdd+Aw8VzIdvVOr0gRnPIPPx9Yodejm8fncKD6ejgC 0PQS7pGw2vnf4J/k/cy4IoY8h2ngJdAOCQgah1IwUlDnAPDGbk4UMlBNRvyTAy/5+B9q zvZo8Am4VNZFckTgEiB8A21Td3NEXGfQQVcZRD1Oqr6Fob9hLpHS75YsiWAWTUJRxD0D l/Sw== 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=nld7kZAM5URHsATLkBwkD01XR25mlnpwlKwOmfQTIm7lUDDwGgBX+uOE4qbrOCZRXd LfouMErt41ixdJHF86ZtJgvu0i791us2Pv2cgIoVGbKIrsvOV+heWZKDyq/RNfZs5jr3 1U1zIrlxzNCbAuXPOyRhnDHIvJBOm3YXaG+r8KqMeghdHFx8lWo6KmgAZ+L8MVk7FaGF 7godM5+Qe+yK3BdMgmRjuy4i1ffi4F/tLpstYclKPNrgucQdJDP3O3h6JZgfT0n5vrSS tMA7FAZwrSyyEExpUM5jjHtbzvq1ADZqHd8xUHZmDdIFfMJxdWklBu5JCFdmrRhfWfsN nMwQ== X-Gm-Message-State: AOAM5307SZVAWe+AYQ4fPYbIhSL8s2+grJ+b6R7o2+1nwYomMQjpgo2T lpQpm7UaaDjrEpMaLL51qWvtfjOwbrbbNw== X-Google-Smtp-Source: ABdhPJzyNajBFFqV3+8WND2IYKJeniSHN2xUothGQNkFGfxrBfSzP0V7kvVLK42CStdVzsIpSS3tKQ== X-Received: by 2002:a05:6402:40c4:b0:412:d697:187 with SMTP id z4-20020a05640240c400b00412d6970187mr18703485edb.66.1645553544649; Tue, 22 Feb 2022 10:12:24 -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 y21sm10610153eda.38.2022.02.22.10.12.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 22 Feb 2022 10:12:23 -0800 (PST) From: Michal Krawczyk To: dev@dpdk.org Cc: shaibran@amazon.com, upstream@semihalf.com, Stanislaw Kardach , Michal Krawczyk Subject: [PATCH v2 11/21] net/ena: enable stats get function for MP mode Date: Tue, 22 Feb 2022 19:11:36 +0100 Message-Id: <20220222181146.28882-12-mk@semihalf.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220222181146.28882-1-mk@semihalf.com> References: <20220222160634.24489-1-mk@semihalf.com> <20220222181146.28882-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 18:11:37 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michal Krawczyk X-Patchwork-Id: 108020 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 07840A034E; Tue, 22 Feb 2022 19:13:30 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 568D8411CE; Tue, 22 Feb 2022 19:12:31 +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 33BE54115B for ; Tue, 22 Feb 2022 19:12:30 +0100 (CET) Received: by mail-ej1-f54.google.com with SMTP id hw13so45210466ejc.9 for ; Tue, 22 Feb 2022 10:12:30 -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=Quukpr87oHu5zHTSVmMY3v/pn3oK0i492+xvTSigoe4=; b=uiPctX0A3+YnxZviNoEzweZ8jtNXe/D+m6cwrC2/7OyMhTlVHPI+HWc06enWpTHGLr ap/NHL8fCoX+Z1wyrcitwt81eXQv2hDt7iz2wOfQoYa/yJAMNtQx+JWduf8IUOGO9GrN eRZy8mL52LfvQOWEfyhZcsT8kjiLo698XNi+lK/M8ppamxyZ9j98sEmN98EjEQybnWqJ 07rnLIBnwVOidxfAOOYgZacKw2xhxwwKV4mUFFf3IjYd7HqJ6TbPq7XMz77kn8omIQv/ i/Z8My4xEjNDv5wEZcKf88gs8ejRG1656DUQKg7XRMBav0duP5iu/X4qlzb1sCr7mCjL yvCg== 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=Quukpr87oHu5zHTSVmMY3v/pn3oK0i492+xvTSigoe4=; b=IVUExp536qBcRw5F+ZNj05Xssn5un8gOd+uvqZ4aSzpBCYPGYk4eGC0U8VPFzdy7lg qqWmI0u9I7URZkf7uk+Cr6BwdukFqYhU0Di39DmzNbhSoOpo+yqbFUsWhO60ZKp82/nJ qG28EK+Id2yIuD8tD9Ci/+S2qUx8qg940M13fDM73TP15hE8cnzr5Mmw+gSqlIdI2kDl 4oZBSGZEj//EOmctB/CYs7aa4IGCavnm2+jP1yrxez65JSAySjFZ7fQzXpo4MAWyC6pR 9sQI1fysWN2c1YtNecNpVYJY2lZj/X44Euteh1P2HsjZ69vFbR3oWW3AAl2QAIaX0k26 bkuA== X-Gm-Message-State: AOAM533l54akjyDog1ZAERXxnExrvDAi82fqRuJzXRLYYqRo8uxH/H07 RngG7FBBCxOkZlRDu2qaf15dUMZa2NxdCw== X-Google-Smtp-Source: ABdhPJw7QFx03iGGicdvq596EiQAQrgFfhW8dOIEbvfcJtt+ItOczKVgVg4xzmq+gWog4X9ihjbeoQ== X-Received: by 2002:a17:906:4116:b0:6cd:1980:5ad0 with SMTP id j22-20020a170906411600b006cd19805ad0mr21575323ejk.595.1645553546149; Tue, 22 Feb 2022 10:12:26 -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 y21sm10610153eda.38.2022.02.22.10.12.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 22 Feb 2022 10:12:25 -0800 (PST) From: Michal Krawczyk To: dev@dpdk.org Cc: shaibran@amazon.com, upstream@semihalf.com, Michal Krawczyk , Dawid Gorecki Subject: [PATCH v2 12/21] net/ena/base: make IO memzone unique per port Date: Tue, 22 Feb 2022 19:11:37 +0100 Message-Id: <20220222181146.28882-13-mk@semihalf.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220222181146.28882-1-mk@semihalf.com> References: <20220222160634.24489-1-mk@semihalf.com> <20220222181146.28882-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 identify and could potentially lead to race and because 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 18:11:38 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michal Krawczyk X-Patchwork-Id: 108021 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 609A7A034E; Tue, 22 Feb 2022 19:13:37 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 9E09141203; Tue, 22 Feb 2022 19:12:32 +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 5E389411DB for ; Tue, 22 Feb 2022 19:12:31 +0100 (CET) Received: by mail-ej1-f54.google.com with SMTP id d10so45435279eje.10 for ; Tue, 22 Feb 2022 10:12:31 -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=KyMHbrZaQrg+XKMlrnGbM33TWVxzBqkar0NsAkmLX7/l0RH/2dcKx8+g2/5mzF8IWy pS4rUdjWiACdfcScr6lExK2WElxlwrlWqMYPrZ4RL+T7fmJGKcs0mmK1QoffsZBhI0hr vxnTQh7rDJDjQzs31csis0zp7t4MjDniw1ZL0KIkB73Q7oJ3KMVLdL5+D+PB/qLijsv2 9ayXsK0bRgPc1dItfIXX34Fgfbr2Ezq748deY0ZCbUYKs1iaHlCh3Jwlxoj9zbDkgxVR cqSFQekGdXztw6f233u6ie5A70fdYk0y2u84o4dlVCKxLq0iJ11U9YmVTBUln75T3RvR RzWA== 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=4Sj6R5GkeDk/Yh0oExKaNTbbd1wUWIEMcAm4PFCkFmkoM8ThAG/+I8Mrh70weqhURk 6xdonq+/5o2HUWCAAxntuB4IBl57c1p2OuAhrViCCpDlmH1x8GUgNvSDrKAthGSRrmTH +D6jCnct7n3Y4EjqLc8v1qQI1wf8I3hqCIvQGCJc11qSwE9fPc+MU8S+siULW6fMh+2I RRcuXFPu3IkyZEAVLe1QpiaPmBcaVDhgcnBXd2IfDPd0JvNxbB56OBTTEuVK48kZ3ZSO IGGODs8x4qVXLcqmcdsO37+t1hGZtbEaOCuGUyrAhSE1p94ZcJImq8grWKmEis8pV5cx egKA== X-Gm-Message-State: AOAM533npfY6FiggY+FqJyjBRThliEqsK5pDIhGOmQzYM6sClLxE9upi /BXAkTzn8DnFlBfYC47qugQhBWU3F7XYlQ== X-Google-Smtp-Source: ABdhPJzwQNxGIJ4uJlaJCcA5FNBly8OAvzQdKE6gMukRBgmtdvzFc7SPVr3dmoP36Pb/U4NnwjKfdg== X-Received: by 2002:a17:906:cc8d:b0:6c9:6df1:7c55 with SMTP id oq13-20020a170906cc8d00b006c96df17c55mr20050979ejb.317.1645553550760; Tue, 22 Feb 2022 10:12:30 -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 y21sm10610153eda.38.2022.02.22.10.12.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 22 Feb 2022 10:12:30 -0800 (PST) From: Michal Krawczyk To: dev@dpdk.org Cc: shaibran@amazon.com, upstream@semihalf.com, Dawid Gorecki , Michal Krawczyk Subject: [PATCH v2 13/21] net/ena: expose Tx cleanup function Date: Tue, 22 Feb 2022 19:11:38 +0100 Message-Id: <20220222181146.28882-14-mk@semihalf.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220222181146.28882-1-mk@semihalf.com> References: <20220222160634.24489-1-mk@semihalf.com> <20220222181146.28882-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 18:11:39 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michal Krawczyk X-Patchwork-Id: 108022 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 BC470A034E; Tue, 22 Feb 2022 19:13:42 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 87E8341223; Tue, 22 Feb 2022 19:12:33 +0100 (CET) Received: from mail-ej1-f43.google.com (mail-ej1-f43.google.com [209.85.218.43]) by mails.dpdk.org (Postfix) with ESMTP id 94A5F411FB for ; Tue, 22 Feb 2022 19:12:32 +0100 (CET) Received: by mail-ej1-f43.google.com with SMTP id gb39so45562601ejc.1 for ; Tue, 22 Feb 2022 10:12:32 -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=oKpw+SNOegI7eHa8N7LSNyThpv1jjDSELl4/Xxu4LrcmMaapi97QwplBrMEGRH9d12 WHfsaDdJ9INUNc4vBbjEbbbzSgHBIhjdhCZGEKpUjj1Vt7ZpxdgwLeW0M6jvVbCmIKEc HtePNHiZE2Wyinwi1NG7MmwyfwLI5CIs343uFyG0w5H59X0U4TNnJj7VhuewOZi4IJpD FADeSuo3gvamcl6COeDfhb7wclQ+mZeqr0DuLHtg2LI2vJmSYHQ66A6hiVN5rBcQmzGR 2pLXne1CenINh8mrNO9m2rbCXktCuHbOxgclthdqaJZj9T7ukAsLo7C6cYIaJ49lZWXu 82Yw== 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=jAgJG+VYwAa494dcIGrpnsqdZ1KrlDcJFifM5dEraP/FX4vWSvdCkxTqm0FAF1/xvQ Ytg4WtoytfexI1XYKm5LWJDEIV6Q/EFLxu98kgiQMcMsQy7C3TS2bxlNdXiJgBxboFuh OPGTppQ0ND6EzcfCr2IYnhhBYd2+t9viyoGG60LzMhUnMXXWpYwK302r11CQ2RYHGbps 7fRClKCwMFhc0oKzJZqwP7gXUANQmYtU51gWa0UssP/SCP1Q5fZ94F6QCitD16n4ign9 f/82k61H/JdCJcz4/52YagG0yG9IVWUngrTn7xdZ1C/mRbD8TQJeLosnQItvsHYhrX+t sFtA== X-Gm-Message-State: AOAM532g8T9JpcsLf37owdQxWtMTsCLsqRJTLTZuRV+HgYrN9e0JmmgJ Aq7GpySOg5l4nYDpSJfW5m+IJdts/5el7A== X-Google-Smtp-Source: ABdhPJyDhAF9MnqRLC1tIzlr+G4Zjlt6VIuz+7eH2ZzaVn100xtHH0Lg+rfir7J7y424by5nkCeITw== X-Received: by 2002:a17:907:8a04:b0:6b7:ebf1:efbe with SMTP id sc4-20020a1709078a0400b006b7ebf1efbemr19594540ejc.488.1645553551985; Tue, 22 Feb 2022 10:12:31 -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 y21sm10610153eda.38.2022.02.22.10.12.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 22 Feb 2022 10:12:31 -0800 (PST) From: Michal Krawczyk To: dev@dpdk.org Cc: shaibran@amazon.com, upstream@semihalf.com, Michal Krawczyk , Dawid Gorecki Subject: [PATCH v2 14/21] net/ena: add API for probing xstat names by ID Date: Tue, 22 Feb 2022 19:11:39 +0100 Message-Id: <20220222181146.28882-15-mk@semihalf.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220222181146.28882-1-mk@semihalf.com> References: <20220222160634.24489-1-mk@semihalf.com> <20220222181146.28882-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 18:11:40 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michal Krawczyk X-Patchwork-Id: 108023 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 63051A034E; Tue, 22 Feb 2022 19:13:49 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 80DAE411E6; Tue, 22 Feb 2022 19:12:36 +0100 (CET) Received: from mail-ej1-f42.google.com (mail-ej1-f42.google.com [209.85.218.42]) by mails.dpdk.org (Postfix) with ESMTP id CA683411E1 for ; Tue, 22 Feb 2022 19:12:33 +0100 (CET) Received: by mail-ej1-f42.google.com with SMTP id p9so45458561ejd.6 for ; Tue, 22 Feb 2022 10:12:33 -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=faFz5fnpmLmYycjNjq9xPGOX2yLI2Soxz8ybFQLWFbk=; b=fEXZOPzMvT57qJIVr/CB1miVlAAPTRL54iLIjKbtVHPt0HNt0SKcEbKJYWmLcni9mY vCoHaBe1/KoymKbQ3MjAurdBfsB4esVX2ilQzZbkE7M6z3dZEVuD8tHTtjj6liPzg8jI DWmBiUIjLL8XnOgcorL7jP3ugQtkRI+dYSMPBTVIeM5bDVEc+wfUeIohixKL9luLJ8MG vJaA2GsPreqDcR2sXLfMaNqN68bYLc7Sz6zUYW7bt7++bhEoz7rLWQYqnso7f5JePvTw S6m3kUciM37qXG4VLYcH6Jss5ZuNBZKn1moF7U28140u+84+JcJU4zpmmeRskplMLtuC jrwA== 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=faFz5fnpmLmYycjNjq9xPGOX2yLI2Soxz8ybFQLWFbk=; b=CJ93kh4uiN095mg1/O9VrRRhB0BFJFD4h3je0J2WGM0c10/dKxlk3WiJXAygalt3c4 TaT3sOR34JihlxJgOLSrO/5Cq3lt7i+kkAdtXVhinjV0ZWkgpn7Df3BySArd4w5Af+PE CTDTIVUoRAapuCfUWb/jPGPMVqNS00KhObO49+f4nKdaAviNx3td/xzr5La/zWoZCJGb PMm6JDP2ub+bLu8HwsvUXca842OFUJxF+dfFqq82Xgvo5vq9X10wxTSk9X2tglhzaMKe KkslbQhGnqDBgXuzMXsTiO5x+M5HG2YQAJXotzrDdcZYfbA3MWa+4U8PgfUPsRh7gd3E Y9NQ== X-Gm-Message-State: AOAM533mW6JttLOCa3e24KoWadnGtuBk54Q4JtxykI9KnG0sGt6XVQDW kkEVZhEBbKF/hPYoKQvE6/nUL84oLorTWA== X-Google-Smtp-Source: ABdhPJzs7kKECQ+jMNPwpVhCY3YPptc2NSRfYSXRVFpAR8NJVzQjkoFvCvIe1UAsvnGgl+amAjcY8g== X-Received: by 2002:a17:906:24cb:b0:6ce:b0a2:db5a with SMTP id f11-20020a17090624cb00b006ceb0a2db5amr20405421ejb.260.1645553553255; Tue, 22 Feb 2022 10:12:33 -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 y21sm10610153eda.38.2022.02.22.10.12.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 22 Feb 2022 10:12:32 -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 v2 15/21] net/ena: check if reset was already triggered Date: Tue, 22 Feb 2022 19:11:40 +0100 Message-Id: <20220222181146.28882-16-mk@semihalf.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220222181146.28882-1-mk@semihalf.com> References: <20220222160634.24489-1-mk@semihalf.com> <20220222181146.28882-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 reason 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 occurrences 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 18:11:41 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michal Krawczyk X-Patchwork-Id: 108024 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 ECC17A034E; Tue, 22 Feb 2022 19:13:54 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 6B80641C26; Tue, 22 Feb 2022 19:12:38 +0100 (CET) Received: from mail-ej1-f45.google.com (mail-ej1-f45.google.com [209.85.218.45]) by mails.dpdk.org (Postfix) with ESMTP id 1E6454116A for ; Tue, 22 Feb 2022 19:12:36 +0100 (CET) Received: by mail-ej1-f45.google.com with SMTP id qx21so45342366ejb.13 for ; Tue, 22 Feb 2022 10:12:36 -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=qV2DVhWjyKRYAN/dt4BZwndxFWQee512nCLQwyd3oe3N/UACvD81K7kfUaD13zL1tv SRHY36PCxIUJLIXs39cuB5MvJJNJmirbYQdoSjqwtfkKw3zY3R806/ongxgKx9pn2byY ZOSdnu7ReWcH51bil6XktnivlNSOHOytBTcDZOks/LavsDSueL22aHysBM15ta4SJs7E ZoPxSvscoKqtXoF8y6n2C2QrHVanxlzShSYdoGIoa/Zpnz+FfqZz8OB7BptbF/ZOHJXq 3StTyKvvVGimgGLbx0OXkJcQS4BWGiq4GlILEYM+ANInAjMCwnceJH7DfHNLk9ofAQ1y 42Pw== 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=D0/83i0vhbxGA3JcC6KB5Wtd/SNJSSYQYlvpDK/X9SNTRWejhtAnhBG35xyN9Aziqv 4Q+IBFkD606plPAv6VUKJEGrquWYH0nfukBTDsdN2Lp8XflAqlRVLQ6ANwgy5hInqsA0 asPWD7OjJp6CCaCSWyTlxYbGUOqO8vRnhzazI2L5sN+GhOfMXeidTFCGKjaUYz0gcaH4 hTrKOcGTKKOfdFdlisH9uH5nKfz4wyH/Y0jEUFIEzcApWCXjQqVDqnTZp5/UtvQ3leXb c/pNO4Al990icADubDQ/kkzkn+gG1EG0I6Tn4yu13vx/OwhkfGRdLDzxK425+g33jzF9 IjVg== X-Gm-Message-State: AOAM5314YYGb7Pvdmsm9mAG+nDlf8rvWPcr03+focylRCb5bVT2HgiBC bBMQ25whkQagtZUFgEG9aDEdKf3fO9QuYQ== X-Google-Smtp-Source: ABdhPJx3Nj9xSKv8rIL03TgqefzU1dG511IE9cqTrtvbp1VoquggXO86sU+yIXOKn4W6VGWa44x1Mw== X-Received: by 2002:a17:906:50b:b0:6d0:9ebc:b9df with SMTP id j11-20020a170906050b00b006d09ebcb9dfmr16328470eja.67.1645553554421; Tue, 22 Feb 2022 10:12:34 -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 y21sm10610153eda.38.2022.02.22.10.12.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 22 Feb 2022 10:12:33 -0800 (PST) From: Michal Krawczyk To: dev@dpdk.org Cc: shaibran@amazon.com, upstream@semihalf.com, Michal Krawczyk , Dawid Gorecki Subject: [PATCH v2 16/21] net/ena: make Tx completion timeout configurable Date: Tue, 22 Feb 2022 19:11:41 +0100 Message-Id: <20220222181146.28882-17-mk@semihalf.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220222181146.28882-1-mk@semihalf.com> References: <20220222160634.24489-1-mk@semihalf.com> <20220222181146.28882-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 18:11:42 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michal Krawczyk X-Patchwork-Id: 108025 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 61D09A034E; Tue, 22 Feb 2022 19:14:01 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 6528A426D2; Tue, 22 Feb 2022 19:12:39 +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 6D4444116A for ; Tue, 22 Feb 2022 19:12:36 +0100 (CET) Received: by mail-ed1-f45.google.com with SMTP id s1so5834249edd.13 for ; Tue, 22 Feb 2022 10:12:36 -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=x9xcxLG1wSp4t18lGzPse6yIqtfKR/m1IJcfcGlsOJH7ELYeZqfSsgGnk271CtRKli 4luznTLU4eZB+gFzsOJQbcFj2N1hgmqJOkm681feWGT6vWAzWrsoHK9ftoSLZdaT9qA1 oSL0S51+hmF+dLG51JuohZZ2xe76l77NYKr1Sq/LXrnIXX40HIbeVh7fzsIF7U9uU+o2 GoJurmpXcjfNhHvJCJoxM9Wsus75T5G9exLCyCfI+YONEtPcLUXNDJpqKZsBz2NSJeTI 6tK6Ix37VgCJnnzJyKCYHORJR8rCJ0W7JczGHmGXMhFOplnNdJ+HbolSO47wgoDKVhRt DXWw== 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=kZooCps2CA0nExNO1SPQAcydJuJqvSkB9fLTW++r/Qz/K1WpD5t7K9cd/RCb574fwX 3ddpj96RTu+PnFM6RZqh8KBV45zbyLeWqCm3QoQyhAWga7iR2jEb4Mcwb3j4rxZoGmCS 0Bc8hyeM9gY0hdI+HBm2OAbZPk6AvIcZErS9VxaBk1KFv0tJZzbjI4IKPJI3AzJWjs53 m9PWSBBX6exc+SSzFIurSRZ38ka8djv7Qp2OEoSks9s4PmQStwcB4udIB+sClTVq9UVU yIFqmMJmFJOCKHYVD0Dr3CeKJP+0TFcij8nuzq1M+9VDLqcrBO1mXBmcqxoEuu5QItLn pTRQ== X-Gm-Message-State: AOAM532iicKC2g3p68+z7OEmEmpsu/zwUR3G0KhlV7q70qF9eESzxC0R 3PO3llxOZrejUx7mWOArwFujNpHR81UmIQ== X-Google-Smtp-Source: ABdhPJxocTdCyQLDTfVF7qOJXg8Lzan40hf7lAN4wA6ThA68cRg1hB/A5FOUMJA1FUpSgtfWphg3LQ== X-Received: by 2002:aa7:cb8b:0:b0:410:9aaf:2974 with SMTP id r11-20020aa7cb8b000000b004109aaf2974mr27131223edt.173.1645553555903; Tue, 22 Feb 2022 10:12:35 -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 y21sm10610153eda.38.2022.02.22.10.12.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 22 Feb 2022 10:12:35 -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 v2 17/21] net/ena: fix meta-desc DF flag setup Date: Tue, 22 Feb 2022 19:11:42 +0100 Message-Id: <20220222181146.28882-18-mk@semihalf.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220222181146.28882-1-mk@semihalf.com> References: <20220222160634.24489-1-mk@semihalf.com> <20220222181146.28882-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 18:11:43 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michal Krawczyk X-Patchwork-Id: 108026 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 28A4CA034E; Tue, 22 Feb 2022 19:14:08 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 70354426DB; Tue, 22 Feb 2022 19:12:40 +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 9645841C25 for ; Tue, 22 Feb 2022 19:12:37 +0100 (CET) Received: by mail-ej1-f49.google.com with SMTP id p15so45317616ejc.7 for ; Tue, 22 Feb 2022 10:12:37 -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=Pi6fag43QBZKjDK8FE54OTzcyGMvua8KAyAEXkkondgWHzurSgZXrNv+s0mNYTiB4F yBeoaBevl77yi3+q9LsLSKjc5OkR3z0P9WIAk1je/ZQ+3335TvFBy0gPsTMA9lgf2fNV O5rYzTzpKAp/WCf9KUM2t5sFDmWbcVQATSLz7d/o127Ps1HX1CrRorKS3XVyK3xHxJ/7 KwVYphjnBa2AJlQhn3/la/m2tj++1tq7cNRNl90MJ8k7DVCuI73WEr3n4lSSSKGZxoiu hodyk3DN3z0uSVj2bV0l28yf3SurkHzoM7pKQHIWHcAJzxpSmn1T6m1WLbYZblrLt5s/ VtBw== 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=xciaoryR0m8F/SdvxhejBZEwpYK21I+c+bMIDOQj5C4E75s26+xqTaARHsIFyqzEBC Hon2lxcpY45roI9hnhQr6Kuu67fxVox1aJjdcK2u5/ju66+q1bouhmIGvhhqgC8bI95Y xrEIesYctmZ8iD/oP8C/1pmsQga5CZgQgcOVxZkUI28l5if4MdFFut/prM855hnbCiHx 3Ezu0Zo0aHREMO00TcHgtwP5qURGO3uKxybNWPSsTrvKXUELnh4pMWAmLroh1fMYjpDT 4SCNx27A8WIyl64VqieV4cDxi5WEXx5O0l6OSzNTQubn79TEDbSLWKelV7q4EbNoK5H+ su7Q== X-Gm-Message-State: AOAM533nnXpZ1VKgk+aF8mryD+cW3ZAQ1cqa+mrpgEUeB0DAvRGrqxv4 gnw5P5ltAwFFgC+JutV7uKuMgdmO3ClN3g== X-Google-Smtp-Source: ABdhPJyGEvDBoIndd2rcpXhwiFhCTyjcmulmG5U6hUKvFlWqAWzMurdt1Cghc9xPFkyN5xyjgvMt5g== X-Received: by 2002:a17:906:b348:b0:6cf:5b66:2f80 with SMTP id cd8-20020a170906b34800b006cf5b662f80mr19619370ejb.638.1645553557102; Tue, 22 Feb 2022 10:12:37 -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 y21sm10610153eda.38.2022.02.22.10.12.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 22 Feb 2022 10:12:36 -0800 (PST) From: Michal Krawczyk To: dev@dpdk.org Cc: shaibran@amazon.com, upstream@semihalf.com, Dawid Gorecki , Michal Krawczyk Subject: [PATCH v2 18/21] net/ena: extend debug prints for invalid req ID resets Date: Tue, 22 Feb 2022 19:11:43 +0100 Message-Id: <20220222181146.28882-19-mk@semihalf.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220222181146.28882-1-mk@semihalf.com> References: <20220222160634.24489-1-mk@semihalf.com> <20220222181146.28882-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 18:11:44 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michal Krawczyk X-Patchwork-Id: 108027 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 CCD12A034E; Tue, 22 Feb 2022 19:14:14 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 6CF54426E4; Tue, 22 Feb 2022 19:12:41 +0100 (CET) Received: from mail-ej1-f51.google.com (mail-ej1-f51.google.com [209.85.218.51]) by mails.dpdk.org (Postfix) with ESMTP id DAA9541C3B for ; Tue, 22 Feb 2022 19:12:38 +0100 (CET) Received: by mail-ej1-f51.google.com with SMTP id vz16so45531368ejb.0 for ; Tue, 22 Feb 2022 10:12:38 -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=qAM+RIHIyXixGvh+lV41guPyDGREiuynnAuUCUGfLJKr2Obwzco85navkHlde1VVc8 1KLJrcjNKcGpJQcEtN+ElMEUa6WqJ4cnO3LmkLrblIXB4lu/KOzMcrLB9OyWxleEQacE Om7X3f87tsiUlyCBXNXH6WU1tDynKK3DpbGltPWAw9yhTHiWJ2TM8uBROzk2W0keR09E Wwe2sRvY45253p3butj4epPDRGejOdLmEMc0FaBvN3H5SlZadVBOfdZ/4OXqUZIDmW0L cXejDdLwC+CFL+NhSAiRy+WeZrWl97neCRREHq/7WV3iNVXgnen87gH02ELQcXUb7OdS U14A== 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=DE1hzuF4d1590ucpSwSMtql001EIEXmfSDnl2aO/nLRxKMyBCt7Ijw59VtCx3iWZdp 8oWd1sk0gFqrKiyNZGKcyyc3oUOrgnIbQXjs4bzLhI1u03K4DxSMZKUSvoCGubemb1GS PNnmph4eFisHe9Nn1ROtnPXG8ml0DF1zZWFmPNq/k31yptKPt+UBcF/S0zKxeBOEBEn+ a8MUxNjrKoY8q6CIlCcdvh+19Xjhiekhw2gWcEZEgzB+IdAHB9CxhbmITYB1baqQMTS2 VN8hI9MhRn0jacpnK2PEUqURYCJTRVrzDj554/QymEXAQELFJiopx8yXHzG2KK85bwY5 +0kw== X-Gm-Message-State: AOAM530VxJRpssSjr0h9bHBoaGK+umcp3tTu59RWkjaAqpqDdV02DNDD Vhrpa37MCDR5bpSEi21wO24uNI4gCnlvHw== X-Google-Smtp-Source: ABdhPJy30WRq0Dx/nlBoCfDwqJh0DmijzbidT2pp8Y81EX3Q/ktp994nJPsSzydwl+L80yhlQMFGlQ== X-Received: by 2002:a17:906:58b:b0:6cf:65f5:de28 with SMTP id 11-20020a170906058b00b006cf65f5de28mr19728380ejn.614.1645553558327; Tue, 22 Feb 2022 10:12:38 -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 y21sm10610153eda.38.2022.02.22.10.12.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 22 Feb 2022 10:12:37 -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 v2 19/21] net/ena: don't initialize LLQ when membar isn't exposed Date: Tue, 22 Feb 2022 19:11:44 +0100 Message-Id: <20220222181146.28882-20-mk@semihalf.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220222181146.28882-1-mk@semihalf.com> References: <20220222160634.24489-1-mk@semihalf.com> <20220222181146.28882-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 18:11:45 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michal Krawczyk X-Patchwork-Id: 108028 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 79466A034E; Tue, 22 Feb 2022 19:14:21 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 5DB88426E9; Tue, 22 Feb 2022 19:12:42 +0100 (CET) Received: from mail-ej1-f43.google.com (mail-ej1-f43.google.com [209.85.218.43]) by mails.dpdk.org (Postfix) with ESMTP id 15E1041184 for ; Tue, 22 Feb 2022 19:12:40 +0100 (CET) Received: by mail-ej1-f43.google.com with SMTP id bg10so45472037ejb.4 for ; Tue, 22 Feb 2022 10:12:40 -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=2R+AJZAfGma7fZBZysmBJjAxRkOcdofVYVvYVjIf1CnnLcRLfle6UihPzuo2IyuLZX 3etTb0PST6iilTw7irrDhPSxVSEC2As17vvY06ksJ6/Z99PcWRMAaV4ZnW8BLlGunX5T rwZVQ6SGCoxhuFzoaV4vHlGNo88GpyQRxVSL9n29zJlpLdb3ACotRSLOxHuuqQei/GK8 B/mCuKdglrkahjbrEbZBzR2hMHli6tU4U8ANb6IBtOaE+/re4OVbfYtBM3nmXG/I8eOo VTFug1dOd0rEaWQr6B5DeIXgwRebZI1pUAVIyvsulhKXP6k45cVPboyWH3IG0ol9xgdL iIhw== 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=Zb2JVW3d7nktBwZ1c9oCi2FrbZW00g69qQAanmenOfl/waEc78KhgaH7Ar/so0oljq suQ8fL18Ulsnpqy9PR5XsC7EB5WwTyJb4bxtrpSgZspfN7SiHw7qYXW1dVa+YknpmejE 0E51K53Mu37yvCcIfxcwLW/tDlLF9QlIPLKPeGciTVo4GjoSiO14rITjXdQbMaHdA3bB hW1LnXNO0JT50u3HiDjsVtxlfFZEtJCl7Tv372Wt01E/5k23mfFl7VLYteffv0SgImYy fDpEAIj76WgPtaJoVsOKw60IVV80OSqgYYgaMqTCHegG/Ju80GJBbEO91jbyB2PMklye lSdA== X-Gm-Message-State: AOAM532axv1S34fnfF14ttkLwC7Lkkb5AGNOl33cl8e395ECfQP/3dv9 9qKRITOzvk4iE1J+oHQsTxjslIIxmECQAA== X-Google-Smtp-Source: ABdhPJwsGFsuBfTAJbZyBNXkPsiRyuDgMy60nSMQ5twEywMxvN9t7NMVAQ2AyXptTyNEoUsz4z9MWw== X-Received: by 2002:a17:906:8681:b0:6ce:d45f:1689 with SMTP id g1-20020a170906868100b006ced45f1689mr19874240ejx.183.1645553559474; Tue, 22 Feb 2022 10:12:39 -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 y21sm10610153eda.38.2022.02.22.10.12.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 22 Feb 2022 10:12:38 -0800 (PST) From: Michal Krawczyk To: dev@dpdk.org Cc: shaibran@amazon.com, upstream@semihalf.com, Michal Krawczyk , stable@dpdk.org Subject: [PATCH v2 20/21] net/ena: don't indicate bad csum for L4 csum error Date: Tue, 22 Feb 2022 19:11:45 +0100 Message-Id: <20220222181146.28882-21-mk@semihalf.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220222181146.28882-1-mk@semihalf.com> References: <20220222160634.24489-1-mk@semihalf.com> <20220222181146.28882-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 18:11:46 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michal Krawczyk X-Patchwork-Id: 108029 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 DE05EA034E; Tue, 22 Feb 2022 19:14:27 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 47F09426EE; Tue, 22 Feb 2022 19:12:44 +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 50D26426E1 for ; Tue, 22 Feb 2022 19:12:41 +0100 (CET) Received: by mail-ed1-f54.google.com with SMTP id i11so37235917eda.9 for ; Tue, 22 Feb 2022 10:12:41 -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=1rpEkinBgMyAbe8kqNumamaH66q+2XXYF3kY/uRAXOGMIqzbf0DzDRXPKWbmzdvtmj vzUHbMRNTKc7j7HdSspE0vKabbQqXyUAzgzFG3VRV37yj5OQPu1D8YLWQaKjlq+ugoVt tVgpN03fDLWS23QsbF5IqIV25I4bxrzlO+uj13XlXUM2dQ48dElP3UvUBwhDuLZyxZ9X zIsVpm9vSk7EiB9Dwwx/BcYp6OA+NmKM/Ip+VJyjjVDM4xeuW/b4QLA0BBr5jC7UOsHu rqg2IwgjMw0UMQ181az0KF9S+5iN0DtSqp9z142RpNw4LxEejIqIjvCB8Q/YBfAXUxp9 JbWw== 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=Vg+Qs8lcLqUUdjNgRPE78PGX0K1OwP00MqOCCXakje54YMkHfZT2NDJoT7/FIxnJ4f cKYGKnKsR5k0x8cHszmOs+sJgprpGlNWFwkS5aaGGb7/304cOvIsucBHdvmvKyVNoD8G PwqmkBA8h96IgIU8ziHPR8etSkAb+1hUx2786DpameXfgci6C8gcVdXeZzcdXoflHJmN FFxSOGV7q8PX44vhQSBMvQDBaKPed79b5ec8cYGqtb/nBB9dZEHA779MqclqsokdbHLC 9aRV+PW2B2JFTk9thO+ygQOWYNG8LT1e2AqdHgMiSZfq21DJnE5ckrvUy5DjcDKDhaT2 qOBw== X-Gm-Message-State: AOAM533PMgc2pA4g5XibfBrdSBxvS/VdH6/Riz6sQ5z6hRQq3TsAd6Ni UJ6j717KlL3ZyoOWY0Wf6dRL5xGGY1DDgg== X-Google-Smtp-Source: ABdhPJxnyHS5saD/MXhnh9zeaoX1dvPMRko8KQ8Yp3jq1oJI+MOiyI8rykA9Hrwfp74UO4avohK9BA== X-Received: by 2002:aa7:c0d0:0:b0:410:d576:8808 with SMTP id j16-20020aa7c0d0000000b00410d5768808mr27913873edp.340.1645553560638; Tue, 22 Feb 2022 10:12:40 -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 y21sm10610153eda.38.2022.02.22.10.12.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 22 Feb 2022 10:12:40 -0800 (PST) From: Michal Krawczyk To: dev@dpdk.org Cc: shaibran@amazon.com, upstream@semihalf.com, Michal Krawczyk Subject: [PATCH v2 21/21] net/ena: update version to 2.6.0 Date: Tue, 22 Feb 2022 19:11:46 +0100 Message-Id: <20220222181146.28882-22-mk@semihalf.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220222181146.28882-1-mk@semihalf.com> References: <20220222160634.24489-1-mk@semihalf.com> <20220222181146.28882-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)