[dpdk-dev] [PATCH v4 8/8] app: add a new app proc_info

2015-07-05 Thread Maryam Tahhan
proc_info displays statistics information including extened stats for
given DPDK ports and dumps the memory information for DPDK.

Signed-off-by: Maryam Tahhan 
---
 MAINTAINERS|   4 +
 app/Makefile   |   1 +
 app/proc_info/Makefile |  45 +
 app/proc_info/main.c   | 512 +
 mk/rte.sdktest.mk  |   4 +-
 5 files changed, 564 insertions(+), 2 deletions(-)
 create mode 100644 app/proc_info/Makefile
 create mode 100644 app/proc_info/main.c

diff --git a/MAINTAINERS b/MAINTAINERS
index 5476a73..5d1c5e8 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -494,3 +494,7 @@ F: examples/tep_termination/
 F: examples/vmdq/
 F: examples/vmdq_dcb/
 F: doc/guides/sample_app_ug/vmdq_dcb_forwarding.rst
+
+M: Maryam Tahhan 
+M: John McNamara 
+F: app/proc_info/
diff --git a/app/Makefile b/app/Makefile
index 81bd222..88c0bad 100644
--- a/app/Makefile
+++ b/app/Makefile
@@ -36,5 +36,6 @@ DIRS-$(CONFIG_RTE_LIBRTE_ACL) += test-acl
 DIRS-$(CONFIG_RTE_LIBRTE_PIPELINE) += test-pipeline
 DIRS-$(CONFIG_RTE_TEST_PMD) += test-pmd
 DIRS-$(CONFIG_RTE_LIBRTE_CMDLINE) += cmdline_test
+DIRS-$(CONFIG_RTE_LIBRTE_EAL_LINUXAPP) += proc_info

 include $(RTE_SDK)/mk/rte.subdir.mk
diff --git a/app/proc_info/Makefile b/app/proc_info/Makefile
new file mode 100644
index 000..6759547
--- /dev/null
+++ b/app/proc_info/Makefile
@@ -0,0 +1,45 @@
+#   BSD LICENSE
+#
+#   Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
+#   All rights reserved.
+#
+#   Redistribution and use in source and binary forms, with or without
+#   modification, are permitted provided that the following conditions
+#   are met:
+#
+# * Redistributions of source code must retain the above copyright
+#   notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright
+#   notice, this list of conditions and the following disclaimer in
+#   the documentation and/or other materials provided with the
+#   distribution.
+# * Neither the name of Intel Corporation nor the names of its
+#   contributors may be used to endorse or promote products derived
+#   from this software without specific prior written permission.
+#
+#   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+#   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+#   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+#   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+#   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+#   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+#   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+#   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+#   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+#   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+#   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+include $(RTE_SDK)/mk/rte.vars.mk
+
+APP = proc_info
+
+CFLAGS += $(WERROR_FLAGS)
+
+# all source are stored in SRCS-y
+
+SRCS-y := main.c
+
+# this application needs libraries first
+DEPDIRS-y += lib
+
+include $(RTE_SDK)/mk/rte.app.mk
diff --git a/app/proc_info/main.c b/app/proc_info/main.c
new file mode 100644
index 000..b2a495a
--- /dev/null
+++ b/app/proc_info/main.c
@@ -0,0 +1,512 @@
+/*
+ *   BSD LICENSE
+ *
+ *   Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
+ *   All rights reserved.
+ *
+ *   Redistribution and use in source and binary forms, with or without
+ *   modification, are permitted provided that the following conditions
+ *   are met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ *   notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ *   notice, this list of conditions and the following disclaimer in
+ *   the documentation and/or other materials provided with the
+ *   distribution.
+ * * Neither the name of Intel Corporation nor the names of its
+ *   contributors may be used to endorse or promote products derived
+ *   from this software without specific prior written permission.
+ *
+ *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ *   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ *   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ *   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ *   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ *   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ *   THEORY OF LIABILITY, 

[dpdk-dev] [PATCH v4 7/8] app: remove dump_cfg

2015-07-05 Thread Maryam Tahhan
Remove the dump_cfg application, this will be replaced by a new app
called proc_info that will implement the same functionality as dump_cfg
and extend it to retrieve statistics for DPDK ports.

Signed-off-by: Maryam Tahhan 
---
 app/Makefile  |  1 -
 app/dump_cfg/Makefile | 45 -
 app/dump_cfg/main.c   | 92 ---
 3 files changed, 138 deletions(-)
 delete mode 100644 app/dump_cfg/Makefile
 delete mode 100644 app/dump_cfg/main.c

diff --git a/app/Makefile b/app/Makefile
index 50c670b..81bd222 100644
--- a/app/Makefile
+++ b/app/Makefile
@@ -36,6 +36,5 @@ DIRS-$(CONFIG_RTE_LIBRTE_ACL) += test-acl
 DIRS-$(CONFIG_RTE_LIBRTE_PIPELINE) += test-pipeline
 DIRS-$(CONFIG_RTE_TEST_PMD) += test-pmd
 DIRS-$(CONFIG_RTE_LIBRTE_CMDLINE) += cmdline_test
-DIRS-$(CONFIG_RTE_LIBRTE_EAL_LINUXAPP) += dump_cfg

 include $(RTE_SDK)/mk/rte.subdir.mk
diff --git a/app/dump_cfg/Makefile b/app/dump_cfg/Makefile
deleted file mode 100644
index 3257127..000
--- a/app/dump_cfg/Makefile
+++ /dev/null
@@ -1,45 +0,0 @@
-#   BSD LICENSE
-#
-#   Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
-#   All rights reserved.
-#
-#   Redistribution and use in source and binary forms, with or without
-#   modification, are permitted provided that the following conditions
-#   are met:
-#
-# * Redistributions of source code must retain the above copyright
-#   notice, this list of conditions and the following disclaimer.
-# * Redistributions in binary form must reproduce the above copyright
-#   notice, this list of conditions and the following disclaimer in
-#   the documentation and/or other materials provided with the
-#   distribution.
-# * Neither the name of Intel Corporation nor the names of its
-#   contributors may be used to endorse or promote products derived
-#   from this software without specific prior written permission.
-#
-#   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
-#   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
-#   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
-#   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
-#   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-#   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-#   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
-#   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-#   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-#   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
-#   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
-include $(RTE_SDK)/mk/rte.vars.mk
-
-APP = dump_cfg
-
-CFLAGS += $(WERROR_FLAGS)
-
-# all source are stored in SRCS-y
-
-SRCS-y := main.c
-
-# this application needs libraries first
-DEPDIRS-y += lib
-
-include $(RTE_SDK)/mk/rte.app.mk
diff --git a/app/dump_cfg/main.c b/app/dump_cfg/main.c
deleted file mode 100644
index 127dbb1..000
--- a/app/dump_cfg/main.c
+++ /dev/null
@@ -1,92 +0,0 @@
-/*-
- *   BSD LICENSE
- *
- *   Copyright(c) 2010-2014 Intel Corporation. All rights reserved.
- *   All rights reserved.
- *
- *   Redistribution and use in source and binary forms, with or without
- *   modification, are permitted provided that the following conditions
- *   are met:
- *
- * * Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in
- *   the documentation and/or other materials provided with the
- *   distribution.
- * * Neither the name of Intel Corporation nor the names of its
- *   contributors may be used to endorse or promote products derived
- *   from this software without specific prior written permission.
- *
- *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- *   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- *   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- *   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- *   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- *   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- *   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- *   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-#include 
-
-#include 

[dpdk-dev] [PATCH v4 6/8] ixgbe: return more errors in ierrors

2015-07-05 Thread Maryam Tahhan
ierrors only included a base set of error statistics, this patch adds
additional error registers to ierrors.

Signed-off-by: Maryam Tahhan 
---
 drivers/net/ixgbe/ixgbe_ethdev.c | 11 ++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ixgbe/ixgbe_ethdev.c b/drivers/net/ixgbe/ixgbe_ethdev.c
index 6b1f32f..05371ec 100644
--- a/drivers/net/ixgbe/ixgbe_ethdev.c
+++ b/drivers/net/ixgbe/ixgbe_ethdev.c
@@ -1989,7 +1989,16 @@ ixgbe_dev_stats_get(struct rte_eth_dev *dev, struct 
rte_eth_stats *stats)
  hw_stats->ruc +
  hw_stats->roc +
  total_missed_rx +
- hw_stats->illerrc + hw_stats->errbc;
+ hw_stats->illerrc +
+ hw_stats->errbc +
+ hw_stats->xec +
+ hw_stats->mlfc +
+ hw_stats->mrfc +
+ hw_stats->rfc +
+ hw_stats->rjc +
+ hw_stats->fccrc +
+ hw_stats->fclast +
+ (rxnfgpc - hw_stats->gprc); /* PHY Errors*/

/* Tx Errors */
/*txdgpc: packets that are DMA'ed*/
-- 
1.9.3



[dpdk-dev] [PATCH v4 5/8] ixgbe: add NIC specific stats removed from ethdev

2015-07-05 Thread Maryam Tahhan
Add the NIC/HW specific stats that were removed from rte_ethdev.c to
the extended stats in ixgbe.

Signed-off-by: Maryam Tahhan 
---
 drivers/net/ixgbe/ixgbe_ethdev.c | 31 ++-
 1 file changed, 14 insertions(+), 17 deletions(-)

diff --git a/drivers/net/ixgbe/ixgbe_ethdev.c b/drivers/net/ixgbe/ixgbe_ethdev.c
index 5971d41..6b1f32f 100644
--- a/drivers/net/ixgbe/ixgbe_ethdev.c
+++ b/drivers/net/ixgbe/ixgbe_ethdev.c
@@ -440,7 +440,15 @@ static const struct rte_ixgbe_xstats_name_off 
rte_ixgbe_stats_strings[] = {
{"fcoe_drop", offsetof(struct ixgbe_hw_stats, fcoerpdc)},
{"fc_last_error", offsetof(struct ixgbe_hw_stats, fclast)},
{"rx_broadcast_packets", offsetof(struct ixgbe_hw_stats, bprc)},
+   {"rx_phy_multicast_packets", offsetof(struct ixgbe_hw_stats, mprc)},
{"mgmt_pkts_dropped", offsetof(struct ixgbe_hw_stats, mngpdc)},
+   {"rx_crc_errors", offsetof(struct ixgbe_hw_stats, crcerrs)},
+   {"fdir_match", offsetof(struct ixgbe_hw_stats, fdirmatch)},
+   {"fdir_miss", offsetof(struct ixgbe_hw_stats, fdirmiss)},
+   {"tx_flow_control_xon", offsetof(struct ixgbe_hw_stats, lxontxc)},
+   {"rx_flow_control_xon", offsetof(struct ixgbe_hw_stats, lxonrxc)},
+   {"tx_flow_control_xoff", offsetof(struct ixgbe_hw_stats, lxofftxc)},
+   {"rx_flow_control_xoff", offsetof(struct ixgbe_hw_stats, lxoffrxc)},
 };

 #define IXGBE_NB_XSTATS (sizeof(rte_ixgbe_stats_strings) / \
@@ -1966,7 +1974,6 @@ ixgbe_dev_stats_get(struct rte_eth_dev *dev, struct 
rte_eth_stats *stats)
stats->ibytes = total_qbrc;
stats->opackets = hw_stats->gptc;
stats->obytes = hw_stats->gotc;
-   stats->imcasts = hw_stats->mprc;

for (i = 0; i < IXGBE_QUEUE_STAT_COUNTERS; i++) {
stats->q_ipackets[i] = hw_stats->qprc[i];
@@ -1977,28 +1984,17 @@ ixgbe_dev_stats_get(struct rte_eth_dev *dev, struct 
rte_eth_stats *stats)
}

/* Rx Errors */
-   stats->ibadcrc  = hw_stats->crcerrs;
-   stats->ibadlen  = hw_stats->rlec + hw_stats->ruc + hw_stats->roc;
-   stats->imissed  = total_missed_rx;
-   stats->ierrors  = stats->ibadcrc +
- stats->ibadlen +
- stats->imissed +
+   stats->ierrors  = hw_stats->crcerrs +
+ hw_stats->rlec +
+ hw_stats->ruc +
+ hw_stats->roc +
+ total_missed_rx +
  hw_stats->illerrc + hw_stats->errbc;

/* Tx Errors */
/*txdgpc: packets that are DMA'ed*/
/*gptc: packets that are sent*/
stats->oerrors  = txdgpc - hw_stats->gptc;
-
-   /* XON/XOFF pause frames */
-   stats->tx_pause_xon  = hw_stats->lxontxc;
-   stats->rx_pause_xon  = hw_stats->lxonrxc;
-   stats->tx_pause_xoff = hw_stats->lxofftxc;
-   stats->rx_pause_xoff = hw_stats->lxoffrxc;
-
-   /* Flow Director Stats registers */
-   stats->fdirmatch = hw_stats->fdirmatch;
-   stats->fdirmiss = hw_stats->fdirmiss;
 }

 static void
@@ -2105,6 +2101,7 @@ ixgbevf_dev_stats_get(struct rte_eth_dev *dev, struct 
rte_eth_stats *stats)
stats->opackets = hw_stats->vfgptc;
stats->obytes = hw_stats->vfgotc;
stats->imcasts = hw_stats->vfmprc;
+   /* stats->imcasts should be removed as imcasts is deprecated */
 }

 static void
-- 
1.9.3



[dpdk-dev] [PATCH v4 4/8] ethdev: remove HW specific stats in stats structs

2015-07-05 Thread Maryam Tahhan
Remove non generic stats in rte_stats_strings and mark the relevant
fields in struct rte_eth_stats as deprecated.

Signed-off-by: Maryam Tahhan 
---
 doc/guides/rel_notes/abi.rst  | 11 +++
 lib/librte_ether/rte_ethdev.c |  9 -
 lib/librte_ether/rte_ethdev.h | 30 --
 3 files changed, 31 insertions(+), 19 deletions(-)

diff --git a/doc/guides/rel_notes/abi.rst b/doc/guides/rel_notes/abi.rst
index 110c486..90fe7fa 100644
--- a/doc/guides/rel_notes/abi.rst
+++ b/doc/guides/rel_notes/abi.rst
@@ -12,3 +12,14 @@ Examples of Deprecation Notices

 Deprecation Notices
 ---
+* The following fields have been deprecated in rte_eth_stats:
+  * uint64_t imissed
+  * uint64_t ibadcrc
+  * uint64_t ibadlen
+  * uint64_t imcasts
+  * uint64_t fdirmatch
+  * uint64_t fdirmiss
+  * uint64_t tx_pause_xon
+  * uint64_t rx_pause_xon
+  * uint64_t tx_pause_xoff
+  * uint64_t rx_pause_xoff
diff --git a/lib/librte_ether/rte_ethdev.c b/lib/librte_ether/rte_ethdev.c
index e392f60..003c548 100644
--- a/lib/librte_ether/rte_ethdev.c
+++ b/lib/librte_ether/rte_ethdev.c
@@ -142,17 +142,8 @@ static const struct rte_eth_xstats_name_off 
rte_stats_strings[] = {
{"rx_bytes", offsetof(struct rte_eth_stats, ibytes)},
{"tx_bytes", offsetof(struct rte_eth_stats, obytes)},
{"tx_errors", offsetof(struct rte_eth_stats, oerrors)},
-   {"rx_missed_errors", offsetof(struct rte_eth_stats, imissed)},
-   {"rx_crc_errors", offsetof(struct rte_eth_stats, ibadcrc)},
-   {"rx_bad_length_errors", offsetof(struct rte_eth_stats, ibadlen)},
{"rx_errors", offsetof(struct rte_eth_stats, ierrors)},
{"alloc_rx_buff_failed", offsetof(struct rte_eth_stats, rx_nombuf)},
-   {"fdir_match", offsetof(struct rte_eth_stats, fdirmatch)},
-   {"fdir_miss", offsetof(struct rte_eth_stats, fdirmiss)},
-   {"tx_flow_control_xon", offsetof(struct rte_eth_stats, tx_pause_xon)},
-   {"rx_flow_control_xon", offsetof(struct rte_eth_stats, rx_pause_xon)},
-   {"tx_flow_control_xoff", offsetof(struct rte_eth_stats, tx_pause_xoff)},
-   {"rx_flow_control_xoff", offsetof(struct rte_eth_stats, rx_pause_xoff)},
 };
 #define RTE_NB_STATS (sizeof(rte_stats_strings) / sizeof(rte_stats_strings[0]))

diff --git a/lib/librte_ether/rte_ethdev.h b/lib/librte_ether/rte_ethdev.h
index f1219ac..a38d49a 100644
--- a/lib/librte_ether/rte_ethdev.h
+++ b/lib/librte_ether/rte_ethdev.h
@@ -193,19 +193,29 @@ struct rte_eth_stats {
uint64_t opackets;  /**< Total number of successfully transmitted 
packets.*/
uint64_t ibytes;/**< Total number of successfully received bytes. */
uint64_t obytes;/**< Total number of successfully transmitted 
bytes. */
-   uint64_t imissed;   /**< Total of RX missed packets (e.g full FIFO). */
-   uint64_t ibadcrc;   /**< Total of RX packets with CRC error. */
-   uint64_t ibadlen;   /**< Total of RX packets with bad length. */
+   /**< Deprecated; Total of RX missed packets (e.g full FIFO). */
+   uint64_t imissed;
+   /**< Deprecated; Total of RX packets with CRC error. */
+   uint64_t ibadcrc;
+   /**< Deprecated; Total of RX packets with bad length. */
+   uint64_t ibadlen;
uint64_t ierrors;   /**< Total number of erroneous received packets. */
uint64_t oerrors;   /**< Total number of failed transmitted packets. */
-   uint64_t imcasts;   /**< Total number of multicast received packets. */
+   uint64_t imcasts;
+   /**< Deprecated; Total number of multicast received packets. */
uint64_t rx_nombuf; /**< Total number of RX mbuf allocation failures. */
-   uint64_t fdirmatch; /**< Total number of RX packets matching a filter. 
*/
-   uint64_t fdirmiss;  /**< Total number of RX packets not matching any 
filter. */
-   uint64_t tx_pause_xon;  /**< Total nb. of XON pause frame sent. */
-   uint64_t rx_pause_xon;  /**< Total nb. of XON pause frame received. */
-   uint64_t tx_pause_xoff; /**< Total nb. of XOFF pause frame sent. */
-   uint64_t rx_pause_xoff; /**< Total nb. of XOFF pause frame received. */
+   uint64_t fdirmatch;
+   /**< Deprecated; Total number of RX packets matching a filter. */
+   uint64_t fdirmiss;
+   /**< Deprecated; Total number of RX packets not matching any filter. */
+   uint64_t tx_pause_xon;
+/**< Deprecated; Total nb. of XON pause frame sent. */
+   uint64_t rx_pause_xon;
+   /**< Deprecated; Total nb. of XON pause frame received. */
+   uint64_t tx_pause_xoff;
+   /**< Deprecated; Total nb. of XOFF pause frame sent. */
+   uint64_t rx_pause_xoff;
+   /**< Deprecated; Total nb. of XOFF pause frame received. */
uint64_t q_ipackets[RTE_ETHDEV_QUEUE_STAT_CNTRS];
/**< Total number of queue RX packets. */
uint64_t q_opackets[RTE_ETHDEV_QUEUE_STAT_CNTRS];
-- 
1.9.3



[dpdk-dev] [PATCH v4 3/8] ethdev: expose extended error stats

2015-07-05 Thread Maryam Tahhan
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 7feb03c..5971d41 100644
--- a/drivers/net/ixgbe/ixgbe_ethdev.c
+++ b/drivers/net/ixgbe/ixgbe_ethdev.c
@@ -2035,6 +2035,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, _missed_rx, _qbrc,
   _qprc, 
, , _qprdc);
@@ -2047,13 +2048,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 da915db..e392f60 100644
--- a/lib/librte_ether/rte_ethdev.c
+++ b/lib/librte_ether/rte_ethdev.c
@@ -1681,26 +1681,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 = _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);

@@ -1742,7 +1749,7 @@ rte_eth_xstats_get(uint8_t port_id, struct rte_eth_xstats 
*xstats,
}
}

-   return count;
+   return count + xcount;
 }

 /* reset ethdev extended statistics */
-- 
1.9.3



[dpdk-dev] [PATCH v4 2/8] ixgbe: add functions to get and reset xstats

2015-07-05 Thread Maryam Tahhan
Implement ixgbe_dev_xstats_reset and ixgbe_dev_xstats_get.

Signed-off-by: Maryam Tahhan 
---
 drivers/net/ixgbe/ixgbe_ethdev.c | 87 
 1 file changed, 87 insertions(+)

diff --git a/drivers/net/ixgbe/ixgbe_ethdev.c b/drivers/net/ixgbe/ixgbe_ethdev.c
index 927021f..7feb03c 100644
--- a/drivers/net/ixgbe/ixgbe_ethdev.c
+++ b/drivers/net/ixgbe/ixgbe_ethdev.c
@@ -131,7 +131,10 @@ static int ixgbe_dev_link_update(struct rte_eth_dev *dev,
int wait_to_complete);
 static void ixgbe_dev_stats_get(struct rte_eth_dev *dev,
struct rte_eth_stats *stats);
+static int ixgbe_dev_xstats_get(struct rte_eth_dev *dev,
+   struct rte_eth_xstats *xstats, unsigned n);
 static void ixgbe_dev_stats_reset(struct rte_eth_dev *dev);
+static void ixgbe_dev_xstats_reset(struct rte_eth_dev *dev);
 static int ixgbe_dev_queue_stats_mapping_set(struct rte_eth_dev *eth_dev,
 uint16_t queue_id,
 uint8_t stat_idx,
@@ -334,7 +337,9 @@ static const struct eth_dev_ops ixgbe_eth_dev_ops = {
.allmulticast_disable = ixgbe_dev_allmulticast_disable,
.link_update  = ixgbe_dev_link_update,
.stats_get= ixgbe_dev_stats_get,
+   .xstats_get   = ixgbe_dev_xstats_get,
.stats_reset  = ixgbe_dev_stats_reset,
+   .xstats_reset = ixgbe_dev_xstats_reset,
.queue_stats_mapping_set = ixgbe_dev_queue_stats_mapping_set,
.dev_infos_get= ixgbe_dev_info_get,
.mtu_set  = ixgbe_dev_mtu_set,
@@ -414,6 +419,33 @@ static const struct eth_dev_ops ixgbevf_eth_dev_ops = {
.set_mc_addr_list = ixgbe_dev_set_mc_addr_list,
 };

+/* store statistics names and its offset in stats structure  */ struct
+rte_ixgbe_xstats_name_off {
+   char name[RTE_ETH_XSTATS_NAME_SIZE];
+   unsigned offset;
+};
+
+static const struct rte_ixgbe_xstats_name_off rte_ixgbe_stats_strings[] = {
+   {"rx_illegal_byte_err", offsetof(struct ixgbe_hw_stats, errbc)},
+   {"rx_len_err", offsetof(struct ixgbe_hw_stats, rlec)},
+   {"rx_undersize_count", offsetof(struct ixgbe_hw_stats, ruc)},
+   {"rx_oversize_count", offsetof(struct ixgbe_hw_stats, roc)},
+   {"rx_fragment_count", offsetof(struct ixgbe_hw_stats, rfc)},
+   {"rx_jabber_count", offsetof(struct ixgbe_hw_stats, rjc)},
+   {"l3_l4_xsum_error", offsetof(struct ixgbe_hw_stats, xec)},
+   {"mac_local_fault", offsetof(struct ixgbe_hw_stats, mlfc)},
+   {"mac_remote_fault", offsetof(struct ixgbe_hw_stats, mrfc)},
+   {"mac_short_pkt_discard", offsetof(struct ixgbe_hw_stats, mspdc)},
+   {"fccrc_error", offsetof(struct ixgbe_hw_stats, fccrc)},
+   {"fcoe_drop", offsetof(struct ixgbe_hw_stats, fcoerpdc)},
+   {"fc_last_error", offsetof(struct ixgbe_hw_stats, fclast)},
+   {"rx_broadcast_packets", offsetof(struct ixgbe_hw_stats, bprc)},
+   {"mgmt_pkts_dropped", offsetof(struct ixgbe_hw_stats, mngpdc)},
+};
+
+#define IXGBE_NB_XSTATS (sizeof(rte_ixgbe_stats_strings) / \
+   sizeof(rte_ixgbe_stats_strings[0]))
+
 /**
  * Atomically reads the link status information from global
  * structure rte_eth_dev.
@@ -1982,6 +2014,61 @@ ixgbe_dev_stats_reset(struct rte_eth_dev *dev)
memset(stats, 0, sizeof(*stats));
 }

+static int
+ixgbe_dev_xstats_get(struct rte_eth_dev *dev, struct rte_eth_xstats *xstats,
+unsigned n)
+{
+   struct ixgbe_hw *hw =
+   IXGBE_DEV_PRIVATE_TO_HW(dev->data->dev_private);
+   struct ixgbe_hw_stats *hw_stats =
+   IXGBE_DEV_PRIVATE_TO_STATS(dev->data->dev_private);
+   uint64_t total_missed_rx, total_qbrc, total_qprc, total_qprdc;
+   uint64_t rxnfgpc, txdgpc;
+   unsigned i, count = IXGBE_NB_XSTATS;
+
+   if (n < count)
+   return count;
+
+   total_missed_rx = 0;
+   total_qbrc = 0;
+   total_qprc = 0;
+   total_qprdc = 0;
+   rxnfgpc = 0;
+   txdgpc = 0;
+
+   ixgbe_read_stats_registers(hw, hw_stats, _missed_rx, _qbrc,
+  _qprc, 
, , _qprdc);
+
+   /* If this is a reset xstats is NULL, and we have cleared the
+* registers by reading them.
+*/
+   if (!xstats)
+   return 0;
+
+   /* Extended stats */
+   for (i = 0; i < IXGBE_NB_XSTATS; i++) {
+   snprintf(xstats[i].name, sizeof(xstats[i].name),
+   "%s", rte_ixgbe_stats_strings[i].name);
+   xstats[i].value = *(uint64_t *)(((char *)hw_stats) +
+   
rte_ixgbe_stats_strings[i].offset);
+   }
+
+   return count;
+}
+
+static void
+ixgbe_dev_xstats_reset(struct rte_eth_dev *dev)
+{
+   struct 

[dpdk-dev] [PATCH v4 1/8] ixgbe: move stats register reads to a new function

2015-07-05 Thread Maryam Tahhan
Move stats register reads to ixgbe_read_stats_registers() as it will be
used by the functions to retrieve stats and extended stats.

Signed-off-by: Maryam Tahhan 
---
 drivers/net/ixgbe/ixgbe_ethdev.c | 64 +++-
 1 file changed, 44 insertions(+), 20 deletions(-)

diff --git a/drivers/net/ixgbe/ixgbe_ethdev.c b/drivers/net/ixgbe/ixgbe_ethdev.c
index f18550c..927021f 100644
--- a/drivers/net/ixgbe/ixgbe_ethdev.c
+++ b/drivers/net/ixgbe/ixgbe_ethdev.c
@@ -1761,24 +1761,16 @@ ixgbe_dev_close(struct rte_eth_dev *dev)
ixgbe_set_rar(hw, 0, hw->mac.addr, 0, IXGBE_RAH_AV);
 }

-/*
- * This function is based on ixgbe_update_stats_counters() in base/ixgbe.c
- */
 static void
-ixgbe_dev_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
+ixgbe_read_stats_registers(struct ixgbe_hw *hw, struct ixgbe_hw_stats
+  *hw_stats, uint64_t 
*total_missed_rx,
+  uint64_t *total_qbrc, 
uint64_t *total_qprc,
+  uint64_t *rxnfgpc, uint64_t 
*txdgpc,
+  uint64_t *total_qprdc)
 {
-   struct ixgbe_hw *hw =
-   IXGBE_DEV_PRIVATE_TO_HW(dev->data->dev_private);
-   struct ixgbe_hw_stats *hw_stats =
-   IXGBE_DEV_PRIVATE_TO_STATS(dev->data->dev_private);
uint32_t bprc, lxon, lxoff, total;
-   uint64_t total_missed_rx, total_qbrc, total_qprc;
unsigned i;

-   total_missed_rx = 0;
-   total_qbrc = 0;
-   total_qprc = 0;
-
hw_stats->crcerrs += IXGBE_READ_REG(hw, IXGBE_CRCERRS);
hw_stats->illerrc += IXGBE_READ_REG(hw, IXGBE_ILLERRC);
hw_stats->errbc += IXGBE_READ_REG(hw, IXGBE_ERRBC);
@@ -1790,7 +1782,7 @@ ixgbe_dev_stats_get(struct rte_eth_dev *dev, struct 
rte_eth_stats *stats)
/* global total per queue */
hw_stats->mpc[i] += mp;
/* Running comprehensive total for stats display */
-   total_missed_rx += hw_stats->mpc[i];
+   *total_missed_rx += hw_stats->mpc[i];
if (hw->mac.type == ixgbe_mac_82598EB)
hw_stats->rnbc[i] +=
IXGBE_READ_REG(hw, IXGBE_RNBC(i));
@@ -1814,10 +1806,11 @@ ixgbe_dev_stats_get(struct rte_eth_dev *dev, struct 
rte_eth_stats *stats)
hw_stats->qbtc[i] += IXGBE_READ_REG(hw, IXGBE_QBTC_L(i));
hw_stats->qbtc[i] +=
((uint64_t)IXGBE_READ_REG(hw, IXGBE_QBTC_H(i)) << 32);
-   hw_stats->qprdc[i] += IXGBE_READ_REG(hw, IXGBE_QPRDC(i));
+   *total_qprdc += hw_stats->qprdc[i] +=
+   IXGBE_READ_REG(hw, IXGBE_QPRDC(i));

-   total_qprc += hw_stats->qprc[i];
-   total_qbrc += hw_stats->qbrc[i];
+   *total_qprc += hw_stats->qprc[i];
+   *total_qbrc += hw_stats->qbrc[i];
}
hw_stats->mlfc += IXGBE_READ_REG(hw, IXGBE_MLFC);
hw_stats->mrfc += IXGBE_READ_REG(hw, IXGBE_MRFC);
@@ -1825,6 +1818,8 @@ ixgbe_dev_stats_get(struct rte_eth_dev *dev, struct 
rte_eth_stats *stats)

/* Note that gprc counts missed packets */
hw_stats->gprc += IXGBE_READ_REG(hw, IXGBE_GPRC);
+   *rxnfgpc += IXGBE_READ_REG(hw, IXGBE_RXNFGPC);
+   *txdgpc += IXGBE_READ_REG(hw, IXGBE_TXDGPC);

if (hw->mac.type != ixgbe_mac_82598EB) {
hw_stats->gorc += IXGBE_READ_REG(hw, IXGBE_GORCL);
@@ -1902,6 +1897,35 @@ ixgbe_dev_stats_get(struct rte_eth_dev *dev, struct 
rte_eth_stats *stats)
hw_stats->fcoedwtc += IXGBE_READ_REG(hw, IXGBE_FCOEDWTC);
}

+   /* Flow Director Stats registers */
+   hw_stats->fdirmatch += IXGBE_READ_REG(hw, IXGBE_FDIRMATCH);
+   hw_stats->fdirmiss += IXGBE_READ_REG(hw, IXGBE_FDIRMISS);
+}
+
+/*
+ * This function is based on ixgbe_update_stats_counters() in ixgbe/ixgbe.c
+ */
+static void
+ixgbe_dev_stats_get(struct rte_eth_dev *dev, struct rte_eth_stats *stats)
+{
+   struct ixgbe_hw *hw =
+   IXGBE_DEV_PRIVATE_TO_HW(dev->data->dev_private);
+   struct ixgbe_hw_stats *hw_stats =
+   IXGBE_DEV_PRIVATE_TO_STATS(dev->data->dev_private);
+   uint64_t total_missed_rx, total_qbrc, total_qprc, total_qprdc;
+   uint64_t rxnfgpc, txdgpc;
+   unsigned i;
+
+   total_missed_rx = 0;
+   total_qbrc = 0;
+   total_qprc = 0;
+   total_qprdc = 0;
+   rxnfgpc = 0;
+   txdgpc = 0;
+
+   ixgbe_read_stats_registers(hw, hw_stats, _missed_rx, _qbrc,
+   _qprc, , , _qprdc);
+
if (stats == NULL)
return;

@@ -1930,7 +1954,9 @@ ixgbe_dev_stats_get(struct rte_eth_dev *dev, struct 
rte_eth_stats *stats)
  hw_stats->illerrc + hw_stats->errbc;

/* Tx Errors */
-   stats->oerrors  = 0;

[dpdk-dev] [PATCH v4 0/8] Expose IXGBE extended stats to DPDK apps

2015-07-05 Thread Maryam Tahhan
This patch set implements xstats_get() and xstats_reset() in dev_ops for
ixgbe to expose detailed error statistics to DPDK applications. The
dump_cfg application was extended to demonstrate the usage of
retrieving statistics for DPDK interfaces and renamed to proc_info
in order reflect this new functionality. This patch set also removes non
generic statistics from the statistics strings at the ethdev level and
marks the relevant registers as depricated in struct rte_eth_stats.

v2:
 - Fixed patch dependencies.
 - Broke down patches into smaller logical changes.

v3:
 - Removes non-generic stats fields in rte_stats_strings and deprecates
   the fields related to them in struct rte_eth_stats.
 - Modifies rte_eth_xstats_get() to return generic stats and extended stats.

v4:
 - Replace count use in the loop in ixgbe_dev_xstats_get() function definition 
with i.
 - Breakdown "ixgbe: add NIC specific stats removed from ethdev" into two 
patches, one
   that adds the stats and another that extends ierrors to include more error 
stats.
 - Remove second call to ixgbe_dev_xstats_get() from rte_eth_xstats_get().

Maryam Tahhan (8):
  ixgbe: move stats register reads to a new function
  ixgbe: add functions to get and reset xstats
  ethdev: expose extended error stats
  ethdev: remove HW specific stats in stats structs
  ixgbe: add NIC specific stats removed from ethdev
  ixgbe: return more errors in ierrors
  app: remove dump_cfg
  app: add a new app proc_info

 MAINTAINERS  |   4 +
 app/Makefile |   2 +-
 app/dump_cfg/Makefile|  45 
 app/dump_cfg/main.c  |  92 ---
 app/proc_info/Makefile   |  45 
 app/proc_info/main.c | 512 +++
 doc/guides/rel_notes/abi.rst |  11 +
 drivers/net/ixgbe/ixgbe_ethdev.c | 194 ---
 lib/librte_ether/rte_ethdev.c|  34 ++-
 lib/librte_ether/rte_ethdev.h|  30 ++-
 mk/rte.sdktest.mk|   4 +-
 11 files changed, 767 insertions(+), 206 deletions(-)
 delete mode 100644 app/dump_cfg/Makefile
 delete mode 100644 app/dump_cfg/main.c
 create mode 100644 app/proc_info/Makefile
 create mode 100644 app/proc_info/main.c

-- 
1.9.3



[dpdk-dev] We are so glad, we chose DPDK for our Data Plane

2015-07-05 Thread Matthew Hall
Thanks for explaining. Hopefully someday we can get some 802.11N PMDs too! 
Would be great for these sorts of projects.

Matthew.

On Sun, Jul 05, 2015 at 11:53:06AM +0530, Venkateswara Rao Thummala wrote:
> Hi Matthew,
> 
> We didn't add any new Poll Mode Drivers.
> 
> We are using DPDK only to process the tunneled wireless data packets from
> AP.
> 
> We added a tunnel layer on top of the PMDs, to process the tunneled packets.
> 
> Thanks
> Venkat
> 
> 
> 
> On 5 July 2015 at 11:08, Matthew Hall  wrote:
> 
> > Hello Venkat,
> >
> > I'd like to ask one question about your project.
> >
> > What did you do to make poll-mode drivers for WLAN controllers?
> >
> > I didn't think DPDK had these by default and it could be quite nice for
> > high-speed protocols such as 802.11N.
> >
> > Thanks,
> > Matthew.
> >
> > On Jul 3, 2015, at 9:10 PM, Venkateswara Rao Thummala <
> > venkat.thummala.1978 at gmail.com> wrote:
> >
> > > Hi,
> > >
> > > We are delighted to announce the launching of WLAN Controller, which runs
> > > on open hardware and inter-op with a multitude of third party APs.
> > > We are glad, we chose DPDK to build our Controller's Data Plane.
> > >
> > > I would like to thank each and every one, who contributed to DPDK and
> > made
> > > it a huge success.
> > >
> > > Without DPDK, we wouldn't have completed our product so fast.
> > >
> > > Please visit www.onehopnetworks.com for more details.
> > >
> > > Best Regards
> > >
> > > Venkateswara Rao Thummala
> > > Founder & Chief Architect
> > > OneHop Networks Pvt Ltd [www.onehopnetworks.com]
> > > Bangalore
> >
> >


[dpdk-dev] We are so glad, we chose DPDK for our Data Plane

2015-07-05 Thread Venkateswara Rao Thummala
Hi Matthew,

We didn't add any new Poll Mode Drivers.

We are using DPDK only to process the tunneled wireless data packets from
AP.

We added a tunnel layer on top of the PMDs, to process the tunneled packets.

Thanks
Venkat



On 5 July 2015 at 11:08, Matthew Hall  wrote:

> Hello Venkat,
>
> I'd like to ask one question about your project.
>
> What did you do to make poll-mode drivers for WLAN controllers?
>
> I didn't think DPDK had these by default and it could be quite nice for
> high-speed protocols such as 802.11N.
>
> Thanks,
> Matthew.
>
> On Jul 3, 2015, at 9:10 PM, Venkateswara Rao Thummala <
> venkat.thummala.1978 at gmail.com> wrote:
>
> > Hi,
> >
> > We are delighted to announce the launching of WLAN Controller, which runs
> > on open hardware and inter-op with a multitude of third party APs.
> > We are glad, we chose DPDK to build our Controller's Data Plane.
> >
> > I would like to thank each and every one, who contributed to DPDK and
> made
> > it a huge success.
> >
> > Without DPDK, we wouldn't have completed our product so fast.
> >
> > Please visit www.onehopnetworks.com for more details.
> >
> > Best Regards
> >
> > Venkateswara Rao Thummala
> > Founder & Chief Architect
> > OneHop Networks Pvt Ltd [www.onehopnetworks.com]
> > Bangalore
>
>


[dpdk-dev] [PATCH v3 2/7] ixgbe: add functions to get and reset xstats

2015-07-05 Thread Tahhan, Maryam


> 
> 
> 
> > >
> > >> +
> > >> +total_missed_rx = 0;
> > >> +total_qbrc = 0;
> > >> +total_qprc = 0;
> > >> +total_qprdc = 0;
> > >> +rxnfgpc = 0;
> > >> +txdgpc = 0;
> > >> +count = 0;
> > >> +
> > >> +ixgbe_read_stats_registers(hw, hw_stats, _missed_rx,
> > _qbrc,
> > >> +   _qprc,
> > , , _qprdc);
> > >> +
> > >> +if (!xstats)
> > >> +return 0;
> > >
> > > this cannot happen except if n == 0.
> > > This condition is already tested above, and "count" should be returned.
> > >
> > >> +
> > >> +/* Error stats */
> > >> +for (i = 0; i < RTE_NB_XSTATS; i++) {
> > >> +snprintf(xstats[count].name, sizeof(xstats[count].name),
> > >> +"%s", rte_ixgbe_stats_strings[i].name);
> > >> +xstats[count++].value = *(uint64_t *)(((char 
> > >> *)hw_stats) +
> > >> +
> > rte_ixgbe_stats_strings[i].offset);
> > >> +}
> > >> +
> > >> +return count;
> > >> +}
> > >
> > > Shouldn't it be xstats[i] instead of xstats[count] ?
> > >
> > > Does it work when using "show port in test-pmd"?
> >
> > ok I missed the 'count = 0' above.
> > So why using count instead of i ?
> >
> > Also, I think it would be clearer to use the constant IXGBE_NB_XSTATS
> > instead of count at the beginning of the function.
> >
> >
> 
> Hi Olivier
> 
> Actually, count should not be 0, it should be n, which is the passed in index
> from rte_eth_xstats_get()...
> 
> Because we fill out the generic stats first in rte_eth_xstats_get() then we 
> call
> ixgbe_dev_xstats_get to fill out the rest.
> 
> I will fix this up
Hi Olivier, 

I confused this change with a subsequent patch in the patch set... so yes for 
this patch you are correct we can just use i... and leave count as 0. 

in a subsequent patch I modify count to start at n, which is a passed in index 
from in rte_eth_xstats_get()...

so I will change count for i in the loop here. 


> > >
> > >> +
> > >> +static void
> > >> +ixgbe_dev_xstats_reset(struct rte_eth_dev *dev) {
> > >> +struct ixgbe_hw_stats *stats =
> > >> +IXGBE_DEV_PRIVATE_TO_STATS(dev->data-
> > >dev_private);
> > >> +
> > >> +/* HW registers are cleared on read */
> > >> +ixgbe_dev_xstats_get(dev, NULL, RTE_NB_XSTATS);
> > >> +
> > >> +/* Reset software totals */
> > >> +memset(stats, 0, sizeof(*stats)); }
> > >> +
> > >>  static void
> > >>  ixgbevf_dev_stats_get(struct rte_eth_dev *dev, struct
> > >> rte_eth_stats
> > >> *stats)  {
> > >>


[dpdk-dev] [PATCH v3 2/7] ixgbe: add functions to get and reset xstats

2015-07-05 Thread Tahhan, Maryam


Best Regards, 
Maryam

> -Original Message-
> From: Olivier MATZ [mailto:olivier.matz at 6wind.com]
> Sent: Friday, July 3, 2015 2:16 PM
> To: Tahhan, Maryam; dev at dpdk.org
> Subject: Re: [dpdk-dev] [PATCH v3 2/7] ixgbe: add functions to get and reset
> xstats
> 
> Hi Maryam,
> 
> On 06/26/2015 02:59 PM, Maryam Tahhan wrote:
> > Implement ixgbe_dev_xstats_reset and ixgbe_dev_xstats_get.
> >
> > Signed-off-by: Maryam Tahhan 
> > ---
> >  drivers/net/ixgbe/ixgbe_ethdev.c | 85
> > 
> >  1 file changed, 85 insertions(+)
> >
> > diff --git a/drivers/net/ixgbe/ixgbe_ethdev.c
> > b/drivers/net/ixgbe/ixgbe_ethdev.c
> > index 927021f..0f62bcb 100644
> > --- a/drivers/net/ixgbe/ixgbe_ethdev.c
> > +++ b/drivers/net/ixgbe/ixgbe_ethdev.c
> > @@ -131,7 +131,10 @@ static int ixgbe_dev_link_update(struct
> rte_eth_dev *dev,
> > int wait_to_complete);
> >  static void ixgbe_dev_stats_get(struct rte_eth_dev *dev,
> > struct rte_eth_stats *stats);
> > +static int ixgbe_dev_xstats_get(struct rte_eth_dev *dev,
> > +   struct rte_eth_xstats *xstats, unsigned n);
> >  static void ixgbe_dev_stats_reset(struct rte_eth_dev *dev);
> > +static void ixgbe_dev_xstats_reset(struct rte_eth_dev *dev);
> >  static int ixgbe_dev_queue_stats_mapping_set(struct rte_eth_dev
> *eth_dev,
> >  uint16_t queue_id,
> >  uint8_t stat_idx,
> > @@ -334,7 +337,9 @@ static const struct eth_dev_ops ixgbe_eth_dev_ops
> = {
> > .allmulticast_disable = ixgbe_dev_allmulticast_disable,
> > .link_update  = ixgbe_dev_link_update,
> > .stats_get= ixgbe_dev_stats_get,
> > +   .xstats_get   = ixgbe_dev_xstats_get,
> > .stats_reset  = ixgbe_dev_stats_reset,
> > +   .xstats_reset = ixgbe_dev_xstats_reset,
> > .queue_stats_mapping_set = ixgbe_dev_queue_stats_mapping_set,
> > .dev_infos_get= ixgbe_dev_info_get,
> > .mtu_set  = ixgbe_dev_mtu_set,
> > @@ -414,6 +419,33 @@ static const struct eth_dev_ops
> ixgbevf_eth_dev_ops = {
> > .set_mc_addr_list = ixgbe_dev_set_mc_addr_list,
> >  };
> >
> > +/* store statistics names and its offset in stats structure  */
> > +struct rte_ixgbe_xstats_name_off {
> > +   char name[RTE_ETH_XSTATS_NAME_SIZE];
> > +   unsigned offset;
> > +};
> > +
> > +static const struct rte_ixgbe_xstats_name_off rte_ixgbe_stats_strings[] = {
> > +   {"rx_illegal_byte_err", offsetof(struct ixgbe_hw_stats, errbc)},
> > +   {"rx_len_err", offsetof(struct ixgbe_hw_stats, rlec)},
> > +   {"rx_undersize_count", offsetof(struct ixgbe_hw_stats, ruc)},
> > +   {"rx_oversize_count", offsetof(struct ixgbe_hw_stats, roc)},
> > +   {"rx_fragment_count", offsetof(struct ixgbe_hw_stats, rfc)},
> > +   {"rx_jabber_count", offsetof(struct ixgbe_hw_stats, rjc)},
> > +   {"l3_l4_xsum_error", offsetof(struct ixgbe_hw_stats, xec)},
> > +   {"mac_local_fault", offsetof(struct ixgbe_hw_stats, mlfc)},
> > +   {"mac_remote_fault", offsetof(struct ixgbe_hw_stats, mrfc)},
> > +   {"mac_short_pkt_discard", offsetof(struct ixgbe_hw_stats, mspdc)},
> > +   {"fccrc_error", offsetof(struct ixgbe_hw_stats, fccrc)},
> > +   {"fcoe_drop", offsetof(struct ixgbe_hw_stats, fcoerpdc)},
> > +   {"fc_last_error", offsetof(struct ixgbe_hw_stats, fclast)},
> > +   {"rx_broadcast_packets", offsetof(struct ixgbe_hw_stats, bprc)},
> > +   {"mgmt_pkts_dropped", offsetof(struct ixgbe_hw_stats, mngpdc)}, };
> > +
> > +#define RTE_NB_XSTATS (sizeof(rte_ixgbe_stats_strings) /   \
> > +   sizeof(rte_ixgbe_stats_strings[0]))
> > +
> 
> Maybe RTE_NB_XSTATS should be renamed in IXGBE_NB_XSTATS?
> 
> 
> >  /**
> >   * Atomically reads the link status information from global
> >   * structure rte_eth_dev.
> > @@ -1982,6 +2014,59 @@ ixgbe_dev_stats_reset(struct rte_eth_dev
> *dev)
> > memset(stats, 0, sizeof(*stats));
> >  }
> >
> > +static int
> > +ixgbe_dev_xstats_get(struct rte_eth_dev *dev, struct rte_eth_xstats
> *xstats,
> > +unsigned n)
> > +{
> > +   struct ixgbe_hw *hw =
> > +   IXGBE_DEV_PRIVATE_TO_HW(dev->data-
> >dev_private);
> > +   struct ixgbe_hw_stats *hw_stats =
> > +   IXGBE_DEV_PRIVATE_TO_STATS(dev->data-
> >dev_private);
> > +   uint64_t total_missed_rx, total_qbrc, total_qprc, total_qprdc;
> > +   uint64_t rxnfgpc, txdgpc;
> > +   unsigned i, count = RTE_NB_XSTATS;
> > +
> > +   if (n == 0)
> > +   return count;
> 
> I think it does not exactly matches the API described in rte_ethdev.h:
> 
>  * @return
>  *   - positive value lower or equal to n: success. The return value
>  * is the number of entries filled in the stats table.
>  *   - positive value higher than n: error, the given statistics table
>  * is too small. The return value corresponds to the size that should
>  * be