From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by dpdk.org (Postfix) with ESMTP id 73F741B555 for ; Thu, 7 Feb 2019 14:27:57 +0100 (CET) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id C6395B9A6A; Thu, 7 Feb 2019 13:27:56 +0000 (UTC) Received: from ktraynor.remote.csb (unknown [10.33.36.135]) by smtp.corp.redhat.com (Postfix) with ESMTP id 92E9A8EBE3; Thu, 7 Feb 2019 13:27:55 +0000 (UTC) From: Kevin Traynor To: Andrew Rybchenko Cc: dpdk stable Date: Thu, 7 Feb 2019 13:25:36 +0000 Message-Id: <20190207132614.20538-30-ktraynor@redhat.com> In-Reply-To: <20190207132614.20538-1-ktraynor@redhat.com> References: <20190207132614.20538-1-ktraynor@redhat.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.30]); Thu, 07 Feb 2019 13:27:56 +0000 (UTC) Subject: [dpdk-stable] patch 'net/sfc: fix Rx packets counter' has been queued to LTS release 18.11.1 X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 07 Feb 2019 13:27:57 -0000 Hi, FYI, your patch has been queued to LTS release 18.11.1 Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet. It will be pushed if I get no objections before 02/14/19. 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. Thanks. Kevin Traynor --- >>From 99bb9ff6d83ab567be02618608e8ffe8c5c1fdfa Mon Sep 17 00:00:00 2001 From: Andrew Rybchenko Date: Thu, 17 Jan 2019 06:17:32 +0000 Subject: [PATCH] net/sfc: fix Rx packets counter [ upstream commit ab77a0013a811aacdde49e903786eff7abb308ec ] Errors, missed and pauses should not be included in delivered good Rx packets reported by ipackets. Fixes: 1caab2f1e684 ("net/sfc: add basic statistics") Signed-off-by: Andrew Rybchenko --- drivers/net/sfc/sfc.h | 2 ++ drivers/net/sfc/sfc_ethdev.c | 31 ++++++++++++++++++++++++++++++- drivers/net/sfc/sfc_port.c | 14 ++++++++++++++ 3 files changed, 46 insertions(+), 1 deletion(-) diff --git a/drivers/net/sfc/sfc.h b/drivers/net/sfc/sfc.h index 0b852340f..a94ca8e75 100644 --- a/drivers/net/sfc/sfc.h +++ b/drivers/net/sfc/sfc.h @@ -150,4 +150,6 @@ struct sfc_port { uint32_t mac_stats_mask[EFX_MAC_STATS_MASK_NPAGES]; + + uint64_t ipackets; }; diff --git a/drivers/net/sfc/sfc_ethdev.c b/drivers/net/sfc/sfc_ethdev.c index 08d3271cb..a7322a1eb 100644 --- a/drivers/net/sfc/sfc_ethdev.c +++ b/drivers/net/sfc/sfc_ethdev.c @@ -504,4 +504,27 @@ sfc_tx_queue_release(void *queue) } +/* + * Some statistics are computed as A - B where A and B each increase + * monotonically with some hardware counter(s) and the counters are read + * asynchronously. + * + * If packet X is counted in A, but not counted in B yet, computed value is + * greater than real. + * + * If packet X is not counted in A at the moment of reading the counter, + * but counted in B at the moment of reading the counter, computed value + * is less than real. + * + * However, counter which grows backward is worse evil than slightly wrong + * value. So, let's try to guarantee that it never happens except may be + * the case when the MAC stats are zeroed as a result of a NIC reset. + */ +static void +sfc_update_diff_stat(uint64_t *stat, uint64_t newval) +{ + if ((int64_t)(newval - *stat) > 0 || newval == 0) + *stat = newval; +} + static int sfc_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats) @@ -541,5 +564,4 @@ sfc_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats) stats->oerrors = mac_stats[EFX_MAC_VADAPTER_TX_BAD_PACKETS]; } else { - stats->ipackets = mac_stats[EFX_MAC_RX_PKTS]; stats->opackets = mac_stats[EFX_MAC_TX_PKTS]; stats->ibytes = mac_stats[EFX_MAC_RX_OCTETS]; @@ -567,4 +589,11 @@ sfc_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats) mac_stats[EFX_MAC_RX_JABBER_PKTS]; /* no oerrors counters supported on EF10 */ + + /* Exclude missed, errors and pauses from Rx packets */ + sfc_update_diff_stat(&port->ipackets, + mac_stats[EFX_MAC_RX_PKTS] - + mac_stats[EFX_MAC_RX_PAUSE_PKTS] - + stats->imissed - stats->ierrors); + stats->ipackets = port->ipackets; } diff --git a/drivers/net/sfc/sfc_port.c b/drivers/net/sfc/sfc_port.c index 5384dbbdb..5eb4b3aca 100644 --- a/drivers/net/sfc/sfc_port.c +++ b/drivers/net/sfc/sfc_port.c @@ -88,4 +88,16 @@ sfc_port_update_mac_stats(struct sfc_adapter *sa) } +static void +sfc_port_reset_sw_stats(struct sfc_adapter *sa) +{ + struct sfc_port *port = &sa->port; + + /* + * Reset diff stats explicitly since check which does not allow + * the statistics to grow backward could deny it. + */ + port->ipackets = 0; +} + int sfc_port_reset_mac_stats(struct sfc_adapter *sa) @@ -96,4 +108,6 @@ sfc_port_reset_mac_stats(struct sfc_adapter *sa) rte_spinlock_lock(&port->mac_stats_lock); rc = efx_mac_stats_clear(sa->nic); + if (rc == 0) + sfc_port_reset_sw_stats(sa); rte_spinlock_unlock(&port->mac_stats_lock); -- 2.19.0 --- Diff of the applied patch vs upstream commit (please double-check if non-empty: --- --- - 2019-02-07 13:19:56.244433764 +0000 +++ 0030-net-sfc-fix-Rx-packets-counter.patch 2019-02-07 13:19:55.000000000 +0000 @@ -1,13 +1,14 @@ -From ab77a0013a811aacdde49e903786eff7abb308ec Mon Sep 17 00:00:00 2001 +From 99bb9ff6d83ab567be02618608e8ffe8c5c1fdfa Mon Sep 17 00:00:00 2001 From: Andrew Rybchenko Date: Thu, 17 Jan 2019 06:17:32 +0000 Subject: [PATCH] net/sfc: fix Rx packets counter +[ upstream commit ab77a0013a811aacdde49e903786eff7abb308ec ] + Errors, missed and pauses should not be included in delivered good Rx packets reported by ipackets. Fixes: 1caab2f1e684 ("net/sfc: add basic statistics") -Cc: stable@dpdk.org Signed-off-by: Andrew Rybchenko ---