From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm0-f67.google.com (mail-wm0-f67.google.com [74.125.82.67]) by dpdk.org (Postfix) with ESMTP id D10AC1B249 for ; Mon, 30 Oct 2017 16:37:36 +0100 (CET) Received: by mail-wm0-f67.google.com with SMTP id b9so17324964wmh.0 for ; Mon, 30 Oct 2017 08:37:36 -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; bh=fB67CkAmQ9fakhMMNbffYudknpFJq9A/aq3jZJ6pTEQ=; b=ZYTaZviggCBkqXJISPI0Xkb4PLK5K9Df+ueeL8a7qDXF8e6MrJkBjOX1dcsEIN8On7 vv/dHAY4o9d2UAxgHNURwoDJZkyguUMRifpuz6gHSb7gEMMeFv4sv/UfvsbAQAp/nGSc p5oojt+j+TcfM9t3PcIS2uOQjCZ17Pbxd/sA01r6lKaiMZD7K2KK6Ub9walGFaee6Jfl pal5yW/fDOyZEBpIaCj3Jxar3WJgr/J2sLR2j8lu6uHCUJzEA1G+xdHLiuqxgk08qUW7 68r2VJ9/BSP7BoZfW+iXdsZvbcnxFhMXjGhXXwpsH6t8svUyAnZzkGID0UOXLzKao3r4 rucw== 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; bh=fB67CkAmQ9fakhMMNbffYudknpFJq9A/aq3jZJ6pTEQ=; b=YkyNBYed7JsJLpLR3BwwRD1xEijEA1C47JWO39wd7vv/iv2d1vcV3sp2TBqI4CCD/S Jz7AaenjCbuGBTynUDUBDWoTnmjOBJqAO1G/okzlTF+TPGu05TECJSKc48ISTrMtUmJv EyQxolXRuZ0NU/DqYPz/qkrMRR9lDdE4156/qJx/2q1x2/DB8sCnOx5IJDyvWi/vZA8R fQrb35RG2xTf5ecjk4aJSSCSQQaIfvxSQdxsBYZ+mt64eBRr6cvOaMpDeY3oH7DzGozi eYsYDNrsTQFGPbhdGd8ghxEnOU7VnMnhq+t2U0ht0DVEPGjQH/ZpX8eXsVfeikafljDW PmgA== X-Gm-Message-State: AMCzsaVfsN8XslB77bTJOhfXAacv9hfqgmoJCRZ93FwzQ4PEKYNTa07X deB1QmuZuL+q1tzUm1mWbv55I9XAG18= X-Google-Smtp-Source: ABhQp+ScML5AOMVeFyiaFsIavtvrVWi4aVOHSktASOdK70rG6ehmdMv8CQdvUIsldSAbC5IUo3vH5w== X-Received: by 10.28.71.67 with SMTP id u64mr3986312wma.48.1509377856502; Mon, 30 Oct 2017 08:37:36 -0700 (PDT) Received: from localhost ([2a00:23c5:bef3:400:4a51:b7ff:fe0b:4749]) by smtp.gmail.com with ESMTPSA id c4sm9179376wre.57.2017.10.30.08.37.35 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Mon, 30 Oct 2017 08:37:35 -0700 (PDT) From: luca.boccassi@gmail.com To: Wei Zhao Cc: Ferruh Yigit , dpdk stable Date: Mon, 30 Oct 2017 15:34:32 +0000 Message-Id: <20171030153511.13322-29-luca.boccassi@gmail.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20171030153511.13322-1-luca.boccassi@gmail.com> References: <20171030153511.13322-1-luca.boccassi@gmail.com> Subject: [dpdk-stable] patch 'net/i40e: fix clear xstats bug in VF' has been queued to LTS release 16.11.4 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: Mon, 30 Oct 2017 15:37:37 -0000 Hi, FYI, your patch has been queued to LTS release 16.11.4 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/01/17. So please shout if anyone has objections. Thanks. Kind regards, Luca Boccassi --- >>From b6d081cac4065b8f1f82a957be3b057d976546b2 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 c01312228..e8819f576 100644 --- a/drivers/net/i40e/i40e_ethdev_vf.c +++ b/drivers/net/i40e/i40e_ethdev_vf.c @@ -952,16 +952,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_statics(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 + @@ -984,7 +1042,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, @@ -1008,6 +1066,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; @@ -1019,6 +1079,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.11.0