From patchwork Wed Jan 23 19:36:11 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Choi, David" X-Patchwork-Id: 215027 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 9C80A2C035E for ; Thu, 24 Jan 2013 06:36:27 +1100 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752154Ab3AWTgW (ORCPT ); Wed, 23 Jan 2013 14:36:22 -0500 Received: from p01c12o149.mxlogic.net ([208.65.145.72]:49133 "EHLO p01c12o149.mxlogic.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751388Ab3AWTgR convert rfc822-to-8bit (ORCPT ); Wed, 23 Jan 2013 14:36:17 -0500 Received: from unknown [67.151.21.17] (EHLO p01c12o149.mxlogic.net) by p01c12o149.mxlogic.net(mxl_mta-6.16.0-0) with ESMTP id 1bb30015.4b1ed940.74522.00-575.184673.p01c12o149.mxlogic.net (envelope-from ); Wed, 23 Jan 2013 12:36:17 -0700 (MST) X-MXL-Hash: 51003bb10402a5e6-a9ee93d19455a29aa56078f07e4a9a2dda15eea3 Received: from unknown [67.151.21.17] (EHLO EXHUB1.micrel.com) by p01c12o149.mxlogic.net(mxl_mta-6.16.0-0) over TLS secured channel with ESMTP id cab30015.0.74490.00-386.184579.p01c12o149.mxlogic.net (envelope-from ); Wed, 23 Jan 2013 12:36:16 -0700 (MST) X-MXL-Hash: 51003bb06f5f2103-6afab4a276729914cc53e5e44e44a3ea5c8503c8 Received: from EXMB1.micrel.com ([::1]) by EXHUB1.micrel.com ([::1]) with mapi id 14.01.0355.002; Wed, 23 Jan 2013 11:36:11 -0800 From: "Choi, David" To: Joe Perches CC: "netdev@vger.kernel.org" , "Doong, Ping" , "davem@davemloft.net" , "bhutchings@solarflare.com" Subject: RE: [PATCH net-next] drivers/net/ethernet/micrel/ks8851_mll: Implement basic statistics Thread-Topic: [PATCH net-next] drivers/net/ethernet/micrel/ks8851_mll: Implement basic statistics Thread-Index: Ac35mfiOyNyNcPJFQ1+ALSh71bxjSAARk94AABAD3iA= Date: Wed, 23 Jan 2013 19:36:11 +0000 Message-ID: References: <1358968194.2107.37.camel@joe-AO722> In-Reply-To: <1358968194.2107.37.camel@joe-AO722> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.32.2.75] MIME-Version: 1.0 X-AnalysisOut: [v=2.0 cv=b/QFFK6x c=1 sm=1 a=bvNkavSGPoSFsA6GkSBFrg==:17 a] X-AnalysisOut: [=GZ0KAHeyW1cA:10 a=vumajZ6KukcA:10 a=yj0KZ0R0_J8A:10 a=BLc] X-AnalysisOut: [eEmwcHowA:10 a=kj9zAlcOel0A:10 a=xqWC_Br6kY4A:10 a=Q4n7fi2] X-AnalysisOut: [PAAAA:8 a=1q1DAjKP5YsA:10 a=WtQnGfNhCITeB5HXVH4A:9 a=CjuIK] X-AnalysisOut: [1q_8ugA:10 a=yJsD6ztlz_8A:10] X-Spam: [F=0.2000000000; CM=0.500; S=0.200(2010122901)] X-MAIL-FROM: X-SOURCE-IP: [67.151.21.17] Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: David J. Choi Summary of changes: add codes to collect basic statistical information about Ethernet packets. Signed-off-by: David J. Choi --- --- -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html --- net-next/drivers/net/ethernet/micrel/ks8851_mll.c.orig 2013-01-22 17:25:59.000000000 -0800 +++ net-next/drivers/net/ethernet/micrel/ks8851_mll.c 2013-01-23 11:28:45.000000000 -0800 @@ -793,19 +793,34 @@ static void ks_rcv(struct ks_net *ks, st frame_hdr = ks->frame_head_info; while (ks->frame_cnt--) { skb = netdev_alloc_skb(netdev, frame_hdr->len + 16); - if (likely(skb && (frame_hdr->sts & RXFSHR_RXFV) && + if (unlikely(!skb)) { + /* discard the packet from the device */ + ks_wrreg16(ks, KS_RXQCR, ks->rc_rxqcr | RXQCR_RRXEF); + netdev->stats.rx_dropped++; + } else if (likely((frame_hdr->sts & RXFSHR_RXFV) && (frame_hdr->len < RX_BUF_SIZE) && frame_hdr->len)) { skb_reserve(skb, 2); /* read data block including CRC 4 bytes */ ks_read_qmu(ks, (u16 *)skb->data, frame_hdr->len); - skb_put(skb, frame_hdr->len); + + /* exclude the size of CRC */ + skb_put(skb, frame_hdr->len - 4); skb->protocol = eth_type_trans(skb, netdev); netif_rx(skb); + netdev->stats.rx_packets++; + + /* crc field */ + netdev->stats.rx_bytes += frame_hdr->len - 4; } else { - pr_err("%s: err:skb alloc\n", __func__); - ks_wrreg16(ks, KS_RXQCR, (ks->rc_rxqcr | RXQCR_RRXEF)); - if (skb) - dev_kfree_skb_irq(skb); + /* discard the packet from the device */ + ks_wrreg16(ks, KS_RXQCR, ks->rc_rxqcr | RXQCR_RRXEF); + netdev->stats.rx_dropped++; + if (frame_hdr->len >= RX_BUF_SIZE || !frame_hdr->len) + netdev->stats.rx_length_errors++; + if (!(frame_hdr->sts & RXFSHR_RXFV)) + netdev->stats.rx_frame_errors++; + + dev_kfree_skb_irq(skb); } frame_hdr++; } @@ -876,6 +891,8 @@ static irqreturn_t ks_irq(int irq, void pmecr &= ~PMECR_WKEVT_MASK; ks_wrreg16(ks, KS_PMECR, pmecr | PMECR_WKEVT_LINK); } + if (unlikely(status & IRQ_RXOI)) + ks->netdev->stats.rx_over_errors++; /* this should be the last in IRQ handler*/ ks_restore_cmd_reg(ks); @@ -1015,6 +1032,8 @@ static int ks_start_xmit(struct sk_buff if (likely(ks_tx_fifo_space(ks) >= skb->len + 12)) { ks_write_qmu(ks, skb->data, skb->len); + netdev->stats.tx_bytes += skb->len; + netdev->stats.tx_packets++; dev_kfree_skb(skb); } else retv = NETDEV_TX_BUSY;