From patchwork Wed Feb 23 12:19:24 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michal Krawczyk X-Patchwork-Id: 108145 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 A3CD9A034C; Wed, 23 Feb 2022 13:20:35 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id E347F426DF; Wed, 23 Feb 2022 13:20: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 4FBBB426DB for ; Wed, 23 Feb 2022 13:20:31 +0100 (CET) Received: by mail-ej1-f54.google.com with SMTP id r13so28945077ejd.5 for ; Wed, 23 Feb 2022 04:20: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=DFNRmiRF+y9vTmHRhvXJxZb99Srt0d6XMoW/HeM5gG8=; b=2XVAe/KocCI9bHRPTDE8NijAxsimO9Opzb7MuLiXCWSAqE/ev9mL71vgERA+c1Ixtc 6O8LBRAapEpdjxxH8TzG/Lpb2IX6TEUBcT1AZYgJbtftsFZzpnfURhQ8IXn+TvrOdudz Mr1I/vK0hErrJmtqrUN/1GLaOeAfGEGUd8gtzQ1rQdC3Ov04isCjlosFUlSye+ICCVyG NkhYJMvKiE1sBUrGJLSph4JuyzrtlmbOIVHHKFc27vdt7i2SDOjz4ynuNUFirmWcXV6s +twFTfqkIEKSF2T5ERLH7QhhgbloXH8gjARKdDpBYTZLt0HYMaiB9BPIVhEThWVJAHQU bkoA== 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=DFNRmiRF+y9vTmHRhvXJxZb99Srt0d6XMoW/HeM5gG8=; b=LOhmmNoLM3ZbhyHeL0a+OJs697FHUgKTok33aZIWEkUVkMI8D3OzARcIykvBkla+qw laSxiSO8NZdmebnSJcJo1m2jX0zrceUIkbcalD+cBp0C+F6s4qaQzbtH9IWZNLPE5Syq 5MffMUDRpRk+x4dB2OOXhpNdHZypVyN7FFKPkFeGIXQoLLQOIdOoz9Se+ygz59iaqT6h FXO74VdDfSRw13MNQZCuAKjg8QcQebjKXt2BW5lUIwTRc30/uuvESbFo7C8Mv9yKCr9f jOzOrIDVvFGW7mRrqYuTTWSAyK0JfE8m8S2LY8g8JFuQGEdabK/5QbQ/rrtB9A5+sWiV wFjw== X-Gm-Message-State: AOAM532LrKDHFbt5iN2Ffz1U76v9viNLgLxed8ff4YzGHEPY40lXEVwV YBHsP7CILpnjusAMxTMDGUdDwsg6j0X3Qg== X-Google-Smtp-Source: ABdhPJwG4q4vFxeyXy1oRkrE1et5AshFLr932s1sN87D2XaJDCYrMJDh9BA5qZ24SGCl2r6Sjk1jkg== X-Received: by 2002:a17:907:35cf:b0:6cc:e088:9380 with SMTP id ap15-20020a17090735cf00b006cce0889380mr22806674ejc.599.1645618830658; Wed, 23 Feb 2022 04:20: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 v12sm11629224edr.8.2022.02.23.04.20.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 23 Feb 2022 04:20:30 -0800 (PST) From: Michal Krawczyk To: dev@dpdk.org Cc: ferruh.yigit@intel.com, shaibran@amazon.com, upstream@semihalf.com, Michal Krawczyk , Artur Rojek , Dawid Gorecki , Igor Chauskin Subject: [PATCH v3 01/21] net/ena: remove linearization function Date: Wed, 23 Feb 2022 13:19:24 +0100 Message-Id: <20220223121944.24156-2-mk@semihalf.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220223121944.24156-1-mk@semihalf.com> References: <20220222181146.28882-1-mk@semihalf.com> <20220223121944.24156-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 Wed Feb 23 12:19:25 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Michal Krawczyk X-Patchwork-Id: 108146 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 4B240A034C; Wed, 23 Feb 2022 13:20:40 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id C43B8426E1; Wed, 23 Feb 2022 13:20:35 +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 8AF79426DF for ; Wed, 23 Feb 2022 13:20:32 +0100 (CET) Received: by mail-ej1-f53.google.com with SMTP id r13so28945275ejd.5 for ; Wed, 23 Feb 2022 04:20: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=7KiXXJkZFs2qCSF+Mclhm1PBHziNSclPNxIDnRkxyaY=; b=ovm7hZxfwFdv0pSqxU/vr9xjmgABcutct/3fFNH/B3OOOqEyWMu1kNOAuo7XWO3NJN JunA7T8qOiwdsiTUmL9KBoJekuBy11Jhs8TeArrZXiutGdtZVCEpxMnLY79TZNJ/QpGV rUY0QaHdygkyJeuzS4HwpCdJhRlS8Oe75o6e6wuFdMzFI2eoUVHIllGbwOEyQALejzdo +lSBhMr/ht85OPm6bRXTrcYH4aAm+mNWJYH9nRhuW/6ian+HWYAYhGvmHbCXVGpa1e1X X1I30neWpqY/hrybm0F1YN+YJZS5vsDnu3OMVXQODwe8Y9glAYJ52JbButcrSR5KnWK+ 8Uxw== 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=Cvs7t4EimyLFAPZ+EvnJMSDOu4JRk4LFKfidHdylNsxPI8Ka8iXrFTxsAWtxqDPqHO dSt8V6U7HMESMSIUpYsm1SQAjcwmi3cCwzzB7YT2lHHZYF55qA3hDTNl6T+jTiQBhgV/ YtyqHmtteIQ4N0vN+b/G9ylIjDgCst9kACqFYWMiwzIENNeRi5RsGxcMfrMxPhoJdKMa Hv6i2GmuCpj9FU159LyvtvTAQ+hJZuCyvywFa1AtjVL2uXQTa+DEL2agU/zHERBmQCxH /sZMIPchC5YMl+CZduv8OQmAUCvafUlnX7UdmcCKLes73TZbngx0uvlSWKD1QU39lczo fgLw== X-Gm-Message-State: AOAM531odsftMqnEvwS1a47AO9cMhXR/BW8AWPU423zbUNqG6UDxus2l hiJ1PH+fV8wIQ76emPeZbg2qCgURlgv7BA== X-Google-Smtp-Source: ABdhPJyVPaRwPxD3AnT1TaYcheazEw/wffFD1R3o3pQHbaGkHjmJTHg3Kvw/Do03WaNZMXo7cStUNg== X-Received: by 2002:a17:906:2695:b0:6ce:b94d:9f07 with SMTP id t21-20020a170906269500b006ceb94d9f07mr23494193ejc.297.1645618831858; Wed, 23 Feb 2022 04:20: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 v12sm11629224edr.8.2022.02.23.04.20.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 23 Feb 2022 04:20:31 -0800 (PST) From: Michal Krawczyk To: dev@dpdk.org Cc: ferruh.yigit@intel.com, shaibran@amazon.com, upstream@semihalf.com, Michal Krawczyk , Dawid Gorecki Subject: [PATCH v3 02/21] net/ena: add assertion on Tx info mbuf Date: Wed, 23 Feb 2022 13:19:25 +0100 Message-Id: <20220223121944.24156-3-mk@semihalf.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220223121944.24156-1-mk@semihalf.com> References: <20220222181146.28882-1-mk@semihalf.com> <20220223121944.24156-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 Wed Feb 23 12:19: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: 108147 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 70AC8A034C; Wed, 23 Feb 2022 13:20:45 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id AEA8A426EB; Wed, 23 Feb 2022 13:20:36 +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 08897426E5 for ; Wed, 23 Feb 2022 13:20:34 +0100 (CET) Received: by mail-ej1-f45.google.com with SMTP id gb39so52143017ejc.1 for ; Wed, 23 Feb 2022 04:20:34 -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=RjN6ygClcc0MLU+m3QI0aoZ3BljxTCYZvtHrmcLbV+Yf0qc1Goqq2eg3jH2it1x+q7 2yTAXZig6Embj1M0gD7rlsnZjJfOw2Y7PdybC78nYk6PGLzH25SEsru4V17IsaBYMol+ TIw+ehsNVAZX4xbwsb4PfygHrm4dAuD/4H0nJqp4ZXBEqaufbgLGy22xDVaqLDXdf6aD ISA3PqPxguWFx7AvXkTBdb3nJmBLqybecbmDcAXOlUOwnLVzS4X07rFmmVgbMqKjIwjv 0ctH6N+xIE2Os8Z+o47Utdv5dXSqtzyAIj9SFQPRHX+M5n1T12Jp072OcK4z92gVUILU rYKg== 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=OYAXF78z7XpPFR8DoYf3NfhdCHkVhimaKpfA+GifJlGOSHA6iZknAAT/xT7UD8i2h0 L7q0lKLMMiRhOplOx2nwcyQ7Ojk5G+eAVgwcSMvhYS8m2Ms3Lfk5ySFFgSut8T2BBLD9 cct1wlK1kXgRLjui2RNx+cVIXdx3id5ipIoKjOnaIN/NwljagwuoHY+b8UcK3BN6V6d2 mmx+Mx56kIUVAJRO608wPd0fICTNnnSE8I/rr+AIXx9hKGDM8Oa6icLAnIA1OZYprCZg 3v/QbdqjgnYKp6rPJwDQ+8HzDNYruPy9GiIfugWH9dqRBLi3D6J3qIyz0i7lb2K+7fGo eotg== X-Gm-Message-State: AOAM530oGY9411Imr2/Rykrhsu4mKzzOsLBO4x7z1CkBhZWVDwQTO2xo SOd5zs9Hsw+ZBXONQIo/S7WP4ADHOJnJFA== X-Google-Smtp-Source: ABdhPJwypoJG/wPdmO4brJNMJhdB5iSPC+ilTEM1rv4NRvFqNv0cxhkVM+pgU35ta07QsZrxGrCo/A== X-Received: by 2002:a17:907:3115:b0:6b5:6ebd:d785 with SMTP id wl21-20020a170907311500b006b56ebdd785mr23086905ejb.592.1645618833442; Wed, 23 Feb 2022 04:20: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 v12sm11629224edr.8.2022.02.23.04.20.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 23 Feb 2022 04:20:32 -0800 (PST) From: Michal Krawczyk To: dev@dpdk.org Cc: ferruh.yigit@intel.com, shaibran@amazon.com, upstream@semihalf.com, Michal Krawczyk , Artur Rojek , Dawid Gorecki , Igor Chauskin Subject: [PATCH v3 03/21] net/ena: remove unused enumeration Date: Wed, 23 Feb 2022 13:19:26 +0100 Message-Id: <20220223121944.24156-4-mk@semihalf.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220223121944.24156-1-mk@semihalf.com> References: <20220222181146.28882-1-mk@semihalf.com> <20220223121944.24156-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 Wed Feb 23 12:19: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: 108148 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 77901A034C; Wed, 23 Feb 2022 13:20:50 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 9F438426EC; Wed, 23 Feb 2022 13:20:38 +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 64E3041C27 for ; Wed, 23 Feb 2022 13:20:35 +0100 (CET) Received: by mail-ej1-f50.google.com with SMTP id gb39so52143158ejc.1 for ; Wed, 23 Feb 2022 04:20:35 -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=aZoOC3m+JZrLcZ9go46CyK85KWWcV8Be7KawNJ7y7ZHYogyN64pyPZbgstgQUu8z3P TXX+QSfFTmOomrJtHfqnGSgYTmegW71bINwZIjTdnXwjyoHcNENLMz/p+X4JmyhNtVBD Fvo3jEn+KM7wFe0IILjlcQ+3nvqmY97BLy9+AWkDLqiWEtoqC3Ajn38oB8vJQTpUBKbV zGIEvfnLqqQ6B3ezXnTraotdIx5UwcRR9ju3zs6pXbvrbaacPhjArBUXsINXqTD+Pj8w ecneo+moigA8jhpudHaBvyeeorY/RXbsxzP7GUrlG2J3j2XgJJWgO0wsqpbTAeBpcjFm nlkQ== 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=QeHvO0wbqOC0JXcKmwGLhvfQqqeLkT0QAbONBNiglV0luCGejJeTubcmP+zVsdTtP4 W8cYWhVr6G/L5YbThd/GZzG9ZZWyn/kXNJmWaoJ0cjcQmgmijRBl49t4qEsLw/TOPjxX YiKAwFiO75c4wrPVdFcQhvGifOF7pqwP+VSrxXM/gwzvlUuNI3Y0XGmxZLwMCpxAVc68 CLDGfsVH/v0G7aB1NYwldoV+VYAyr+yALjFVjPyB3V1YC6NBgNR3uVfDNzg4rp4ERnd1 mbPLVP8iy7le+oW9NmD6NNyvZZENYo9lsiTRIp1YMSgKSOw4nUpzYebjvS6xDVfGf8KK GQDQ== X-Gm-Message-State: AOAM533h5Rn2gK2ib8RGCf6ClUCRBXEOh2T8iUrf/pScakkmAamorocL 8kl1kftBW0IBRDmsdvlz2XonUW9y+OeweQ== X-Google-Smtp-Source: ABdhPJynWQBD2I4FS9GM13gpOFwVCdob2VMQiVnhQjmoDNXdAlqbmijrtxuro/T+bVK6x1YN3wEaoQ== X-Received: by 2002:a17:906:4a96:b0:6c5:5ea9:5366 with SMTP id x22-20020a1709064a9600b006c55ea95366mr22629106eju.473.1645618834792; Wed, 23 Feb 2022 04:20: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 v12sm11629224edr.8.2022.02.23.04.20.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 23 Feb 2022 04:20:34 -0800 (PST) From: Michal Krawczyk To: dev@dpdk.org Cc: ferruh.yigit@intel.com, shaibran@amazon.com, upstream@semihalf.com, Michal Krawczyk , Artur Rojek , Dawid Gorecki , Igor Chauskin Subject: [PATCH v3 04/21] net/ena: remove unused offloads variables Date: Wed, 23 Feb 2022 13:19:27 +0100 Message-Id: <20220223121944.24156-5-mk@semihalf.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220223121944.24156-1-mk@semihalf.com> References: <20220222181146.28882-1-mk@semihalf.com> <20220223121944.24156-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 Wed Feb 23 12:19: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: 108149 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 0EB0BA034C; Wed, 23 Feb 2022 13:20:56 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 8F3B0426F3; Wed, 23 Feb 2022 13:20:39 +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 9BCCB426E9 for ; Wed, 23 Feb 2022 13:20:36 +0100 (CET) Received: by mail-ed1-f54.google.com with SMTP id w3so43895518edu.8 for ; Wed, 23 Feb 2022 04:20: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=R/bZXZOrNdEroUUfKqChZiCQ8bICy5/4sRq780M3NLw=; b=EgVFopF3PzoOuc4sDMMuhFv9lhv0Bu5PoWD8ZGz/UVOviBt2ZUAdHL4Ja3dORjOPEv vectFWBQ1z3nv8QBcjLMxZy7kQwSgpx3Wwn3p3009NjQ+EO8ErytH+I1fd24g9aWsS1K OIBmmwFvAvyOdDR440JBtYQQaMUBlpJcN+8FtF6Ui9AJY63E9+3tsQ8MO3tqzHFTycvh BqBp6pELWkFiBopdd+jwLttAtN/WNZuU4WM6C9RhHIdoYgi2mC0E7Ph97N6VbVEoaxmq 3dy2WYLKZYx1wIprNN1CS/thWV4xzgeFVFXuS5eoxgXcL2k27etpqxzRbaWjqrC+9tqV g51w== 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=R/bZXZOrNdEroUUfKqChZiCQ8bICy5/4sRq780M3NLw=; b=AOvfBxtjiY6JyFJ4KTxJtC6OLq3u7QGn2cc2yopPK+ZxjWWHP6vU2hA2U49N6Lk0YT 8hVTKk9BoQcuQ7j6EKYS8R+ResQAETFi1vrVwCZZv2Yn4+ilvYluX9zfd0aSc7UK5O9d RacyBmJU1H7NbeWFaje2izcOHf58hel1bt129QrXmnihtYSM9orwYOMrctT7WnKwKUD6 3mKmdn1yKKGfinAkmSK2SjbEFG/gsSD6KFpmYp1nokdO0Y2RRWjjq55c5A8DH2CMhhzV yC7/m/wkMfWnM1SqWMyM0seUKdsbBwnQ0Z+iQ9s0b6SlX+KGRl6AdgUpJ4LyObS+aa6Y wy8Q== X-Gm-Message-State: AOAM533PtTy4FClZ7ATjeIIDEjXbzWuKH45rNMYuyEjtU5TA8Wu1fx8x YC3xCSTkwEiuXNeCK3L4dKqMa9vCfK+DBg== X-Google-Smtp-Source: ABdhPJzAOLKmM+cQ/t5K7pQxVOJGGwp/Co2YJQ6M4L5kCBnUhgf++71y3XnCpT+2CaKCx339VMPbLA== X-Received: by 2002:a05:6402:524a:b0:410:f090:6388 with SMTP id t10-20020a056402524a00b00410f0906388mr30283919edd.26.1645618836023; Wed, 23 Feb 2022 04:20:36 -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 v12sm11629224edr.8.2022.02.23.04.20.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 23 Feb 2022 04:20:35 -0800 (PST) From: Michal Krawczyk To: dev@dpdk.org Cc: ferruh.yigit@intel.com, shaibran@amazon.com, upstream@semihalf.com, Michal Krawczyk , Dawid Gorecki Subject: [PATCH v3 05/21] net/ena: add extra Rx checksum related xstats Date: Wed, 23 Feb 2022 13:19:28 +0100 Message-Id: <20220223121944.24156-6-mk@semihalf.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220223121944.24156-1-mk@semihalf.com> References: <20220222181146.28882-1-mk@semihalf.com> <20220223121944.24156-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 74965ebd56..f6b881b8b4 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 Wed Feb 23 12:19: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: 108150 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 82401A034C; Wed, 23 Feb 2022 13:21:01 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 70681426F7; Wed, 23 Feb 2022 13:20:41 +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 E425E426EE for ; Wed, 23 Feb 2022 13:20:37 +0100 (CET) Received: by mail-ej1-f48.google.com with SMTP id p9so52008379ejd.6 for ; Wed, 23 Feb 2022 04:20: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=xVT1jcdr+l3hdpgtdJBwoRFtWY9dpQn3pi+LhmuF35s=; b=keLrYQALPTNRzXUxAkIuD5Jm50MYWpbYmiRDMJsu6d1aLElQDlJrU2tuqbo0/kTxdy sBhPOA50/N9xdPBsJDTQ3LQ41uRoQM0b3YJ7Mr6SSQxJ+z1BXQvGoXCXhDeVXrlk6Kyp gHnJp9C7yDZ1X2bLOPjL666gNYvICUzG5BkK0YS5qYA5h9uH6Jh8Xe8p6Y+nwdIlC1Dg gexLfbG2KyQi2FPv5yAZWb/vxYgAKmpGwZrGxFWPZ+qbArkp08CRsBY9bDeF7+mPLfoX 6j5M205+QBZVcQvy3TzUejCe0M8MOTf3oW/3/7OJsziiaA1+ajNC/i2lmVp45Y+1rBtC r/7Q== 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=xVT1jcdr+l3hdpgtdJBwoRFtWY9dpQn3pi+LhmuF35s=; b=Jzv94dsYn8BvGwInn+Nrv8kvqLHgtQ93f8SbTDGvzLc8JPfM2vf1mwFUknztC7lACO f9X+SAqi/QyiR1cvj2EVATefJr6jejaF/TUg20xJSErFGrm4KQ69C1NXoWVWkx1yVaSk 2BvIRKLUGLfwpc2DnD+XFsMu7vU4RSibrbQZe3gyrvMi6sY+IKxFiSW/Hz/PMIaX5hSc BN44DbRIb/ouSbSVjuvg5QIf8S8GAZ8zF7O8TEK6e+79WiO2Ju/+xCLgrj5XFLnCvqmZ QMSLCVJiVo7zivrx+7lW9L1BAf7yVUN6WxIWhF7QhZ3gQJSM7I8sVndL5S7bDDPEs5pH Pt5g== X-Gm-Message-State: AOAM533cualn/H93I8f/SeDk/Y9HXF40KD+ilUDa7rE4gpB/Cw/A/3mz QfhbXrrPjcUPMJqMqoOCS3oE9QDW6PKkDQ== X-Google-Smtp-Source: ABdhPJy9Fvkzr3+6sotyNGpDoPOlnxkm4Jpy9OaMLzs21gbeNhA+vwaLW864gZI2pan2W8lVsS0DQw== X-Received: by 2002:a17:906:2846:b0:6ce:21cd:5398 with SMTP id s6-20020a170906284600b006ce21cd5398mr23292880ejc.49.1645618837218; Wed, 23 Feb 2022 04:20: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 v12sm11629224edr.8.2022.02.23.04.20.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 23 Feb 2022 04:20:36 -0800 (PST) From: Michal Krawczyk To: dev@dpdk.org Cc: ferruh.yigit@intel.com, shaibran@amazon.com, upstream@semihalf.com, Michal Krawczyk , Dawid Gorecki Subject: [PATCH v3 06/21] net/ena: make LSC configurable Date: Wed, 23 Feb 2022 13:19:29 +0100 Message-Id: <20220223121944.24156-7-mk@semihalf.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220223121944.24156-1-mk@semihalf.com> References: <20220222181146.28882-1-mk@semihalf.com> <20220223121944.24156-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 f6b881b8b4..c8e38d4c70 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 Wed Feb 23 12:19: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: 108151 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 00AF4A034C; Wed, 23 Feb 2022 13:21:08 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 93F17426FF; Wed, 23 Feb 2022 13:20:42 +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 13979426F0 for ; Wed, 23 Feb 2022 13:20:39 +0100 (CET) Received: by mail-ej1-f42.google.com with SMTP id gb39so52143411ejc.1 for ; Wed, 23 Feb 2022 04:20:39 -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=PDzJUaGzEyET9nF+Qdf0eNoXJOFdkr798o5yW1nOxCaEuqjF7nIc1JUc1JF67p+JwS hplXEPDU2L7cC/GRGdhYhTGmL1sJptJoT6CosVzL9BCpfsPkLcLgBS/sWormiYaovkXF habUEMtirb7e9f8UDR34WeOu3mFVG/dmiuzwFT2Euvq3yuBp8+vrWCNbQaPj45ow//ko Y1CmrJboIEklTJsBqsgGYLAfE6j8fuL2hDWFyTxCoETlV5iSGlcEtjdphv7uDTMCBUQS TavP0RacZyGslCpWLjxueOCbuWmit8cYzwweVQL6m+c7U6BXhMS3JzmgHq07ODBZ/Rzw W0eQ== 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=ShV216q8NGPWDILXJ1s75gLp0FZIbzTXVlJBiZGMcoykNIVSi6hTgej+3Pm8TOGrCt IQE0i1ZUIZldb3IzGpC+r6N2heGOHzCGFEQHXvGqu+Us9NLV/EgHZB1pOJYctW86l4lu ur8quU4LLPYhxwFM73Dm1AuSMLpPPd2WluXfqohr2uohpxrBr5WXUZ3fFOZXe0CTPA6V 8gKMgqC+DtbDqk9ypMiLr5claCeYjhCigZ2H7jEeeSrAZWDCHC1i/szHcu3ic4jZRRQl hS67sNXnVVa8Eey3I85HwJFMd+Eb4IbtNKe/+M2pe+YPgtTGN+gT4ec7o7neO+DeroYS nc9Q== X-Gm-Message-State: AOAM531JnndvmmJz0P3vqe9jsHTlPQCu1G9PIGBbhQDh4b77tNz+i6AA 5mfEgSrO1D7aDX4WeOSMOcaP5aRt6s27gA== X-Google-Smtp-Source: ABdhPJzOClNUx397NtNzhvHERWXyb5B6Kj8zmhPG0gqp57pV0kQml46IR5vBz+1aDvGoUgucJEZlVA== X-Received: by 2002:a17:906:6d0b:b0:6d1:d64e:3142 with SMTP id m11-20020a1709066d0b00b006d1d64e3142mr8299075ejr.631.1645618838503; Wed, 23 Feb 2022 04:20: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 v12sm11629224edr.8.2022.02.23.04.20.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 23 Feb 2022 04:20:37 -0800 (PST) From: Michal Krawczyk To: dev@dpdk.org Cc: ferruh.yigit@intel.com, shaibran@amazon.com, upstream@semihalf.com, Michal Krawczyk , stable@dpdk.org Subject: [PATCH v3 07/21] net/ena: skip timer if the reset is triggered Date: Wed, 23 Feb 2022 13:19:30 +0100 Message-Id: <20220223121944.24156-8-mk@semihalf.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220223121944.24156-1-mk@semihalf.com> References: <20220222181146.28882-1-mk@semihalf.com> <20220223121944.24156-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 Wed Feb 23 12:19: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: 108152 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 6CEDAA034C; Wed, 23 Feb 2022 13:21:13 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id BBD1442703; Wed, 23 Feb 2022 13:20:43 +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 1B5B5426EE for ; Wed, 23 Feb 2022 13:20:40 +0100 (CET) Received: by mail-ej1-f45.google.com with SMTP id lw4so52030830ejb.12 for ; Wed, 23 Feb 2022 04:20: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=kJsrYm2uvyrl1AjemrWrKMybiEz+usep4Zai6FZc+2s=; b=LmTPfjuC6FXcUW/8PMEUaugXkEMxa1vK6Moy+ePq3zq9wERN8nDTLOHraossNiaDrS pDD8e1izKqZ0gEcj6seL6Vi7aN/pM9SnidfP4rEr43uDIL+hpDCs9Fe7WigiJyhH95Gh yf5o3VOD84ncRbhHmLqxzGahWaOUGb3tsZ7mNqOu4WfxyMeNlMdxYhmMvYA6uhLvaiUN 75tNzqXFR5fo2BLqsfnc+DE6AX4OrF1q1144ijAuAfqvuVAOGDvScCkFQ780+peRY3IF NhRTA/eWzsS6NCXpz97clvTJnNq4I6NZH87n+CGeAyOWCIfj3GnHHOCbzMNr6CyoyDq0 aMNg== 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=ShZFW4WGD2LhD+WYV3UqJ1RqLbvQdUD71kB8ACHEiJCXmmUWGTcsTcJPRF4uPkkYhO LothdS0U85HXAimGfW12MjDDbOAcAx6q0nBWGEtpcn+6VwymlBZW+M8Z5z99tvW6GvRN d2bt5G4QdiCcmvP0AQbKMVpdw2RtIsgMwdItNq1eDRGXSdr7xrWUmeIBO6+UrYgHT8Aj tBsjkwVvbmxTO6WrRC1PKbUsAu31TN+F/ADw2BUuuGdayVNL9HaKJCAiNLD5fCkb+Isg yWHfb5aqDQ48IFkGwTb4IJ5zi0ruT6bqm1AQke0KcWe1JcyJCdPLMP37chEtD6Pgt6Dt vrYg== X-Gm-Message-State: AOAM530KMuJPotjuHsFhPSTNucXpaUqNDs2ogQ62POlMazkvNtH8bRw+ FnXqbUmK9HZRcS3Rvj0xnM5kH+p+wSlhsQ== X-Google-Smtp-Source: ABdhPJwSdYWkmf10AtRQEewOOOwB9uZtShZf/PXuYxSgvbLqXLehgBAKEBxMsdqYTgfmEHKP10S0yw== X-Received: by 2002:a17:907:2bc4:b0:6ce:88ec:3acd with SMTP id gv4-20020a1709072bc400b006ce88ec3acdmr22550016ejc.300.1645618839573; Wed, 23 Feb 2022 04:20: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 v12sm11629224edr.8.2022.02.23.04.20.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 23 Feb 2022 04:20:39 -0800 (PST) From: Michal Krawczyk To: dev@dpdk.org Cc: ferruh.yigit@intel.com, shaibran@amazon.com, upstream@semihalf.com, Michal Krawczyk , Dawid Gorecki Subject: [PATCH v3 08/21] net/ena: perform Tx cleanup before sending pkts Date: Wed, 23 Feb 2022 13:19:31 +0100 Message-Id: <20220223121944.24156-9-mk@semihalf.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220223121944.24156-1-mk@semihalf.com> References: <20220222181146.28882-1-mk@semihalf.com> <20220223121944.24156-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 Wed Feb 23 12:19: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: 108153 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 CC0B9A034C; Wed, 23 Feb 2022 13:21:20 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id EDD844270E; Wed, 23 Feb 2022 13:20:44 +0100 (CET) Received: from mail-ed1-f47.google.com (mail-ed1-f47.google.com [209.85.208.47]) by mails.dpdk.org (Postfix) with ESMTP id 4038F426F4 for ; Wed, 23 Feb 2022 13:20:41 +0100 (CET) Received: by mail-ed1-f47.google.com with SMTP id m3so37886194eda.10 for ; Wed, 23 Feb 2022 04:20: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=4VKPrFiWyx32d8z/papoVusrUqw07DPcSQLxx3bCRbw=; b=6PMRUP6ZpZWVI0ZDA2zUDnSTA3Bcvn3y0rJ0Y5OMznZcmbaeLPNhkkcNXZeT3x+Jkx uq9DB/SKkDi6u03iZd4DDGfkj1JYJNexZ41uV1yBXcnnxrRgrsnOkt/nHoEKBF1Lgr0J r4PKYPk8hkL2ZiKDVnIK2QnjWr3LHsvr41zTvcnFNofTYMWiQlml1OO0njVQJwE6WOMD EtkR6C9RyNcXDtxt8bKKr4be1b0Q87TlTnEXDz1ZlNKbMlm3UpPHVfXjwo+wCh3yzK82 FrmlMEDGElTIPQUHWb2/9epoexkyxQZj64A3Tx6tdeHg+S9CrRzKz41bFVIfxinHNgTt 5ewg== 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=4VKPrFiWyx32d8z/papoVusrUqw07DPcSQLxx3bCRbw=; b=qZ5WEanQICAfbxsqEhTP9kFYf/ky5SFmgBmFgbUT3ErvJmnkrECBDs7PdzhkREVxd3 AKZUGak3QuHNCYjdjHLz7zEluPCLKwE7XoQqh1/OKUlSN0iyDLinPgvclxtdlUvbM7YU ii0DEJhgw4godNmZ1oO3l7Qye//aJcDRQagsWuEbQidqYrT1iogrhe+vZDoSB8kL18A0 VcYf2VXFgov3jglLCgmWUStTj5Kywxml84i7Aj5CitM5q6TQ9YClHWPVVIEgd920bsL+ 6T0g26dJQ5Jo4xRzBAUX0+s+xHbzAaO0y+TL9BeYkLB2bGy9OXsNmetZN/LMBKtwxPON USYw== X-Gm-Message-State: AOAM532uP8luZTM/dkwAq08Bp3X15rDnQZrnbrK/nejYz+x3atJdEUF2 9b3N4OY74uDFoCsVm3xOfJbmYBi5eGU8+Q== X-Google-Smtp-Source: ABdhPJyJmJ8bEPpD683uc6Zz2HUIOulc10/ZMK2tGeVQDqGateZyQcWYFCMCxQ40EqJ1qzbE7kigsQ== X-Received: by 2002:a05:6402:845:b0:412:ad14:863e with SMTP id b5-20020a056402084500b00412ad14863emr30166713edz.380.1645618840687; Wed, 23 Feb 2022 04:20: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 v12sm11629224edr.8.2022.02.23.04.20.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 23 Feb 2022 04:20:40 -0800 (PST) From: Michal Krawczyk To: dev@dpdk.org Cc: ferruh.yigit@intel.com, shaibran@amazon.com, upstream@semihalf.com, Michal Krawczyk , Dawid Gorecki Subject: [PATCH v3 09/21] net/ena/base: use optimized memcpy version also on Arm Date: Wed, 23 Feb 2022 13:19:32 +0100 Message-Id: <20220223121944.24156-10-mk@semihalf.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220223121944.24156-1-mk@semihalf.com> References: <20220222181146.28882-1-mk@semihalf.com> <20220223121944.24156-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 c8e38d4c70..92490afd60 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 Wed Feb 23 12:19: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: 108154 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 7735CA034C; Wed, 23 Feb 2022 13:21:26 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id D4E1942710; Wed, 23 Feb 2022 13:20:45 +0100 (CET) Received: from mail-ed1-f44.google.com (mail-ed1-f44.google.com [209.85.208.44]) by mails.dpdk.org (Postfix) with ESMTP id 03DEC42701 for ; Wed, 23 Feb 2022 13:20:43 +0100 (CET) Received: by mail-ed1-f44.google.com with SMTP id g20so2009883edw.6 for ; Wed, 23 Feb 2022 04:20:43 -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=9pLSxl4oEyC2StjHulKFJ+HYygWZP7KC51TLQ0yKdtE=; b=3fyVbKQqEiHitrfybjT9kIxRuczjPt4skWqc5XJZU1dPU3AEUK+pPxYxzmbBfyHXVu Q7ppoW3Chbnw0nxkpPSKwb4b2MJ6uonx3pKdkaQ4Hnu33eRtEmglu8784q4raB5Z3Q4c 1QixmS0qtjFED1tkNnQaANQMsm/Hxb6KcZ6Za+sMuGhEOrUjfgmbsBuqhld/4kIELSsN 2TQqsuNxGa3hdNGTNmzRNZlHUcbWGcOgU8f8ikOfTjY6hdsP4EhGLIFhBRo/YtgzhSlh NqdFp8gJCWnMBrujw18ABcN173vBNPARsFjKYwk521MOLkzf8MxNjjay0iMiPb4nozxC aBaA== 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=9pLSxl4oEyC2StjHulKFJ+HYygWZP7KC51TLQ0yKdtE=; b=Vsmyp8lvWri4vglIS4LYONu8RCLDIc0MEP7btVD4tdAXRAURB4HCLgQSlRGN5vWE7K LOSDfW4HduIdLnuWbE+QaS2SZq/8xVxneHa/f8kJuesnpUmMwXNF8FOfDI1FqVVI6MIi LOgM8d1R7i3Xc7xYHiOoAr7afWb7PyFLqN29Q2dIr613FX5o4hbrhmK5QF/5UTJzD1v6 I9xFBXxrK2vqr2792Dy60nezXcIU/q6cURtjotseoD2ZThrOIgSJQ4pVQPsQW2IIXXmq JLwNKpo8lc/VZDj5L2FzKMD4/BnPSbFXe1yWP1PETHdYQtzuMCQca2DSVvs6AecbZi9r gdWg== X-Gm-Message-State: AOAM531JbZUpzW4NvehLwFtzlyicPhJ048oEWEwCl07DIhnc5pmZgXW9 YKiEJ45/LgiD2NNydw7wHOoS/PW2gQUn5Q== X-Google-Smtp-Source: ABdhPJw3vkks6My8f7Q82td1xq7ohlo6X1xf9v/3C3pittPF2oPUlvMnopHcLgm8woLr0Rj8xjBY8Q== X-Received: by 2002:a05:6402:4245:b0:410:ee7d:8f0b with SMTP id g5-20020a056402424500b00410ee7d8f0bmr31031440edb.295.1645618841962; Wed, 23 Feb 2022 04:20:41 -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 v12sm11629224edr.8.2022.02.23.04.20.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 23 Feb 2022 04:20:41 -0800 (PST) From: Michal Krawczyk To: dev@dpdk.org Cc: ferruh.yigit@intel.com, shaibran@amazon.com, upstream@semihalf.com, Stanislaw Kardach , Michal Krawczyk , Dawid Gorecki Subject: [PATCH v3 10/21] net/ena: proxy AQ calls to primary process Date: Wed, 23 Feb 2022 13:19:33 +0100 Message-Id: <20220223121944.24156-11-mk@semihalf.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220223121944.24156-1-mk@semihalf.com> References: <20220222181146.28882-1-mk@semihalf.com> <20220223121944.24156-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 --- v3: * Fix FreeBSD build error, by changing ECOMM error to EIO. * Fix build errors with assertions enabled, by fixing the variable name. 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 92490afd60..5c2521e870 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..e36d06ba91 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. + * - -EIO: 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_rep.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 = -EIO; \ + } \ + } \ + 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 Wed Feb 23 12:19: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: 108155 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 6A202A034C; Wed, 23 Feb 2022 13:21:32 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id BF15342714; Wed, 23 Feb 2022 13:20:46 +0100 (CET) Received: from mail-ed1-f47.google.com (mail-ed1-f47.google.com [209.85.208.47]) by mails.dpdk.org (Postfix) with ESMTP id D4B2542706 for ; Wed, 23 Feb 2022 13:20:43 +0100 (CET) Received: by mail-ed1-f47.google.com with SMTP id s24so37424027edr.5 for ; Wed, 23 Feb 2022 04:20:43 -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=Fxo7IxcKEDWB42EuKQhLhyCrtwB6s6GSzxKNxi9n2xk=; b=I7PwU92xvJCxO7102Df8MncMiw7Vmm11p0+yMcweUJoCy2UGKd5t2Ur1YF5Gj+XzoI Dmetz8I4W0S8fsi3s9Mi8ueQ9xUea6s5UpxG2Gl66P3gn4Fd42DmbkN0sjIyZ7Ycc/M3 LIeduv4z8be3s0Uf+2nqbzMS1G9M+APRQwGB3nHeIEZS0tZ1M2R6BVcbWZphOv0jc0+R Kfqss2xA12DQE0rqpvVYpF+R2QasnJ6gIg4+pCFpuUuC0B72cJ9FSLnul8ijDt/BSJd7 qMfAvFmFbyFqb5Ri5qTmviB6CU4m8kqrD4BXZI7DfyzBAFKwRn3QFvIU1vEiHec4sGTh CtZQ== 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=Fxo7IxcKEDWB42EuKQhLhyCrtwB6s6GSzxKNxi9n2xk=; b=5tdpKGSkzHq/Fpp+5BCCxYKgfhnrQ7tVRGvp0rFnlluLQFOZJsgbusQQD7bIqbYwV7 O37UlMA4b6D9gJu8CBPtOCldEg1RZjnXHKFXyg0mIv5C3Nkk/hXhVg6Tzo/oKsLYcA8G sbi4IPqnnH0LuEBiHBY9SdBj5c4qPzdTN1rErySGlskTkajnAmyT1t/7r2rsKrYPFo1G FzuMBU1jCG58k5gYyPDkD7FrkjaDiKqgpbUC9RronEv9br3IDP4Xw3tcBMnNKj6PeZoR ELW1XNSMiSnlm9N2Gy1FRIfFgDpoZZ5ouA15IfOZfSggMtbrLZWM/kJi0zUYwdS1NkR+ FUiQ== X-Gm-Message-State: AOAM530TXBwAvI8eI4mS2w1We5k8eQdiY2raAQSdUXMhArFNoR6c7h6u MMR7JDAdCPG16ODL050UIZeiFqPtAVPjGA== X-Google-Smtp-Source: ABdhPJx2c/KJcEn8ecNA1gHzpr26V32FR+lv1qSw0SeyfNRUnZ2v4JEAb7xS7fmzeb+dI32E+aBlIw== X-Received: by 2002:a05:6402:37c:b0:410:eed8:a7ce with SMTP id s28-20020a056402037c00b00410eed8a7cemr30846608edw.90.1645618843361; Wed, 23 Feb 2022 04:20:43 -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 v12sm11629224edr.8.2022.02.23.04.20.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 23 Feb 2022 04:20:42 -0800 (PST) From: Michal Krawczyk To: dev@dpdk.org Cc: ferruh.yigit@intel.com, shaibran@amazon.com, upstream@semihalf.com, Stanislaw Kardach , Michal Krawczyk Subject: [PATCH v3 11/21] net/ena: enable stats get function for MP mode Date: Wed, 23 Feb 2022 13:19:34 +0100 Message-Id: <20220223121944.24156-12-mk@semihalf.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220223121944.24156-1-mk@semihalf.com> References: <20220222181146.28882-1-mk@semihalf.com> <20220223121944.24156-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 e36d06ba91..38fbe1618e 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 Wed Feb 23 12:19: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: 108156 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 AF9E2A034C; Wed, 23 Feb 2022 13:21:37 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id B78AC42718; Wed, 23 Feb 2022 13:20:47 +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 40A6A42710 for ; Wed, 23 Feb 2022 13:20:45 +0100 (CET) Received: by mail-ej1-f48.google.com with SMTP id qx21so51905898ejb.13 for ; Wed, 23 Feb 2022 04:20:45 -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=KR4XnlBZtOwubUeGx2A0muKC56XjZVs0hvjdhZzxgyI=; b=QjQMK01cpvAnNakKPG2HLr4ckU195Da1qLoY+Prg4OCpHtMtzV9kblCAroRdSW2FNu SUWMYQ5wRQL4AjKtKC/HHONdcTG6vAICCvbg7X4oMjNM8WyPSnhz1Idm3nHVG9FuLI/E 2vty9nLWB0zSLMWoTGcjjC0iMAxFCHOUOr6zgL2Vj95AaHnBWtSLLhPjL+ft/Cs++YhP Hey4RcPbz8n+hOuoHnHf4NM4sVrfe7ZviRKfZSBKJTgK7O9rcozLukHDHNeuhktlkuzk pBiq/EDKLsTjlkuB+Gy3zzZA2jtsWzbvTCIxCvlVaZhs49tnkDUKmotphTXNLrqnuii6 6HWg== 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=KR4XnlBZtOwubUeGx2A0muKC56XjZVs0hvjdhZzxgyI=; b=Jo9CdaSqLKWHaJNOeSvQ2/4qah+wKIuZAcXaPfNPM2Ypo4H8LUGqevIO2R2G31W8pZ O2BH7XtS7avgqDewcdT91OuW6Zw0OgAOMwtPSu3zO2QYfrqqlNnJIrEgEs9mqna3o0Yd /w3Smd51PmcS/DnzGihQik5AHIkZ3ggeX1/Y8cMkurQSlA4EG2S3Zx8IZ0HUlNn5OMqV RzbYoo0BDkbddIQCZ9EohXX8zSEvkMLQDtaIrwpOsfvih9KPFXY3GnZ/8srmHL6/e8pS OkshOvyNWYCzXFMg/FURaB4nkw9dYjJirwXtw2l733gj/Mv+JH//UCNjdkT2C9gz9WQs X9nQ== X-Gm-Message-State: AOAM530fnDor275OL8/xDBfB65CAMEjlINZdUy6jT2/CN4A5x7Q2YvLI zktWna3y3ss/jqGdH+cWKok4udPLWnxffg== X-Google-Smtp-Source: ABdhPJzmRuz6U9ueQNq5llDu6MaG9qqv9/8muGMHhfeV1kGFnliO1cyRZVXbFwuDijtHCo31fKEbBQ== X-Received: by 2002:a17:906:6547:b0:6bd:e2ad:8c82 with SMTP id u7-20020a170906654700b006bde2ad8c82mr22734778ejn.693.1645618844676; Wed, 23 Feb 2022 04:20:44 -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 v12sm11629224edr.8.2022.02.23.04.20.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 23 Feb 2022 04:20:43 -0800 (PST) From: Michal Krawczyk To: dev@dpdk.org Cc: ferruh.yigit@intel.com, shaibran@amazon.com, upstream@semihalf.com, Michal Krawczyk , Dawid Gorecki Subject: [PATCH v3 12/21] net/ena/base: make IO memzone unique per port Date: Wed, 23 Feb 2022 13:19:35 +0100 Message-Id: <20220223121944.24156-13-mk@semihalf.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220223121944.24156-1-mk@semihalf.com> References: <20220222181146.28882-1-mk@semihalf.com> <20220223121944.24156-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 38fbe1618e..73c1d63174 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 Wed Feb 23 12:19: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: 108157 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 01823A034C; Wed, 23 Feb 2022 13:21:43 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id B229E42720; Wed, 23 Feb 2022 13:20:48 +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 71C2B42707 for ; Wed, 23 Feb 2022 13:20:46 +0100 (CET) Received: by mail-ej1-f54.google.com with SMTP id qx21so51906037ejb.13 for ; Wed, 23 Feb 2022 04:20:46 -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=Kvo/q94g6FFx9hVpU/kyZhXkL2Ar1xJnNVGhJpFSKdM=; b=V8aHk8oOMHcrzjpRclIuszu3QHOLX+1rtDJCAMS035ubW40Urd1Xgiiup/z1PMAaU2 pPBuF1IUQ23xLLV7N1TxtjziuvfPHl1B3Uj9O6x4qxs/l4jZXdZ2Ni+dO1JOVav4vQYI ZiFetRISc1rwazhmrsGT2KCkWiubH293ueTPJbsNM/g+JHs5sbwBzL8WqsWuYCAbbNx9 41RpD1ei6FxKkr5Ru3j+VyWD/v2+e6FEg05XH/a7Zkc4ocRaT6XilKyC9jHpZm6oQr04 lqzwnb8s0syNdUdP1l0W8mMznfvgiQ4YbYWzk8Wj5dEKf0IOhw5PvnmhLRy2Myf9vOYg v6Cw== 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=Kvo/q94g6FFx9hVpU/kyZhXkL2Ar1xJnNVGhJpFSKdM=; b=O4f78Ug5BMUhJFwty30X+QRHL6pGkxhMatMRqctiU24U19xVkAns5a7HH8e8Z6RYMS D82nxRwdR8X7PZ+bpVTmLYpEGrvNlre7iAFkxR5sNa/TqwrRnAmT0ELDU5kPEMo/M3bl ExjjcT6Jd92/qinjhCA0SlFsTtg/SYDXVR/5eev6HO+dYYf6Yx8ep87GwgvlPOAKgZmJ dLQ78cB7MG/mJduYycgeWyUqAwSU3sPOA6WBq+x6yvETBZlp7JbS1QD/S0GWkUa4Ctbx a7jiPdValD/rFOkteHSVkr1UySUkGbn/ME36J154RD+Bzl3gxZUsq8QGz8c9yi12h18q 8UMQ== X-Gm-Message-State: AOAM531AzuCPPaUExpayrnQcD98LYFsxnTher7DSodauERegbz+KQfER Y6C6iB9GzvqGMAxD+ZvMu064YgJHW4nnUg== X-Google-Smtp-Source: ABdhPJwLKkAp2OHn3jqSx62Lk6QYvLcxD8ewqLozMQ6cZBHUcwnGEeYKrUySOn50+R4i1t8Xo08HVA== X-Received: by 2002:a17:906:7a04:b0:6cf:54fe:16aa with SMTP id d4-20020a1709067a0400b006cf54fe16aamr23211021ejo.513.1645618845897; Wed, 23 Feb 2022 04:20:45 -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 v12sm11629224edr.8.2022.02.23.04.20.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 23 Feb 2022 04:20:45 -0800 (PST) From: Michal Krawczyk To: dev@dpdk.org Cc: ferruh.yigit@intel.com, shaibran@amazon.com, upstream@semihalf.com, Dawid Gorecki , Michal Krawczyk Subject: [PATCH v3 13/21] net/ena: expose Tx cleanup function Date: Wed, 23 Feb 2022 13:19:36 +0100 Message-Id: <20220223121944.24156-14-mk@semihalf.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220223121944.24156-1-mk@semihalf.com> References: <20220222181146.28882-1-mk@semihalf.com> <20220223121944.24156-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 5c2521e870..95b31fc372 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 73c1d63174..5e7b964995 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 Wed Feb 23 12:19: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: 108158 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 327A7A034C; Wed, 23 Feb 2022 13:21:50 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id DCF5242725; Wed, 23 Feb 2022 13:20:50 +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 9FD4542712 for ; Wed, 23 Feb 2022 13:20:47 +0100 (CET) Received: by mail-ej1-f42.google.com with SMTP id a8so52156809ejc.8 for ; Wed, 23 Feb 2022 04:20:47 -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=I7RatoaaG8qCFu8wyXF4/qh+2AUWKO27cID1FZLJ3cg=; b=GJfCIfHbaBwPgkRFNJviPSnZYr9flpUNFz0z3McJujwSFkAdUqiHT7Ud2uB4KSC6Z8 VztbkKYxFNv1H3jWb1eovsnis/YY18TotVBvnKpVG8VtIsqILGAal2Yo+GayXnQUqoBg qS/d9jZzk1oz+RNup52ITxoWKzEQyAuQdvayFruA0sRgy84Z2ULfBFnCw82I+L/7zQFn LEnRZ/4h2+/T9+KgrwKHr0yO6Wvnt6f5T4QgQi1NGa/auIdjYz5SV2IsAvyCs2idmRvQ JZuKxdDGDbl2SxD+iV1cVSKkHHsKPTb8ffnbpN9M+yuwu/3VsnKKd46EqDBuxR1csbiH xfFw== 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=I7RatoaaG8qCFu8wyXF4/qh+2AUWKO27cID1FZLJ3cg=; b=dSDUmbYf/P0xG/FJ3iGiczPdRQ6L7WcqyemEhXBsDBmIjxW1uOCVIDmaOlFfo6SoQj KzE9niqnkkQ8AEqzpfgjsEecLYth/sAXVmfLYXoq4Q7FLmEQF26UmzyffP9/0QbNRbjJ BjldJVgNTprEUMwRgx43FidibZvzotpy3ILNS17lGGOTgwyBMtyYpzKdxFjXSnp/GpM7 OIHXY3GQpaw2JKjWeZ44u6cx2Hg4IlhH3VbYLypnpYuw8NJYlZiLWlgefpVz/ig4eHq0 zY28Cr1N9ub2YAaBSwf16+p4GoNiwKLL958hVRPOE5Okp7TIDEQ1GqQHr+gY/e4SWowT lQWg== X-Gm-Message-State: AOAM533Ar7IIjptxLww7p/+9teFsTq80DcXFnYtXUjaHJqCBruYFaMmm YNaTUJOTXrCs0kEwd0WimsId9GN6vJk+DQ== X-Google-Smtp-Source: ABdhPJzVKrf1OfIE6QQwbkVDwvDCLanks37Bz+9vr8ZryqcB6GX1PYYLUojRb0DPnY5HddUjnh/3cQ== X-Received: by 2002:a17:906:65d0:b0:6ce:29b2:bdbe with SMTP id z16-20020a17090665d000b006ce29b2bdbemr21789655ejn.572.1645618847024; Wed, 23 Feb 2022 04:20:47 -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 v12sm11629224edr.8.2022.02.23.04.20.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 23 Feb 2022 04:20:46 -0800 (PST) From: Michal Krawczyk To: dev@dpdk.org Cc: ferruh.yigit@intel.com, shaibran@amazon.com, upstream@semihalf.com, Michal Krawczyk , Dawid Gorecki Subject: [PATCH v3 14/21] net/ena: add API for probing xstat names by ID Date: Wed, 23 Feb 2022 13:19:37 +0100 Message-Id: <20220223121944.24156-15-mk@semihalf.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220223121944.24156-1-mk@semihalf.com> References: <20220222181146.28882-1-mk@semihalf.com> <20220223121944.24156-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 95b31fc372..1746abddbb 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 5e7b964995..11c9bb05e6 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 Wed Feb 23 12:19: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: 108159 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 A093EA034C; Wed, 23 Feb 2022 13:21:55 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id D5BA94272E; Wed, 23 Feb 2022 13:20:51 +0100 (CET) Received: from mail-ed1-f50.google.com (mail-ed1-f50.google.com [209.85.208.50]) by mails.dpdk.org (Postfix) with ESMTP id CF3E542709 for ; Wed, 23 Feb 2022 13:20:48 +0100 (CET) Received: by mail-ed1-f50.google.com with SMTP id z22so43841054edd.1 for ; Wed, 23 Feb 2022 04:20:48 -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=xhwsLj/xqkrRA/3nWy/nJvWCxPt4oNnsUFiHi9CBL3w=; b=cUKASpbZ6maH3pyR36kMxW+GwAX8WGvwtyPr5DripxGfuz7Ck5TO+Mn+6eYKtiW6SK 47lXc7taC2o1TbHNVOD5EU/CyhZian2kpfnkBnFXtC7HkCeeCwZDUr1zwn7wtA3dpMrz my2Fq5c//TXVDVCG76VYpTVswY7fRSYASfSobuiicLpc6emYC4zlnvY6hKa1jAa6eYM/ uhZaCnqgOHZG06tiukM40jL15u9cXlZKNrFodaAZ6cbv8ySaU/jFmyDiWaM8gccKtmWc ZUqQT+qHNG6uIoR76kfPFLsZIGvQtLKcHwiDKBWG+OaJWUj948cjwwycruSxZU/45iRK yQGw== 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=xhwsLj/xqkrRA/3nWy/nJvWCxPt4oNnsUFiHi9CBL3w=; b=O7ZI1s04vEPeE7zNSVTAtnUGQrBxhbVjeVWLw/0Jm13titzoSKOH+FGTC4lS/cXALb y1wV6BcO0gjSG5kDi1x18sc5QOzh/uVdGRvRsaIZyNJQ+SwoH5+vSw6/yL3I5vkR4q6o iJCbPzwSPUhE7UcyjC5H9aWlu3LwSIDcSmd2r6hGW3dDXa+eoeCD3Gu31Hg3Ls/LF4Uq lwtB7pIbn+8hkbgiTpaz0WHzHGBkJ0yDpH8jOVmqDAUHTMdOD0omg+t5/SKL0E6iwmVx jPVOJWJ45rOcVDof9BFj8J3HTRNmj3Z0pfeloqxBOD3v7ou9jKjikm7qBdjacdg7Hxpx V9hw== X-Gm-Message-State: AOAM531zVe3u54O1jJ3u5iZwgGmYVjyzuhY9gAgDslgV0vuA7sqc/Pwk pUqV6CGWey7NQUobS3Ocy9f6nxzyMc9dGg== X-Google-Smtp-Source: ABdhPJxZum9e3SFTFAijAH99I6F0om5QnOkr5aEjaXd5BTxlq1KRqRsxHLysCVwQKaZxqwQotrhQiA== X-Received: by 2002:a05:6402:796:b0:410:7b10:c951 with SMTP id d22-20020a056402079600b004107b10c951mr30846562edy.317.1645618848220; Wed, 23 Feb 2022 04:20:48 -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 v12sm11629224edr.8.2022.02.23.04.20.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 23 Feb 2022 04:20:47 -0800 (PST) From: Michal Krawczyk To: dev@dpdk.org Cc: ferruh.yigit@intel.com, shaibran@amazon.com, upstream@semihalf.com, Dawid Gorecki , stable@dpdk.org, Michal Krawczyk Subject: [PATCH v3 15/21] net/ena: check if reset was already triggered Date: Wed, 23 Feb 2022 13:19:38 +0100 Message-Id: <20220223121944.24156-16-mk@semihalf.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220223121944.24156-1-mk@semihalf.com> References: <20220222181146.28882-1-mk@semihalf.com> <20220223121944.24156-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 11c9bb05e6..3cdeba9fad 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 Wed Feb 23 12:19: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: 108160 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 96E37A034C; Wed, 23 Feb 2022 13:22:01 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 1912742726; Wed, 23 Feb 2022 13:20:54 +0100 (CET) Received: from mail-ej1-f44.google.com (mail-ej1-f44.google.com [209.85.218.44]) by mails.dpdk.org (Postfix) with ESMTP id 261BD426FE for ; Wed, 23 Feb 2022 13:20:50 +0100 (CET) Received: by mail-ej1-f44.google.com with SMTP id p9so52009521ejd.6 for ; Wed, 23 Feb 2022 04:20:50 -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=2n5HHJon8hGLBAiixQuAOZl6BD+0aVat5XbPEqLE+T8=; b=pt6Ul3SNeCOmct77+bWrCz/TyFVHDFKfsob3F1WpW582Nz+6kbNDGWeJyBa/iWKmBP bUDyQ4CEAlC7MmKvkU+WrE6GJsqo8RWum5e2rrlnANjFjOLra5VCn5RjB/XLLHlXDSxM +lpCH9sbM2Et9kcTrtvCs26nF0FwvLQpGi3Ma4Gdqf5kcBgmsr3QvGUeCWlG5sc+vIGS vl69OVsS4BE0gE08H0yMhjY6I2/048e53rImFvxRd6v7hTUYijnK6nwjOeZYgzTfPwsa j00H5j6yoWANvEYW9FBVMvh+GWKAU4jP6+0+JELcCzm60DnD6/L+y/cwCZ2hVKZuCbEq kh/g== 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=2n5HHJon8hGLBAiixQuAOZl6BD+0aVat5XbPEqLE+T8=; b=cP9q1VjLMPz6bf6eoE9WzmBKZX8j9vlgkSbVudh9p3n2mCkk4weVOyqkUwhjDRRrfS A/9vJcF7AGwSob7ciVzfxAWWm6SUEoYXRY/3qpadM0j9eXyy4kJ3f4IDP1I62vkm0S9A qRleR3Ghb4ysD9E/2FagNH4v5SmdpljlNHue+V2OF4wioRdGQsF6wfK9Vfn0Ox7F4YoF /IYxQABX/Cymg8n3HYWztP/wrhK0Ti1WEKfREeM6/cv6FsAocj0iaI64qlt/1kKoI6q6 1Iu7fooFh7OD3qprsI6sZkUAHMWjTWAdxZlpqfkLD0vpgPXcqk+b6TpqQruNs4NzTKc9 zc/w== X-Gm-Message-State: AOAM530m9Yt3lSb1C+xzYfQsppTueFwMvH1PJCNWrq20ulASKrIzvFE6 Z1CigMhDM1MAa2iq80KuzslafB79bEnqYQ== X-Google-Smtp-Source: ABdhPJzPdKEO750PbfVguZnS+86+6c+69ELOr1St7qdQAmr3XpItCGtN/sj4hqvyXhEjMvth6WeExQ== X-Received: by 2002:a17:907:2bc4:b0:6cc:e4b7:dcf8 with SMTP id gv4-20020a1709072bc400b006cce4b7dcf8mr22695919ejc.596.1645618849503; Wed, 23 Feb 2022 04:20:49 -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 v12sm11629224edr.8.2022.02.23.04.20.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 23 Feb 2022 04:20:48 -0800 (PST) From: Michal Krawczyk To: dev@dpdk.org Cc: ferruh.yigit@intel.com, shaibran@amazon.com, upstream@semihalf.com, Michal Krawczyk , Dawid Gorecki Subject: [PATCH v3 16/21] net/ena: make Tx completion timeout configurable Date: Wed, 23 Feb 2022 13:19:39 +0100 Message-Id: <20220223121944.24156-17-mk@semihalf.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220223121944.24156-1-mk@semihalf.com> References: <20220222181146.28882-1-mk@semihalf.com> <20220223121944.24156-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 1746abddbb..e04567ed5b 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 3cdeba9fad..0ca4269522 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 Wed Feb 23 12:19: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: 108161 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 091F7A034C; Wed, 23 Feb 2022 13:22:07 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 161074273E; Wed, 23 Feb 2022 13:20:55 +0100 (CET) Received: from mail-ed1-f43.google.com (mail-ed1-f43.google.com [209.85.208.43]) by mails.dpdk.org (Postfix) with ESMTP id 5051742728 for ; Wed, 23 Feb 2022 13:20:51 +0100 (CET) Received: by mail-ed1-f43.google.com with SMTP id bq11so22571486edb.2 for ; Wed, 23 Feb 2022 04:20:51 -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=SDKmmswyzRS8dPZ1m2bCh3rE6PuWSa2rcOndCHjBEXc=; b=oR08VpA4ugIFMtLClEkPdGJVfTs7j29zuWoZj+JoIlPSQsWTrVr4cl/sUTt5KipJZf IU+bVg0LsmEtCNIRkoeNaCJzRIYRZj8aGeR27EaD/vKD2nTnvQkntA7J37ZYj5zk9WSz 0rbQ/0goVmGwv3XdbUWlcUITn6eR6k/Cy27Mwdfrtzh5oJ1UgcfMi/Qu1+fZUemivCoA iLJdti7dAWNTJOP9gMzBKBxb0YS6B5zsxJkSPu5bs4LPwkCqalK7peWKOz8oU/GDfPMM zY+1BUAEWGYojNMRxaiXx4NcbAm61APGAM2otNnMeUBT2ogD8r2XZPZVtUclxHtQDmO5 ZCVQ== 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=SDKmmswyzRS8dPZ1m2bCh3rE6PuWSa2rcOndCHjBEXc=; b=C2syCutJhiM3SDyafzrInPpeKTNwZ57Z//A0ThCjrw4KBDl3uC6PIeZI1PLc/ebZOu KQ9CZr6xWm0SUZCFEsyo1C0HCUwlX5gFumOx8L7KNl8xGEtkp7P1EDUHnkYTasf2aFwt Vi8HQNVBXXU+l0dSmHvxzQpwTGTglTfnbI0lZQGKAl0JRUnGNQFuwBopgMeS6GJp0PhV s20zvB3Q/Myl7+lRM5K2vMB/ryx9hPzZKiDEsq3vxsPGbiVw1tNDWrPTg+MFORwRiVhz X9uGxQSOmm6gymJnS2SpAj30t7cVeAZUCl42QmFd4DqYdJGvoDp7Ciquz6xpaArVlf7W QV9g== X-Gm-Message-State: AOAM533KPrPcdqkJfuO4chJ2JwZ9uHGEBtixKwQ84fnn+Mol7XYeiHsi FfhogAurfCQvAjtuVSgt6yzn0j65d42iyw== X-Google-Smtp-Source: ABdhPJwIzetWE4/InIZ2hnrgu6IN+vl2d6weiTvjQaQCv2uKzmbDNSTi2L2s1M6PYyHkH5hSzsCnoQ== X-Received: by 2002:a05:6402:22ec:b0:410:9214:6dae with SMTP id dn12-20020a05640222ec00b0041092146daemr31030645edb.372.1645618850726; Wed, 23 Feb 2022 04:20:50 -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 v12sm11629224edr.8.2022.02.23.04.20.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 23 Feb 2022 04:20:50 -0800 (PST) From: Michal Krawczyk To: dev@dpdk.org Cc: ferruh.yigit@intel.com, shaibran@amazon.com, upstream@semihalf.com, Michal Krawczyk , stable@dpdk.org, Dawid Gorecki Subject: [PATCH v3 17/21] net/ena: fix meta-desc DF flag setup Date: Wed, 23 Feb 2022 13:19:40 +0100 Message-Id: <20220223121944.24156-18-mk@semihalf.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220223121944.24156-1-mk@semihalf.com> References: <20220222181146.28882-1-mk@semihalf.com> <20220223121944.24156-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 0ca4269522..53a8071968 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 Wed Feb 23 12:19: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: 108162 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 2D00EA034C; Wed, 23 Feb 2022 13:22:11 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 0B1F242743; Wed, 23 Feb 2022 13:20:56 +0100 (CET) Received: from mail-ed1-f50.google.com (mail-ed1-f50.google.com [209.85.208.50]) by mails.dpdk.org (Postfix) with ESMTP id 7A9EF42726 for ; Wed, 23 Feb 2022 13:20:52 +0100 (CET) Received: by mail-ed1-f50.google.com with SMTP id h15so26859091edv.7 for ; Wed, 23 Feb 2022 04:20:52 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=semihalf-com.20210112.gappssmtp.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=QUHrkGN7+wvIDSCwzq8c4SjCkUXayVvM3ShSIS9n6WA=; b=r4OHM1UAy8RXSDXr9abQm4tberH62lO9E6CP+RqPYwtbL5Vp8oVcY4dHH/NMGekLjW FAuchp+N0Pll0dixEyVeXe6iDp5MZASVsnKKORbaUouUVTup+1fQY3s2vrRuQG5+MRT5 fYN7gYE3IenJWh5UvKMBv1IKwFqS6dTHeN1N8Kh4YcRt6bmEeqUGLhhB3a66jUpmR6NG Kv5fLK5yN9ArSRANGowdub85ayPyA3HroF7IewtxIZaotleWWWowgIlC5YTYYR+wVrGH hU54us+gNkCk865Nni/Il0vlRhEO0ZvIpfqIXScNpqtspeCXJ+ZoSUVuH31Ht0sOYTiA 7FVw== 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=QUHrkGN7+wvIDSCwzq8c4SjCkUXayVvM3ShSIS9n6WA=; b=MJkeugtS8AtEhejLPd++QcGososeMkax155lGJiMXc8H5H6uWEp+XkCY12ZgxFx4rj piA2a9DoVoMweulJgAYl1SCz01/qO+beIV5xose1NuOCmYO8o6sJAXOdJsgINCve/jLb 3dqh1NITpAOFQjgTFBrfdzRPYLW7Rgb3iHXVsnwEZ0PxYbM18yykzg4Mul56yI5oPqhj w5A1BwqtdCID0vQ7y4489QKORf55kh073Cg8sMBXwVPre5Yy7i3i4fMsEZFzJ1hW3t3M NMCpKD5i/KSyEnw+P8/eAmlRACq6yorDnRnrjA8TQVeChOPRAn8ePr9ZDwVhfPoeYbvR evZw== X-Gm-Message-State: AOAM532ea1Gr/YlBBncZojzI3zphnvP5JYm9d/LyiUZEWDdPPfOOcDUx 1OJi54ULKQ2OpIJA1cIGoWcGvNmMW1L98w== X-Google-Smtp-Source: ABdhPJx+K0HBESLcCDVE6aL/6AK/eKvRy7VUp1/JtGfD+YdWhWH1gLF9w6xFwlbpFFo49yOval4XHg== X-Received: by 2002:a50:f118:0:b0:413:2c9e:d519 with SMTP id w24-20020a50f118000000b004132c9ed519mr5155422edl.387.1645618851954; Wed, 23 Feb 2022 04:20:51 -0800 (PST) Received: from DESKTOP-U5LNN3J.localdomain (89-79-181-52.dynamic.chello.pl. [89.79.181.52]) by smtp.gmail.com with ESMTPSA id v12sm11629224edr.8.2022.02.23.04.20.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 23 Feb 2022 04:20:51 -0800 (PST) From: Michal Krawczyk To: dev@dpdk.org Cc: ferruh.yigit@intel.com, shaibran@amazon.com, upstream@semihalf.com, Dawid Gorecki , Michal Krawczyk Subject: [PATCH v3 18/21] net/ena: extend debug prints for invalid req ID resets Date: Wed, 23 Feb 2022 13:19:41 +0100 Message-Id: <20220223121944.24156-19-mk@semihalf.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220223121944.24156-1-mk@semihalf.com> References: <20220222181146.28882-1-mk@semihalf.com> <20220223121944.24156-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 53a8071968..b471102ea9 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 Wed Feb 23 12:19: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: 108163 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 EF218A034C; Wed, 23 Feb 2022 13:22:15 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 0BC8E4274A; Wed, 23 Feb 2022 13:20:57 +0100 (CET) Received: from mail-ed1-f48.google.com (mail-ed1-f48.google.com [209.85.208.48]) by mails.dpdk.org (Postfix) with ESMTP id 9E03142701 for ; Wed, 23 Feb 2022 13:20:53 +0100 (CET) Received: by mail-ed1-f48.google.com with SMTP id bq11so22571688edb.2 for ; Wed, 23 Feb 2022 04:20:53 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=semihalf-com.20210112.gappssmtp.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=sYF9oKYnjBsRPnacHorjguRyi3Iq8jyPaApiXFQLrw0=; b=oI+sohUX70i8VhYbwxqB9mTW+NqyevyYgfldDXISjJSKuF2DVpYfXlrTy4gRsmyzWT +9OGruC+Oi6w4SjYVkEDjHhTewQzGdTl8vJlrfmCCNub60pqULrwfs0DILVBagAeSZxk IlcycI0joPcBs5an4x1viHlO5NV4AuRc9U6/Coiqs7tz0VfaW3aBt8rIIbA8QKe65RSU YrXW+1D6dZMwVBm44WXFOrnyA9VHJjN6Apx29VgLwC2Tb4yVRUYhzCXIbniZaPmEZ6WC kYJtXoH4mtrTEszYoc2TmwFRgL2MRCU+MU97XYamaiNU/TVc7dhEOrvsRA9R0aaX5ayL Iq3A== 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=sYF9oKYnjBsRPnacHorjguRyi3Iq8jyPaApiXFQLrw0=; b=OTS6nrXpCF+YSf+/iwGQk0RGTGirrMSmK1GnmGZqHgn8/Mt3fJfaw+C3bKCnJAo4AZ 4UDB1Cjf3jDET8nzJqDe279Rj2hV8itSOG+Z9DXuTOfLyD7TVm5g9qmEEE0KPkE+6CCV PqbyLE20vglk1948Zk6czn7VGaI1R3LTDeAT36rDsI3HKI5+KmdN/BbYCGVJBDOsqVuw 1gRYkeqrepqRGS7EDgth2M43smqkXhTQJD26cdvzLeLsalaIRJdHzFKQ6S9vgv/xSgc6 guMFxIQKzWXFvjkMU/BugoO+oShp2lzbweqS9ROk2lVasFvHMqu7aIST3iOrABkwJ04x Pp5A== X-Gm-Message-State: AOAM533YgA/Fvfn+Ax/dTVeDcE2c5d+s/v9oeSdwdkOHDUPu34xwZuka v/oIglYjCa7cl1ZegS/TYNzO9TDc7Td82g== X-Google-Smtp-Source: ABdhPJwxppp44C468ka+fxQiHJtBZQYxx0CpQ3urjlZXAPDzZjHW16jGb9vOn+y9mx7hCeJa7ym1Dw== X-Received: by 2002:a50:d086:0:b0:413:38a6:24a7 with SMTP id v6-20020a50d086000000b0041338a624a7mr2399426edd.183.1645618853142; Wed, 23 Feb 2022 04:20:53 -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 v12sm11629224edr.8.2022.02.23.04.20.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 23 Feb 2022 04:20:52 -0800 (PST) From: Michal Krawczyk To: dev@dpdk.org Cc: ferruh.yigit@intel.com, shaibran@amazon.com, upstream@semihalf.com, Dawid Gorecki , stable@dpdk.org, Michal Krawczyk Subject: [PATCH v3 19/21] net/ena: don't initialize LLQ when membar isn't exposed Date: Wed, 23 Feb 2022 13:19:42 +0100 Message-Id: <20220223121944.24156-20-mk@semihalf.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220223121944.24156-1-mk@semihalf.com> References: <20220222181146.28882-1-mk@semihalf.com> <20220223121944.24156-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 b471102ea9..151c688eec 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 Wed Feb 23 12:19: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: 108164 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 0E67BA034C; Wed, 23 Feb 2022 13:22:21 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 0440942751; Wed, 23 Feb 2022 13:20:58 +0100 (CET) Received: from mail-ej1-f44.google.com (mail-ej1-f44.google.com [209.85.218.44]) by mails.dpdk.org (Postfix) with ESMTP id C27C142735 for ; Wed, 23 Feb 2022 13:20:54 +0100 (CET) Received: by mail-ej1-f44.google.com with SMTP id hw13so51728055ejc.9 for ; Wed, 23 Feb 2022 04:20:54 -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=ndDl5vZNa01BJ1hxdPWPddH4EPEaX15QxhpSKgHJ0xU=; b=xFd9q7GAAlvhGGlR4xhJMDc0nqFIFYB7qbNh/zaH/nslkzCdOR85eCaKoiTL2sRYSi FbldCFGiifU/ofieSg7XSd0wAYKUkWAHdTFGd5SxLZcHKJXD84VkIlLvpeV0IMrdjBg5 0b7s/UyLApbrF2kUnzsfT+5amphUpM5HbCE0twBFApxEwt2idhydswD/V3BhMtqyA1aW LmoZj4ReQw85/UG4I2Kqf9HaMrc0g7uXo2ow2VwPk1DexKa/yn5agbYMOxM9IZkLNoW+ WMaVpsintpNW0dUi23vJ4kdNfYKRT41Pqo+sGhxJVfOFlGvbY5Rk+tyheNm43icGAxRi nzjw== 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=ndDl5vZNa01BJ1hxdPWPddH4EPEaX15QxhpSKgHJ0xU=; b=G7m0GeA0RA7Lf0byJYKKgTuRoojettdFm/SVGtjfi7ST3vnK040gi3HWsQFiTrxZQH cwyrsgBWQ6gncFmoVKvrOZpg+GOo66LoIR76/qr8OiFwbUkSWAxFnNFi5uneToRlUPwn ZY3cK9NeqqkBrlko6zYwRBTF/be+8rk5O1Nygv/ub0NEYuNgpSPFDlmHL+9Xz1ONzFnX IxvAaodTOEWX7lhBqhuBWfQDlTZXwFHE2zkowNwE2ySDUho7mI+opKneDF+f44uCOYVH C15PW3JKGU5Xm7jpCY/tGkqldwDlg2WM8EvxXoZ0MBzSfuUII7TNQ3E8tYPh88d0GrT6 NTzg== X-Gm-Message-State: AOAM5331Rfuyh4z9ANfAiKDwjSgdR+3gH+mAvhnUOcyZIOIPbESmZiPU EIIYpdN7KrkXqFKrewZ6qUU29g6TzzT/VA== X-Google-Smtp-Source: ABdhPJwnwMZw3aYg1Vr2/pEf1u0XYrWThiR9t8DZM3pFwqUs8upYOf73jehPlCRMu8H9wF2hrejCIw== X-Received: by 2002:a17:907:7053:b0:6a6:b835:dbd3 with SMTP id ws19-20020a170907705300b006a6b835dbd3mr21965007ejb.190.1645618854239; Wed, 23 Feb 2022 04:20:54 -0800 (PST) Received: from DESKTOP-U5LNN3J.localdomain (89-79-181-52.dynamic.chello.pl. [89.79.181.52]) by smtp.gmail.com with ESMTPSA id v12sm11629224edr.8.2022.02.23.04.20.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 23 Feb 2022 04:20:53 -0800 (PST) From: Michal Krawczyk To: dev@dpdk.org Cc: ferruh.yigit@intel.com, shaibran@amazon.com, upstream@semihalf.com, Michal Krawczyk , stable@dpdk.org Subject: [PATCH v3 20/21] net/ena: don't indicate bad csum for L4 csum error Date: Wed, 23 Feb 2022 13:19:43 +0100 Message-Id: <20220223121944.24156-21-mk@semihalf.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220223121944.24156-1-mk@semihalf.com> References: <20220222181146.28882-1-mk@semihalf.com> <20220223121944.24156-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 151c688eec..4b58dcda74 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 Wed Feb 23 12:19: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: 108165 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 E2DFFA034C; Wed, 23 Feb 2022 13:22:26 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 355F84275B; Wed, 23 Feb 2022 13:20:59 +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 094AD42742 for ; Wed, 23 Feb 2022 13:20:56 +0100 (CET) Received: by mail-ej1-f45.google.com with SMTP id p14so51901353ejf.11 for ; Wed, 23 Feb 2022 04:20:56 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=semihalf-com.20210112.gappssmtp.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=v/bui8eGrOjdbKoea245vAFoEd/zYGFeBfs7QJEDUPk=; b=vsUeG+cfM0uQB2dBj65HfABdWDbJSOD+MEl5m9WhN+4I9DfwQH3Yg7xGdPWLH9P5f7 tnZBn9Bn5XRSv26fLY4RkQwjT2ugGxql7PJIarCYjhkMGnPxGQ7Pc6YiUSMfjGaYUG00 OTIp29sajGndIQh3eQKVIXHBu/v8n/LwzvoWVazWLHgJ+qia57WPt0SIEQji8gKyNGxt ylwZtvp4YhJU0og8yj6Pmo5CMrZmhH47I73BirGTinwmIo5HwumzzzxF+uurAbpMViOe nttIRohPLzNL3ujmxAni9gPVgh/RLnMVaAPN6qn68jKE8KVOaEJtAQKY2a4u6I0BUB1J i6fQ== 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=v/bui8eGrOjdbKoea245vAFoEd/zYGFeBfs7QJEDUPk=; b=X0VONfudFwpTejJ8dUx7UMYOzB5uoTsW1Dp9rslCufgpyRWdw9GyvZ0ZDTMBYMAVNk AQu4AA1HhBNJDMtuZQA62nqOesJfVMeZvyj07vbkdQp+MtBSdk4HWZlqc5UK9wsRLiXR 2sWdh1hw/pX0gLlwdvk5JGyNuatSvBmCpL3pS8o/5HiU8fAGPcuFcn+hXfs9ThqBZp43 oQCHFEjktr1Ke664ent+HFNxHwWD1JNT8LKI0ksOaG5IvhmUw0JOHG7ntG47e6n1h53L pfbDuWKac9zW+GYtzXCz32PnIM1JUjGZVYOxDGauGo/m+D080+C2MDQWr937YCNZwHKt rMrg== X-Gm-Message-State: AOAM530eGKOtFVoMLDPFz2z2deNEh7gZyfpHqi1YaiQp9iZJqVs2Nrln FqjRvu6faRYAZPx2PbyxQaaUEWiQzOuT2A== X-Google-Smtp-Source: ABdhPJwBxDuqPHOC5IGm+5TEpKxaQFUkK3fonFSfUAxFOABkdpAgRMPvHbb+vimnMkEcL39b6CfIoQ== X-Received: by 2002:a17:907:90c7:b0:6d1:c55:86a4 with SMTP id gk7-20020a17090790c700b006d10c5586a4mr14931723ejb.484.1645618855378; Wed, 23 Feb 2022 04:20:55 -0800 (PST) Received: from DESKTOP-U5LNN3J.localdomain (89-79-181-52.dynamic.chello.pl. [89.79.181.52]) by smtp.gmail.com with ESMTPSA id v12sm11629224edr.8.2022.02.23.04.20.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 23 Feb 2022 04:20:54 -0800 (PST) From: Michal Krawczyk To: dev@dpdk.org Cc: ferruh.yigit@intel.com, shaibran@amazon.com, upstream@semihalf.com, Michal Krawczyk Subject: [PATCH v3 21/21] net/ena: update version to 2.6.0 Date: Wed, 23 Feb 2022 13:19:44 +0100 Message-Id: <20220223121944.24156-22-mk@semihalf.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20220223121944.24156-1-mk@semihalf.com> References: <20220222181146.28882-1-mk@semihalf.com> <20220223121944.24156-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 4b58dcda74..68768cab70 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)