patches for DPDK stable branches
 help / color / mirror / Atom feed
From: Yongseok Koh <yskoh@mellanox.com>
To: Andrew Rybchenko <arybchenko@solarflare.com>
Cc: dpdk stable <stable@dpdk.org>
Subject: [dpdk-stable] patch 'net/sfc: fix Rx packets counter' has been queued to LTS release 17.11.6
Date: Fri,  8 Mar 2019 09:47:34 -0800	[thread overview]
Message-ID: <20190308174749.30771-56-yskoh@mellanox.com> (raw)
In-Reply-To: <20190308174749.30771-1-yskoh@mellanox.com>

Hi,

FYI, your patch has been queued to LTS release 17.11.6

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objection by 03/13/19. So please
shout if anyone has objection.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Yongseok

---
>From 10498b42efd1f989bbf211dab69de474d4f68169 Mon Sep 17 00:00:00 2001
From: Andrew Rybchenko <arybchenko@solarflare.com>
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 <arybchenko@solarflare.com>
---
 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 7bc7a077c..b62306512 100644
--- a/drivers/net/sfc/sfc.h
+++ b/drivers/net/sfc/sfc.h
@@ -175,6 +175,8 @@ struct sfc_port {
 	uint64_t			mac_stats_last_request_timestamp;
 
 	uint32_t		mac_stats_mask[EFX_MAC_STATS_MASK_NPAGES];
+
+	uint64_t			ipackets;
 };
 
 /* Adapter private data */
diff --git a/drivers/net/sfc/sfc_ethdev.c b/drivers/net/sfc/sfc_ethdev.c
index 5854fd76a..09ab4ec8a 100644
--- a/drivers/net/sfc/sfc_ethdev.c
+++ b/drivers/net/sfc/sfc_ethdev.c
@@ -518,6 +518,29 @@ sfc_tx_queue_release(void *queue)
 	sfc_adapter_unlock(sa);
 }
 
+/*
+ * 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)
 {
@@ -555,7 +578,6 @@ sfc_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
 		stats->imissed = mac_stats[EFX_MAC_VADAPTER_RX_BAD_PACKETS];
 		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];
 		stats->obytes = mac_stats[EFX_MAC_TX_OCTETS];
@@ -581,6 +603,13 @@ sfc_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
 			mac_stats[EFX_MAC_RX_ALIGN_ERRORS] +
 			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;
 	}
 
 unlock:
diff --git a/drivers/net/sfc/sfc_port.c b/drivers/net/sfc/sfc_port.c
index 5254394c9..109981f13 100644
--- a/drivers/net/sfc/sfc_port.c
+++ b/drivers/net/sfc/sfc_port.c
@@ -109,6 +109,18 @@ sfc_port_update_mac_stats(struct sfc_adapter *sa)
 	return 0;
 }
 
+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)
 {
@@ -117,6 +129,8 @@ 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);
 
 	return rc;
-- 
2.11.0

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2019-03-08 09:46:42.973675250 -0800
+++ 0056-net-sfc-fix-Rx-packets-counter.patch	2019-03-08 09:46:40.295402000 -0800
@@ -1,13 +1,14 @@
-From ab77a0013a811aacdde49e903786eff7abb308ec Mon Sep 17 00:00:00 2001
+From 10498b42efd1f989bbf211dab69de474d4f68169 Mon Sep 17 00:00:00 2001
 From: Andrew Rybchenko <arybchenko@solarflare.com>
 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 <arybchenko@solarflare.com>
 ---
@@ -17,10 +18,10 @@
  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
+index 7bc7a077c..b62306512 100644
 --- a/drivers/net/sfc/sfc.h
 +++ b/drivers/net/sfc/sfc.h
-@@ -149,6 +149,8 @@ struct sfc_port {
+@@ -175,6 +175,8 @@ struct sfc_port {
  	uint64_t			mac_stats_last_request_timestamp;
  
  	uint32_t		mac_stats_mask[EFX_MAC_STATS_MASK_NPAGES];
@@ -28,12 +29,12 @@
 +	uint64_t			ipackets;
  };
  
- struct sfc_rss_hf_rte_to_efx {
+ /* Adapter private data */
 diff --git a/drivers/net/sfc/sfc_ethdev.c b/drivers/net/sfc/sfc_ethdev.c
-index 08d3271cb..a7322a1eb 100644
+index 5854fd76a..09ab4ec8a 100644
 --- a/drivers/net/sfc/sfc_ethdev.c
 +++ b/drivers/net/sfc/sfc_ethdev.c
-@@ -503,6 +503,29 @@ sfc_tx_queue_release(void *queue)
+@@ -518,6 +518,29 @@ sfc_tx_queue_release(void *queue)
  	sfc_adapter_unlock(sa);
  }
  
@@ -63,7 +64,7 @@
  static int
  sfc_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
  {
-@@ -540,7 +563,6 @@ sfc_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
+@@ -555,7 +578,6 @@ sfc_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
  		stats->imissed = mac_stats[EFX_MAC_VADAPTER_RX_BAD_PACKETS];
  		stats->oerrors = mac_stats[EFX_MAC_VADAPTER_TX_BAD_PACKETS];
  	} else {
@@ -71,7 +72,7 @@
  		stats->opackets = mac_stats[EFX_MAC_TX_PKTS];
  		stats->ibytes = mac_stats[EFX_MAC_RX_OCTETS];
  		stats->obytes = mac_stats[EFX_MAC_TX_OCTETS];
-@@ -566,6 +588,13 @@ sfc_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
+@@ -581,6 +603,13 @@ sfc_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
  			mac_stats[EFX_MAC_RX_ALIGN_ERRORS] +
  			mac_stats[EFX_MAC_RX_JABBER_PKTS];
  		/* no oerrors counters supported on EF10 */
@@ -86,10 +87,10 @@
  
  unlock:
 diff --git a/drivers/net/sfc/sfc_port.c b/drivers/net/sfc/sfc_port.c
-index 5384dbbdb..5eb4b3aca 100644
+index 5254394c9..109981f13 100644
 --- a/drivers/net/sfc/sfc_port.c
 +++ b/drivers/net/sfc/sfc_port.c
-@@ -87,6 +87,18 @@ sfc_port_update_mac_stats(struct sfc_adapter *sa)
+@@ -109,6 +109,18 @@ sfc_port_update_mac_stats(struct sfc_adapter *sa)
  	return 0;
  }
  
@@ -108,7 +109,7 @@
  int
  sfc_port_reset_mac_stats(struct sfc_adapter *sa)
  {
-@@ -95,6 +107,8 @@ sfc_port_reset_mac_stats(struct sfc_adapter *sa)
+@@ -117,6 +129,8 @@ sfc_port_reset_mac_stats(struct sfc_adapter *sa)
  
  	rte_spinlock_lock(&port->mac_stats_lock);
  	rc = efx_mac_stats_clear(sa->nic);

  parent reply	other threads:[~2019-03-08 17:49 UTC|newest]

Thread overview: 75+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-03-08 17:46 [dpdk-stable] patch 'net/bnx2x: cleanup info logs' " Yongseok Koh
2019-03-08 17:46 ` [dpdk-stable] patch 'net/i40e: fix getting RSS configuration' " Yongseok Koh
2019-03-08 17:46 ` [dpdk-stable] patch 'net/i40e: fix using recovery mode firmware' " Yongseok Koh
2019-03-08 17:46 ` [dpdk-stable] patch 'net/ixgbe: fix overwriting RSS RETA' " Yongseok Koh
2019-03-08 17:46 ` [dpdk-stable] patch 'net/mlx5: fix validation of Rx queue number' " Yongseok Koh
2019-03-08 17:46 ` [dpdk-stable] patch 'ethdev: fix typo in queue setup error log' " Yongseok Koh
2019-03-08 17:46 ` [dpdk-stable] patch 'drivers/net: fix several Tx prepare functions' " Yongseok Koh
2019-03-08 17:46 ` [dpdk-stable] patch 'vhost: fix crash after mmap failure' " Yongseok Koh
2019-03-08 17:46 ` [dpdk-stable] patch 'net/i40e: revert fix offload not supported mask' " Yongseok Koh
2019-03-08 17:46 ` [dpdk-stable] patch 'net/i40e: remove redundant reset of queue number' " Yongseok Koh
2019-03-08 17:46 ` [dpdk-stable] patch 'doc: fix garbage text in generated HTML guides' " Yongseok Koh
2019-03-08 17:46 ` [dpdk-stable] patch 'eventdev: fix xstats documentation typo' " Yongseok Koh
2019-03-08 17:46 ` [dpdk-stable] patch 'crypto/qat: fix block size error handling' " Yongseok Koh
2019-03-08 17:46 ` [dpdk-stable] patch 'timer: fix race condition' " Yongseok Koh
2019-03-08 17:46 ` [dpdk-stable] patch 'net/i40e: fix statistics inconsistency' " Yongseok Koh
2019-03-08 17:46 ` [dpdk-stable] patch 'vhost: fix race condition when adding fd in the fdset' " Yongseok Koh
2019-03-08 17:46 ` [dpdk-stable] patch 'net/ena: add supported RSS offloads types' " Yongseok Koh
2019-03-08 17:46 ` [dpdk-stable] patch 'net/ena: update completion queue after cleanup' " Yongseok Koh
2019-03-08 17:46 ` [dpdk-stable] patch 'net: fix underflow for checksum of invalid IPv4 packets' " Yongseok Koh
2019-03-08 17:46 ` [dpdk-stable] patch 'net/tap: add buffer overflow checks before checksum' " Yongseok Koh
2019-03-08 17:46 ` [dpdk-stable] patch 'net/af_packet: fix setting MTU decrements sockaddr twice' " Yongseok Koh
2019-03-08 17:47 ` [dpdk-stable] patch 'net/tap: fix possible uninitialized variable access' " Yongseok Koh
2019-03-08 17:47 ` [dpdk-stable] patch 'app/testpmd: expand RED queue thresholds to 64 bits' " Yongseok Koh
2019-03-08 17:47 ` [dpdk-stable] patch 'net/i40e: fix get RSS conf' " Yongseok Koh
2019-03-08 17:47 ` [dpdk-stable] patch 'devtools: fix wrong headline lowercase for arm' " Yongseok Koh
2019-03-08 17:47 ` [dpdk-stable] patch 'drivers/crypto: fix PMDs memory leak' " Yongseok Koh
2019-03-08 17:47 ` [dpdk-stable] patch 'test/crypto: fix misleading trace message' " Yongseok Koh
2019-03-08 17:47 ` [dpdk-stable] patch 'examples/ipsec-secgw: fix outbound codepath for single SA' " Yongseok Koh
2019-03-08 17:47 ` [dpdk-stable] patch 'examples/ipsec-secgw: make local variables static' " Yongseok Koh
2019-03-08 17:47 ` [dpdk-stable] patch 'kni: fix build on RHEL 8' " Yongseok Koh
2019-03-08 17:47 ` [dpdk-stable] patch 'kni: fix build on RHEL8 for arm and Power9' " Yongseok Koh
2019-03-08 17:47 ` [dpdk-stable] patch 'mk: fix scope of disabling AVX512F support' " Yongseok Koh
2019-03-08 17:47 ` [dpdk-stable] patch 'net/ixgbe: fix over using multicast table for VF' " Yongseok Koh
2019-03-08 17:47 ` [dpdk-stable] patch 'vhost: fix possible out of bound access in vector filling' " Yongseok Koh
2019-03-08 17:47 ` [dpdk-stable] patch 'net/fm10k: fix internal switch initial status' " Yongseok Koh
2019-03-08 17:47 ` [dpdk-stable] patch 'net/dpaa: fix secondary process' " Yongseok Koh
2019-03-08 17:47 ` [dpdk-stable] patch 'examples/flow_filtering: fix example documentation' " Yongseok Koh
2019-03-08 17:47 ` [dpdk-stable] patch 'doc: fix a parameter name in testpmd guide' " Yongseok Koh
2019-03-08 17:47 ` [dpdk-stable] patch 'app/testpmd: fix quit to stop all ports before close' " Yongseok Koh
2019-03-08 17:47 ` [dpdk-stable] patch 'net/bonding: fix possible null pointer reference' " Yongseok Koh
2019-03-08 17:47 ` [dpdk-stable] patch 'net/sfc: discard last seen VLAN TCI if Tx packet is dropped' " Yongseok Koh
2019-03-08 17:47 ` [dpdk-stable] patch 'net/dpaa2: fix device init for secondary process' " Yongseok Koh
2019-03-08 17:47 ` [dpdk-stable] patch 'net/sfc: fix typo in preprocessor check' " Yongseok Koh
2019-03-08 17:47 ` [dpdk-stable] patch 'drivers: fix sprintf with snprintf' " Yongseok Koh
2019-03-08 17:47 ` [dpdk-stable] patch 'net/mlx5: fix instruction hotspot on replenishing Rx buffer' " Yongseok Koh
2019-03-08 17:47 ` [dpdk-stable] patch 'examples/tep_term: remove unused constant' " Yongseok Koh
2019-03-08 17:47 ` [dpdk-stable] patch 'eal: fix core number validation' " Yongseok Koh
2019-03-08 17:47 ` [dpdk-stable] patch 'eal: fix out of bound access when no CPU available' " Yongseok Koh
2019-03-08 17:47 ` [dpdk-stable] patch 'eal: check string parameter lengths' " Yongseok Koh
2019-03-08 17:47 ` [dpdk-stable] patch 'gro: check invalid TCP header length' " Yongseok Koh
2019-03-08 17:47 ` [dpdk-stable] patch 'net/i40e: fix VF overwrite PF RSS LUT for X722' " Yongseok Koh
2019-03-08 17:47 ` [dpdk-stable] patch 'net/sfc: fix VF error/missed stats mapping' " Yongseok Koh
2019-03-08 17:47 ` [dpdk-stable] patch 'net/sfc: fix datapath name references in logs' " Yongseok Koh
2019-03-08 17:47 ` [dpdk-stable] patch 'vhost: fix memory leak on realloc failure' " Yongseok Koh
2019-03-08 17:47 ` [dpdk-stable] patch 'examples/vhost: fix path allocation failure handling' " Yongseok Koh
2019-03-08 17:47 ` Yongseok Koh [this message]
2019-03-08 17:47 ` [dpdk-stable] patch 'doc: add missing loopback option in testpmd guide' " Yongseok Koh
2019-03-08 17:47 ` [dpdk-stable] patch 'efd: fix tail queue leak' " Yongseok Koh
2019-03-08 17:47 ` [dpdk-stable] patch 'net/qede: fix performance bottleneck in Rx path' " Yongseok Koh
2019-03-12 17:04   ` [dpdk-stable] [EXT] " Shahed Shaikh
2019-03-12 22:03     ` Yongseok Koh
2019-03-19 19:12       ` Shahed Shaikh
2019-03-27 18:47         ` Yongseok Koh
2019-03-08 17:47 ` [dpdk-stable] patch 'net/qede: remove prefetch in Tx " Yongseok Koh
2019-03-08 17:47 ` [dpdk-stable] patch 'doc: fix references in power management guide' " Yongseok Koh
2019-03-08 17:47 ` [dpdk-stable] patch 'ethdev: fix errno to have positive value' " Yongseok Koh
2019-03-08 17:47 ` [dpdk-stable] patch 'gso: fix VxLAN/GRE tunnel checks' " Yongseok Koh
2019-03-08 17:47 ` [dpdk-stable] patch 'kni: fix build for dev_open in Linux 5.0' " Yongseok Koh
2019-03-08 17:47 ` [dpdk-stable] patch 'kni: fix build for igb_ndo_bridge_setlink " Yongseok Koh
2019-03-08 17:47 ` [dpdk-stable] patch 'vfio: fix error message' " Yongseok Koh
2019-03-08 17:47 ` [dpdk-stable] patch 'net/i40e: fix queue region DCB configure' " Yongseok Koh
2019-03-08 17:47 ` [dpdk-stable] patch 'net/virtio-user: fix used ring in cvq handling' " Yongseok Koh
2019-03-08 17:47 ` [dpdk-stable] patch 'net/ena: fix dev init with multi-process' " Yongseok Koh
2019-03-08 17:47 ` [dpdk-stable] patch 'net/ena: fix errno to positive value' " Yongseok Koh
2019-03-08 17:47 ` [dpdk-stable] patch 'doc: add dependency for PDF in contributing guide' " Yongseok Koh

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20190308174749.30771-56-yskoh@mellanox.com \
    --to=yskoh@mellanox.com \
    --cc=arybchenko@solarflare.com \
    --cc=stable@dpdk.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).