net/ena: add new way of getting Rx drops
authorRafal Kozik <rk@semihalf.com>
Fri, 14 Dec 2018 13:18:43 +0000 (14:18 +0100)
committerFerruh Yigit <ferruh.yigit@intel.com>
Fri, 21 Dec 2018 15:22:40 +0000 (16:22 +0100)
The Rx drops cannot be acquired using the older API. Now, it must be
read in keep alive message.

Signed-off-by: Rafal Kozik <rk@semihalf.com>
Acked-by: Michal Krawczyk <mk@semihalf.com>
drivers/net/ena/ena_ethdev.c
drivers/net/ena/ena_ethdev.h

index c44390a..0aeb85f 100644 (file)
@@ -935,6 +935,7 @@ static void ena_stats_restart(struct rte_eth_dev *dev)
        rte_atomic64_init(&adapter->drv_stats->ierrors);
        rte_atomic64_init(&adapter->drv_stats->oerrors);
        rte_atomic64_init(&adapter->drv_stats->rx_nombuf);
+       rte_atomic64_init(&adapter->drv_stats->rx_drops);
 }
 
 static int ena_stats_get(struct rte_eth_dev *dev,
@@ -967,10 +968,9 @@ static int ena_stats_get(struct rte_eth_dev *dev,
                                        ena_stats.rx_bytes_low);
        stats->obytes = __MERGE_64B_H_L(ena_stats.tx_bytes_high,
                                        ena_stats.tx_bytes_low);
-       stats->imissed = __MERGE_64B_H_L(ena_stats.rx_drops_high,
-                                        ena_stats.rx_drops_low);
 
        /* Driver related stats */
+       stats->imissed = rte_atomic64_read(&adapter->drv_stats->rx_drops);
        stats->ierrors = rte_atomic64_read(&adapter->drv_stats->ierrors);
        stats->oerrors = rte_atomic64_read(&adapter->drv_stats->oerrors);
        stats->rx_nombuf = rte_atomic64_read(&adapter->drv_stats->rx_nombuf);
@@ -2691,8 +2691,14 @@ static void ena_keep_alive(void *adapter_data,
                           __rte_unused struct ena_admin_aenq_entry *aenq_e)
 {
        struct ena_adapter *adapter = (struct ena_adapter *)adapter_data;
+       struct ena_admin_aenq_keep_alive_desc *desc;
+       uint64_t rx_drops;
 
        adapter->timestamp_wd = rte_get_timer_cycles();
+
+       desc = (struct ena_admin_aenq_keep_alive_desc *)aenq_e;
+       rx_drops = ((uint64_t)desc->rx_drops_high << 32) | desc->rx_drops_low;
+       rte_atomic64_set(&adapter->drv_stats->rx_drops, rx_drops);
 }
 
 /**
index 9eca6e6..309b92f 100644 (file)
@@ -158,6 +158,7 @@ struct ena_driver_stats {
        rte_atomic64_t ierrors;
        rte_atomic64_t oerrors;
        rte_atomic64_t rx_nombuf;
+       rte_atomic64_t rx_drops;
 };
 
 struct ena_stats_dev {