From patchwork Fri Jun 3 00:22:45 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "John Daley (johndale)" X-Patchwork-Id: 13176 X-Patchwork-Delegate: bruce.richardson@intel.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [IPv6:::1]) by dpdk.org (Postfix) with ESMTP id 567375AA2; Fri, 3 Jun 2016 02:23:17 +0200 (CEST) Received: from rcdn-iport-1.cisco.com (rcdn-iport-1.cisco.com [173.37.86.72]) by dpdk.org (Postfix) with ESMTP id 1799B5A62 for ; Fri, 3 Jun 2016 02:23:15 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=cisco.com; i=@cisco.com; l=3957; q=dns/txt; s=iport; t=1464913395; x=1466122995; h=from:to:cc:subject:date:message-id:in-reply-to: references; bh=mJYwzYE8rQHF8pfK7LGlcxbu82Fhj6e75kEqPYKfkKw=; b=lBgY1stX7a5KJ6IS5Wtx/Ji6C2YCJg5sGMD0HCJ6dnjzB+eJNTtFVG1a XuRg7VdffmN72/lAEf9oHgEAuHelp8HJIf4QxG6/cC556EARfq2iIYgVC N3zm+DHosXW3VlhMAYKxusoZ8UlTzO5josqgR5kVS7Uvn7IMqAQEYIeRO I=; X-IronPort-AV: E=Sophos;i="5.26,409,1459814400"; d="scan'208";a="114729775" Received: from alln-core-8.cisco.com ([173.36.13.141]) by rcdn-iport-1.cisco.com with ESMTP/TLS/DHE-RSA-AES256-SHA; 03 Jun 2016 00:23:15 +0000 Received: from cisco.com (savbu-usnic-a.cisco.com [10.193.184.48]) by alln-core-8.cisco.com (8.14.5/8.14.5) with ESMTP id u530NEui001140; Fri, 3 Jun 2016 00:23:15 GMT Received: by cisco.com (Postfix, from userid 392789) id DD7EC3FAADEC; Thu, 2 Jun 2016 17:23:14 -0700 (PDT) From: John Daley To: dev@dpdk.org Cc: bruce.richarsdon@intel.com, John Daley Date: Thu, 2 Jun 2016 17:22:45 -0700 Message-Id: <1464913377-30879-2-git-send-email-johndale@cisco.com> X-Mailer: git-send-email 2.7.0 In-Reply-To: <1464913377-30879-1-git-send-email-johndale@cisco.com> References: <1464071579-30072-1-git-send-email-johndale@cisco.com> <1464913377-30879-1-git-send-email-johndale@cisco.com> Subject: [dpdk-dev] [PATCH v3 01/13] enic: fix Rx drop counters 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: , Errors-To: dev-bounces@dpdk.org Sender: "dev" rx_no_bufs is a hardware counter of packets dropped on the interface due to no host buffers and should be used to update r_stats->imissed counter instead of rx_nombuf. Include rx_drop in ierrors. rx_drop is incremented if packets arrive when the receive queue is disabled. Add a structure and functions for initializing and clearing software counters. Add count of Rx mbuf allocation failures (rx_nombuf) as the first counter. Fixes: fefed3d1e62c ("enic: new driver") Signed-off-by: John Daley --- drivers/net/enic/enic.h | 7 +++++++ drivers/net/enic/enic_main.c | 24 +++++++++++++++++++++--- drivers/net/enic/enic_rx.c | 5 +---- 3 files changed, 29 insertions(+), 7 deletions(-) diff --git a/drivers/net/enic/enic.h b/drivers/net/enic/enic.h index 09f3853..584d49b 100644 --- a/drivers/net/enic/enic.h +++ b/drivers/net/enic/enic.h @@ -91,6 +91,10 @@ struct enic_fdir { struct enic_fdir_node *nodes[ENICPMD_FDIR_MAX]; }; +struct enic_soft_stats { + rte_atomic64_t rx_nombuf; +}; + /* Per-instance private data structure */ struct enic { struct enic *next; @@ -133,6 +137,9 @@ struct enic { /* interrupt resource */ struct vnic_intr intr; unsigned int intr_count; + + /* software counters */ + struct enic_soft_stats soft_stats; }; static inline unsigned int enic_cq_rq(__rte_unused struct enic *enic, unsigned int rq) diff --git a/drivers/net/enic/enic_main.c b/drivers/net/enic/enic_main.c index bbbe660..c002ef3 100644 --- a/drivers/net/enic/enic_main.c +++ b/drivers/net/enic/enic_main.c @@ -211,15 +211,30 @@ void enic_send_pkt(struct enic *enic, struct vnic_wq *wq, 0 /*wrid*/); } +static void enic_clear_soft_stats(struct enic *enic) +{ + struct enic_soft_stats *soft_stats = &enic->soft_stats; + rte_atomic64_clear(&soft_stats->rx_nombuf); +} + +static void enic_init_soft_stats(struct enic *enic) +{ + struct enic_soft_stats *soft_stats = &enic->soft_stats; + rte_atomic64_init(&soft_stats->rx_nombuf); + enic_clear_soft_stats(enic); +} + void enic_dev_stats_clear(struct enic *enic) { if (vnic_dev_stats_clear(enic->vdev)) dev_err(enic, "Error in clearing stats\n"); + enic_clear_soft_stats(enic); } void enic_dev_stats_get(struct enic *enic, struct rte_eth_stats *r_stats) { struct vnic_stats *stats; + struct enic_soft_stats *soft_stats; if (vnic_dev_stats_dump(enic->vdev, &stats)) { dev_err(enic, "Error in getting stats\n"); @@ -232,12 +247,13 @@ void enic_dev_stats_get(struct enic *enic, struct rte_eth_stats *r_stats) r_stats->ibytes = stats->rx.rx_bytes_ok; r_stats->obytes = stats->tx.tx_bytes_ok; - r_stats->ierrors = stats->rx.rx_errors; + r_stats->ierrors = stats->rx.rx_errors + stats->rx.rx_drop; r_stats->oerrors = stats->tx.tx_errors; - r_stats->imissed = stats->rx.rx_drop; + r_stats->imissed = stats->rx.rx_no_bufs; - r_stats->rx_nombuf = stats->rx.rx_no_bufs; + soft_stats = &enic->soft_stats; + r_stats->rx_nombuf = rte_atomic64_read(&soft_stats->rx_nombuf); } void enic_del_mac_address(struct enic *enic) @@ -795,6 +811,8 @@ int enic_setup_finish(struct enic *enic) { int ret; + enic_init_soft_stats(enic); + ret = enic_set_rss_nic_cfg(enic); if (ret) { dev_err(enic, "Failed to config nic, aborting.\n"); diff --git a/drivers/net/enic/enic_rx.c b/drivers/net/enic/enic_rx.c index f92f6bc..89c62ce 100644 --- a/drivers/net/enic/enic_rx.c +++ b/drivers/net/enic/enic_rx.c @@ -275,10 +275,7 @@ enic_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, /* allocate a new mbuf */ nmb = rte_mbuf_raw_alloc(rq->mp); if (nmb == NULL) { - dev_err(enic, "RX mbuf alloc failed port=%u qid=%u", - enic->port_id, (unsigned)rq->index); - rte_eth_devices[enic->port_id]. - data->rx_mbuf_alloc_failed++; + rte_atomic64_inc(&enic->soft_stats.rx_nombuf); break; }