From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Ira W. Snyder" Subject: [PATCH 3/6] can: janz-ican3: fix error and byte counters Date: Thu, 19 Jul 2012 08:54:18 -0700 Message-ID: <1342713258-14822-1-git-send-email-iws@ovro.caltech.edu> References: <20120719155026.GG25905@ovro.caltech.edu> Return-path: Received: from ovro.ovro.caltech.edu ([192.100.16.2]:53877 "EHLO ovro.ovro.caltech.edu" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751653Ab2GSPyU (ORCPT ); Thu, 19 Jul 2012 11:54:20 -0400 Received: from localhost (localhost [127.0.0.1]) by ovro.ovro.caltech.edu (Postfix) with ESMTP id E262D222BA for ; Thu, 19 Jul 2012 08:54:19 -0700 (PDT) In-Reply-To: <20120719155026.GG25905@ovro.caltech.edu> Sender: linux-can-owner@vger.kernel.org List-ID: To: linux-can@vger.kernel.org Cc: "Ira W. Snyder" From: "Ira W. Snyder" The error and byte counter statistics were being incremented incorrectly. For example, a TX error would be counted both in tx_errors and rx_errors. This corrects the problem so that tx_errors and rx_errors are only incremented for errors caused by packets sent to the bus. Error packets generated by the driver are not counted. The byte counters are only increased for packets which are actually transmitted or received from the bus. Error packets generated by the driver are not counted. Signed-off-by: Ira W. Snyder --- Changes for this version: - for RX overflow errors, both rx_over_errors and rx_errors are incremented drivers/net/can/janz-ican3.c | 11 ++++++----- 1 files changed, 6 insertions(+), 5 deletions(-) diff --git a/drivers/net/can/janz-ican3.c b/drivers/net/can/janz-ican3.c index ea1919e..14d5abc 100644 --- a/drivers/net/can/janz-ican3.c +++ b/drivers/net/can/janz-ican3.c @@ -907,8 +907,8 @@ static void ican3_handle_msglost(struct ican3_dev *mod, struct ican3_msg *msg) if (skb) { cf->can_id |= CAN_ERR_CRTL; cf->data[1] = CAN_ERR_CRTL_RX_OVERFLOW; + stats->rx_over_errors++; stats->rx_errors++; - stats->rx_bytes += cf->can_dlc; netif_rx(skb); } } @@ -982,7 +982,6 @@ static int ican3_handle_cevtind(struct ican3_dev *mod, struct ican3_msg *msg) dev_dbg(mod->dev, "bus error interrupt\n"); mod->can.can_stats.bus_error++; - stats->rx_errors++; cf->can_id |= CAN_ERR_PROT | CAN_ERR_BUSERROR; switch (ecc & ECC_MASK) { @@ -1001,8 +1000,12 @@ static int ican3_handle_cevtind(struct ican3_dev *mod, struct ican3_msg *msg) break; } - if ((ecc & ECC_DIR) == 0) + if (!(ecc & ECC_DIR)) { cf->data[2] |= CAN_ERR_PROT_TX; + stats->tx_errors++; + } else { + stats->rx_errors++; + } cf->data[6] = txerr; cf->data[7] = rxerr; @@ -1028,8 +1031,6 @@ static int ican3_handle_cevtind(struct ican3_dev *mod, struct ican3_msg *msg) } mod->can.state = state; - stats->rx_errors++; - stats->rx_bytes += cf->can_dlc; netif_rx(skb); return 0; } -- 1.7.8.6