From patchwork Thu Apr 26 00:00:22 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Manlunas, Felix" X-Patchwork-Id: 904800 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=none (p=none dis=none) header.from=cavium.com Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=CAVIUMNETWORKS.onmicrosoft.com header.i=@CAVIUMNETWORKS.onmicrosoft.com header.b="kJSh3Xch"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 40Wcdw03JHz9s0W for ; Thu, 26 Apr 2018 10:00:36 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751558AbeDZAAb (ORCPT ); Wed, 25 Apr 2018 20:00:31 -0400 Received: from mail-sn1nam02on0063.outbound.protection.outlook.com ([104.47.36.63]:52372 "EHLO NAM02-SN1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1750868AbeDZAA2 (ORCPT ); Wed, 25 Apr 2018 20:00:28 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=CAVIUMNETWORKS.onmicrosoft.com; s=selector1-cavium-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=IuQsJhCH4hCqNgP/W97YElMjoUQAUnRolGet1K60piQ=; b=kJSh3Xchhcr1Mq2oCo6paCqy/Qy8Z1eKS2BUc/+ncewdOV2Vw2pNIkNMaz7X+XWHc1cNy6wTjgTWCXf/egnHfA/idlt8OSbZRpZwM7YpSMJ46em1ARk0g+709XYtgwAcJVgab72Bu9Ye71subq/jRsXRhx4iKDZqhNEKlBE9kns= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Felix.Manlunas@cavium.com; Received: from localhost (50.233.148.156) by BN7PR07MB4211.namprd07.prod.outlook.com (2603:10b6:406:b2::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.696.13; Thu, 26 Apr 2018 00:00:25 +0000 Date: Wed, 25 Apr 2018 17:00:22 -0700 From: Felix Manlunas To: davem@davemloft.net Cc: netdev@vger.kernel.org, raghu.vatsavayi@cavium.com, derek.chickles@cavium.com, satananda.burla@cavium.com, felix.manlunas@cavium.com, pradeep.nalla@cavium.com Subject: [PATCH net-next 2/2] liquidio: add support for ndo_get_stats64 instead of ndo_get_stats Message-ID: <20180426000022.GA14082@felix-thinkpad.cavium.com> References: <20180425235942.GA14044@felix-thinkpad.cavium.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20180425235942.GA14044@felix-thinkpad.cavium.com> User-Agent: Mutt/1.6.1 (2016-04-27) X-Originating-IP: [50.233.148.156] X-ClientProxiedBy: SN4PR0401CA0023.namprd04.prod.outlook.com (2603:10b6:803:21::33) To BN7PR07MB4211.namprd07.prod.outlook.com (2603:10b6:406:b2::15) X-MS-PublicTrafficType: Email X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(5600026)(4534165)(4627221)(201703031133081)(201702281549075)(2017052603328)(7153060)(7193020); SRVR:BN7PR07MB4211; X-Microsoft-Exchange-Diagnostics: 1; BN7PR07MB4211; 3:vICZ0ZVjiLOsufPSrNaYWHAuxe87BPca5b12+naS+NegtQpl6jRMtY0mYZrcWikrRFlLu2mF8T7Woe2jtQnZ5VeN/8NbQs/XQPAAv0tCDb2LeZAFoUaZkSZ2lyyV1nzomIJxaEP1Hbj5QjsVKpWh9ls2IcoKVMStKKPCLzLSw9RcJY3HKqq1comJuPC5hFVllVwb8LgQm5WYvsn9HOEpMCEjoDIkBc6y3hXBwAbtIgp7inUEJ1Dr4okZGblPMQjj; 25:ya3wUFV7kO669BGlFImwC896x4TpSvbWV+sbrQ1iEz+Ug8aOlTmuFvO2WwBiKnp8kwlad4+lsSYKiFjIUHCTrNm+vTaW6nNQWR+JGaHTiC1c+V2boZLFpcgk/PKBeG97ingD03V9MuFafj90nVoDtVs2DFwKmCUVa0r1HDD4vtpdHSG8jJk+3uIKXO5/0u+b9GpNe9AxxQqNpDklbu/PHlfdKYmW7IV6ovoCjdGS4Hw+boFux1edibdoPrxSeY6tQWbSvyLDmV7PSChu935RSF4kImYhnNV8Eo+kh53EHaCiedIZq1N6LD8/7EqeqqomA4k035Q0jPsCllwZ53HjHA==; 31:mkLZWzZ2yLMyJHIMLk2bFh9FYF4iMq4Mi8ictOwtdsnoUbiT3NA8TpX65KsrbKEeERuBY1Kat4YiFOcs+8YoUXSscwDUGtmmLnwO72aLO5xVzRnozSaPJU58K+eHPRV4FicixTj+DB9qvZUigxx5IQOwZ+MLGZK+yrHIvlDA9gcnMJAsIkZ27xd5jR3CjIyYI59dF8lGdBqivpIIc4aZmdhj8U9sMoYOwD0KlXgcx14= X-MS-TrafficTypeDiagnostic: BN7PR07MB4211: X-Microsoft-Exchange-Diagnostics: 1; BN7PR07MB4211; 20:8HNuIaNZLgZ1UrFCpu+6/E4DvwrY9qkcFvYp5Ym3aalq688mgtW36WQp9jVAyu1KdOjK/cdLbpORAw5FzDw4rUd9wH/GT0Rkx05twEUMzrc6Q/vBte6E3IbUw89yDzzcfIflCJl7HjJa+3dXb7zhwF2wEctNZRyoldDrQdnCKW8SG80lUvNm0C887GYent4re9d/9hAljVDqctoof35BEi76COk1x/MVmBJAPPDuzKxUy4XKItbVnZ3aFJKdtZZtOn/aYQuFaWfZncdZXs3LzMXhoVe0J7xnpI5tdBRfEI6Hzvh4C2RA0/gTe8Hnyme1nVRns17sHJFdripGEWafOC5Hi4adQQNv3piH3t8FbK6pZ+iGVbPkLedUU4siMIpq2jKyVJC89Bkw6Bsr99Ab0NN4ph3xqbzDW6dlCH7m6eufHwfLoPZHgfXtPqPKL/4CEIMAs7UEmeobOBUQE1ad/BWzgsvNG2dnkIO61cKV/gJ31ePW8Ef4uQmtoSkUL9NM; 4:QQPBJtEwHfo8e/PB7+buRX8CAm3ljRvaIFamcaqAXRXUA84aLwangcTxNltYW1XSDso/bgyEpvysD+9yrIH7B8NpsY42I90uW/MvShojPid2iqgjTqQC3aav++W/hLuLNJWSq1rFXnT28rUU39M0ZSrxYNCRzWJKYgBz5iKfovD3j7BpZPEtZCtQDi3ANA8i07W7cQ2bSw7DyasTzgDbUL2fPIJUbIwiwjYTt2rXiEN6FNMWNEXSpUK+Er6bFDuvM9qlG/npFYaNL51NNB87YA== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(5005006)(8121501046)(3231232)(944501410)(52105095)(3002001)(10201501046)(93006095)(93001095)(6041310)(20161123558120)(20161123562045)(20161123560045)(20161123564045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(6072148)(201708071742011); SRVR:BN7PR07MB4211; BCL:0; PCL:0; RULEID:; SRVR:BN7PR07MB4211; X-Forefront-PRVS: 0654257CF5 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(6069001)(396003)(376002)(39380400002)(366004)(346002)(39860400002)(199004)(189003)(478600001)(33656002)(72206003)(81166006)(2906002)(8936002)(8676002)(7736002)(97736004)(105586002)(81156014)(76506005)(2351001)(2361001)(68736007)(5660300001)(11346002)(6916009)(6116002)(1076002)(6666003)(3846002)(25786009)(23726003)(53936002)(47776003)(186003)(305945005)(4326008)(66066001)(107886003)(50466002)(486006)(26005)(44832011)(476003)(386003)(58126008)(16586007)(16526019)(86362001)(446003)(6496006)(106356001)(76176011)(956004)(52116002)(6486002)(316002)(18370500001); DIR:OUT; SFP:1101; SCL:1; SRVR:BN7PR07MB4211; H:localhost; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; A:1; MX:1; Received-SPF: None (protection.outlook.com: cavium.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: 1; BN7PR07MB4211; 23:XBR9vWluMFgNNI7Ndj278JCvY3298mzFdum9H0OL3cI8W90kIbFGVum16Te4/+NsMuW5tQRvT7IaYvSCtKqvoQCIhJxzeCLstYDv3sDar4g4zQNs2jmxMfoNA6gcosXBHMjV6soVBYdIEXW7CRmGKs0E8Kct1O4XVbA2bBmi3QVkh7us1pXHeRAMMxjZsynx2LMva/rxV7TRIzf3R0kV2DVK2eJXgImIysRWKynIM0is8NSY13QuSgKc72D1vJ4HpxjZTLsWgXASZHdrOnqR+mj6FnfIdC2fkKmqmO46bt9LCY+BenVuREjurVSJQlXmNapj1yQLyn0CxZbDXyFI1JYWrWK3kaHXNQMQSeBf81aw2515/9yTnKuhQF/omhC3XGKev+aVm0YQXU/u6Rf/VMB1HRFoHK3LNvVP3S9qwF5Uuhv7sFNecOSiveNc/vW6eP2QNtZaP5SBySJfy07WTGbSKni97AZi9ZeB2f8QZECfHL1SczNbc7Fx1HSmN+LsK6UWt9pjylVenItcYjUDUxaXcqat8RLGG1Jb10w8eGlGusSlibTN+h/MeQhIfteyVeSBl8mz4KxVNzS9eoY9Id6seUwXLm7eYCSnO7ch2RG/vrBP1sY/0fWQYVEsYUc1l3M9JH3qqLG4dNFCIsK1qyj/k+vM7E3QpS0ePHIMVDrOlyFZ3ox8mQ57ed+QThSgTG/r+cq3VubuJ6OS+goEtJbpuZifmY6BgcoDRY1fA19tSNl5o7uYKOeY0YhXcG4IXXBlDR/8Ayk2qasJp7YqADAJAnhOHHna/ianPyTDbhjFTcYPDThJNJd2/LEPBtbPay1fVp3we5IuqziLj88IUp+8YHGlBqBbScStrtnyBstMiVmW1cuEOw4fdCLUQwjIw447sNZ5lCKwvjQ4nbsDdB+Ul2wez1N0MeeO6Wf/b4a3It00PuEB9ptpl01ulBTRfQU7gtJasljXHN8a5k7sGZB3xYLvCuoaOHJGZlfxq3dH9kXhYgLUizoKv/xZV6BS1CAGWbdr8cN6HjIBl+349JGds2x02VpiHxlck7+ZkaI0aOhUlXqWKtVO+qRZAA0H58KNm66zIK0kbpv2CCPQosYW7EPmQD/pMVcVbKfBOSnh6aUDftIVjwuDk87acA359SuU1XxztTTP82YmB2CzgZQMjJIafJAIXqVRmMj1buWvaaBOu9zVadBSwLR/zNesgmyQHTtMFmXDWqg8U9JLm8nuGGKEQ1KMiKm2Jn3L8GBCcpQLIXewYmBc2nlwrF0g/9zPWqEx8VyJEh7IGgTUEQq2BACqQz52Cdu5K5Ne7sc= X-Microsoft-Antispam-Message-Info: dlu+SDLru/B7fyGraYonDLJYvZn+7EwXd3FXp6cbUoNm+BYPxuzEOR2kf+V/qlsKXkR+rqLbGK3y5Nv/81MtKHzLRLGuDymboxKju4vlze31Ids7dgpl3gXRYV6zysZ914CkvlOzhKx5f8AFjba3BWEASRfhasN281s9x7lK4aBvcepQUOISNDMk9pG2LQve X-Microsoft-Exchange-Diagnostics: 1; BN7PR07MB4211; 6:SU5jKQR6bmZz61cOItC2jc/IVaucWD6tEdkOkvv4hWibqHP1AVdW83FLlkU5DTlyhxnZJ5vMH4gT33+HN928iR0VcXPW0ftoe95MelXPRKs9tWZ7JvLapmJFK2Xgec2OYmv/Iki9g2s+lyEQpUHfSZQRoI0KrOZ0lguYT9CDIGLJXgJT9d+t4mOLeZ3/4YUWq4If3GvlbD1TB9Q4/223JGYeDA6g78JB9safIjh/mx1kiY2RQWiMvhzWGvl7xXJTc8uxzyJBxcNnNDBDzSdQocAXCzrCv+5EIy+Qj4kIPEzZDcZORSDkHeHqgLWWnjaliJ9TW7gAFe1CZWHKeF3OLT53KkTm7jJve2dQD+AOT1ebjUJEbTnv5T3FKoNoPmdf1LHhNWTW4WkSi3rAFlv3ig9boKpxJTDgrIsRQgWNYuqz3EjSlFSViATrqgHMMoHIuVKLNxeeBLUiQwqCz458CQ==; 5:3YPdED7cSDTXBvm37ZVwDWadnk8mTM8MQC/v+UBjx2lbH9gF1RnjaClbmxEQ5LoWpusFIVUZnJa5a5LSBVQM1TbtiRghJosSSEueb2CHGWYsZEBJb09pJ4dkZb0AHypq6lToRm0CBZtc2t4W+SlEjMso1dScykOXJip7XN9xPuk=; 24:qWVDsSJm/hdYYY6H29AkZHMecWj7Moi2rRkiBc2QQYd+9rXoW5lXXuTsRZ8fEPPxCRRCRgtNLJ1k62w63waQVGr092+K9W2oFbMmMDJOZdU= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; BN7PR07MB4211; 7:6RSQaF1V/tKMTt0g3NCGISuFcbvgx95mrlzA/LXvRfsRCFLxCWi1PIH8i88IwZL6OwglXMohDheopDl1YkpPpbm44Hfv7MD3O/9ALRInQ5hQQWhcqwTgY2GISzF6tfhzh0uGB70BdJeH4TjXCdEKnoEftIOp0VBJkEPC4PeGI19MiabtUULEZhYLUNiVLq4qiZSHjEC5HMJLrw3W3FtYT7rAbvmZtOkL997q3tj4kYNW7w3XmsGHMKQotl2rpL3X X-MS-Office365-Filtering-Correlation-Id: 31f2b67e-708a-40f2-b078-08d5ab08b690 X-OriginatorOrg: cavium.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Apr 2018 00:00:25.2254 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 31f2b67e-708a-40f2-b078-08d5ab08b690 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 711e4ccf-2e9b-4bcf-a551-4094005b6194 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN7PR07MB4211 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Pradeep Nalla Support ndo_get_stats64 instead of ndo_get_stats. Also add stats for multicast and broadcast packets. Signed-off-by: Pradeep Nalla Acked-by: Raghu Vatsavayi Signed-off-by: Felix Manlunas --- drivers/net/ethernet/cavium/liquidio/lio_core.c | 4 + drivers/net/ethernet/cavium/liquidio/lio_ethtool.c | 98 +++++++++++++--------- drivers/net/ethernet/cavium/liquidio/lio_main.c | 52 ++++++++---- drivers/net/ethernet/cavium/liquidio/lio_vf_main.c | 47 +++++++---- .../net/ethernet/cavium/liquidio/liquidio_common.h | 5 ++ 5 files changed, 135 insertions(+), 71 deletions(-) diff --git a/drivers/net/ethernet/cavium/liquidio/lio_core.c b/drivers/net/ethernet/cavium/liquidio/lio_core.c index 5171dad..9cbbd07 100644 --- a/drivers/net/ethernet/cavium/liquidio/lio_core.c +++ b/drivers/net/ethernet/cavium/liquidio/lio_core.c @@ -1207,6 +1207,8 @@ octnet_nic_stats_callback(struct octeon_device *oct_dev, /* RX firmware stats */ rstats->fw_total_rcvd = rsp_rstats->fw_total_rcvd; rstats->fw_total_fwd = rsp_rstats->fw_total_fwd; + rstats->fw_total_mcast = rsp_rstats->fw_total_mcast; + rstats->fw_total_bcast = rsp_rstats->fw_total_bcast; rstats->fw_err_pko = rsp_rstats->fw_err_pko; rstats->fw_err_link = rsp_rstats->fw_err_link; rstats->fw_err_drop = rsp_rstats->fw_err_drop; @@ -1251,6 +1253,8 @@ octnet_nic_stats_callback(struct octeon_device *oct_dev, /* firmware stats */ tstats->fw_total_sent = rsp_tstats->fw_total_sent; tstats->fw_total_fwd = rsp_tstats->fw_total_fwd; + tstats->fw_total_mcast_sent = rsp_tstats->fw_total_mcast_sent; + tstats->fw_total_bcast_sent = rsp_tstats->fw_total_bcast_sent; tstats->fw_err_pko = rsp_tstats->fw_err_pko; tstats->fw_err_pki = rsp_tstats->fw_err_pki; tstats->fw_err_link = rsp_tstats->fw_err_link; diff --git a/drivers/net/ethernet/cavium/liquidio/lio_ethtool.c b/drivers/net/ethernet/cavium/liquidio/lio_ethtool.c index 351549c..64c817a 100644 --- a/drivers/net/ethernet/cavium/liquidio/lio_ethtool.c +++ b/drivers/net/ethernet/cavium/liquidio/lio_ethtool.c @@ -112,6 +112,9 @@ static const char oct_stats_strings[][ETH_GSTRING_LEN] = { "tx_tso_err", "tx_vxlan", + "tx_mcast", + "tx_bcast", + "mac_tx_total_pkts", "mac_tx_total_bytes", "mac_tx_mcast_pkts", @@ -127,6 +130,8 @@ static const char oct_stats_strings[][ETH_GSTRING_LEN] = { "rx_total_rcvd", "rx_total_fwd", + "rx_mcast", + "rx_bcast", "rx_jabber_err", "rx_l2_err", "rx_frame_err", @@ -171,6 +176,10 @@ static const char oct_vf_stats_strings[][ETH_GSTRING_LEN] = { "tx_errors", "rx_dropped", "tx_dropped", + "rx_mcast", + "tx_mcast", + "rx_bcast", + "tx_bcast", "link_state_changes", }; @@ -1056,50 +1065,48 @@ lio_get_ethtool_stats(struct net_device *netdev, { struct lio *lio = GET_LIO(netdev); struct octeon_device *oct_dev = lio->oct_dev; - struct net_device_stats *netstats = &netdev->stats; + struct rtnl_link_stats64 lstats; int i = 0, j; if (ifstate_check(lio, LIO_IFSTATE_RESETTING)) return; - netdev->netdev_ops->ndo_get_stats(netdev); - octnet_get_link_stats(netdev); - + netdev->netdev_ops->ndo_get_stats64(netdev, &lstats); /*sum of oct->droq[oq_no]->stats->rx_pkts_received */ - data[i++] = CVM_CAST64(netstats->rx_packets); + data[i++] = lstats.rx_packets; /*sum of oct->instr_queue[iq_no]->stats.tx_done */ - data[i++] = CVM_CAST64(netstats->tx_packets); + data[i++] = lstats.tx_packets; /*sum of oct->droq[oq_no]->stats->rx_bytes_received */ - data[i++] = CVM_CAST64(netstats->rx_bytes); + data[i++] = lstats.rx_bytes; /*sum of oct->instr_queue[iq_no]->stats.tx_tot_bytes */ - data[i++] = CVM_CAST64(netstats->tx_bytes); - data[i++] = CVM_CAST64(netstats->rx_errors + - oct_dev->link_stats.fromwire.fcs_err + - oct_dev->link_stats.fromwire.jabber_err + - oct_dev->link_stats.fromwire.l2_err + - oct_dev->link_stats.fromwire.frame_err); - data[i++] = CVM_CAST64(netstats->tx_errors); + data[i++] = lstats.tx_bytes; + data[i++] = lstats.rx_errors + + oct_dev->link_stats.fromwire.fcs_err + + oct_dev->link_stats.fromwire.jabber_err + + oct_dev->link_stats.fromwire.l2_err + + oct_dev->link_stats.fromwire.frame_err; + data[i++] = lstats.tx_errors; /*sum of oct->droq[oq_no]->stats->rx_dropped + *oct->droq[oq_no]->stats->dropped_nodispatch + *oct->droq[oq_no]->stats->dropped_toomany + *oct->droq[oq_no]->stats->dropped_nomem */ - data[i++] = CVM_CAST64(netstats->rx_dropped + - oct_dev->link_stats.fromwire.fifo_err + - oct_dev->link_stats.fromwire.dmac_drop + - oct_dev->link_stats.fromwire.red_drops + - oct_dev->link_stats.fromwire.fw_err_pko + - oct_dev->link_stats.fromwire.fw_err_link + - oct_dev->link_stats.fromwire.fw_err_drop); + data[i++] = lstats.rx_dropped + + oct_dev->link_stats.fromwire.fifo_err + + oct_dev->link_stats.fromwire.dmac_drop + + oct_dev->link_stats.fromwire.red_drops + + oct_dev->link_stats.fromwire.fw_err_pko + + oct_dev->link_stats.fromwire.fw_err_link + + oct_dev->link_stats.fromwire.fw_err_drop; /*sum of oct->instr_queue[iq_no]->stats.tx_dropped */ - data[i++] = CVM_CAST64(netstats->tx_dropped + - oct_dev->link_stats.fromhost.max_collision_fail + - oct_dev->link_stats.fromhost.max_deferral_fail + - oct_dev->link_stats.fromhost.total_collisions + - oct_dev->link_stats.fromhost.fw_err_pko + - oct_dev->link_stats.fromhost.fw_err_link + - oct_dev->link_stats.fromhost.fw_err_drop + - oct_dev->link_stats.fromhost.fw_err_pki); + data[i++] = lstats.tx_dropped + + oct_dev->link_stats.fromhost.max_collision_fail + + oct_dev->link_stats.fromhost.max_deferral_fail + + oct_dev->link_stats.fromhost.total_collisions + + oct_dev->link_stats.fromhost.fw_err_pko + + oct_dev->link_stats.fromhost.fw_err_link + + oct_dev->link_stats.fromhost.fw_err_drop + + oct_dev->link_stats.fromhost.fw_err_pki; /* firmware tx stats */ /*per_core_stats[cvmx_get_core_num()].link_stats[mdata->from_ifidx]. @@ -1134,6 +1141,10 @@ lio_get_ethtool_stats(struct net_device *netdev, */ data[i++] = CVM_CAST64(oct_dev->link_stats.fromhost.fw_tx_vxlan); + /* Multicast packets sent by this port */ + data[i++] = oct_dev->link_stats.fromhost.fw_total_mcast_sent; + data[i++] = oct_dev->link_stats.fromhost.fw_total_bcast_sent; + /* mac tx statistics */ /*CVMX_BGXX_CMRX_TX_STAT5 */ data[i++] = CVM_CAST64(oct_dev->link_stats.fromhost.total_pkts_sent); @@ -1170,6 +1181,9 @@ lio_get_ethtool_stats(struct net_device *netdev, *fw_total_fwd */ data[i++] = CVM_CAST64(oct_dev->link_stats.fromwire.fw_total_fwd); + /* Multicast packets received on this port */ + data[i++] = oct_dev->link_stats.fromwire.fw_total_mcast; + data[i++] = oct_dev->link_stats.fromwire.fw_total_bcast; /*per_core_stats[core_id].link_stats[ifidx].fromwire.jabber_err */ data[i++] = CVM_CAST64(oct_dev->link_stats.fromwire.jabber_err); /*per_core_stats[core_id].link_stats[ifidx].fromwire.l2_err */ @@ -1338,7 +1352,7 @@ static void lio_vf_get_ethtool_stats(struct net_device *netdev, __attribute__((unused)), u64 *data) { - struct net_device_stats *netstats = &netdev->stats; + struct rtnl_link_stats64 lstats; struct lio *lio = GET_LIO(netdev); struct octeon_device *oct_dev = lio->oct_dev; int i = 0, j, vj; @@ -1346,25 +1360,31 @@ static void lio_vf_get_ethtool_stats(struct net_device *netdev, if (ifstate_check(lio, LIO_IFSTATE_RESETTING)) return; - netdev->netdev_ops->ndo_get_stats(netdev); + netdev->netdev_ops->ndo_get_stats64(netdev, &lstats); /* sum of oct->droq[oq_no]->stats->rx_pkts_received */ - data[i++] = CVM_CAST64(netstats->rx_packets); + data[i++] = lstats.rx_packets; /* sum of oct->instr_queue[iq_no]->stats.tx_done */ - data[i++] = CVM_CAST64(netstats->tx_packets); + data[i++] = lstats.tx_packets; /* sum of oct->droq[oq_no]->stats->rx_bytes_received */ - data[i++] = CVM_CAST64(netstats->rx_bytes); + data[i++] = lstats.rx_bytes; /* sum of oct->instr_queue[iq_no]->stats.tx_tot_bytes */ - data[i++] = CVM_CAST64(netstats->tx_bytes); - data[i++] = CVM_CAST64(netstats->rx_errors); - data[i++] = CVM_CAST64(netstats->tx_errors); + data[i++] = lstats.tx_bytes; + data[i++] = lstats.rx_errors; + data[i++] = lstats.tx_errors; /* sum of oct->droq[oq_no]->stats->rx_dropped + * oct->droq[oq_no]->stats->dropped_nodispatch + * oct->droq[oq_no]->stats->dropped_toomany + * oct->droq[oq_no]->stats->dropped_nomem */ - data[i++] = CVM_CAST64(netstats->rx_dropped); + data[i++] = lstats.rx_dropped; /* sum of oct->instr_queue[iq_no]->stats.tx_dropped */ - data[i++] = CVM_CAST64(netstats->tx_dropped); + data[i++] = lstats.tx_dropped; + + data[i++] = oct_dev->link_stats.fromwire.fw_total_mcast; + data[i++] = oct_dev->link_stats.fromhost.fw_total_mcast_sent; + data[i++] = oct_dev->link_stats.fromwire.fw_total_bcast; + data[i++] = oct_dev->link_stats.fromhost.fw_total_bcast_sent; + /* lio->link_changes */ data[i++] = CVM_CAST64(lio->link_changes); diff --git a/drivers/net/ethernet/cavium/liquidio/lio_main.c b/drivers/net/ethernet/cavium/liquidio/lio_main.c index f3891ae..fe3edf1 100644 --- a/drivers/net/ethernet/cavium/liquidio/lio_main.c +++ b/drivers/net/ethernet/cavium/liquidio/lio_main.c @@ -2252,14 +2252,11 @@ static int liquidio_set_mac(struct net_device *netdev, void *p) return 0; } -/** - * \brief Net device get_stats - * @param netdev network device - */ -static struct net_device_stats *liquidio_get_stats(struct net_device *netdev) +static void +liquidio_get_stats64(struct net_device *netdev, + struct rtnl_link_stats64 *lstats) { struct lio *lio = GET_LIO(netdev); - struct net_device_stats *stats = &netdev->stats; struct octeon_device *oct; u64 pkts = 0, drop = 0, bytes = 0; struct oct_droq_stats *oq_stats; @@ -2269,7 +2266,7 @@ static struct net_device_stats *liquidio_get_stats(struct net_device *netdev) oct = lio->oct_dev; if (ifstate_check(lio, LIO_IFSTATE_RESETTING)) - return stats; + return; for (i = 0; i < oct->num_iqs; i++) { iq_no = lio->linfo.txpciq[i].s.q_no; @@ -2279,9 +2276,9 @@ static struct net_device_stats *liquidio_get_stats(struct net_device *netdev) bytes += iq_stats->tx_tot_bytes; } - stats->tx_packets = pkts; - stats->tx_bytes = bytes; - stats->tx_dropped = drop; + lstats->tx_packets = pkts; + lstats->tx_bytes = bytes; + lstats->tx_dropped = drop; pkts = 0; drop = 0; @@ -2298,11 +2295,34 @@ static struct net_device_stats *liquidio_get_stats(struct net_device *netdev) bytes += oq_stats->rx_bytes_received; } - stats->rx_bytes = bytes; - stats->rx_packets = pkts; - stats->rx_dropped = drop; - - return stats; + lstats->rx_bytes = bytes; + lstats->rx_packets = pkts; + lstats->rx_dropped = drop; + + octnet_get_link_stats(netdev); + lstats->multicast = oct->link_stats.fromwire.fw_total_mcast; + lstats->collisions = oct->link_stats.fromhost.total_collisions; + + /* detailed rx_errors: */ + lstats->rx_length_errors = oct->link_stats.fromwire.l2_err; + /* recved pkt with crc error */ + lstats->rx_crc_errors = oct->link_stats.fromwire.fcs_err; + /* recv'd frame alignment error */ + lstats->rx_frame_errors = oct->link_stats.fromwire.frame_err; + /* recv'r fifo overrun */ + lstats->rx_fifo_errors = oct->link_stats.fromwire.fifo_err; + + lstats->rx_errors = lstats->rx_length_errors + lstats->rx_crc_errors + + lstats->rx_frame_errors + lstats->rx_fifo_errors; + + /* detailed tx_errors */ + lstats->tx_aborted_errors = oct->link_stats.fromhost.fw_err_pko; + lstats->tx_carrier_errors = oct->link_stats.fromhost.fw_err_link; + lstats->tx_fifo_errors = oct->link_stats.fromhost.fifo_err; + + lstats->tx_errors = lstats->tx_aborted_errors + + lstats->tx_carrier_errors + + lstats->tx_fifo_errors; } /** @@ -3355,7 +3375,7 @@ static const struct net_device_ops lionetdevops = { .ndo_open = liquidio_open, .ndo_stop = liquidio_stop, .ndo_start_xmit = liquidio_xmit, - .ndo_get_stats = liquidio_get_stats, + .ndo_get_stats64 = liquidio_get_stats64, .ndo_set_mac_address = liquidio_set_mac, .ndo_set_rx_mode = liquidio_set_mcast_list, .ndo_tx_timeout = liquidio_tx_timeout, diff --git a/drivers/net/ethernet/cavium/liquidio/lio_vf_main.c b/drivers/net/ethernet/cavium/liquidio/lio_vf_main.c index f92dfa4..b7b91d1 100644 --- a/drivers/net/ethernet/cavium/liquidio/lio_vf_main.c +++ b/drivers/net/ethernet/cavium/liquidio/lio_vf_main.c @@ -1336,24 +1336,21 @@ static int liquidio_set_mac(struct net_device *netdev, void *p) return 0; } -/** - * \brief Net device get_stats - * @param netdev network device - */ -static struct net_device_stats *liquidio_get_stats(struct net_device *netdev) +static void +liquidio_get_stats64(struct net_device *netdev, + struct rtnl_link_stats64 *lstats) { struct lio *lio = GET_LIO(netdev); - struct net_device_stats *stats = &netdev->stats; + struct octeon_device *oct; u64 pkts = 0, drop = 0, bytes = 0; struct oct_droq_stats *oq_stats; struct oct_iq_stats *iq_stats; - struct octeon_device *oct; int i, iq_no, oq_no; oct = lio->oct_dev; if (ifstate_check(lio, LIO_IFSTATE_RESETTING)) - return stats; + return; for (i = 0; i < oct->num_iqs; i++) { iq_no = lio->linfo.txpciq[i].s.q_no; @@ -1363,9 +1360,9 @@ static struct net_device_stats *liquidio_get_stats(struct net_device *netdev) bytes += iq_stats->tx_tot_bytes; } - stats->tx_packets = pkts; - stats->tx_bytes = bytes; - stats->tx_dropped = drop; + lstats->tx_packets = pkts; + lstats->tx_bytes = bytes; + lstats->tx_dropped = drop; pkts = 0; drop = 0; @@ -1382,11 +1379,29 @@ static struct net_device_stats *liquidio_get_stats(struct net_device *netdev) bytes += oq_stats->rx_bytes_received; } - stats->rx_bytes = bytes; - stats->rx_packets = pkts; - stats->rx_dropped = drop; + lstats->rx_bytes = bytes; + lstats->rx_packets = pkts; + lstats->rx_dropped = drop; + + octnet_get_link_stats(netdev); + lstats->multicast = oct->link_stats.fromwire.fw_total_mcast; + + /* detailed rx_errors: */ + lstats->rx_length_errors = oct->link_stats.fromwire.l2_err; + /* recved pkt with crc error */ + lstats->rx_crc_errors = oct->link_stats.fromwire.fcs_err; + /* recv'd frame alignment error */ + lstats->rx_frame_errors = oct->link_stats.fromwire.frame_err; + + lstats->rx_errors = lstats->rx_length_errors + lstats->rx_crc_errors + + lstats->rx_frame_errors; + + /* detailed tx_errors */ + lstats->tx_aborted_errors = oct->link_stats.fromhost.fw_err_pko; + lstats->tx_carrier_errors = oct->link_stats.fromhost.fw_err_link; - return stats; + lstats->tx_errors = lstats->tx_aborted_errors + + lstats->tx_carrier_errors; } /** @@ -2034,7 +2049,7 @@ static const struct net_device_ops lionetdevops = { .ndo_open = liquidio_open, .ndo_stop = liquidio_stop, .ndo_start_xmit = liquidio_xmit, - .ndo_get_stats = liquidio_get_stats, + .ndo_get_stats64 = liquidio_get_stats64, .ndo_set_mac_address = liquidio_set_mac, .ndo_set_rx_mode = liquidio_set_mcast_list, .ndo_tx_timeout = liquidio_tx_timeout, diff --git a/drivers/net/ethernet/cavium/liquidio/liquidio_common.h b/drivers/net/ethernet/cavium/liquidio/liquidio_common.h index 34a94da..2166744 100644 --- a/drivers/net/ethernet/cavium/liquidio/liquidio_common.h +++ b/drivers/net/ethernet/cavium/liquidio/liquidio_common.h @@ -802,6 +802,9 @@ struct nic_rx_stats { u64 fw_total_rcvd; u64 fw_total_fwd; u64 fw_total_fwd_bytes; + u64 fw_total_mcast; + u64 fw_total_bcast; + u64 fw_err_pko; u64 fw_err_link; u64 fw_err_drop; @@ -858,6 +861,8 @@ struct nic_tx_stats { u64 fw_total_sent; u64 fw_total_fwd; u64 fw_total_fwd_bytes; + u64 fw_total_mcast_sent; + u64 fw_total_bcast_sent; u64 fw_err_pko; u64 fw_err_link; u64 fw_err_drop;