From owner-freebsd-bugs@FreeBSD.ORG Fri Oct 3 22:30:07 2008 Return-Path: Delivered-To: freebsd-bugs@hub.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id CCA961065694 for ; Fri, 3 Oct 2008 22:30:07 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [IPv6:2001:4f8:fff6::28]) by mx1.freebsd.org (Postfix) with ESMTP id A8A228FC15 for ; Fri, 3 Oct 2008 22:30:07 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (gnats@localhost [127.0.0.1]) by freefall.freebsd.org (8.14.2/8.14.2) with ESMTP id m93MU6pD023351 for ; Fri, 3 Oct 2008 22:30:06 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.14.2/8.14.1/Submit) id m93MU6q2023348; Fri, 3 Oct 2008 22:30:06 GMT (envelope-from gnats) Resent-Date: Fri, 3 Oct 2008 22:30:06 GMT Resent-Message-Id: <200810032230.m93MU6q2023348@freefall.freebsd.org> Resent-From: FreeBSD-gnats-submit@FreeBSD.org (GNATS Filer) Resent-To: freebsd-bugs@FreeBSD.org Resent-Reply-To: FreeBSD-gnats-submit@FreeBSD.org, Dmitry Tejblum Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 2F1D31065686 for ; 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 ; 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 ; 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 To: FreeBSD-gnats-submit@FreeBSD.org X-Send-Pr-Version: 3.113 Cc: Subject: kern/127834: [patch] [ixgbe] wrong error counting X-BeenThere: freebsd-bugs@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 03 Oct 2008 22:30:07 -0000 >Number: 127834 >Category: kern >Synopsis: [patch] [ixgbe] wrong error counting >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Fri Oct 03 22:30:05 UTC 2008 >Closed-Date: >Last-Modified: >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: >Unformatted: