From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from out4-smtp.messagingengine.com (out4-smtp.messagingengine.com [66.111.4.28]) by dpdk.org (Postfix) with ESMTP id 975F7239 for ; Tue, 21 Nov 2017 14:22:45 +0100 (CET) Received: from compute1.internal (compute1.nyi.internal [10.202.2.41]) by mailout.nyi.internal (Postfix) with ESMTP id 4C8E320C91; Tue, 21 Nov 2017 08:22:45 -0500 (EST) Received: from frontend2 ([10.202.2.161]) by compute1.internal (MEProxy); Tue, 21 Nov 2017 08:22:45 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fridaylinux.org; h=cc:date:from:in-reply-to:message-id:references:subject:to :x-me-sender:x-me-sender:x-sasl-enc; s=fm1; bh=KCOucqxxJydobTFW5 pRLlsgCRfrNZjGXL/3vtUoi1WE=; b=CDaM+0D7PiJVHdXL/BCSm6p188nEDrr/a aw8tswJ5Wye+P3Z6xzi7paYznt5C3u2Z1QbjOfiHy2KPvBlzUTMXgoxdxLVnrRlN zfYLh4fJp5TYGmZyMuuuuPBWrv/gDcK0Vo0Y0sZpQpA03672kZ8tPhY9cacsVFAr R+RyutvQ8ajqvgBOw2saJFZTrDiBkzlPf+BhNeQz65GDI14M1+St50s4asSRmTkz n9AzRUFGVtRjXi4X8nX12X/acbS5sHVSnElapd/v9mK6IfF6XM5SSfgHYwHe/T67 MDc6Ok8boDi0IMzbgd8gIBT9gx5jeihmdarBYRE/Vh8S9S58ZCQXQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:date:from:in-reply-to:message-id :references:subject:to:x-me-sender:x-me-sender:x-sasl-enc; s= fm1; bh=KCOucqxxJydobTFW5pRLlsgCRfrNZjGXL/3vtUoi1WE=; b=KxUZGCiu TVntcpRL/h5gRN0YHBYNTYIg9mG2mYC5Q5F0g6sioM6gQ80GDkQuI/mlqgeANQt0 agIkT9bfS/IN9vZ0qQmWxpWhY/z9B46G6yyUM59IHIaRuJaeaK7pf/d5TpqTSFOx 6pLEG2S8Zubcv08+Du0iDZ6ROfP5oScjle34ihpAATZbqwIIexB4aRUZISOeyH29 6YgvQ7sPFRbH77+X92Q2QgpNIbCqrFSKgnSeX5QV/Q+I4x3HROsx+nRiGJ47z9do Hd0j5XS2PZDoBH83Vmwo9UwAitUUw9xOnC2FhKpYtoTgOoNlczd8DhqDXpN03Pcu DjIhTWsiFMM1ig== X-ME-Sender: Received: from localhost.localdomain (unknown [180.158.62.0]) by mail.messagingengine.com (Postfix) with ESMTPA id D09FB24631; Tue, 21 Nov 2017 08:22:42 -0500 (EST) From: Yuanhan Liu To: Wei Zhao Cc: Ferruh Yigit , dpdk stable Date: Tue, 21 Nov 2017 21:16:33 +0800 Message-Id: <1511270333-31002-51-git-send-email-yliu@fridaylinux.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1511270333-31002-1-git-send-email-yliu@fridaylinux.org> References: <1511270333-31002-1-git-send-email-yliu@fridaylinux.org> Subject: [dpdk-stable] patch 'net/i40e: fix clear xstats bug in VF' has been queued to stable release 17.08.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: Tue, 21 Nov 2017 13:22:45 -0000 Hi, FYI, your patch has been queued to stable release 17.08.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 11/24/17. So please shout if anyone has objections. Thanks. --yliu --- >>From 3f468896e21e973b272723707c5f0a97450f98e9 Mon Sep 17 00:00:00 2001 From: Wei Zhao Date: Thu, 21 Sep 2017 14:32:22 +0800 Subject: [PATCH] net/i40e: fix clear xstats bug in VF [ upstream commit 8210e9e0d805ee0f80d19149ac0b5799b52c0e13 ] Clearing VSI stats done by setting an offset value to latest stats and further stats values are subtracted from that offset. This setting offset and baselining logic exists in PF driver, but for VF there is no way to update its VSI offset in the PF. So same baselining logic added into VF, also setting VSI offset in VF fixed to support VF stats clear. Fixes: da61cd0849766 ("i40evf: add extended stats") Signed-off-by: Wei Zhao Reviewed-by: Ferruh Yigit --- drivers/net/i40e/i40e_ethdev_vf.c | 64 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 63 insertions(+), 1 deletion(-) diff --git a/drivers/net/i40e/i40e_ethdev_vf.c b/drivers/net/i40e/i40e_ethdev_vf.c index 3e242e8..f338e22 100644 --- a/drivers/net/i40e/i40e_ethdev_vf.c +++ b/drivers/net/i40e/i40e_ethdev_vf.c @@ -993,16 +993,74 @@ i40evf_update_stats(struct rte_eth_dev *dev, struct i40e_eth_stats **pstats) return 0; } +static void +i40evf_stat_update_48(uint64_t *offset, + uint64_t *stat) +{ + if (*stat >= *offset) + *stat = *stat - *offset; + else + *stat = (uint64_t)((*stat + + ((uint64_t)1 << I40E_48_BIT_WIDTH)) - *offset); + + *stat &= I40E_48_BIT_MASK; +} + +static void +i40evf_stat_update_32(uint64_t *offset, + uint64_t *stat) +{ + if (*stat >= *offset) + *stat = (uint64_t)(*stat - *offset); + else + *stat = (uint64_t)((*stat + + ((uint64_t)1 << I40E_32_BIT_WIDTH)) - *offset); +} + +static void +i40evf_update_vsi_stats(struct i40e_vsi *vsi, + struct i40e_eth_stats *nes) +{ + struct i40e_eth_stats *oes = &vsi->eth_stats_offset; + + i40evf_stat_update_48(&oes->rx_bytes, + &nes->rx_bytes); + i40evf_stat_update_48(&oes->rx_unicast, + &nes->rx_unicast); + i40evf_stat_update_48(&oes->rx_multicast, + &nes->rx_multicast); + i40evf_stat_update_48(&oes->rx_broadcast, + &nes->rx_broadcast); + i40evf_stat_update_32(&oes->rx_discards, + &nes->rx_discards); + i40evf_stat_update_32(&oes->rx_unknown_protocol, + &nes->rx_unknown_protocol); + i40evf_stat_update_48(&oes->tx_bytes, + &nes->tx_bytes); + i40evf_stat_update_48(&oes->tx_unicast, + &nes->tx_unicast); + i40evf_stat_update_48(&oes->tx_multicast, + &nes->tx_multicast); + i40evf_stat_update_48(&oes->tx_broadcast, + &nes->tx_broadcast); + i40evf_stat_update_32(&oes->tx_errors, &nes->tx_errors); + i40evf_stat_update_32(&oes->tx_discards, &nes->tx_discards); +} + static int i40evf_get_statistics(struct rte_eth_dev *dev, struct rte_eth_stats *stats) { int ret; struct i40e_eth_stats *pstats = NULL; + struct i40e_vf *vf = I40EVF_DEV_PRIVATE_TO_VF(dev->data->dev_private); + struct i40e_vsi *vsi = &vf->vsi; ret = i40evf_update_stats(dev, &pstats); if (ret != 0) return 0; + i40evf_update_vsi_stats(vsi, pstats); + stats->ipackets = pstats->rx_unicast + pstats->rx_multicast + pstats->rx_broadcast; stats->opackets = pstats->tx_broadcast + pstats->tx_multicast + @@ -1025,7 +1083,7 @@ i40evf_dev_xstats_reset(struct rte_eth_dev *dev) i40evf_update_stats(dev, &pstats); /* set stats offset base on current values */ - vf->vsi.eth_stats_offset = vf->vsi.eth_stats; + vf->vsi.eth_stats_offset = *pstats; } static int i40evf_dev_xstats_get_names(__rte_unused struct rte_eth_dev *dev, @@ -1049,6 +1107,8 @@ static int i40evf_dev_xstats_get(struct rte_eth_dev *dev, int ret; unsigned i; struct i40e_eth_stats *pstats = NULL; + struct i40e_vf *vf = I40EVF_DEV_PRIVATE_TO_VF(dev->data->dev_private); + struct i40e_vsi *vsi = &vf->vsi; if (n < I40EVF_NB_XSTATS) return I40EVF_NB_XSTATS; @@ -1060,6 +1120,8 @@ static int i40evf_dev_xstats_get(struct rte_eth_dev *dev, if (!xstats) return 0; + i40evf_update_vsi_stats(vsi, pstats); + /* loop over xstats array and values from pstats */ for (i = 0; i < I40EVF_NB_XSTATS; i++) { xstats[i].id = i; -- 2.7.4