From: Harry van Haaren <harry.van.haaren@intel.com>
To: dev@dpdk.org
Subject: [dpdk-dev] [PATCH v3 10/11] i40evf: add xstats() implementation
Date: Thu, 22 Oct 2015 16:48:33 +0100 [thread overview]
Message-ID: <1445528914-27636-11-git-send-email-harry.van.haaren@intel.com> (raw)
In-Reply-To: <1445528914-27636-1-git-send-email-harry.van.haaren@intel.com>
Add implementation of xstats() functions in i40evf PMD.
Signed-off-by: Harry van Haaren <harry.van.haaren@intel.com>
---
drivers/net/i40e/i40e_ethdev_vf.c | 89 +++++++++++++++++++++++++++++++++++++--
1 file changed, 86 insertions(+), 3 deletions(-)
diff --git a/drivers/net/i40e/i40e_ethdev_vf.c b/drivers/net/i40e/i40e_ethdev_vf.c
index b694400..3181400 100644
--- a/drivers/net/i40e/i40e_ethdev_vf.c
+++ b/drivers/net/i40e/i40e_ethdev_vf.c
@@ -112,6 +112,9 @@ static int i40evf_dev_link_update(struct rte_eth_dev *dev,
__rte_unused int wait_to_complete);
static void i40evf_dev_stats_get(struct rte_eth_dev *dev,
struct rte_eth_stats *stats);
+static int i40evf_dev_xstats_get(struct rte_eth_dev *dev,
+ struct rte_eth_xstats *xstats, unsigned n);
+static void i40evf_dev_xstats_reset(struct rte_eth_dev *dev);
static int i40evf_vlan_filter_set(struct rte_eth_dev *dev,
uint16_t vlan_id, int on);
static void i40evf_vlan_offload_set(struct rte_eth_dev *dev, int mask);
@@ -148,6 +151,30 @@ static int i40evf_dev_rss_hash_conf_get(struct rte_eth_dev *dev,
/* Default hash key buffer for RSS */
static uint32_t rss_key_default[I40E_VFQF_HKEY_MAX_INDEX + 1];
+struct rte_i40evf_xstats_name_off {
+ char name[RTE_ETH_XSTATS_NAME_SIZE];
+ unsigned offset;
+};
+
+static const struct rte_i40evf_xstats_name_off rte_i40evf_stats_strings[] = {
+ {"rx_bytes", offsetof(struct i40e_eth_stats, rx_bytes)},
+ {"rx_unicast_packets", offsetof(struct i40e_eth_stats, rx_unicast)},
+ {"rx_multicast_packets", offsetof(struct i40e_eth_stats, rx_multicast)},
+ {"rx_broadcast_packets", offsetof(struct i40e_eth_stats, rx_broadcast)},
+ {"rx_dropped_packets", offsetof(struct i40e_eth_stats, rx_discards)},
+ {"rx_unknown_protocol_packets", offsetof(struct i40e_eth_stats,
+ rx_unknown_protocol)},
+ {"tx_bytes", offsetof(struct i40e_eth_stats, tx_bytes)},
+ {"tx_unicast_packets", offsetof(struct i40e_eth_stats, tx_bytes)},
+ {"tx_multicast_packets", offsetof(struct i40e_eth_stats, tx_bytes)},
+ {"tx_broadcast_packets", offsetof(struct i40e_eth_stats, tx_bytes)},
+ {"tx_dropped_packets", offsetof(struct i40e_eth_stats, tx_bytes)},
+ {"tx_error_packets", offsetof(struct i40e_eth_stats, tx_bytes)},
+};
+
+#define I40EVF_NB_XSTATS (sizeof(rte_i40evf_stats_strings) / \
+ sizeof(rte_i40evf_stats_strings[0]))
+
static const struct eth_dev_ops i40evf_eth_dev_ops = {
.dev_configure = i40evf_dev_configure,
.dev_start = i40evf_dev_start,
@@ -158,6 +185,8 @@ static const struct eth_dev_ops i40evf_eth_dev_ops = {
.allmulticast_disable = i40evf_dev_allmulticast_disable,
.link_update = i40evf_dev_link_update,
.stats_get = i40evf_dev_stats_get,
+ .xstats_get = i40evf_dev_xstats_get,
+ .xstats_reset = i40evf_dev_xstats_reset,
.dev_close = i40evf_dev_close,
.dev_infos_get = i40evf_dev_info_get,
.vlan_filter_set = i40evf_vlan_filter_set,
@@ -888,11 +917,10 @@ i40evf_del_mac_addr(struct rte_eth_dev *dev, struct ether_addr *addr)
}
static int
-i40evf_get_statics(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
+i40evf_update_stats(struct rte_eth_dev *dev, struct i40e_eth_stats **pstats)
{
struct i40e_vf *vf = I40EVF_DEV_PRIVATE_TO_VF(dev->data->dev_private);
struct i40e_virtchnl_queue_select q_stats;
- struct i40e_eth_stats *pstats;
int err;
struct vf_cmd_info args;
@@ -907,9 +935,23 @@ i40evf_get_statics(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
err = i40evf_execute_vf_cmd(dev, &args);
if (err) {
PMD_DRV_LOG(ERR, "fail to execute command OP_GET_STATS");
+ *pstats = NULL;
return err;
}
- pstats = (struct i40e_eth_stats *)args.out_buffer;
+ *pstats = (struct i40e_eth_stats *)args.out_buffer;
+ return 0;
+}
+
+static int
+i40evf_get_statics(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
+{
+ int ret;
+ struct i40e_eth_stats *pstats = NULL;
+
+ ret = i40evf_update_stats(dev, &pstats);
+ if(ret != 0)
+ return 0;
+
stats->ipackets = pstats->rx_unicast + pstats->rx_multicast +
pstats->rx_broadcast;
stats->opackets = pstats->tx_broadcast + pstats->tx_multicast +
@@ -922,6 +964,47 @@ i40evf_get_statics(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
return 0;
}
+static void
+i40evf_dev_xstats_reset(struct rte_eth_dev *dev)
+{
+ struct i40e_vf *vf = I40EVF_DEV_PRIVATE_TO_VF(dev->data->dev_private);
+ struct i40e_eth_stats *pstats = NULL;
+
+ /* read stat values to clear hardware registers */
+ i40evf_update_stats(dev, &pstats);
+
+ /* set stats offset base on current values */
+ vf->vsi.eth_stats_offset = vf->vsi.eth_stats;
+}
+
+static int i40evf_dev_xstats_get(struct rte_eth_dev *dev,
+ struct rte_eth_xstats *xstats, unsigned n)
+{
+ int ret;
+ unsigned i;
+ struct i40e_eth_stats *pstats = NULL;
+
+ if(n < I40EVF_NB_XSTATS)
+ return I40EVF_NB_XSTATS;
+
+ ret = i40evf_update_stats(dev, &pstats);
+ if(ret != 0)
+ return 0;
+
+ if(!xstats)
+ return 0;
+
+ /* loop over xstats array and values from pstats */
+ for(i = 0; i < I40EVF_NB_XSTATS; i++) {
+ snprintf(xstats[i].name, sizeof(xstats[i].name),
+ "%s", rte_i40evf_stats_strings[i].name);
+ xstats[i].value = *(uint64_t *)(((char *)pstats) +
+ rte_i40evf_stats_strings[i].offset);
+ }
+
+ return I40EVF_NB_XSTATS;
+}
+
static int
i40evf_add_vlan(struct rte_eth_dev *dev, uint16_t vlanid)
{
--
1.9.1
next prev parent reply other threads:[~2015-10-22 15:49 UTC|newest]
Thread overview: 77+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-09-30 9:40 [dpdk-dev] [PATCH v2 00/11] Port XStats Harry van Haaren
2015-09-30 9:40 ` [dpdk-dev] [PATCH v2 01/11] doc: add extended statistics notes Harry van Haaren
2015-10-22 15:48 ` [dpdk-dev] [PATCH v3 00/11] Port XStats Harry van Haaren
2015-10-22 15:48 ` [dpdk-dev] [PATCH v3 01/11] doc: add extended statistics notes Harry van Haaren
2015-10-30 11:36 ` [dpdk-dev] [PATCH v4 00/10] Port XStats Harry van Haaren
2015-10-30 11:36 ` [dpdk-dev] [PATCH v4 01/10] doc: add extended statistics to prog_guide Harry van Haaren
2015-11-02 10:18 ` [dpdk-dev] [PATCH v5 00/10] Port XStats Harry van Haaren
2015-11-02 10:18 ` [dpdk-dev] [PATCH v5 01/10] doc: add extended statistics to prog_guide Harry van Haaren
2015-11-02 10:18 ` [dpdk-dev] [PATCH v5 02/10] ethdev: update xstats_get() strings and Q handling Harry van Haaren
2015-11-02 10:19 ` [dpdk-dev] [PATCH v5 03/10] virtio: add xstats() implementation Harry van Haaren
2015-11-02 10:19 ` [dpdk-dev] [PATCH v5 04/10] igb: " Harry van Haaren
2015-11-02 10:19 ` [dpdk-dev] [PATCH v5 05/10] igbvf: " Harry van Haaren
2015-11-02 10:19 ` [dpdk-dev] [PATCH v5 06/10] ixgbe: add extended statistic strings Harry van Haaren
2015-11-02 22:31 ` Thomas Monjalon
2015-11-02 10:19 ` [dpdk-dev] [PATCH v5 07/10] ixgbevf: add xstats() implementation Harry van Haaren
2015-11-02 10:19 ` [dpdk-dev] [PATCH v5 08/10] i40e: " Harry van Haaren
2015-11-02 10:19 ` [dpdk-dev] [PATCH v5 09/10] i40evf: " Harry van Haaren
2015-11-02 10:19 ` [dpdk-dev] [PATCH v5 10/10] fm10k: " Harry van Haaren
2015-11-02 10:24 ` [dpdk-dev] [PATCH v5 00/10] Port XStats Van Haaren, Harry
2015-11-02 23:23 ` Thomas Monjalon
2015-10-30 11:36 ` [dpdk-dev] [PATCH v4 02/10] ethdev: update xstats_get() strings and Q handling Harry van Haaren
2015-11-02 7:59 ` Thomas Monjalon
2015-11-02 10:17 ` Van Haaren, Harry
2015-11-02 16:23 ` Thomas Monjalon
2015-10-30 11:36 ` [dpdk-dev] [PATCH v4 03/10] virtio: add xstats() implementation Harry van Haaren
2015-10-30 11:36 ` [dpdk-dev] [PATCH v4 04/10] igb: " Harry van Haaren
2015-10-30 11:36 ` [dpdk-dev] [PATCH v4 05/10] igbvf: " Harry van Haaren
2015-10-30 11:36 ` [dpdk-dev] [PATCH v4 06/10] ixgbe: add extended statistic strings Harry van Haaren
2015-10-30 11:36 ` [dpdk-dev] [PATCH v4 07/10] ixgbevf: add xstats() implementation Harry van Haaren
2015-10-30 11:36 ` [dpdk-dev] [PATCH v4 08/10] i40e: " Harry van Haaren
2015-10-30 11:36 ` [dpdk-dev] [PATCH v4 09/10] i40evf: " Harry van Haaren
2015-10-30 11:36 ` [dpdk-dev] [PATCH v4 10/10] fm10k: " Harry van Haaren
2015-10-30 13:21 ` [dpdk-dev] [PATCH v4 00/10] Port XStats Tahhan, Maryam
2015-11-02 8:04 ` Thomas Monjalon
2015-10-22 15:48 ` [dpdk-dev] [PATCH v3 02/11] doc: add extended statistics to prog_guide Harry van Haaren
2015-10-23 14:29 ` Tahhan, Maryam
2015-10-22 15:48 ` [dpdk-dev] [PATCH v3 03/11] ethdev: update xstats_get() strings and Q handling Harry van Haaren
2015-10-23 14:35 ` Tahhan, Maryam
2015-10-23 15:28 ` Tahhan, Maryam
2015-10-23 15:28 ` Tahhan, Maryam
2015-10-22 15:48 ` [dpdk-dev] [PATCH v3 04/11] virtio: add xstats() implementation Harry van Haaren
2015-10-29 16:19 ` Tahhan, Maryam
2015-10-22 15:48 ` [dpdk-dev] [PATCH v3 05/11] igb: " Harry van Haaren
2015-10-23 14:56 ` Tahhan, Maryam
2015-10-22 15:48 ` [dpdk-dev] [PATCH v3 06/11] igbvf: " Harry van Haaren
2015-10-28 12:17 ` Tahhan, Maryam
2015-10-22 15:48 ` [dpdk-dev] [PATCH v3 07/11] ixgbe: update statistic strings to scheme Harry van Haaren
2015-10-23 14:41 ` Tahhan, Maryam
2015-10-22 15:48 ` [dpdk-dev] [PATCH v3 08/11] ixgbevf: add xstats() functions to VF Harry van Haaren
2015-10-28 12:16 ` Tahhan, Maryam
2015-10-22 15:48 ` [dpdk-dev] [PATCH v3 09/11] i40e: add xstats() implementation Harry van Haaren
2015-10-23 15:11 ` Tahhan, Maryam
2015-10-22 15:48 ` Harry van Haaren [this message]
2015-10-28 12:15 ` [dpdk-dev] [PATCH v3 10/11] i40evf: " Tahhan, Maryam
2015-10-22 15:48 ` [dpdk-dev] [PATCH v3 11/11] fm10k: " Harry van Haaren
2015-10-29 16:41 ` Tahhan, Maryam
2015-10-28 17:35 ` [dpdk-dev] [PATCH v3 00/11] Port XStats Tom Crugnale
2015-10-28 21:32 ` Stephen Hemminger
2015-10-29 0:55 ` Tom Crugnale
2015-10-29 12:55 ` Kyle Larose
2015-10-29 13:10 ` Thomas Monjalon
2015-10-29 13:57 ` Kyle Larose
2015-10-29 14:01 ` Thomas Monjalon
2015-10-29 14:10 ` Kyle Larose
2015-10-29 13:17 ` Van Haaren, Harry
2015-09-30 9:40 ` [dpdk-dev] [PATCH v2 02/11] doc: add extended statistics to prog_guide Harry van Haaren
2015-09-30 9:40 ` [dpdk-dev] [PATCH v2 03/11] ethdev: update xstats_get() strings and Q handling Harry van Haaren
2015-09-30 9:40 ` [dpdk-dev] [PATCH v2 04/11] virtio: add xstats() implementation Harry van Haaren
2015-09-30 17:44 ` Stephen Hemminger
2015-10-01 8:00 ` Van Haaren, Harry
2015-09-30 9:40 ` [dpdk-dev] [PATCH v2 05/11] igb: " Harry van Haaren
2015-09-30 9:40 ` [dpdk-dev] [PATCH v2 06/11] igbvf: " Harry van Haaren
2015-09-30 9:40 ` [dpdk-dev] [PATCH v2 07/11] ixgbe: update statistic strings to scheme Harry van Haaren
2015-09-30 9:40 ` [dpdk-dev] [PATCH v2 08/11] ixgbevf: add xstats() functions to VF Harry van Haaren
2015-09-30 9:40 ` [dpdk-dev] [PATCH v2 09/11] i40e: add xstats() implementation Harry van Haaren
2015-09-30 9:40 ` [dpdk-dev] [PATCH v2 10/11] i40evf: " Harry van Haaren
2015-09-30 9:40 ` [dpdk-dev] [PATCH v2 11/11] fm10k: " Harry van Haaren
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=1445528914-27636-11-git-send-email-harry.van.haaren@intel.com \
--to=harry.van.haaren@intel.com \
--cc=dev@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).