From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 384D6A0C47 for ; Tue, 10 Aug 2021 17:45:00 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 26A5740686; Tue, 10 Aug 2021 17:45:00 +0200 (CEST) Received: from smtp-relay-canonical-1.canonical.com (smtp-relay-canonical-1.canonical.com [185.125.188.121]) by mails.dpdk.org (Postfix) with ESMTP id 1C66C411C5 for ; Tue, 10 Aug 2021 17:44:59 +0200 (CEST) Received: from mail-ed1-f69.google.com (mail-ed1-f69.google.com [209.85.208.69]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by smtp-relay-canonical-1.canonical.com (Postfix) with ESMTPS id 058F73F107 for ; Tue, 10 Aug 2021 15:44:59 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=canonical.com; s=20210705; t=1628610299; bh=a/K/qc0cVzltSdq8ZeSm33NLrAb8pCzlQHF4rR6P9bs=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=s8y07e3eUUxWMlrgrT072+luJ1OeK23jiQEZlaD0fAkd8sjh2Fg2COuyrqY7NsczU sO2oX2ztTNkJJ1VtRhl5Dvy8kN/OaMUn0043h6eVHjktkAoO+jtYi8OXuMwzL3WHM1 MteSkYtnpZ+tjkK/LjYraYL5uUE2ywCXP/z1nJnXzEgy4sGnUL1oiUjZSrr+q501Zm F/1pWZfhpC3buYubfs/vC19ePLl4oJgMEmdDt8uqlhFW01698CL7V1WnRtGl1B6HTB moYwqi9F0hl3kyVF9nmu5jkbJJ9JulOp0eYQDjfoU/CfpXj17Hk8JQpYJ0MOmWoTLb NiBNYL48AXwYw== Received: by mail-ed1-f69.google.com with SMTP id de5-20020a0564023085b02903bb92fd182eso11041732edb.8 for ; Tue, 10 Aug 2021 08:44:59 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=a/K/qc0cVzltSdq8ZeSm33NLrAb8pCzlQHF4rR6P9bs=; b=bn78fFspKbb51gTmuY2uSCzsp6LwZcJX1tD5L22FGHEd/264LLd2FiWPibr/SISwrQ 4Y2NoK1QdkCpT5sco8wofXWsdl2X7crNK9n97N/SbWaHVdQEc/UMwGo7CaAhZg54nGaA 0PVEQHa0GJhLg48zps00zrDvJk0Jgy+gmeSeVIR9M8PGSOUARi1gmB+irnkvA/n+dLHa 5TK4mperUq7uEhIU0ljfi8JeyX8ik/SMAVPnU7//RHnu8nuoSKcQobqk2dwtjLjCuiRh 3CILTVEbfbMTM0XS3noM0Wezm7aToPT9xGSu7GKSVg7LRgNSbFJ/XgamiJMLkSlu8lZv RUzw== X-Gm-Message-State: AOAM533gGA13g3y303Nzh3R5QU5flmQsnQpaogCHQV6u+MYAUIO/l24R Tmgpe6J9QTLghNxd4u9UqcZKWDqPmGt/mNd4j9GZ+ReTCGHTSbn8VFohsVHSrsOhDchIaU5XOL0 Qs0sAZMB0Pi6zIVKuePoQE1Og X-Received: by 2002:a17:906:3c10:: with SMTP id h16mr13493920ejg.205.1628610298412; Tue, 10 Aug 2021 08:44:58 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzwEcDYEo3XSShN9n0sNaP5GBxvY3ygbmA7zW5han4kwBK4e/eUs9ksBNZptuu53WQ/eu24xQ== X-Received: by 2002:a17:906:3c10:: with SMTP id h16mr13493902ejg.205.1628610298173; Tue, 10 Aug 2021 08:44:58 -0700 (PDT) Received: from Keschdeichel.fritz.box ([2001:67c:1560:8007::aac:c4ad]) by smtp.gmail.com with ESMTPSA id s24sm1712089edq.56.2021.08.10.08.44.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 10 Aug 2021 08:44:57 -0700 (PDT) From: christian.ehrhardt@canonical.com To: Ivan Ilchenko Cc: Andrew Rybchenko , Andy Moreton , dpdk stable Date: Tue, 10 Aug 2021 17:40:08 +0200 Message-Id: <20210810154022.749358-88-christian.ehrhardt@canonical.com> X-Mailer: git-send-email 2.32.0 In-Reply-To: <20210810154022.749358-1-christian.ehrhardt@canonical.com> References: <20210810154022.749358-1-christian.ehrhardt@canonical.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: [dpdk-stable] patch 'net/sfc: fix xstats query by unsorted list of IDs' has been queued to stable release 19.11.10 X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: stable-bounces@dpdk.org Sender: "stable" Hi, FYI, your patch has been queued to stable release 19.11.10 Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet. It will be pushed if I get no objections before 08/12/21. So please shout if anyone has objections. Also note that after the patch there's a diff of the upstream commit vs the patch applied to the branch. This will indicate if there was any rebasing needed to apply to the stable branch. If there were code changes for rebasing (ie: not only metadata diffs), please double check that the rebase was correctly done. Queued patches are on a temporary branch at: https://github.com/cpaelzer/dpdk-stable-queue This queued commit can be viewed at: https://github.com/cpaelzer/dpdk-stable-queue/commit/6fe317e2505898550ddb64ef84a80c9f6b1abb54 Thanks. Christian Ehrhardt --- >From 6fe317e2505898550ddb64ef84a80c9f6b1abb54 Mon Sep 17 00:00:00 2001 From: Ivan Ilchenko Date: Fri, 23 Jul 2021 16:15:10 +0300 Subject: [PATCH] net/sfc: fix xstats query by unsorted list of IDs [ upstream commit 7d466e5fd8d13def57538d80a2f759c2c436dba0 ] Device may support only some MAC stats. Add mapping from ids to subset of supported MAC stats for each port. Fixes: 73280c1e4ff ("net/sfc: support xstats retrieval by ID") Signed-off-by: Ivan Ilchenko Signed-off-by: Andrew Rybchenko Reviewed-by: Andy Moreton --- drivers/net/sfc/sfc.h | 2 ++ drivers/net/sfc/sfc_ethdev.c | 44 ++++++++++++++++++------------------ drivers/net/sfc/sfc_port.c | 29 ++++++++++++++++++------ 3 files changed, 46 insertions(+), 29 deletions(-) diff --git a/drivers/net/sfc/sfc.h b/drivers/net/sfc/sfc.h index 57a901b948..e12b4f56f2 100644 --- a/drivers/net/sfc/sfc.h +++ b/drivers/net/sfc/sfc.h @@ -152,6 +152,8 @@ struct sfc_port { uint32_t mac_stats_mask[EFX_MAC_STATS_MASK_NPAGES]; + unsigned int mac_stats_by_id[EFX_MAC_NSTATS]; + uint64_t ipackets; }; diff --git a/drivers/net/sfc/sfc_ethdev.c b/drivers/net/sfc/sfc_ethdev.c index 7317c30a71..c008a93af0 100644 --- a/drivers/net/sfc/sfc_ethdev.c +++ b/drivers/net/sfc/sfc_ethdev.c @@ -771,8 +771,6 @@ sfc_xstats_get_by_id(struct rte_eth_dev *dev, const uint64_t *ids, struct sfc_adapter *sa = sfc_adapter_by_eth_dev(dev); struct sfc_port *port = &sa->port; uint64_t *mac_stats; - unsigned int nb_supported = 0; - unsigned int nb_written = 0; unsigned int i; int ret; int rc; @@ -791,17 +789,19 @@ sfc_xstats_get_by_id(struct rte_eth_dev *dev, const uint64_t *ids, mac_stats = port->mac_stats_buf; - for (i = 0; (i < EFX_MAC_NSTATS) && (nb_written < n); ++i) { - if (!EFX_MAC_STAT_SUPPORTED(port->mac_stats_mask, i)) - continue; - - if (ids[nb_written] == nb_supported) - values[nb_written++] = mac_stats[i]; + SFC_ASSERT(port->mac_stats_nb_supported <= + RTE_DIM(port->mac_stats_by_id)); - ++nb_supported; + for (i = 0; i < n; i++) { + if (ids[i] < port->mac_stats_nb_supported) { + values[i] = mac_stats[port->mac_stats_by_id[ids[i]]]; + } else { + ret = i; + goto unlock; + } } - ret = nb_written; + ret = n; unlock: sfc_adapter_unlock(sa); @@ -816,8 +816,7 @@ sfc_xstats_get_names_by_id(struct rte_eth_dev *dev, { struct sfc_adapter *sa = sfc_adapter_by_eth_dev(dev); struct sfc_port *port = &sa->port; - unsigned int nb_supported = 0; - unsigned int nb_written = 0; + unsigned int nb_supported; unsigned int i; if (unlikely(xstats_names == NULL && ids != NULL) || @@ -832,23 +831,24 @@ sfc_xstats_get_names_by_id(struct rte_eth_dev *dev, return nb_supported; } - for (i = 0; (i < EFX_MAC_NSTATS) && (nb_written < size); ++i) { - if (!EFX_MAC_STAT_SUPPORTED(port->mac_stats_mask, i)) - continue; - - if (ids[nb_written] == nb_supported) { - char *name = xstats_names[nb_written++].name; + SFC_ASSERT(port->mac_stats_nb_supported <= + RTE_DIM(port->mac_stats_by_id)); - strlcpy(name, efx_mac_stat_name(sa->nic, i), + for (i = 0; i < size; i++) { + if (ids[i] < port->mac_stats_nb_supported) { + strlcpy(xstats_names[i].name, + efx_mac_stat_name(sa->nic, + port->mac_stats_by_id[ids[i]]), sizeof(xstats_names[0].name)); + } else { + sfc_adapter_unlock(sa); + return i; } - - ++nb_supported; } sfc_adapter_unlock(sa); - return nb_written; + return size; } static int diff --git a/drivers/net/sfc/sfc_port.c b/drivers/net/sfc/sfc_port.c index 967fd3a266..ee59766208 100644 --- a/drivers/net/sfc/sfc_port.c +++ b/drivers/net/sfc/sfc_port.c @@ -156,6 +156,27 @@ sfc_port_phy_caps_to_max_link_speed(uint32_t phy_caps) #endif +static void +sfc_port_fill_mac_stats_info(struct sfc_adapter *sa) +{ + unsigned int mac_stats_nb_supported = 0; + struct sfc_port *port = &sa->port; + unsigned int stat_idx; + + efx_mac_stats_get_mask(sa->nic, port->mac_stats_mask, + sizeof(port->mac_stats_mask)); + + for (stat_idx = 0; stat_idx < EFX_MAC_NSTATS; ++stat_idx) { + if (!EFX_MAC_STAT_SUPPORTED(port->mac_stats_mask, stat_idx)) + continue; + + port->mac_stats_by_id[mac_stats_nb_supported] = stat_idx; + mac_stats_nb_supported++; + } + + port->mac_stats_nb_supported = mac_stats_nb_supported; +} + int sfc_port_start(struct sfc_adapter *sa) { @@ -164,7 +185,6 @@ sfc_port_start(struct sfc_adapter *sa) uint32_t phy_adv_cap; const uint32_t phy_pause_caps = ((1u << EFX_PHY_CAP_PAUSE) | (1u << EFX_PHY_CAP_ASYM)); - unsigned int i; sfc_log_init(sa, "entry"); @@ -258,12 +278,7 @@ sfc_port_start(struct sfc_adapter *sa) port->mac_stats_reset_pending = B_FALSE; } - efx_mac_stats_get_mask(sa->nic, port->mac_stats_mask, - sizeof(port->mac_stats_mask)); - - for (i = 0, port->mac_stats_nb_supported = 0; i < EFX_MAC_NSTATS; ++i) - if (EFX_MAC_STAT_SUPPORTED(port->mac_stats_mask, i)) - port->mac_stats_nb_supported++; + sfc_port_fill_mac_stats_info(sa); port->mac_stats_update_generation = 0; -- 2.32.0 --- Diff of the applied patch vs upstream commit (please double-check if non-empty: --- --- - 2021-08-10 15:11:16.408690382 +0200 +++ 0088-net-sfc-fix-xstats-query-by-unsorted-list-of-IDs.patch 2021-08-10 15:11:13.106638735 +0200 @@ -1 +1 @@ -From 7d466e5fd8d13def57538d80a2f759c2c436dba0 Mon Sep 17 00:00:00 2001 +From 6fe317e2505898550ddb64ef84a80c9f6b1abb54 Mon Sep 17 00:00:00 2001 @@ -5,0 +6,2 @@ +[ upstream commit 7d466e5fd8d13def57538d80a2f759c2c436dba0 ] + @@ -10 +11,0 @@ -Cc: stable@dpdk.org @@ -22 +23 @@ -index c7b0e5a30d..972d32606d 100644 +index 57a901b948..e12b4f56f2 100644 @@ -25 +26 @@ -@@ -141,6 +141,8 @@ struct sfc_port { +@@ -152,6 +152,8 @@ struct sfc_port { @@ -35 +36 @@ -index fca3f524a1..ae9304f90f 100644 +index 7317c30a71..c008a93af0 100644 @@ -38 +39 @@ -@@ -788,8 +788,6 @@ sfc_xstats_get_by_id(struct rte_eth_dev *dev, const uint64_t *ids, +@@ -771,8 +771,6 @@ sfc_xstats_get_by_id(struct rte_eth_dev *dev, const uint64_t *ids, @@ -47 +48 @@ -@@ -808,17 +806,19 @@ sfc_xstats_get_by_id(struct rte_eth_dev *dev, const uint64_t *ids, +@@ -791,17 +789,19 @@ sfc_xstats_get_by_id(struct rte_eth_dev *dev, const uint64_t *ids, @@ -75 +76 @@ -@@ -833,8 +833,7 @@ sfc_xstats_get_names_by_id(struct rte_eth_dev *dev, +@@ -816,8 +816,7 @@ sfc_xstats_get_names_by_id(struct rte_eth_dev *dev, @@ -85 +86 @@ -@@ -849,23 +848,24 @@ sfc_xstats_get_names_by_id(struct rte_eth_dev *dev, +@@ -832,23 +831,24 @@ sfc_xstats_get_names_by_id(struct rte_eth_dev *dev, @@ -121 +122 @@ -index cdc0f94f19..bb9e01d96b 100644 +index 967fd3a266..ee59766208 100644 @@ -124 +125 @@ -@@ -157,6 +157,27 @@ sfc_port_phy_caps_to_max_link_speed(uint32_t phy_caps) +@@ -156,6 +156,27 @@ sfc_port_phy_caps_to_max_link_speed(uint32_t phy_caps) @@ -152 +153 @@ -@@ -165,7 +186,6 @@ sfc_port_start(struct sfc_adapter *sa) +@@ -164,7 +185,6 @@ sfc_port_start(struct sfc_adapter *sa) @@ -160 +161 @@ -@@ -259,12 +279,7 @@ sfc_port_start(struct sfc_adapter *sa) +@@ -258,12 +278,7 @@ sfc_port_start(struct sfc_adapter *sa)