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 D93FEA0C47 for ; Mon, 26 Jul 2021 15:56:10 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id D04CF40DDA; Mon, 26 Jul 2021 15:56:10 +0200 (CEST) Received: from mail-wr1-f45.google.com (mail-wr1-f45.google.com [209.85.221.45]) by mails.dpdk.org (Postfix) with ESMTP id 2FF8240F35 for ; Mon, 26 Jul 2021 15:56:08 +0200 (CEST) Received: by mail-wr1-f45.google.com with SMTP id e2so11197381wrq.6 for ; Mon, 26 Jul 2021 06:56:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=j2nzPGr7R7S27+PjMtiYgF5aawazINNGOuySxvsPEmg=; b=BGLctiBs+UVd8bt0XAEgtZpqVn9CMFbo7CGyoRdSN6iNPScouWwYO5q99MRuhYpJRs QSzAjnfHWQwJ/by//IH5ybgNsqU/t2VqH1XiDk6n+bP55xWzHG4bArUOD5yN4rIaJ2zd OhBSJoz/7QEHuvZ9nMOHiSqrZ44Ms71G81CslMJcZ1mnUw2DlQCcwLus6cwCvuFP//X3 jsqmlBOzF7ajOIGbEIfD6Ez7Mm95O3GaFJZlPCxzMN8IK6hePIpfv98BNzviQYlQLGpV 9oDGN324S8yBpTd9daqw7A7RG9nbcBrNuaEEqSfFE3fAhWt5/Udgz0B4+H49PBrlIqG/ CEAQ== 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=j2nzPGr7R7S27+PjMtiYgF5aawazINNGOuySxvsPEmg=; b=kzsvSeO7Ng6ao3ikBTqNCTAM8m203sPF4/0ei+MKDnlJkHca9ucOq25h1tw3jIECKe 6XlQ0m7bFmmXMYK5z8hOPQCjOxojZQzuXRGT5rRfo5OSynkiOaCJ1jceAybGfqD1asul EGoQaCvLtviGq8gpU2t6HXIgDZ1JFuym1PtRxYwZpEAIGEIIJHUnDokfdrOhphgj2xHp I3Zh2QBFCuWBZSE1wzN+ZW1V5u89tkiOSJWb9FlRcDpDnScUBzrKLtshg2GWF2a0ZECL 9M56fzl/+JgeqL//lW6n83YVn1cQBewL06KHEHmsGZ3k10cVPGkyjF1wih9RhZvbGPCy wSpg== X-Gm-Message-State: AOAM531BJE7N2s6SJnazIMMfZ3AEGOvaJb4Rg6BDni55ARW2OOStF/Zt OOHM7s8XaJyvmgpHVnkQorg= X-Google-Smtp-Source: ABdhPJzx7upBpdwxj+fTWc8ezxCVpw69kv8qR2apGJq66diWtzNP/3ohGpo5V5FEDP8EAoXe/pll5g== X-Received: by 2002:a05:6000:1201:: with SMTP id e1mr10030285wrx.379.1627307767987; Mon, 26 Jul 2021 06:56:07 -0700 (PDT) Received: from localhost ([137.220.125.106]) by smtp.gmail.com with ESMTPSA id v15sm14308338wmj.39.2021.07.26.06.56.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 26 Jul 2021 06:56:07 -0700 (PDT) From: luca.boccassi@gmail.com To: Ivan Ilchenko Cc: Andrew Rybchenko , Andy Moreton , dpdk stable Date: Mon, 26 Jul 2021 14:53:17 +0100 Message-Id: <20210726135322.149850-54-luca.boccassi@gmail.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20210726135322.149850-1-luca.boccassi@gmail.com> References: <20210712130551.2462159-1-luca.boccassi@gmail.com> <20210726135322.149850-1-luca.boccassi@gmail.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 20.11.3 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 20.11.3 Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet. It will be pushed if I get no objections before 07/28/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/bluca/dpdk-stable This queued commit can be viewed at: https://github.com/bluca/dpdk-stable/commit/b84a0ebd171257f984e7d177223e28a8faabf95d Thanks. Luca Boccassi --- >From b84a0ebd171257f984e7d177223e28a8faabf95d 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 0811dd0aff..6192ac89f8 100644 --- a/drivers/net/sfc/sfc.h +++ b/drivers/net/sfc/sfc.h @@ -139,6 +139,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 e5c30e6d3f..59f61b09a8 100644 --- a/drivers/net/sfc/sfc_ethdev.c +++ b/drivers/net/sfc/sfc_ethdev.c @@ -779,8 +779,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; @@ -799,17 +797,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; + SFC_ASSERT(port->mac_stats_nb_supported <= + RTE_DIM(port->mac_stats_by_id)); - if (ids[nb_written] == nb_supported) - values[nb_written++] = mac_stats[i]; - - ++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); @@ -824,8 +824,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) || @@ -840,23 +839,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; + SFC_ASSERT(port->mac_stats_nb_supported <= + RTE_DIM(port->mac_stats_by_id)); - if (ids[nb_written] == nb_supported) { - char *name = xstats_names[nb_written++].name; - - 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 d876996826..817b412e29 100644 --- a/drivers/net/sfc/sfc_port.c +++ b/drivers/net/sfc/sfc_port.c @@ -157,6 +157,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) { @@ -165,7 +186,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"); @@ -259,12 +279,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.30.2 --- Diff of the applied patch vs upstream commit (please double-check if non-empty: --- --- - 2021-07-26 13:53:19.058273199 +0100 +++ 0054-net-sfc-fix-xstats-query-by-unsorted-list-of-IDs.patch 2021-07-26 13:53:15.961294977 +0100 @@ -1 +1 @@ -From 7d466e5fd8d13def57538d80a2f759c2c436dba0 Mon Sep 17 00:00:00 2001 +From b84a0ebd171257f984e7d177223e28a8faabf95d 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 0811dd0aff..6192ac89f8 100644 @@ -25 +26 @@ -@@ -141,6 +141,8 @@ struct sfc_port { +@@ -139,6 +139,8 @@ struct sfc_port { @@ -35 +36 @@ -index fca3f524a1..ae9304f90f 100644 +index e5c30e6d3f..59f61b09a8 100644 @@ -38 +39 @@ -@@ -788,8 +788,6 @@ sfc_xstats_get_by_id(struct rte_eth_dev *dev, const uint64_t *ids, +@@ -779,8 +779,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, +@@ -799,17 +797,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, +@@ -824,8 +824,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, +@@ -840,23 +839,24 @@ sfc_xstats_get_names_by_id(struct rte_eth_dev *dev, @@ -121 +122 @@ -index cdc0f94f19..bb9e01d96b 100644 +index d876996826..817b412e29 100644