From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from nbfkord-smmo01.seg.att.com (nbfkord-smmo01.seg.att.com [209.65.160.76]) by dpdk.org (Postfix) with ESMTP id 8CB6BFE5 for ; Fri, 3 Mar 2017 13:49:44 +0100 (CET) Received: from unknown [12.187.104.26] (EHLO nbfkord-smmo01.seg.att.com) by nbfkord-smmo01.seg.att.com(mxl_mta-7.2.4-7) with ESMTP id 86669b85.2b950ee4a940.852012.00-2491.2446792.nbfkord-smmo01.seg.att.com (envelope-from ); Fri, 03 Mar 2017 12:49:44 +0000 (UTC) X-MXL-Hash: 58b9666820283b06-da791f03d11020a05f7edc671e238b50bc2b8585 Received: from unknown [12.187.104.26] by nbfkord-smmo01.seg.att.com(mxl_mta-7.2.4-7) with SMTP id 56669b85.0.852008.00-2320.2446784.nbfkord-smmo01.seg.att.com (envelope-from ); Fri, 03 Mar 2017 12:49:43 +0000 (UTC) X-MXL-Hash: 58b9666733502b18-213ef803e3489e35460752410073bb6ad6443e87 Received: from ocex03.SolarFlarecom.com (10.20.40.36) by ocex03.SolarFlarecom.com (10.20.40.36) with Microsoft SMTP Server (TLS) id 15.0.1044.25; Fri, 3 Mar 2017 04:49:37 -0800 Received: from opal.uk.solarflarecom.com (10.17.10.1) by ocex03.SolarFlarecom.com (10.20.40.36) with Microsoft SMTP Server (TLS) id 15.0.1044.25 via Frontend Transport; Fri, 3 Mar 2017 04:49:37 -0800 Received: from uklogin.uk.solarflarecom.com (uklogin.uk.solarflarecom.com [10.17.10.10]) by opal.uk.solarflarecom.com (8.13.8/8.13.8) with ESMTP id v23Cna2l000324; Fri, 3 Mar 2017 12:49:36 GMT Received: from uklogin.uk.solarflarecom.com (localhost.localdomain [127.0.0.1]) by uklogin.uk.solarflarecom.com (8.13.8/8.13.8) with ESMTP id v23Cna1T012868; Fri, 3 Mar 2017 12:49:36 GMT From: Andrew Rybchenko To: CC: Ivan Malov Date: Fri, 3 Mar 2017 12:49:25 +0000 Message-ID: <1488545365-12827-2-git-send-email-arybchenko@solarflare.com> X-Mailer: git-send-email 1.8.2.3 In-Reply-To: <1488545365-12827-1-git-send-email-arybchenko@solarflare.com> References: <1488545365-12827-1-git-send-email-arybchenko@solarflare.com> MIME-Version: 1.0 Content-Type: text/plain X-AnalysisOut: [v=2.1 cv=LaQ6n2ri c=1 sm=1 tr=0 a=8BlWFWvVlq5taO8ncb8nKg==] X-AnalysisOut: [:17 a=6Iz7jQTuP9IA:10 a=pK7X0mNQAAAA:8 a=zRKbQ67AAAAA:8 a=] X-AnalysisOut: [lYM0rMseM616sfyoepQA:9 a=5HA-qpC1VU4iIGLgRoNS:22 a=PA03WX8] X-AnalysisOut: [tBzeizutn5_OT:22] X-Spam: [F=0.4577738365; CM=0.500; S=0.457(2015072901)] X-MAIL-FROM: X-SOURCE-IP: [12.187.104.26] Subject: [dpdk-dev] [PATCH 2/2] net/sfc: add support for statistics reset X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 03 Mar 2017 12:49:45 -0000 From: Ivan Malov Signed-off-by: Ivan Malov Signed-off-by: Andrew Rybchenko --- drivers/net/sfc/sfc.h | 2 ++ drivers/net/sfc/sfc_ethdev.c | 23 +++++++++++++++++++++++ drivers/net/sfc/sfc_port.c | 24 ++++++++++++++++++++++++ 3 files changed, 49 insertions(+) diff --git a/drivers/net/sfc/sfc.h b/drivers/net/sfc/sfc.h index 8c6c02f..655328f 100644 --- a/drivers/net/sfc/sfc.h +++ b/drivers/net/sfc/sfc.h @@ -153,6 +153,7 @@ struct sfc_port { rte_spinlock_t mac_stats_lock; uint64_t *mac_stats_buf; efsys_mem_t mac_stats_dma_mem; + boolean_t mac_stats_reset_pending; uint32_t mac_stats_mask[EFX_MAC_STATS_MASK_NPAGES]; }; @@ -281,6 +282,7 @@ int sfc_dma_alloc(const struct sfc_adapter *sa, const char *name, uint16_t id, void sfc_port_link_mode_to_info(efx_link_mode_t link_mode, struct rte_eth_link *link_info); int sfc_port_update_mac_stats(struct sfc_adapter *sa); +int sfc_port_reset_mac_stats(struct sfc_adapter *sa); int sfc_set_rx_mode(struct sfc_adapter *sa); diff --git a/drivers/net/sfc/sfc_ethdev.c b/drivers/net/sfc/sfc_ethdev.c index 71587fb..cac01ac 100644 --- a/drivers/net/sfc/sfc_ethdev.c +++ b/drivers/net/sfc/sfc_ethdev.c @@ -525,6 +525,27 @@ rte_spinlock_unlock(&port->mac_stats_lock); } +static void +sfc_stats_reset(struct rte_eth_dev *dev) +{ + struct sfc_adapter *sa = dev->data->dev_private; + struct sfc_port *port = &sa->port; + int rc; + + if (sa->state != SFC_ADAPTER_STARTED) { + /* + * The operation cannot be done if port is not started; it + * will be scheduled to be done during the next port start + */ + port->mac_stats_reset_pending = B_TRUE; + return; + } + + rc = sfc_port_reset_mac_stats(sa); + if (rc != 0) + sfc_err(sa, "failed to reset statistics (rc = %d)", rc); +} + static int sfc_xstats_get(struct rte_eth_dev *dev, struct rte_eth_xstat *xstats, unsigned int xstats_count) @@ -1200,7 +1221,9 @@ .allmulticast_disable = sfc_dev_allmulti_disable, .link_update = sfc_dev_link_update, .stats_get = sfc_stats_get, + .stats_reset = sfc_stats_reset, .xstats_get = sfc_xstats_get, + .xstats_reset = sfc_stats_reset, .xstats_get_names = sfc_xstats_get_names, .dev_infos_get = sfc_dev_infos_get, .dev_supported_ptypes_get = sfc_dev_supported_ptypes_get, diff --git a/drivers/net/sfc/sfc_port.c b/drivers/net/sfc/sfc_port.c index 5998a99..e2f5043 100644 --- a/drivers/net/sfc/sfc_port.c +++ b/drivers/net/sfc/sfc_port.c @@ -61,6 +61,19 @@ return 0; } +int +sfc_port_reset_mac_stats(struct sfc_adapter *sa) +{ + struct sfc_port *port = &sa->port; + int rc; + + rte_spinlock_lock(&port->mac_stats_lock); + rc = efx_mac_stats_clear(sa->nic); + rte_spinlock_unlock(&port->mac_stats_lock); + + return rc; +} + static int sfc_port_init_dev_link(struct sfc_adapter *sa) { @@ -140,6 +153,15 @@ if (rc != 0) goto fail_mac_filter_set; + if (port->mac_stats_reset_pending) { + rc = sfc_port_reset_mac_stats(sa); + if (rc != 0) + sfc_err(sa, "statistics reset failed (requested " + "before the port was started)"); + + port->mac_stats_reset_pending = B_FALSE; + } + efx_mac_stats_get_mask(sa->nic, port->mac_stats_mask, sizeof(port->mac_stats_mask)); @@ -237,6 +259,8 @@ if (rc != 0) goto fail_mac_stats_dma_alloc; + port->mac_stats_reset_pending = B_FALSE; + sfc_log_init(sa, "done"); return 0; -- 1.8.2.3