From patchwork Sat Aug 12 01:29:30 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Manlunas, Felix" X-Patchwork-Id: 800797 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@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; dkim=pass (1024-bit key; unprotected) header.d=CAVIUMNETWORKS.onmicrosoft.com header.i=@CAVIUMNETWORKS.onmicrosoft.com header.b="bGwk7vUU"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3xTknP3g77z9t2Z for ; Sat, 12 Aug 2017 11:29:45 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752101AbdHLB3o (ORCPT ); Fri, 11 Aug 2017 21:29:44 -0400 Received: from mail-bn3nam01on0081.outbound.protection.outlook.com ([104.47.33.81]:35376 "EHLO NAM01-BN3-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752016AbdHLB3i (ORCPT ); Fri, 11 Aug 2017 21:29:38 -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=EzoTQAIKkeUenBz8JbchW3OP5lsq1K+m5qGTILklt+Y=; b=bGwk7vUUyxn3QqPKP6fOLCFb0h4+FLzF5wJyapKpffSOvPj3Th9pGLQHOc/xNPf/kdaLtJj/Q4IQJZx2Gr9xbT0dCOsNwGNrlgpRxB4ukdXLxBnmweJiPb6OuHIqZnjCa/l5u0Xtc/2qUym+wKJjuPzFdkhAS35BkqTKWhmh1RA= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Felix.Manlunas@cavium.com; Received: from localhost (50.233.148.156) by DM5PR07MB3178.namprd07.prod.outlook.com (10.172.85.140) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.1.1320.16; Sat, 12 Aug 2017 01:29:35 +0000 Date: Fri, 11 Aug 2017 18:29:30 -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, intiyaz.basha@cavium.com Subject: [PATCH net-next 8/8] liquidio: added support for ethtool --set-ring feature Message-ID: <20170812012930.GA2614@felix-thinkpad.cavium.com> References: <20170812012818.GA2505@felix-thinkpad.cavium.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20170812012818.GA2505@felix-thinkpad.cavium.com> User-Agent: Mutt/1.6.1 (2016-04-27) X-Originating-IP: [50.233.148.156] X-ClientProxiedBy: MWHPR08CA0025.namprd08.prod.outlook.com (10.174.103.166) To DM5PR07MB3178.namprd07.prod.outlook.com (10.172.85.140) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: f7219f9d-dfef-4601-586e-08d4e1219780 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(300000500095)(300135000095)(300000501095)(300135300095)(300000502095)(300135100095)(22001)(2017030254152)(300000503095)(300135400095)(201703131423075)(201703031133081)(201702281549075)(300000504095)(300135200095)(300000505095)(300135600095)(300000506095)(300135500095); SRVR:DM5PR07MB3178; X-Microsoft-Exchange-Diagnostics: 1; DM5PR07MB3178; 3:cbRIaEcpfg8HHtOQ9CKboYyv9M2YkpnEpb+xX3PFgr5tTRRaJeg80pOUouf5sdjUMsEK/i19KolOy9lOG9oNWx20I/8Ba28qh/y0eM6e5c+Nd5oP+cEJHMrBgQ6lishbGlCgzyu1A0qbITLWBR6xCHrpXp43HtRzCDabvwCOY0ql/Vy6YDGO4TVhEJj/S1YoDBV0Y030MFHS2kK/Ygi25f8TYoX9B57Bglsc60sP03ANm6BfIEU8gWt5j5HcgglO; 25:0Zf5sIYdAeJ3xco+VSDYer9B8bN47oEINE9iyI/rkqL30NuMNJiGROymgncD9EXvDuDn6JrSavMVF5ZsSVdv0XAQqQQEPlUv64jBCt2uFVFvhcriMPI9+c11p3c1JALGXGWC7+TaPJ+eZjRcvRQr6W4a0pOOzpG3iXka88e23imdKiat4tyL5JpNC5J1ojLJB5SxNESH5/gtjGgsnvwEOlqYasYAca9oP1Ovb103fyV9Xh3cck/waqnZ62+OqLy3sTEkHfc1pCGcCHTlK99vgFGRrC1V91Ub/UMIpPb3/s26v5itNrTd0yWy0Gz0RKTHYuN353T19zqmIdxDIEySiw==; 31:a360MycsW61jbr/Y6nY1Mki9zxxGnQ7OBxdoFqBnTWqwunrtWQg3BTVIsTpqlcF2chwoZ6Mqh3ut6gMtc6h+BkTN0IiJ/Al4x6QH3emFtE6uYossMIqJXS7bEStbtBv+WO5rQMSDVlPk4VUBFzrdsqQxyI5hVzhToozK725dwsqjBG6OAj71KprvDSJHl7j+o75GB3NeAT4pqA7Vrgk39+eDg9Nc/tEA04h7+jbAHY4= X-MS-TrafficTypeDiagnostic: DM5PR07MB3178: X-Microsoft-Exchange-Diagnostics: 1; DM5PR07MB3178; 20:hwXs1dgLoSxYl3VErhwW8EbCVcN862k8VvZz+gugUNJjOZTKT8IvCl+ggveJU3wMbhfZFJoum9c1I/G3JNbU+gzp/PlK8+kvvZ5exIYdPr5FG7WQsktqhPCA/e4EQmsRZc721dCpPKE07a2w6RfAWnNW1EA7JiP/QsfiYQi5MVqcgafrADSbwD8Zl5kHw+7H2ZaUHbEIAm6+Kj7AEkmJsLPv4c1igNFS16eUdYDZjCc8HBEZRN+Ts18r+5aeU4GK5/LA4wzqOKwb7ffRKwtvtxrHP7/haWJoTKApZ7/D31PzesSehfTlSte/HeplWkzXJZ+erI0+1QXpHpl4w4nv8l4AuIroTtudl+VaICGSgtpzmzGub23HnSu6CLf7G+YJ82DWr45+26z4JmaKMoM3VYO2Jy288r/IPbuH+MRPkTki+Rb5f/Q1X7PbjO6pm4VaqDsIjClOiDRIJFYjFzEkGUAsvjJfOC3nEZxfATcM+YTO75Eoba62xdRPECoF4Vsd; 4:hT/0t3IzBvUo7A+ktpVyDYtzv9t+/4LOMcEGYePLHNBv+dXVrA81zBK5iOwhVxTncrTHgY9HJuY+pKQmjp7NQvzEvC6pxBSvYsBRquAUs4KBdRJbAL4L331+SKKNEe34o5OZ0tafFNfZK+WZa8Vfxo5K+xYFzczxqi9ZGME5B3juf7iaHGeG2A6Zz7NueHsIMaEFZ5o+PwGOGG0R0AKj5C1wTnPFqdSUOy2IV7fNeLFlwHcn1ChE+kn1Dk468X68 X-Exchange-Antispam-Report-Test: UriScan:; X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(601004)(2401047)(5005006)(8121501046)(100000703101)(100105400095)(93006095)(93001095)(10201501046)(3002001)(6041248)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123562025)(20161123558100)(20161123555025)(20161123560025)(20161123564025)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:DM5PR07MB3178; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:DM5PR07MB3178; X-Forefront-PRVS: 039735BC4E X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(7370300001)(4630300001)(6069001)(6009001)(189002)(199003)(97736004)(4001350100001)(1076002)(3846002)(2351001)(25786009)(189998001)(68736007)(76176999)(101416001)(2361001)(23726003)(54356999)(5660300001)(50986999)(76506005)(6116002)(478600001)(106356001)(105586002)(7350300001)(53936002)(83506001)(4326008)(72206003)(66066001)(86362001)(33656002)(42186005)(6496005)(110136004)(2906002)(7736002)(6666003)(6486002)(81156014)(50466002)(6916009)(305945005)(81166006)(8676002)(107886003)(47776003)(2950100002)(18370500001); DIR:OUT; SFP:1101; SCL:1; SRVR:DM5PR07MB3178; H:localhost; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; Received-SPF: None (protection.outlook.com: cavium.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; DM5PR07MB3178; 23:trJNpsbZelwJ307smK18VHxf6+XO7WjALvGSGRCFF?= =?us-ascii?Q?d8NyixQdHgStW1Inr53WG5THDj6JzuIrRRG2D2pqzdVXZl2SHFii/vzk9pL7?= =?us-ascii?Q?OTxocf6ZmiZLDeEA+00+t9naiEvN28TwMzsIUTS1pwmElhhdNj3Q58vIlGE+?= =?us-ascii?Q?P8Ru33RiZOs9mjXBNwI6gkDwNtMxGEpByVA5YThYwuSu4BenlCC0Ynn/QBXn?= =?us-ascii?Q?HcQ/vYsKrXbiFxNxFvFuE1PC+dlEDv8p1OJahS7Ez2BpUHzssDwo88cyADkG?= =?us-ascii?Q?kFuOshaJBF5WumqfvE1cM5hXj5mhwU2HLjcyN4tepBBoIAMHfomWTBqnvO4d?= =?us-ascii?Q?PdEgh/wjxur9Fi06tieNZVkEZ4N/2ziL3/HiLmiuOnkA0lXYB4GVfW2th8Zp?= =?us-ascii?Q?lGlxmYEyv8IhZ1CV4G0FKxTgQAu0DUMsf6Rx4UM6cDEZZfeURGfh2MS5zejb?= =?us-ascii?Q?/OteBplHxATB92+eHQfmfDIxLhnQDjfomsFfVBOqKvkRhwfJTfTuCyx+3OcE?= =?us-ascii?Q?i5OQEP1/DqvrzWaEWevUnjIfpRLRs1rz5A79qAQXiAR+h7K7pdafZ36xRo1n?= =?us-ascii?Q?yUbtwJZpYA/GG7cRpTKLseNlosDy+YkbDx42NLbDTupglbiyGVMILLf3d2AB?= =?us-ascii?Q?XXbZyCJNw+Aoav6ZBaelKMAe2KuhlgtZhy92nENCOf/uTRALKWCw/iYeDMCB?= =?us-ascii?Q?Dob3PIe9eBNzG//t5z+WQJMIgRWh6G2uL7w0sybIIZO1nl8QLI24GlKjzp0V?= =?us-ascii?Q?E/0R/xcnZqVdp5wE0TaQP3KnqjQRuWSX9PVUOcmFaYi3f/Y9JCaBgb+Qqe3/?= =?us-ascii?Q?GA0E8r5wUNtCZhvOTjbuMhq4exNViV2Vxk7aZqT7n+CUT01UhIij+oGt/71G?= =?us-ascii?Q?13n6RXCSqeNaShGRl9ftS36CKptUu2O5Tswtvuk1BbppGck7WCLJbZ6+lar5?= =?us-ascii?Q?V1tqdy2U1HA8Er5VaLORHl4BMnXHliQJprsapUQhK3hNrAi2PN8ihY9kTFjm?= =?us-ascii?Q?sTjm0Pph1qaXlBeahVzzgHOw1eolJetsF1AN03VXdeBp1Vm4qXZOS9B0Zcwa?= =?us-ascii?Q?SG/EPITlBpPbxMz3KkUpAyosNcJlJFP3YuaIzxLm79uYb/hryHGpJMKeR+Mc?= =?us-ascii?Q?OeiJQLvAq5LxfpAs/je4R4/QHpsHG2UVRTWWWYhOnx+2U3RxnNrQxNVdnYvZ?= =?us-ascii?Q?c6rXSu0myyi9veL2Jq9MMjZp7nHvSncvf0sLYr3Asi/T9p1NPD6uj9GbQ=3D?= =?us-ascii?Q?=3D?= X-Microsoft-Exchange-Diagnostics: 1; DM5PR07MB3178; 6:VJApRwxU4sNjQgn1PWA9ejgKbTLZwttUUdySsUR8UA4Dvedd/dKLGwPjkCnlfumVju2EAXlVQoPVkO6ai715BjaREEX+UJBgilEAQKg2gryJF6/9Xx//THvqLpqPrOfvjKikdNA76tu+YWE5BqzBzUw5C5+f12XsSq8UV6M4kc0S3wrqa/uP9s06HRC24zCo2iuhRok0RiGWZrKKuvnECr5PoGdYidq5XNYgY8+4KnBSJSdB2D4UBW4/BiNyz2sUqonBXse8sAQAB+Lv0oF1m7UOPf51N7gn07a8IkliFvNMGYZNzLPdWITN6dbHJQ2gM+Bohr0rfRsejhEk39nFug==; 5:oNWMb2Afgjqq5R64gHgDr8arC/Guf7M3bRoiTkcRNaefKqEpe53IqcjP2K9xDLf2fGmWiQnYfN/JNr3nQzD4RBLlf/vXWab96EsDEaNbdi9jAZospnW862RN9ew+vk01jHkLMeVgJ63P+r0ltkyVow==; 24:3HEk8TCulMVzmievVwQaTI6NoA8Dnih2HZLSalZae+pC0JkKCSMJ5EWqDA0MNAmyovYYNIJh2uliaRhcRlAodOXJWw45DfTx4A6aK7IWHPk=; 7:WWP0D+WZ9lA+/uDOEGHCPsrpl9U6Pzj8YdexSkp1FOb0ZNrBdpg4JlGlTwX4e0hZI3xfAF9bAuuvEhwPXZpCgyKvPqkDSdtvQpwQLNuT1IFtq0JvlZtxdE+loiqqonDTpQvuF/3lxZ+o21kaDvxkPYhxnKV9xhXoPfiFM9SeJ/VgN8FtTNy4WSOy5Cp0t7nAyg/hc7H2lHRRndMRLSUinj1RS9tBYJv+REIYjUEzjz8= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: cavium.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Aug 2017 01:29:35.6461 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM5PR07MB3178 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Intiyaz Basha added support for ethtool --set-ring feature Signed-off-by: Intiyaz Basha Signed-off-by: Felix Manlunas --- drivers/net/ethernet/cavium/liquidio/lio_ethtool.c | 131 +++++++++++++++++++++ drivers/net/ethernet/cavium/liquidio/lio_main.c | 6 +- drivers/net/ethernet/cavium/liquidio/lio_vf_main.c | 6 +- .../net/ethernet/cavium/liquidio/octeon_config.h | 13 +- .../net/ethernet/cavium/liquidio/octeon_device.c | 14 +-- .../net/ethernet/cavium/liquidio/octeon_network.h | 1 + 6 files changed, 160 insertions(+), 11 deletions(-) diff --git a/drivers/net/ethernet/cavium/liquidio/lio_ethtool.c b/drivers/net/ethernet/cavium/liquidio/lio_ethtool.c index b78e296..5ef595d 100644 --- a/drivers/net/ethernet/cavium/liquidio/lio_ethtool.c +++ b/drivers/net/ethernet/cavium/liquidio/lio_ethtool.c @@ -642,6 +642,9 @@ lio_ethtool_get_ringparam(struct net_device *netdev, u32 tx_max_pending = 0, rx_max_pending = 0, tx_pending = 0, rx_pending = 0; + if (ifstate_check(lio, LIO_IFSTATE_RESETTING)) + return; + if (OCTEON_CN6XXX(oct)) { struct octeon_config *conf6x = CHIP_CONF(oct, cn6xxx); @@ -666,6 +669,126 @@ lio_ethtool_get_ringparam(struct net_device *netdev, ering->rx_jumbo_max_pending = 0; } +static int lio_reset_queues(struct net_device *netdev) +{ + struct lio *lio = GET_LIO(netdev); + struct octeon_device *oct = lio->oct_dev; + struct napi_struct *napi, *n; + int i; + + dev_dbg(&oct->pci_dev->dev, "%s:%d ifidx %d\n", + __func__, __LINE__, lio->ifidx); + + if (wait_for_pending_requests(oct)) + dev_err(&oct->pci_dev->dev, "There were pending requests\n"); + + if (lio_wait_for_instr_fetch(oct)) + dev_err(&oct->pci_dev->dev, "IQ had pending instructions\n"); + + if (octeon_set_io_queues_off(oct)) { + dev_err(&oct->pci_dev->dev, "setting io queues off failed\n"); + return -1; + } + + /* Disable the input and output queues now. No more packets will + * arrive from Octeon. + */ + oct->fn_list.disable_io_queues(oct); + /* Delete NAPI */ + list_for_each_entry_safe(napi, n, &netdev->napi_list, dev_list) + netif_napi_del(napi); + + for (i = 0; i < MAX_OCTEON_OUTPUT_QUEUES(oct); i++) { + if (!(oct->io_qmask.oq & BIT_ULL(i))) + continue; + octeon_delete_droq(oct, i); + } + + for (i = 0; i < MAX_OCTEON_INSTR_QUEUES(oct); i++) { + if (!(oct->io_qmask.iq & BIT_ULL(i))) + continue; + octeon_delete_instr_queue(oct, i); + } + + if (oct->fn_list.setup_device_regs(oct)) { + dev_err(&oct->pci_dev->dev, "Failed to configure device registers\n"); + return -1; + } + + if (liquidio_setup_io_queues(oct, 0)) { + dev_err(&oct->pci_dev->dev, "IO queues initialization failed\n"); + return -1; + } + + /* Enable the input and output queues for this Octeon device */ + if (oct->fn_list.enable_io_queues(oct)) { + dev_err(&oct->pci_dev->dev, "Failed to enable input/output queues"); + return -1; + } + + return 0; +} + +static int lio_ethtool_set_ringparam(struct net_device *netdev, + struct ethtool_ringparam *ering) +{ + u32 rx_count, tx_count, rx_count_old, tx_count_old; + struct lio *lio = GET_LIO(netdev); + struct octeon_device *oct = lio->oct_dev; + int stopped = 0; + + if (!OCTEON_CN23XX_PF(oct) && !OCTEON_CN23XX_VF(oct)) + return -EINVAL; + + if ((ering->rx_mini_pending) || (ering->rx_jumbo_pending)) + return -EINVAL; + + rx_count = clamp_t(u32, ering->rx_pending, CN23XX_MIN_OQ_DESCRIPTORS, + CN23XX_MAX_OQ_DESCRIPTORS); + tx_count = clamp_t(u32, ering->tx_pending, CN23XX_MIN_IQ_DESCRIPTORS, + CN23XX_MAX_IQ_DESCRIPTORS); + + rx_count_old = oct->droq[0]->max_count; + tx_count_old = oct->instr_queue[0]->max_count; + + if ((rx_count == rx_count_old) && (tx_count == tx_count_old)) + return 0; + + ifstate_set(lio, LIO_IFSTATE_RESETTING); + + if (netif_running(netdev)) { + netdev->netdev_ops->ndo_stop(netdev); + stopped = 1; + } + + /* Change RX/TX DESCS count */ + if (tx_count != tx_count_old) + CFG_SET_NUM_TX_DESCS_NIC_IF(octeon_get_conf(oct), lio->ifidx, + tx_count); + if (rx_count != rx_count_old) + CFG_SET_NUM_RX_DESCS_NIC_IF(octeon_get_conf(oct), lio->ifidx, + rx_count); + + if (lio_reset_queues(netdev)) + goto err_lio_reset_queues; + + if (stopped) + netdev->netdev_ops->ndo_open(netdev); + + ifstate_reset(lio, LIO_IFSTATE_RESETTING); + + return 0; + +err_lio_reset_queues: + if (tx_count != tx_count_old) + CFG_SET_NUM_TX_DESCS_NIC_IF(octeon_get_conf(oct), lio->ifidx, + tx_count_old); + if (rx_count != rx_count_old) + CFG_SET_NUM_RX_DESCS_NIC_IF(octeon_get_conf(oct), lio->ifidx, + rx_count_old); + return -EINVAL; +} + static u32 lio_get_msglevel(struct net_device *netdev) { struct lio *lio = GET_LIO(netdev); @@ -784,6 +907,9 @@ lio_get_ethtool_stats(struct net_device *netdev, struct net_device_stats *netstats = &netdev->stats; int i = 0, j; + if (ifstate_check(lio, LIO_IFSTATE_RESETTING)) + return; + netdev->netdev_ops->ndo_get_stats(netdev); octnet_get_link_stats(netdev); @@ -1048,6 +1174,9 @@ static void lio_vf_get_ethtool_stats(struct net_device *netdev, struct octeon_device *oct_dev = lio->oct_dev; int i = 0, j, vj; + if (ifstate_check(lio, LIO_IFSTATE_RESETTING)) + return; + netdev->netdev_ops->ndo_get_stats(netdev); /* sum of oct->droq[oq_no]->stats->rx_pkts_received */ data[i++] = CVM_CAST64(netstats->rx_packets); @@ -2579,6 +2708,7 @@ static const struct ethtool_ops lio_ethtool_ops = { .get_link = ethtool_op_get_link, .get_drvinfo = lio_get_drvinfo, .get_ringparam = lio_ethtool_get_ringparam, + .set_ringparam = lio_ethtool_set_ringparam, .get_channels = lio_ethtool_get_channels, .set_phys_id = lio_set_phys_id, .get_eeprom_len = lio_get_eeprom_len, @@ -2604,6 +2734,7 @@ static const struct ethtool_ops lio_vf_ethtool_ops = { .get_link = ethtool_op_get_link, .get_drvinfo = lio_get_vf_drvinfo, .get_ringparam = lio_ethtool_get_ringparam, + .set_ringparam = lio_ethtool_set_ringparam, .get_channels = lio_ethtool_get_channels, .get_strings = lio_vf_get_strings, .get_ethtool_stats = lio_vf_get_ethtool_stats, diff --git a/drivers/net/ethernet/cavium/liquidio/lio_main.c b/drivers/net/ethernet/cavium/liquidio/lio_main.c index e606d33..5718b60 100644 --- a/drivers/net/ethernet/cavium/liquidio/lio_main.c +++ b/drivers/net/ethernet/cavium/liquidio/lio_main.c @@ -814,7 +814,8 @@ static void print_link_info(struct net_device *netdev) { struct lio *lio = GET_LIO(netdev); - if (atomic_read(&lio->ifstate) & LIO_IFSTATE_REGISTERED) { + if (!ifstate_check(lio, LIO_IFSTATE_RESETTING) && + ifstate_check(lio, LIO_IFSTATE_REGISTERED)) { struct oct_link_info *linfo = &lio->linfo; if (linfo->link.s.link_up) { @@ -2517,6 +2518,9 @@ 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; + for (i = 0; i < lio->linfo.num_txpciq; i++) { iq_no = lio->linfo.txpciq[i].s.q_no; iq_stats = &oct->instr_queue[iq_no]->stats; diff --git a/drivers/net/ethernet/cavium/liquidio/lio_vf_main.c b/drivers/net/ethernet/cavium/liquidio/lio_vf_main.c index aa502a8..2fc2da3 100644 --- a/drivers/net/ethernet/cavium/liquidio/lio_vf_main.c +++ b/drivers/net/ethernet/cavium/liquidio/lio_vf_main.c @@ -548,7 +548,8 @@ static void print_link_info(struct net_device *netdev) { struct lio *lio = GET_LIO(netdev); - if (atomic_read(&lio->ifstate) & LIO_IFSTATE_REGISTERED) { + if (!ifstate_check(lio, LIO_IFSTATE_RESETTING) && + ifstate_check(lio, LIO_IFSTATE_REGISTERED)) { struct oct_link_info *linfo = &lio->linfo; if (linfo->link.s.link_up) { @@ -1633,6 +1634,9 @@ 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; + for (i = 0; i < lio->linfo.num_txpciq; i++) { iq_no = lio->linfo.txpciq[i].s.q_no; iq_stats = &oct->instr_queue[iq_no]->stats; diff --git a/drivers/net/ethernet/cavium/liquidio/octeon_config.h b/drivers/net/ethernet/cavium/liquidio/octeon_config.h index f229d79..63bd9c9 100644 --- a/drivers/net/ethernet/cavium/liquidio/octeon_config.h +++ b/drivers/net/ethernet/cavium/liquidio/octeon_config.h @@ -71,13 +71,17 @@ #define CN23XX_MAX_RINGS_PER_VF 8 #define CN23XX_MAX_INPUT_QUEUES CN23XX_MAX_RINGS_PER_PF -#define CN23XX_MAX_IQ_DESCRIPTORS 512 +#define CN23XX_MAX_IQ_DESCRIPTORS 2048 +#define CN23XX_DEFAULT_IQ_DESCRIPTORS 512 +#define CN23XX_MIN_IQ_DESCRIPTORS 128 #define CN23XX_DB_MIN 1 #define CN23XX_DB_MAX 8 #define CN23XX_DB_TIMEOUT 1 #define CN23XX_MAX_OUTPUT_QUEUES CN23XX_MAX_RINGS_PER_PF -#define CN23XX_MAX_OQ_DESCRIPTORS 512 +#define CN23XX_MAX_OQ_DESCRIPTORS 2048 +#define CN23XX_DEFAULT_OQ_DESCRIPTORS 512 +#define CN23XX_MIN_OQ_DESCRIPTORS 128 #define CN23XX_OQ_BUF_SIZE 1664 #define CN23XX_OQ_PKTSPER_INTR 128 /*#define CAVIUM_ONLY_CN23XX_RX_PERF*/ @@ -163,6 +167,11 @@ ((cfg)->misc.oct_link_query_interval) #define CFG_GET_IS_SLI_BP_ON(cfg) ((cfg)->misc.enable_sli_oq_bp) +#define CFG_SET_NUM_RX_DESCS_NIC_IF(cfg, idx, value) \ + ((cfg)->nic_if_cfg[idx].num_rx_descs = value) +#define CFG_SET_NUM_TX_DESCS_NIC_IF(cfg, idx, value) \ + ((cfg)->nic_if_cfg[idx].num_tx_descs = value) + /* Max IOQs per OCTEON Link */ #define MAX_IOQS_PER_NICIF 64 diff --git a/drivers/net/ethernet/cavium/liquidio/octeon_device.c b/drivers/net/ethernet/cavium/liquidio/octeon_device.c index 495cc88..29d53b1 100644 --- a/drivers/net/ethernet/cavium/liquidio/octeon_device.c +++ b/drivers/net/ethernet/cavium/liquidio/octeon_device.c @@ -418,7 +418,7 @@ static struct octeon_config default_cn23xx_conf = { /** IQ attributes */ .iq = { .max_iqs = CN23XX_CFG_IO_QUEUES, - .pending_list_size = (CN23XX_MAX_IQ_DESCRIPTORS * + .pending_list_size = (CN23XX_DEFAULT_IQ_DESCRIPTORS * CN23XX_CFG_IO_QUEUES), .instr_type = OCTEON_64BYTE_INSTR, .db_min = CN23XX_DB_MIN, @@ -436,8 +436,8 @@ static struct octeon_config default_cn23xx_conf = { }, .num_nic_ports = DEFAULT_NUM_NIC_PORTS_23XX, - .num_def_rx_descs = CN23XX_MAX_OQ_DESCRIPTORS, - .num_def_tx_descs = CN23XX_MAX_IQ_DESCRIPTORS, + .num_def_rx_descs = CN23XX_DEFAULT_OQ_DESCRIPTORS, + .num_def_tx_descs = CN23XX_DEFAULT_IQ_DESCRIPTORS, .def_rx_buf_size = CN23XX_OQ_BUF_SIZE, /* For ethernet interface 0: Port cfg Attributes */ @@ -455,10 +455,10 @@ static struct octeon_config default_cn23xx_conf = { .num_rxqs = DEF_RXQS_PER_INTF, /* Num of desc for rx rings */ - .num_rx_descs = CN23XX_MAX_OQ_DESCRIPTORS, + .num_rx_descs = CN23XX_DEFAULT_OQ_DESCRIPTORS, /* Num of desc for tx rings */ - .num_tx_descs = CN23XX_MAX_IQ_DESCRIPTORS, + .num_tx_descs = CN23XX_DEFAULT_IQ_DESCRIPTORS, /* SKB size, We need not change buf size even for Jumbo frames. * Octeon can send jumbo frames in 4 consecutive descriptors, @@ -484,10 +484,10 @@ static struct octeon_config default_cn23xx_conf = { .num_rxqs = DEF_RXQS_PER_INTF, /* Num of desc for rx rings */ - .num_rx_descs = CN23XX_MAX_OQ_DESCRIPTORS, + .num_rx_descs = CN23XX_DEFAULT_OQ_DESCRIPTORS, /* Num of desc for tx rings */ - .num_tx_descs = CN23XX_MAX_IQ_DESCRIPTORS, + .num_tx_descs = CN23XX_DEFAULT_IQ_DESCRIPTORS, /* SKB size, We need not change buf size even for Jumbo frames. * Octeon can send jumbo frames in 4 consecutive descriptors, diff --git a/drivers/net/ethernet/cavium/liquidio/octeon_network.h b/drivers/net/ethernet/cavium/liquidio/octeon_network.h index b49b155..d4b3930 100644 --- a/drivers/net/ethernet/cavium/liquidio/octeon_network.h +++ b/drivers/net/ethernet/cavium/liquidio/octeon_network.h @@ -33,6 +33,7 @@ #define LIO_IFSTATE_REGISTERED 0x02 #define LIO_IFSTATE_RUNNING 0x04 #define LIO_IFSTATE_RX_TIMESTAMP_ENABLED 0x08 +#define LIO_IFSTATE_RESETTING 0x10 struct oct_nic_stats_resp { u64 rh;