From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by dpdk.org (Postfix) with ESMTP id 42FFD5A43 for ; Mon, 13 Jul 2015 16:18:03 +0200 (CEST) Received: from orsmga003.jf.intel.com ([10.7.209.27]) by fmsmga103.fm.intel.com with ESMTP; 13 Jul 2015 07:18:02 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.15,462,1432623600"; d="scan'208";a="605244634" Received: from sie-lab-212-170.ir.intel.com (HELO silpixa00378251.ir.intel.com) ([10.237.212.170]) by orsmga003.jf.intel.com with ESMTP; 13 Jul 2015 07:18:03 -0700 From: Maryam Tahhan To: dev@dpdk.org Date: Mon, 13 Jul 2015 15:17:48 +0100 Message-Id: <1436797074-237442-4-git-send-email-maryam.tahhan@intel.com> X-Mailer: git-send-email 2.4.3 In-Reply-To: <1436797074-237442-1-git-send-email-maryam.tahhan@intel.com> References: <1436797074-237442-1-git-send-email-maryam.tahhan@intel.com> Subject: [dpdk-dev] [PATCH v5 3/9] ethdev: expose extended error stats X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 13 Jul 2015 14:18:04 -0000 Extend rte_eth_xstats_get to retrieve additional stats from the device driver as well the ethdev generic stats. Signed-off-by: Maryam Tahhan --- drivers/net/ixgbe/ixgbe_ethdev.c | 7 ++++--- lib/librte_ether/rte_ethdev.c | 25 ++++++++++++++++--------- 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/drivers/net/ixgbe/ixgbe_ethdev.c b/drivers/net/ixgbe/ixgbe_ethdev.c index 90280ca..29aad1e 100644 --- a/drivers/net/ixgbe/ixgbe_ethdev.c +++ b/drivers/net/ixgbe/ixgbe_ethdev.c @@ -2061,6 +2061,7 @@ ixgbe_dev_xstats_get(struct rte_eth_dev *dev, struct rte_eth_xstats *xstats, total_qprdc = 0; rxnfgpc = 0; txdgpc = 0; + count = n - IXGBE_NB_XSTATS; ixgbe_read_stats_registers(hw, hw_stats, &total_missed_rx, &total_qbrc, &total_qprc, &rxnfgpc, &txdgpc, &total_qprdc); @@ -2073,13 +2074,13 @@ ixgbe_dev_xstats_get(struct rte_eth_dev *dev, struct rte_eth_xstats *xstats, /* Extended stats */ for (i = 0; i < IXGBE_NB_XSTATS; i++) { - snprintf(xstats[i].name, sizeof(xstats[i].name), + snprintf(xstats[count].name, sizeof(xstats[i].name), "%s", rte_ixgbe_stats_strings[i].name); - xstats[i].value = *(uint64_t *)(((char *)hw_stats) + + xstats[count++].value = *(uint64_t *)(((char *)hw_stats) + rte_ixgbe_stats_strings[i].offset); } - return count; + return IXGBE_NB_XSTATS; } static void diff --git a/lib/librte_ether/rte_ethdev.c b/lib/librte_ether/rte_ethdev.c index ddf3658..2e62f43 100644 --- a/lib/librte_ether/rte_ethdev.c +++ b/lib/librte_ether/rte_ethdev.c @@ -1661,26 +1661,33 @@ rte_eth_xstats_get(uint8_t port_id, struct rte_eth_xstats *xstats, { struct rte_eth_stats eth_stats; struct rte_eth_dev *dev; - unsigned count, i, q; + unsigned count = 0, i, q; + signed xcount = 0; uint64_t val, *stats_ptr; VALID_PORTID_OR_ERR_RET(port_id, -EINVAL); dev = &rte_eth_devices[port_id]; - /* implemented by the driver */ - if (dev->dev_ops->xstats_get != NULL) - return (*dev->dev_ops->xstats_get)(dev, xstats, n); - - /* else, return generic statistics */ + /* Return generic statistics */ count = RTE_NB_STATS; count += dev->data->nb_rx_queues * RTE_NB_RXQ_STATS; count += dev->data->nb_tx_queues * RTE_NB_TXQ_STATS; + + /* implemented by the driver */ + if (dev->dev_ops->xstats_get != NULL) { + /* Retrieve the xstats from the driver at the end of the + * xstats struct. + */ + xcount = (*dev->dev_ops->xstats_get)(dev, xstats, n); + if (xcount < 0) + return xcount; + } + if (n < count) - return count; + return count + xcount; /* now fill the xstats structure */ - count = 0; rte_eth_stats_get(port_id, ð_stats); @@ -1722,7 +1729,7 @@ rte_eth_xstats_get(uint8_t port_id, struct rte_eth_xstats *xstats, } } - return count; + return count + xcount; } /* reset ethdev extended statistics */ -- 2.4.3