From patchwork Thu Apr 26 00:00:12 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Manlunas, Felix" X-Patchwork-Id: 904797 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="oDvnNbuE"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 40Wcdp0mRxz9s0W for ; Thu, 26 Apr 2018 10:00:30 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751512AbeDZAAZ (ORCPT ); Wed, 25 Apr 2018 20:00:25 -0400 Received: from mail-sn1nam01on0086.outbound.protection.outlook.com ([104.47.32.86]:16480 "EHLO NAM01-SN1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1750868AbeDZAAX (ORCPT ); Wed, 25 Apr 2018 20:00:23 -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=/wuFlCPheUtsgAPMisrvp0LVlqzgc0IEs+pZVQPE9Hk=; b=oDvnNbuESGAMDtvQahyFM+eBBw1xH83z61inDnuYzq3Gktm+DyyDB68J6UmEXGaogoUi4nGfhUUQ9E0dl2n89ruNHMYGX9b8qeTqkGnUScC8HbmVZwvZUMe39xobF9Q3ePezZCvH+KLJZgL000fsLcVTdUVIhqx5s64o4iny1yg= Received: from localhost (50.233.148.156) by BYAPR07MB4213.namprd07.prod.outlook.com (2603:10b6:a02:be::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:21 +0000 Date: Wed, 25 Apr 2018 17:00:12 -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 1/2] liquidio: move a couple of functions to lio_core.c Message-ID: <20180426000012.GA14071@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: BN6PR11CA0030.namprd11.prod.outlook.com (2603:10b6:404:4b::16) To BYAPR07MB4213.namprd07.prod.outlook.com (2603:10b6:a02:be::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:BYAPR07MB4213; X-Microsoft-Exchange-Diagnostics: 1; BYAPR07MB4213; 3:jRPPv0F6MsS+31aIfPrS2kElglMe4+hmOEyoFXTO+HeTtAD2Z9c5UbxaNKAwpMhHhrKGniBVWsggC9xztH+ltUcpONLzEfgj5fc+og++q0JbbVPJg4AhqvvW0EmEVmuD84bRfHVrR6GEFxk0ACJf8qVlQiYedwN/B+niRLheJFf4KdzLtcYvb6mYMrbWKG44yccu89PsMt1fsePZ9RFZkrUNt1PcsOLtxKOzyuZXck5nJE32J+3KDPV5hfApg4Vt; 25:jMLfRFnq5yDu2kE73pRAL6IXiUFBOLpsh/VILbilt0GIGURyX2oPD61czTlUN/H9rSLiUOYBBKU+FBuS3CL1Wqm8EVBg9UxrP3Y5BJnvGYVhLp8wOoXkp/TgZQqZX5A71q/O+ASAMc5WetmDoUhbDsOeqylQLdVQkLSJ4czko62kUv2sRklOK5eOC7sVzK5qBydaHFbYAPPppiF7AyZu9YIsg/Wy6xRynL5QXCpgHpln5WCkN175zXQYZypGAbRMu5KI9GusME0RXly0Jh7txZhx4LXgm/HgZ63Ym88VMgx2C1BBWBErbBft8Tmnbg65LRrMS96t7G3ooTjXda3kXg==; 31:eLZdipWJl3tXEBnGmHUJP55UObtoSVr4NZki+BF7cd5uAPhNCQX37Sjxz52LU3xfdXN2TNTDwWS590xrAtZqetP/GsEIny9emEZLR6kd0PMaUEat4ZivHdwl3HLM9v4WljkGvyRiQWg9rxCW6A8prD9LCXNwfODAG9+8BAHqd0NM0QKLRmFywaNpMUpDmJtYB4CHMDQV9jOCNETb92SW2F5moVufqA3tG6rWlH+jZaY= X-MS-TrafficTypeDiagnostic: BYAPR07MB4213: Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Felix.Manlunas@cavium.com; X-Microsoft-Exchange-Diagnostics: 1; BYAPR07MB4213; 20:LIMkW9lH9UC5dg5j1MfDS+3C34d7gQN9AeDSGT1E4UOUSOONTIZXQUSgAHKeL6JQpGK8oqsrdcYFpOkigzhrrQztLNrs4Lqlhht3f0n7gpIR18gPCBJI8OWOsCP6j0zZtH3ZBjl/1jRe0N5b5/L7gFGYCvCfAk4PrEjNPukO7WL5KaYNNkXrijbJoNhVVDcKJk504JdvgypWUuqzpGDTxpl9hZ8o8szKooxWQvwUmQOpHhcOus/8Z3wKV3eRoQJ2rV00+GjrODRTa5i7900pLNImgoM1dHgjA7L9YC+NzyYpKdyXsAQNGsy0JLjo5Bi2e9JIn3Z9KS8+NeMTlJ8uEFcRmHwFjaFy1HPv0N2HipdAM2EI1HXfrxb04r7sXp6YyYugmIj8WoTjrKckTGN+qXidBeP559soJY6pMNSx3TpsimumHcHNrGU/KY1xp+nDyj0S+T774R5nSuAkpPZNutCGLx5kz1lAG2CoGAoUeM6dn1icoFK/4u9tQs+1AiLI; 4:TrBc8lV8rh2K9YWUdUU1qSdn4/LTVT0btsrUhpuWMMA9CcXC/W/LwaU/l3uKtmv3vhb3EN1PXtnGmFubaClFPKHJy6vafAmai6mNZhr8McgteXN2BlQJZ/RvLSw0e8OdsXLJxUxJl4QH3Ry5+DUeCV5me5ztqLK53e1yc5rr6HCtxgTU6THgjuKYCYR2oLu6PWdjEepLubvaG+4P/XqOHS2nJjb7nEXh4iQt9mm4qaP8tn1CpzaQy44W80ydVyjV+HbOOpnDRn20y1BLRZfq/Q== 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)(10201501046)(3231232)(944501410)(52105095)(3002001)(93006095)(93001095)(6041310)(20161123558120)(20161123562045)(20161123560045)(20161123564045)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(6072148)(201708071742011); SRVR:BYAPR07MB4213; BCL:0; PCL:0; RULEID:; SRVR:BYAPR07MB4213; X-Forefront-PRVS: 0654257CF5 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(6069001)(396003)(346002)(39380400002)(366004)(39860400002)(376002)(189003)(199004)(23726003)(5660300001)(106356001)(2906002)(6116002)(3846002)(2361001)(33656002)(2351001)(305945005)(7736002)(1076002)(6916009)(6666003)(47776003)(52116002)(6496006)(478600001)(76506005)(72206003)(66066001)(44832011)(11346002)(956004)(97736004)(486006)(186003)(476003)(316002)(16586007)(16526019)(58126008)(76176011)(386003)(446003)(59450400001)(50466002)(6486002)(53936002)(26005)(105586002)(25786009)(8676002)(8936002)(81156014)(81166006)(86362001)(4326008)(107886003)(68736007)(18370500001); DIR:OUT; SFP:1101; SCL:1; SRVR:BYAPR07MB4213; H:localhost; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; Received-SPF: None (protection.outlook.com: cavium.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: 1; BYAPR07MB4213; 23:rC95deRFx/xJFnTm3yJQiRYoVLetcwAyF04zW4KU5NdGnObttRVY+/RulwIVC72Xj+FmqF4JJtnUCACTBwxjJfgnh+FF5p1G+XD2MitLu3RCKEGS6jcCUfBO+z1xx8vPqJ6Y6JMP3m3LGbF4GVm89zgc2vZ3x5eKXBaE0midJtGcFtuBf+N1OmQiMJkdTMSFX2FiaA5iEGyYZqAuRnwXnZslXK+0yLwJxNdJW1Aca8MH+fDQFaQ1k1bdkbu1b8uWnwGBRUMUpsRrs9ZqKEspasVEfX8M6nIndawkz2mhTxi74+ou5lGntS9/AbALnMAtJc+Ty6lI9NoSp9wgJ3r6dGY8EZcS90jy7ntsToMkJwqW2btYoUyM3RK/+qOm/vjUUIxQuOqvouBTRHFGwNPQUF8cy0tDZjIIF9dZdk0ZUxSap55K1g7Eb+lGP7tWD3LoWPZVqBBM8fnlGG0B7geZsOn08w6iuoXGA+eLB7YmcExGo36PlL/1AKdKKlaTun7Ch9hCsNA9FEfOE4vgcunn79DDK5tfvoyB7G2zVqMCuGS/rM3kyF0mHlskV/njXA9JZQzsMpjpKVWjG9NnskmyxPC4VtDJ73iWVMsLLaQvObn5l5AA9T9TQg6Et6e9lMemZulvR93KGhbqkPKIJSR1tjSpydMIwRXlzHRH6HecMWZGHRgQRyIqqWMXOI0TazJY8sxF6jC4NcQB1g+cE0gc6CQbPIl4WILTQhUxRzOlcGrVRCIaGjrTzu+OVST1noJW3dcPWawREMzZzAiOO75hzCMwHShC74FzyHcmKy++jUr4s5yV/M+pqbyzGITUTxEACVhbfn215dZB11RlsOk1hM/L58depNqvTkZDIqxN6xXyx+pCMNyNhHUy5UqDRsj0u7skyasLvs9wHbmoFGTNFCIEzkED1if7nZP4lzjUqVOLgxLrkv5tNVIWp/DN3AubLhC8rjMnXINS0kb6n7zN+CI8XgdzgT0rjFId+AOaDiuHyal32Rs3UvnuWhU51QEcGCmg6GQg+WHXBwKMsD5bfheCt9HWl1qqi9nIa/7nfb6Ofq8iR5iC2+hRtfSKoSg3Ned56p+ET60AxHZh2ykaTigbmkCQHptk/sq7gVmOSqFfx0/5fOBedialtnkMl1CmD8xTx9SYkDzEGgfPdo6FAxmQKrjWpYLtpTh48Sy3GjOf7mJND4P96v6vXAVKPPMIRmzZFxKZL62hUw70hsdsPuXBac1K0loh0ZbuFnj7zLULTyHIi1sb+XmzzIFZ1eKX08xq0OT63PqKNxEKYr6NvaYY4Bh8LaMt6cUFWXjQZUM+eLHQcCetLenvXj4bSOCq X-Microsoft-Antispam-Message-Info: 9WInvknCjV5pO/QnWgAs0NBoga91PGHRk6HDwnC0djxl61EtlboBznVC+52vxhuM8AXoI/9XVSh4kT4Ld8wtlKkz1nenD88cRqLYO+Gfu5DGMjUV5ZuExVkT/cN3DQConszDolM52e17oyk5UZstEyvk/cM1QmM9DdPmOwRcSM9LnqjpwmrmjYVhIex/qwnI X-Microsoft-Exchange-Diagnostics: 1; BYAPR07MB4213; 6:/eWQ2sRWFg8yrHOSW6c2n/2S70A7M2D8B97mYsfmoZt7Rc4Dj88LMmyqEcJ0RGWbGNKuVzr0K1cw3WD3SJWC3EeLL3OXRDmAmQ/02spizd69HSq1PtzGMBWg3O7wF0eI3AxmvfhXXFmji/B/DINrKW0x463lXAwGIWDlARmgY78rqrFWqZtWqhlFHMOQwlKP2rbpDDQe6fXjnKg2OTOZ4ffUxcY/uLTY5C9dHphph8u6P7DlF+WIBfiRsLuM7lQEmYRO2deVlkZhPlDKXS5WbgiRqp/VsdyUr/MEYXrZe/xdxLo0i2A5+c5cRHK6XARt17/CXGfgUbXaoKPRcE9o5zAOhu5Fg98v9EhTyRVsIeFC7b/wCWm48oXJ7SqWC6vOrCPkHPYg+gISs06OcBHiq6yJUGxp5Hd8jRoGeBsZ9TNfEP7q7AU21kcX2WbKKjZO76bE7mKWtip2zasGzEMIFQ==; 5:DSaanQbSJo6PtdaCFmiF3DVxTgI4wLThVg0EFtdVTppctKd7NxIT9MzEUd1sbfiqXEbA2HePzzuJKoUDHflGi3ZutEQe9m14u/fmvILACROI32+yY2RkpOhg8E9St8Bn4CVRaIY/cRyKuIGYmSjj1Atjrt3+sn67ZLXdw2iKWC4=; 24:DXd6jwNPDMgzY0/2I4nSfDYRVPxdZZJdrl+IEyMCfxRAoBo1l/2dgsrmh3xwAD8Hs12+D5cLg5wsNbb+z0tjCneIXHw3RuIr/dphVgRsEEA= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; BYAPR07MB4213; 7:7Taak0US5mV8pVra1UkhQxXV5JSPngo3JZs4XTBYXxr7uFZhFVI2cd/8ID0k7E8bu6qyPxA2oJHVGbYSGgOIneItA5eDHDKXiJVfUjV1iTAgOYILG3dH4aJSYDzJpRf9CFvNaa/kvhQD2ZsccfL/tK1kdkB3L2bD3RWssUG6X/Jz6Bo+/doCeexpS1jATkPs+eG9GB2HFKSyYiJfwaFCPqgfRJkhxC2GIFA6ZFW7gUTTZyjzP+1E2x9ii922d+fc X-MS-Office365-Filtering-Correlation-Id: ce3de3aa-21d6-418b-797d-08d5ab08b454 X-OriginatorOrg: cavium.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 26 Apr 2018 00:00:21.3972 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: ce3de3aa-21d6-418b-797d-08d5ab08b454 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 711e4ccf-2e9b-4bcf-a551-4094005b6194 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR07MB4213 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Pradeep Nalla To support the next patch in this series which has code that calls octnet_get_link_stats from two different .c files, move that function (and its dependency octnet_nic_stats_callback) to lio_core.c. Remove octnet_get_link_stats's static declaration and add its function prototype in octeon_network.h. Signed-off-by: Pradeep Nalla Acked-by: Raghu Vatsavayi Signed-off-by: Felix Manlunas --- drivers/net/ethernet/cavium/liquidio/lio_core.c | 152 ++++++++++++++++++++ drivers/net/ethernet/cavium/liquidio/lio_ethtool.c | 157 --------------------- .../net/ethernet/cavium/liquidio/octeon_network.h | 2 + 3 files changed, 154 insertions(+), 157 deletions(-) diff --git a/drivers/net/ethernet/cavium/liquidio/lio_core.c b/drivers/net/ethernet/cavium/liquidio/lio_core.c index 2a94eee..5171dad 100644 --- a/drivers/net/ethernet/cavium/liquidio/lio_core.c +++ b/drivers/net/ethernet/cavium/liquidio/lio_core.c @@ -1169,3 +1169,155 @@ int lio_wait_for_clean_oq(struct octeon_device *oct) return pending_pkts; } + +static void +octnet_nic_stats_callback(struct octeon_device *oct_dev, + u32 status, void *ptr) +{ + struct octeon_soft_command *sc = (struct octeon_soft_command *)ptr; + struct oct_nic_stats_resp *resp = + (struct oct_nic_stats_resp *)sc->virtrptr; + struct oct_nic_stats_ctrl *ctrl = + (struct oct_nic_stats_ctrl *)sc->ctxptr; + struct nic_rx_stats *rsp_rstats = &resp->stats.fromwire; + struct nic_tx_stats *rsp_tstats = &resp->stats.fromhost; + struct nic_rx_stats *rstats = &oct_dev->link_stats.fromwire; + struct nic_tx_stats *tstats = &oct_dev->link_stats.fromhost; + + if (status != OCTEON_REQUEST_TIMEOUT && !resp->status) { + octeon_swap_8B_data((u64 *)&resp->stats, + (sizeof(struct oct_link_stats)) >> 3); + + /* RX link-level stats */ + rstats->total_rcvd = rsp_rstats->total_rcvd; + rstats->bytes_rcvd = rsp_rstats->bytes_rcvd; + rstats->total_bcst = rsp_rstats->total_bcst; + rstats->total_mcst = rsp_rstats->total_mcst; + rstats->runts = rsp_rstats->runts; + rstats->ctl_rcvd = rsp_rstats->ctl_rcvd; + /* Accounts for over/under-run of buffers */ + rstats->fifo_err = rsp_rstats->fifo_err; + rstats->dmac_drop = rsp_rstats->dmac_drop; + rstats->fcs_err = rsp_rstats->fcs_err; + rstats->jabber_err = rsp_rstats->jabber_err; + rstats->l2_err = rsp_rstats->l2_err; + rstats->frame_err = rsp_rstats->frame_err; + rstats->red_drops = rsp_rstats->red_drops; + + /* RX firmware stats */ + rstats->fw_total_rcvd = rsp_rstats->fw_total_rcvd; + rstats->fw_total_fwd = rsp_rstats->fw_total_fwd; + 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; + rstats->fw_rx_vxlan = rsp_rstats->fw_rx_vxlan; + rstats->fw_rx_vxlan_err = rsp_rstats->fw_rx_vxlan_err; + + /* Number of packets that are LROed */ + rstats->fw_lro_pkts = rsp_rstats->fw_lro_pkts; + /* Number of octets that are LROed */ + rstats->fw_lro_octs = rsp_rstats->fw_lro_octs; + /* Number of LRO packets formed */ + rstats->fw_total_lro = rsp_rstats->fw_total_lro; + /* Number of times lRO of packet aborted */ + rstats->fw_lro_aborts = rsp_rstats->fw_lro_aborts; + rstats->fw_lro_aborts_port = rsp_rstats->fw_lro_aborts_port; + rstats->fw_lro_aborts_seq = rsp_rstats->fw_lro_aborts_seq; + rstats->fw_lro_aborts_tsval = rsp_rstats->fw_lro_aborts_tsval; + rstats->fw_lro_aborts_timer = rsp_rstats->fw_lro_aborts_timer; + /* intrmod: packet forward rate */ + rstats->fwd_rate = rsp_rstats->fwd_rate; + + /* TX link-level stats */ + tstats->total_pkts_sent = rsp_tstats->total_pkts_sent; + tstats->total_bytes_sent = rsp_tstats->total_bytes_sent; + tstats->mcast_pkts_sent = rsp_tstats->mcast_pkts_sent; + tstats->bcast_pkts_sent = rsp_tstats->bcast_pkts_sent; + tstats->ctl_sent = rsp_tstats->ctl_sent; + /* Packets sent after one collision*/ + tstats->one_collision_sent = rsp_tstats->one_collision_sent; + /* Packets sent after multiple collision*/ + tstats->multi_collision_sent = rsp_tstats->multi_collision_sent; + /* Packets not sent due to max collisions */ + tstats->max_collision_fail = rsp_tstats->max_collision_fail; + /* Packets not sent due to max deferrals */ + tstats->max_deferral_fail = rsp_tstats->max_deferral_fail; + /* Accounts for over/under-run of buffers */ + tstats->fifo_err = rsp_tstats->fifo_err; + tstats->runts = rsp_tstats->runts; + /* Total number of collisions detected */ + tstats->total_collisions = rsp_tstats->total_collisions; + + /* firmware stats */ + tstats->fw_total_sent = rsp_tstats->fw_total_sent; + tstats->fw_total_fwd = rsp_tstats->fw_total_fwd; + 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; + tstats->fw_err_drop = rsp_tstats->fw_err_drop; + tstats->fw_tso = rsp_tstats->fw_tso; + tstats->fw_tso_fwd = rsp_tstats->fw_tso_fwd; + tstats->fw_err_tso = rsp_tstats->fw_err_tso; + tstats->fw_tx_vxlan = rsp_tstats->fw_tx_vxlan; + + resp->status = 1; + } else { + resp->status = -1; + } + complete(&ctrl->complete); +} + +int octnet_get_link_stats(struct net_device *netdev) +{ + struct lio *lio = GET_LIO(netdev); + struct octeon_device *oct_dev = lio->oct_dev; + struct octeon_soft_command *sc; + struct oct_nic_stats_ctrl *ctrl; + struct oct_nic_stats_resp *resp; + int retval; + + /* Alloc soft command */ + sc = (struct octeon_soft_command *) + octeon_alloc_soft_command(oct_dev, + 0, + sizeof(struct oct_nic_stats_resp), + sizeof(struct octnic_ctrl_pkt)); + + if (!sc) + return -ENOMEM; + + resp = (struct oct_nic_stats_resp *)sc->virtrptr; + memset(resp, 0, sizeof(struct oct_nic_stats_resp)); + + ctrl = (struct oct_nic_stats_ctrl *)sc->ctxptr; + memset(ctrl, 0, sizeof(struct oct_nic_stats_ctrl)); + ctrl->netdev = netdev; + init_completion(&ctrl->complete); + + sc->iq_no = lio->linfo.txpciq[0].s.q_no; + + octeon_prepare_soft_command(oct_dev, sc, OPCODE_NIC, + OPCODE_NIC_PORT_STATS, 0, 0, 0); + + sc->callback = octnet_nic_stats_callback; + sc->callback_arg = sc; + sc->wait_time = 500; /*in milli seconds*/ + + retval = octeon_send_soft_command(oct_dev, sc); + if (retval == IQ_SEND_FAILED) { + octeon_free_soft_command(oct_dev, sc); + return -EINVAL; + } + + wait_for_completion_timeout(&ctrl->complete, msecs_to_jiffies(1000)); + + if (resp->status != 1) { + octeon_free_soft_command(oct_dev, sc); + + return -EINVAL; + } + + octeon_free_soft_command(oct_dev, sc); + + return 0; +} diff --git a/drivers/net/ethernet/cavium/liquidio/lio_ethtool.c b/drivers/net/ethernet/cavium/liquidio/lio_ethtool.c index 9926a12..351549c 100644 --- a/drivers/net/ethernet/cavium/liquidio/lio_ethtool.c +++ b/drivers/net/ethernet/cavium/liquidio/lio_ethtool.c @@ -32,7 +32,6 @@ #include "cn23xx_vf_device.h" static int lio_reset_queues(struct net_device *netdev, uint32_t num_qs); -static int octnet_get_link_stats(struct net_device *netdev); struct oct_intrmod_context { int octeon_id; @@ -1776,162 +1775,6 @@ static int octnet_set_intrmod_cfg(struct lio *lio, return -EINTR; } -static void -octnet_nic_stats_callback(struct octeon_device *oct_dev, - u32 status, void *ptr) -{ - struct octeon_soft_command *sc = (struct octeon_soft_command *)ptr; - struct oct_nic_stats_resp *resp = - (struct oct_nic_stats_resp *)sc->virtrptr; - struct oct_nic_stats_ctrl *ctrl = - (struct oct_nic_stats_ctrl *)sc->ctxptr; - struct nic_rx_stats *rsp_rstats = &resp->stats.fromwire; - struct nic_tx_stats *rsp_tstats = &resp->stats.fromhost; - - struct nic_rx_stats *rstats = &oct_dev->link_stats.fromwire; - struct nic_tx_stats *tstats = &oct_dev->link_stats.fromhost; - - if ((status != OCTEON_REQUEST_TIMEOUT) && !resp->status) { - octeon_swap_8B_data((u64 *)&resp->stats, - (sizeof(struct oct_link_stats)) >> 3); - - /* RX link-level stats */ - rstats->total_rcvd = rsp_rstats->total_rcvd; - rstats->bytes_rcvd = rsp_rstats->bytes_rcvd; - rstats->total_bcst = rsp_rstats->total_bcst; - rstats->total_mcst = rsp_rstats->total_mcst; - rstats->runts = rsp_rstats->runts; - rstats->ctl_rcvd = rsp_rstats->ctl_rcvd; - /* Accounts for over/under-run of buffers */ - rstats->fifo_err = rsp_rstats->fifo_err; - rstats->dmac_drop = rsp_rstats->dmac_drop; - rstats->fcs_err = rsp_rstats->fcs_err; - rstats->jabber_err = rsp_rstats->jabber_err; - rstats->l2_err = rsp_rstats->l2_err; - rstats->frame_err = rsp_rstats->frame_err; - rstats->red_drops = rsp_rstats->red_drops; - - /* RX firmware stats */ - rstats->fw_total_rcvd = rsp_rstats->fw_total_rcvd; - rstats->fw_total_fwd = rsp_rstats->fw_total_fwd; - 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; - rstats->fw_rx_vxlan = rsp_rstats->fw_rx_vxlan; - rstats->fw_rx_vxlan_err = rsp_rstats->fw_rx_vxlan_err; - - /* Number of packets that are LROed */ - rstats->fw_lro_pkts = rsp_rstats->fw_lro_pkts; - /* Number of octets that are LROed */ - rstats->fw_lro_octs = rsp_rstats->fw_lro_octs; - /* Number of LRO packets formed */ - rstats->fw_total_lro = rsp_rstats->fw_total_lro; - /* Number of times lRO of packet aborted */ - rstats->fw_lro_aborts = rsp_rstats->fw_lro_aborts; - rstats->fw_lro_aborts_port = rsp_rstats->fw_lro_aborts_port; - rstats->fw_lro_aborts_seq = rsp_rstats->fw_lro_aborts_seq; - rstats->fw_lro_aborts_tsval = rsp_rstats->fw_lro_aborts_tsval; - rstats->fw_lro_aborts_timer = rsp_rstats->fw_lro_aborts_timer; - /* intrmod: packet forward rate */ - rstats->fwd_rate = rsp_rstats->fwd_rate; - - /* TX link-level stats */ - tstats->total_pkts_sent = rsp_tstats->total_pkts_sent; - tstats->total_bytes_sent = rsp_tstats->total_bytes_sent; - tstats->mcast_pkts_sent = rsp_tstats->mcast_pkts_sent; - tstats->bcast_pkts_sent = rsp_tstats->bcast_pkts_sent; - tstats->ctl_sent = rsp_tstats->ctl_sent; - /* Packets sent after one collision*/ - tstats->one_collision_sent = rsp_tstats->one_collision_sent; - /* Packets sent after multiple collision*/ - tstats->multi_collision_sent = rsp_tstats->multi_collision_sent; - /* Packets not sent due to max collisions */ - tstats->max_collision_fail = rsp_tstats->max_collision_fail; - /* Packets not sent due to max deferrals */ - tstats->max_deferral_fail = rsp_tstats->max_deferral_fail; - /* Accounts for over/under-run of buffers */ - tstats->fifo_err = rsp_tstats->fifo_err; - tstats->runts = rsp_tstats->runts; - /* Total number of collisions detected */ - tstats->total_collisions = rsp_tstats->total_collisions; - - /* firmware stats */ - tstats->fw_total_sent = rsp_tstats->fw_total_sent; - tstats->fw_total_fwd = rsp_tstats->fw_total_fwd; - 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; - tstats->fw_err_drop = rsp_tstats->fw_err_drop; - tstats->fw_tso = rsp_tstats->fw_tso; - tstats->fw_tso_fwd = rsp_tstats->fw_tso_fwd; - tstats->fw_err_tso = rsp_tstats->fw_err_tso; - tstats->fw_tx_vxlan = rsp_tstats->fw_tx_vxlan; - - resp->status = 1; - } else { - resp->status = -1; - } - complete(&ctrl->complete); -} - -/* Configure interrupt moderation parameters */ -static int octnet_get_link_stats(struct net_device *netdev) -{ - struct lio *lio = GET_LIO(netdev); - struct octeon_device *oct_dev = lio->oct_dev; - - struct octeon_soft_command *sc; - struct oct_nic_stats_ctrl *ctrl; - struct oct_nic_stats_resp *resp; - - int retval; - - /* Alloc soft command */ - sc = (struct octeon_soft_command *) - octeon_alloc_soft_command(oct_dev, - 0, - sizeof(struct oct_nic_stats_resp), - sizeof(struct octnic_ctrl_pkt)); - - if (!sc) - return -ENOMEM; - - resp = (struct oct_nic_stats_resp *)sc->virtrptr; - memset(resp, 0, sizeof(struct oct_nic_stats_resp)); - - ctrl = (struct oct_nic_stats_ctrl *)sc->ctxptr; - memset(ctrl, 0, sizeof(struct oct_nic_stats_ctrl)); - ctrl->netdev = netdev; - init_completion(&ctrl->complete); - - sc->iq_no = lio->linfo.txpciq[0].s.q_no; - - octeon_prepare_soft_command(oct_dev, sc, OPCODE_NIC, - OPCODE_NIC_PORT_STATS, 0, 0, 0); - - sc->callback = octnet_nic_stats_callback; - sc->callback_arg = sc; - sc->wait_time = 500; /*in milli seconds*/ - - retval = octeon_send_soft_command(oct_dev, sc); - if (retval == IQ_SEND_FAILED) { - octeon_free_soft_command(oct_dev, sc); - return -EINVAL; - } - - wait_for_completion_timeout(&ctrl->complete, msecs_to_jiffies(1000)); - - if (resp->status != 1) { - octeon_free_soft_command(oct_dev, sc); - - return -EINVAL; - } - - octeon_free_soft_command(oct_dev, sc); - - return 0; -} - static int lio_get_intr_coalesce(struct net_device *netdev, struct ethtool_coalesce *intr_coal) { diff --git a/drivers/net/ethernet/cavium/liquidio/octeon_network.h b/drivers/net/ethernet/cavium/liquidio/octeon_network.h index 4069710..d090edd 100644 --- a/drivers/net/ethernet/cavium/liquidio/octeon_network.h +++ b/drivers/net/ethernet/cavium/liquidio/octeon_network.h @@ -190,6 +190,8 @@ irqreturn_t liquidio_msix_intr_handler(int irq __attribute__((unused)), int octeon_setup_interrupt(struct octeon_device *oct, u32 num_ioqs); +int octnet_get_link_stats(struct net_device *netdev); + int lio_wait_for_clean_oq(struct octeon_device *oct); /** * \brief Register ethtool operations 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;