From tejblum@noc.yandex.net  Fri Oct  3 22:26:39 2008
Return-Path: <tejblum@noc.yandex.net>
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id 2F1D31065686
	for <FreeBSD-gnats-submit@freebsd.org>; Fri,  3 Oct 2008 22:26:39 +0000 (UTC)
	(envelope-from tejblum@noc.yandex.net)
Received: from noc.yandex.net (noc.yandex.net [213.180.193.80])
	by mx1.freebsd.org (Postfix) with ESMTP id AA1948FC18
	for <FreeBSD-gnats-submit@freebsd.org>; Fri,  3 Oct 2008 22:26:38 +0000 (UTC)
	(envelope-from tejblum@noc.yandex.net)
Received: from noc.yandex.net (localhost [127.0.0.1])
	by noc.yandex.net (8.14.2/8.14.2) with ESMTP id m93M5KGx016552
	for <FreeBSD-gnats-submit@freebsd.org>; Sat, 4 Oct 2008 02:05:20 +0400 (MSD)
	(envelope-from tejblum@noc.yandex.net)
Received: (from tejblum@localhost)
	by noc.yandex.net (8.14.2/8.14.2/Submit) id m93M5K0P016551;
	Sat, 4 Oct 2008 02:05:20 +0400 (MSD)
	(envelope-from tejblum)
Message-Id: <200810032205.m93M5K0P016551@noc.yandex.net>
Date: Sat, 4 Oct 2008 02:05:20 +0400 (MSD)
From: Dmitry Tejblum <tejblum@yandex-team.ru>
To: FreeBSD-gnats-submit@freebsd.org
Cc:
Subject: [patch] [ixgbe] wrong error counting
X-Send-Pr-Version: 3.113
X-GNATS-Notify:

>Number:         127834
>Category:       kern
>Synopsis:       [ixgbe] [patch] wrong error counting
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    rstone
>State:          closed
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Fri Oct 03 22:30:05 UTC 2008
>Closed-Date:    Sun Oct 23 22:52:12 UTC 2011
>Last-Modified:  Sun Oct 23 22:52:12 UTC 2011
>Originator:     Dmitry Tejblum
>Release:        FreeBSD 7.1-PRERELEASE amd64
>Organization:
OOO Yandex
>Environment:
7.1-PRERELEASE 


>Description:

1. In one place, the driver do if_ierrors++. The increase get lost, since
the driver recompute if_ierrors from scratch in ixgbe_update_stats_counters()

2. "Missed Packed Counter" (MPC) registers reset to 0 after reading. The code in
ixgbe_update_stats_counters() does not correctly account for it. 
For this reason, netstat -i usually show 0 errors on 'ix' interfaces, even 
though there were missed packets some time ago.

>How-To-Repeat:

>Fix:



--- ixgbe.c	2008-07-01 04:33:19.000000000 +0400
+++ ixgbe.c	2008-10-04 01:45:53.000000000 +0400
@@ -3337,7 +3337,7 @@ ixgbe_rxeof(struct rx_ring *rxr, int cou
 				rxr->lmp = NULL;
 			}
 		} else {
-			ifp->if_ierrors++;
+			adapter->dropped_pkts++;
 discard:
 			/* Reuse loaded DMA map and just update mbuf chain */
 			mp = rxr->rx_buffers[i].m_head;
@@ -3553,6 +3553,7 @@ ixgbe_update_stats_counters(struct adapt
 	struct ifnet   *ifp = adapter->ifp;;
 	struct ixgbe_hw *hw = &adapter->hw;
 	u32  missed_rx = 0, bprc, lxon, lxoff, total;
+	u64  missed_rx_total = 0;
 
 	adapter->stats.crcerrs += IXGBE_READ_REG(hw, IXGBE_CRCERRS);
 
@@ -3561,6 +3562,7 @@ ixgbe_update_stats_counters(struct adapt
 		mp = IXGBE_READ_REG(hw, IXGBE_MPC(i));
 		missed_rx += mp;
         	adapter->stats.mpc[i] += mp;
+        	missed_rx_total += adapter->stats.mpc[i];
 		adapter->stats.rnbc[i] += IXGBE_READ_REG(hw, IXGBE_RNBC(i));
 	}
 
@@ -3628,8 +3630,8 @@ ixgbe_update_stats_counters(struct adapt
 	ifp->if_collisions = 0;
 
 	/* Rx Errors */
-	ifp->if_ierrors = missed_rx + adapter->stats.crcerrs +
-		adapter->stats.rlec;
+	ifp->if_ierrors = missed_rx_total + adapter->stats.crcerrs +
+		adapter->stats.rlec + adapter->dropped_pkts;
 }
 
 
>Release-Note:
>Audit-Trail:
Responsible-Changed-From-To: freebsd-bugs->freebsd-net 
Responsible-Changed-By: linimon 
Responsible-Changed-When: Fri Oct 3 23:33:42 UTC 2008 
Responsible-Changed-Why:  
Over to maintainer(s). 

http://www.freebsd.org/cgi/query-pr.cgi?pr=127834 
Responsible-Changed-From-To: freebsd-net->rstone 
Responsible-Changed-By: emaste 
Responsible-Changed-When: Wed May 12 14:07:07 UTC 2010 
Responsible-Changed-Why:  
Ryan checked on this; it is fixed in -CURRENT.  He'll check the state of 
stable/8 and stable/7. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=127834 
State-Changed-From-To: open->patched 
State-Changed-By: emaste 
State-Changed-When: Wed May 12 14:08:47 UTC 2010 
State-Changed-Why:  
Fixed in -CURRENT at least, maybe also older branches. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=127834 
State-Changed-From-To: patched->closed 
State-Changed-By: eadler 
State-Changed-When: Sun Oct 23 22:52:11 UTC 2011 
State-Changed-Why:  
Committed. Thanks! 

http://www.freebsd.org/cgi/query-pr.cgi?pr=127834 
>Unformatted:
