From patchwork Mon Sep 10 06:34:16 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Manlunas, Felix" X-Patchwork-Id: 967882 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="MIzCjgtn"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 427zHz2c3lz9s2P for ; Mon, 10 Sep 2018 16:52:31 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726794AbeIJLo7 (ORCPT ); Mon, 10 Sep 2018 07:44:59 -0400 Received: from mail-bn3nam01on0083.outbound.protection.outlook.com ([104.47.33.83]:3328 "EHLO NAM01-BN3-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726185AbeIJLo7 (ORCPT ); Mon, 10 Sep 2018 07:44:59 -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:X-MS-Exchange-SenderADCheck; bh=rk4Wpq4Yrq0f9NhWk4kmkqDYc3PEhP/v0RrTnDCkygc=; b=MIzCjgtnXzimhEgC+Syt2dopEhjfiV9A6dxY9YXM+bONdoE0GuRjNKOIw1fBZVwOAaK7gqDS0UYH/c75ARvgWlMNnoc4Vc7H13Xngk8uRJVFVmDy8SmJfn9lNbfgQ950aJuyA7pehzAYJnyH5jOqww76uwWMzETcocfZX/4k0vg= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Felix.Manlunas@cavium.com; Received: from localhost (50.233.148.155) by CY4PR07MB2824.namprd07.prod.outlook.com (2603:10b6:903:25::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1122.15; Mon, 10 Sep 2018 06:34:19 +0000 Date: Sun, 9 Sep 2018 23:34:16 -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, intiyaz.basha@cavium.com Subject: [PATCH net-next 1/3] liquidio: Disabling tasklet when NAPI is active Message-ID: <20180910063416.GA4035@felix-thinkpad.cavium.com> References: <20180910063322.GA4011@felix-thinkpad.cavium.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20180910063322.GA4011@felix-thinkpad.cavium.com> User-Agent: Mutt/1.6.1 (2016-04-27) X-Originating-IP: [50.233.148.155] X-ClientProxiedBy: CS1PR8401CA0030.NAMPRD84.PROD.OUTLOOK.COM (2a01:111:e400:7503::16) To CY4PR07MB2824.namprd07.prod.outlook.com (2603:10b6:903:25::14) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: ac3b3264-baae-46ac-f5b6-08d616e77084 X-Microsoft-Antispam: BCL:0; PCL:0; RULEID:(7020095)(4652040)(8989137)(4534165)(4627221)(201703031133081)(201702281549075)(8990107)(5600074)(711020)(2017052603328)(7153060)(7193020); SRVR:CY4PR07MB2824; X-Microsoft-Exchange-Diagnostics: 1; CY4PR07MB2824; 3:+QPLPckZO7sEBnRtMEtx1MHa8NYOCRd1PVT19yadXf3srGvoha1DpivxC48JxV2SnKZhaqEvFz7PI5lTfBAX6cTRS9QjmZEOLETSQkUz9sFiRPx+43SPwSY7d2tZtmT20bgJjo/RuD85NToG65nOPcZU9yLFbC3XNTW02f7hNVfLhe29b9Cya9tuNEyQs7t5ar0RrQ/BayO8cEEL4OYmBo5SyBOutKtiqZXJuDiEWR3aICRYxwvRU4n5DYr4JZn0; 25:E4dnCyvTj+p/ong99JL57/JY7LYtRgG+KovZWmnvGZgNv1/jp0yl+POdcyCWlG5nfRrHUw19L+Fmns3hhN98GrNMCtD4raG7bnbl418QikDF08Nyg719t1nQce+QLmuhl5oOEHQ/Go3nui5P9DoyTfUzgtP1Y8R/ImjB2E9TkuOR92B+tqUzfih0UklZP3XE+smRd/dhwNLeK4czFoonWi50ac50M5QLgeQQxM7qw1I0zCXNXrOX0H6mV/dsmkv9FiBwBIkQbZim9oh8PSttJh3XJgQxHb5dt2+VDso1YorEqzx6cYBOpL/NCTC9OKeo2h0AtNLZ8JFdRlaw/XPKSg==; 31:DEG/dNB6A5mEVGbnEBubDevvZGAzVdY3rQkQuB2VFPEXmMTLRjIRNwZn5x5P6xAOJ3QDpZPyGuknKt1/Snd+sgKkWvdFex6X/7q/YuhmZXqbXcpkjdUZCFdMfrKaMYdYh3isMRm935f3J8UVRlPythPFGiCAdtdfhEHRZgHfL41TP+DEXapBvjYdu+HWqZaIzdnwipWm7qGCNqNBNCRBlBHiQXJLl98G1IJq3SRHEa4= X-MS-TrafficTypeDiagnostic: CY4PR07MB2824: X-Microsoft-Exchange-Diagnostics: 1; CY4PR07MB2824; 20:QuQIsw7ftwoKHL+lbj8LEUtXInjgICp20rMA+RrESqy5VefhwQcirExSm/BsuTEyxD9wPunMGx1M303CGtYcLvx32BpbDNNKelUq6mrsVh65HlLWWKwQN//10swdIRYG9MbosJhEg8cHeK8DQEDmc3TKlkRqY4gh6GemYmciCVmtoQMefvXf2QQxkIsT5bzzP7X/EJEjgWOSlLWRn4t5Uvibnp935uAQKRvyT/3DgfYfUsbE9hNsumEossSHkKVkYa5Z/6h1mst18p7lXNtBMvHfzRmEIrYkWP5EKzGsoUap/LPNR6/6EsmY6wbPfyIOrVbNsPrNuIvRt+il8KebphXw5wR6hvOeEYhmG+05TAa+WFc2sra0BL3KnbeLdM3nf+W0htqX4IUwb0ZPBCezRwTXo5YJPff2r2QlTrZXqe+Z+sgT5VTzkYuXnDHa9saQZhbS+YLqYS7WxpxJkFzrMJKKprK4EEqZJXuOHS8YtTqXwyDUgTCoPRkf37YAPFL+; 4:Tr7K8DWXfPTdigkdcBO/fXTfQpZv/07fq9/FfdqQXsq/SkKDiS8AQpqosFQ9bFhYJ6aobsOq3Vr6oWGAZYiQUg3MKX/s8rEnf+xdZaPNL9f9SIGRABBnoJnzqn5eYn9e90LTEG5OzCQsQQ06qfvPYSdR1qk3XysbqYvCNaR2WrTwHb2JlIAgb3Uz/LCJK9sVh5ziHeVhag7rHA9jYka3nnEZIet4dn5gxWKqnbeSQ5RD84rZyhSxMtMCyfYul4o0ODlNlXF4i0blOYwq0YHh/g== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-MS-Exchange-SenderADCheck: 1 X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(5005006)(8121501046)(3231311)(944501410)(52105095)(93006095)(93001095)(10201501046)(3002001)(149027)(150027)(6041310)(20161123564045)(20161123560045)(20161123562045)(20161123558120)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(201708071742011)(7699050); SRVR:CY4PR07MB2824; BCL:0; PCL:0; RULEID:; SRVR:CY4PR07MB2824; X-Forefront-PRVS: 07915F544A X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(6069001)(39850400004)(346002)(376002)(136003)(366004)(396003)(189003)(199004)(16526019)(86362001)(76176011)(58126008)(66066001)(25786009)(52116002)(6116002)(7736002)(6496006)(76506005)(72206003)(47776003)(23726003)(16586007)(386003)(2906002)(26005)(478600001)(50466002)(97736004)(316002)(3846002)(186003)(305945005)(6486002)(11346002)(476003)(53936002)(33656002)(8676002)(107886003)(1076002)(105586002)(81166006)(446003)(68736007)(5660300001)(956004)(106356001)(486006)(8936002)(6666003)(2351001)(44832011)(2361001)(6916009)(14444005)(4326008)(81156014)(18370500001); DIR:OUT; SFP:1101; SCL:1; SRVR:CY4PR07MB2824; 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; CY4PR07MB2824; 23:nU9GBkvMz024ufEt7R5XfDYTFIG0kc1EiQbG7IM+fp2m8hb3UujrmHAMr8ncrzJefmdveviY5WAtmjrviDpTRlNhydCWMkttzpCNu6/g0IJfBAO2Y8mpdkd0VIu2asjXarkQX/fxRohKe6ncSxioszduMpZXfrx72a9ffonl+pJrNjpl4mXV4pYf/O71knDm43BVjVn8VZZvD6vzaD/gRG1Kfov8YZ6/bCwHbXk971CbVSqgvkP78JUH4Ic+O8DiHeABRjJqOMUAeWn+5PVZPbLLn/m0ednyQQeezmFUpOrKfwLq9H/SnbCQIX4clpfugIAIj6tY/A9HYI6uNPRq64ABk8bAWFMPatMOKdGAllFmmtIxAenkeM6Al6jic7I1WrommuOUYV774CG/XlQx7jE4BcQq5O81IaG8jzzwcIPZSQQEEzR6Tz1+IeO6XHeVv5bcXGqWuSFt+NPPNbuci44sg8PVLDCR03RhVZgyAKsRXesCoCrmLBaJEpoWQwtGO7notohk0CwzfB5kyJxKgPIzk1FXSBPkqK25o3Y+GavPXOBJLF6FCiE1+B+o97DvbaPNxPNzOn9ku3HRfr+LzYVc2jIJffPVmLn8UIikbMRa5nCJdecVZMeInDZMXInhMxb+Sx0SyEdL9nsvoiSRjtTYfNkivx2ssdlD55vy0o4QnZLE/XNKzCIgzpVPk7ZjRl+QGBypPUzPNHzMvRZmbEZhX7T+fNx3J35Zc7bjVTklWu1t4bovgTwIamQkHlIxFmZrFlzkTfhRdHz2N8b5+cS6ihTNSL79J82CrN1xYxeERXqZp5YJ5qMmD/uuyOXeaytZfIbr49YHbvva40CuiRwE/5VoTyQcVLcmCeLS4yqZv/MsCx0eWqeEC453WMk7KKcOAyULkKzoulIN/yYWMFwMGcd7IcO0rNR58pbGWhejzdk7ceQFcts4erdtjCEuJhl7o1IgdOFgPHdXKrTQr5hQOhsKxVbCgJlJz+A7BFMBhOQwN1OP0rsxCULdHLA+Ffgiq/vR4M72v97nuHDRLv0Zh0VT7fFT+DiadM6Z7GsLpn/s1Zq/fanp5syCDjBBxW54f1Pwz+Ihw94ykPTW603Lt5p+y2PY/pjYDksgfYwCARQs5S2ZTSIzE7IOB8oACoUNotrmRvjLfMBYu40MNhTJEE9CRu7GC6ovLZqf0hJc7sD7NjcfC6fVzXt24HSok2xpYCNlTTxznSd/EYjVKskBVDJy/I+bE3koi6XmuFA5U5kXfRfo1LPvTo75Iz56qMCSJc9R+/m/zfYEOSJ4jmCDCky29KtjBjlid6r6JNM= X-Microsoft-Antispam-Message-Info: 0Ah1lcGNxpjazROkSqCxA/mMsgltU2Nj/Ol+Wi9rdIywCx7+CvNiUnyLntLxC2QlvJBuUonWUny7lkQLBJyv7FfH30UkdcoHe0sICZi0mfCJADhhxo3scVI7i3TTK9xiMHM4P6k0s4KtvTxVQ92g9p1LaFzEMbqFJLp4TjJJqdVJFNwtZLHqQNXqv94PlFgw7sZJbBZiGeHEMazRiNqKjpnsLSUMp5AFs9mslbGczEz6xa7eGsmc90JkFGm7/n3X/WJ0zsTsAe6HoWx/ZBM0beHhg8fx0f94C9uaHJ9xpdEegeoxGujxTUJjBf999aEQJTDmiOXj2UkTA774cR1TzUg3NMfMDxyRzkgy7alOBqQ= X-Microsoft-Exchange-Diagnostics: 1; CY4PR07MB2824; 6:IU71CO3v9TlHY7L9puMK5PkTD+MmxscOroMiQbtswweLp9RPiD5d8fQak52D/Xf8Y8+ajQazNJDgBiMbHg3Yh0FMxZ4pEyh6BAtMPD3ALcaHeGCBEXA+f7nlo7a5WNEITXJN/k9ppheNmo5lj2EDAFRgkOg2zJw2VV+/PisIGNe0Q6niX2H3I0TxJ5Bg033QQ3jha+RA6GGJ4z4As1g30y3cQwfhNFwCUPZyw9lTtDsQPSZ75rSPepGtx9xqSdwrsRvw5iriDKsRT/dgJk2GGkk7u3ifBHFMPDN4v9HM0CQXSOdcIpX1tMVrJe5SPzvgLJeN8RUgwNYp3ThbQSbNOUXHk1heBNk/650Yx5nJ5Xy65i5q9fpvXCffvK04u6FMXdZ09z3Wa28CzOvO5AjlkUbuHvEi5dnTro5yp3TbTHVdSVIGa7XT2TwEWZV2PRKrvekLzAnGzeTXUSPpcqLlhg==; 5:YRs7byv4tvSe3kExjP9ki1TwWcThNIhWlMGon2pOrAXCxXQz/tYfcghWVV/UdpYz5a1NDjTPp5TYYLBS7daAX3QaV9/Bz8C4IsvO759l01K035sRQhkGJ3j0jyC30RT94Kr+S5FM6Wd3S933xaPI/P1U3o9+Rrh6hJERLJZ86Vw=; 7:SXK6erRUhAlrz4tCxffPrcIqQyQBHLsJKAFzwJHB5XvqmfdehfcJzvC1/Fcmi8RicSBbH/IpaQAur5EADLhecdauaWiWihWWL3FOMIina6X5uPw4crT/+2Ijk98kBYAzTb5YAZLUT8a0NZxd4wuB+tdcisXJKAuC3HLMrCNcxARfZIksv5JUxcF9cAvJQn0ibSwmSMneEjWTi6DKExkfLiSGd9loa0xRgAN0aVJk3A4izN++mTICDKJbWNrsBuHV SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: cavium.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Sep 2018 06:34:19.9271 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: ac3b3264-baae-46ac-f5b6-08d616e77084 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 711e4ccf-2e9b-4bcf-a551-4094005b6194 X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR07MB2824 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Intiyaz Basha Control packets are processed in tasklet when interface is down and in NAPI when interface is up. So tasklet can be disabled when interface up and re-enabled when interface is down. Signed-off-by: Intiyaz Basha Acked-by: Derek Chickles Signed-off-by: Felix Manlunas --- drivers/net/ethernet/cavium/liquidio/lio_main.c | 14 +++++++++++++- drivers/net/ethernet/cavium/liquidio/lio_vf_main.c | 16 ++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/drivers/net/ethernet/cavium/liquidio/lio_main.c b/drivers/net/ethernet/cavium/liquidio/lio_main.c index 40f941f..0aba1f7 100644 --- a/drivers/net/ethernet/cavium/liquidio/lio_main.c +++ b/drivers/net/ethernet/cavium/liquidio/lio_main.c @@ -1239,8 +1239,10 @@ static void send_rx_ctrl_cmd(struct lio *lio, int start_stop) static void liquidio_destroy_nic_device(struct octeon_device *oct, int ifidx) { struct net_device *netdev = oct->props[ifidx].netdev; - struct lio *lio; + struct octeon_device_priv *oct_priv = + (struct octeon_device_priv *)oct->priv; struct napi_struct *napi, *n; + struct lio *lio; if (!netdev) { dev_err(&oct->pci_dev->dev, "%s No netdevice ptr for index %d\n", @@ -1269,6 +1271,8 @@ static void liquidio_destroy_nic_device(struct octeon_device *oct, int ifidx) list_for_each_entry_safe(napi, n, &netdev->napi_list, dev_list) netif_napi_del(napi); + tasklet_enable(&oct_priv->droq_tasklet); + if (atomic_read(&lio->ifstate) & LIO_IFSTATE_REGISTERED) unregister_netdev(netdev); @@ -1805,9 +1809,13 @@ static int liquidio_open(struct net_device *netdev) { struct lio *lio = GET_LIO(netdev); struct octeon_device *oct = lio->oct_dev; + struct octeon_device_priv *oct_priv = + (struct octeon_device_priv *)oct->priv; struct napi_struct *napi, *n; if (oct->props[lio->ifidx].napi_enabled == 0) { + tasklet_disable(&oct_priv->droq_tasklet); + list_for_each_entry_safe(napi, n, &netdev->napi_list, dev_list) napi_enable(napi); @@ -1861,6 +1869,8 @@ static int liquidio_stop(struct net_device *netdev) { struct lio *lio = GET_LIO(netdev); struct octeon_device *oct = lio->oct_dev; + struct octeon_device_priv *oct_priv = + (struct octeon_device_priv *)oct->priv; struct napi_struct *napi, *n; ifstate_reset(lio, LIO_IFSTATE_RUNNING); @@ -1907,6 +1917,8 @@ static int liquidio_stop(struct net_device *netdev) if (OCTEON_CN23XX_PF(oct)) oct->droq[0]->ops.poll_mode = 0; + + tasklet_enable(&oct_priv->droq_tasklet); } dev_info(&oct->pci_dev->dev, "%s interface is stopped\n", netdev->name); diff --git a/drivers/net/ethernet/cavium/liquidio/lio_vf_main.c b/drivers/net/ethernet/cavium/liquidio/lio_vf_main.c index 8fa7ac3..0ec4bfe 100644 --- a/drivers/net/ethernet/cavium/liquidio/lio_vf_main.c +++ b/drivers/net/ethernet/cavium/liquidio/lio_vf_main.c @@ -444,6 +444,8 @@ static void octeon_pci_flr(struct octeon_device *oct) */ static void octeon_destroy_resources(struct octeon_device *oct) { + struct octeon_device_priv *oct_priv = + (struct octeon_device_priv *)oct->priv; struct msix_entry *msix_entries; int i; @@ -587,6 +589,8 @@ static void octeon_destroy_resources(struct octeon_device *oct) /* Nothing to be done here either */ break; } + + tasklet_kill(&oct_priv->droq_tasklet); } /** @@ -652,6 +656,8 @@ static void send_rx_ctrl_cmd(struct lio *lio, int start_stop) static void liquidio_destroy_nic_device(struct octeon_device *oct, int ifidx) { struct net_device *netdev = oct->props[ifidx].netdev; + struct octeon_device_priv *oct_priv = + (struct octeon_device_priv *)oct->priv; struct napi_struct *napi, *n; struct lio *lio; @@ -681,6 +687,8 @@ static void liquidio_destroy_nic_device(struct octeon_device *oct, int ifidx) list_for_each_entry_safe(napi, n, &netdev->napi_list, dev_list) netif_napi_del(napi); + tasklet_enable(&oct_priv->droq_tasklet); + if (atomic_read(&lio->ifstate) & LIO_IFSTATE_REGISTERED) unregister_netdev(netdev); @@ -898,9 +906,13 @@ static int liquidio_open(struct net_device *netdev) { struct lio *lio = GET_LIO(netdev); struct octeon_device *oct = lio->oct_dev; + struct octeon_device_priv *oct_priv = + (struct octeon_device_priv *)oct->priv; struct napi_struct *napi, *n; if (!oct->props[lio->ifidx].napi_enabled) { + tasklet_disable(&oct_priv->droq_tasklet); + list_for_each_entry_safe(napi, n, &netdev->napi_list, dev_list) napi_enable(napi); @@ -938,6 +950,8 @@ static int liquidio_stop(struct net_device *netdev) { struct lio *lio = GET_LIO(netdev); struct octeon_device *oct = lio->oct_dev; + struct octeon_device_priv *oct_priv = + (struct octeon_device_priv *)oct->priv; struct napi_struct *napi, *n; /* tell Octeon to stop forwarding packets to host */ @@ -967,6 +981,8 @@ static int liquidio_stop(struct net_device *netdev) oct->props[lio->ifidx].napi_enabled = 0; oct->droq[0]->ops.poll_mode = 0; + + tasklet_enable(&oct_priv->droq_tasklet); } cancel_delayed_work_sync(&lio->stats_wk.work); From patchwork Mon Sep 10 06:34:21 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Manlunas, Felix" X-Patchwork-Id: 967873 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="BW7yTAVL"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 427yvF5RDjz9s4s for ; Mon, 10 Sep 2018 16:34:33 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727383AbeIJL05 (ORCPT ); Mon, 10 Sep 2018 07:26:57 -0400 Received: from mail-eopbgr730042.outbound.protection.outlook.com ([40.107.73.42]:8768 "EHLO NAM05-DM3-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726794AbeIJL04 (ORCPT ); Mon, 10 Sep 2018 07:26:56 -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:X-MS-Exchange-SenderADCheck; bh=wOpvoRHyq6G2LYL533WZSxGQLNTaHtz7JY8mcjxeYNU=; b=BW7yTAVL/yuxhaPyEH63jkt/hfBvDQWgz8qhbQzFceB/7zVJhA1jhr+gRus8MPiqDFghsukXWX65dgKBB3fMjAvGGb7VK/J8gTYVSZ7HBMR5dZhOZfHH3pxfz/tNv1Tx7kZdnXaaf/PEBmkYjo4gLeVrThVDsE6Nm177DL4Nl9o= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Felix.Manlunas@cavium.com; Received: from localhost (50.233.148.155) by CY4PR07MB2821.namprd07.prod.outlook.com (2603:10b6:903:25::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1122.17; Mon, 10 Sep 2018 06:34:24 +0000 Date: Sun, 9 Sep 2018 23:34:21 -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, intiyaz.basha@cavium.com Subject: [PATCH net-next 2/3] liquidio: Per queue oom work queue Message-ID: <20180910063421.GA4046@felix-thinkpad.cavium.com> References: <20180910063322.GA4011@felix-thinkpad.cavium.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20180910063322.GA4011@felix-thinkpad.cavium.com> User-Agent: Mutt/1.6.1 (2016-04-27) X-Originating-IP: [50.233.148.155] X-ClientProxiedBy: BN6PR03CA0011.namprd03.prod.outlook.com (2603:10b6:404:23::21) To CY4PR07MB2821.namprd07.prod.outlook.com (2603:10b6:903:25::11) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: c73aa15a-931a-4a6c-67cd-08d616e77367 X-Microsoft-Antispam: BCL:0; PCL:0; RULEID:(7020095)(4652040)(8989137)(4534165)(4627221)(201703031133081)(201702281549075)(8990107)(5600074)(711020)(2017052603328)(7153060)(7193020); SRVR:CY4PR07MB2821; X-Microsoft-Exchange-Diagnostics: 1; CY4PR07MB2821; 3:gLlaouugJI+O/lL+EXR37SSu6booCwaEA83Quc1t+OkFwU5nns4zR7t7u9TLT2qVMTZfkUcIX6+/BxgnzicjJlKVxLd6OT9AnB109Wx7xJl/hEgGgsttQtf5RO/fv3NouGSN8V+W+gc/HIAW9wz92NPe5PxFrbjb1pMy0lTOnUC24eQseomvA2R/xqAEcakqeHYml20sHjC3FHEgX3dY/vO7pO+IckWmrGI+CxU8f4bTg0FRle8PQ/kkH4q3e+43; 25:OqKPESOrlTO2IN2/HsZa5e32rPTlw1LznWxKDa7kpCV6XgKMWwrrwVycepNa8/GVBJ5zUZSUS39/mZR5HrEPpzxOLeld6nVRisLPeQIqfZ/Fa/NbFvjGjafLZWa2P6/1oIIQtr3C+IjDWCL2B1PrE5Q/Solo3aSs8VbGtqmp9KUcIPIeTUEDEP+VaHdw/gQU42AfkFWFHaxMNULlGclHF4CJWenk2KuYJdBIJKF4iV5wF/WpX9SJHiqqElFOt2bXBRxkPxyl//7B1mi7oN9Cd6vr962IHNbEE3Fkb3F61opSPlvBaVF73jdkEuwZ6qOddFdYxOZow973RW86lt+BHw==; 31:udMh0T4TAUMeb27ls0DBRpmsTpbzw/6/OuUoFauj+mXYrNKt5QY+lLAMY3APKUQ0X/2WEu4IicnSwRyg0uCrItb4WrEigOb2Xrx9qKS781+oSde/kuIvQAs6jJSi9IkAkvvHSvX863jDgCS4bL+qiBK0gpR6EY3m2yLeExbbX7fEqUA/FxFpxkUatUWJ1xMFk/9/E1ayL6e61b0nufj1ceGo45K3oZ0lsxiCFAe0Dc0= X-MS-TrafficTypeDiagnostic: CY4PR07MB2821: X-Microsoft-Exchange-Diagnostics: 1; CY4PR07MB2821; 20:ctPldzDi79m8D4f9S0veuF1v0CRwV7wnmqvQpgozot/XuKuSy5x42HUam7/FiOWFix/KYOy3aIa+8MY6JYJHHxhFrd3whGY+A71YOZWG63srAOnEJbFRQjcKt+x9Iph6NIv57i7HcGhC2Gnkm97+rmUVP4QvuWV/KIRaml1RIRbEg0YyF/vgmy1eec6sYQFd7DtDyBf2ht0tmS9MSm9jfBi+Vbn/rQCiKdLl+Y/8KS4FBMcniH4GEH8I/y5MhAQztEsNm4AqUVL6ZjT5pPfstyFq2tMXPEls0nREnQDQ8qaUc8j9cSA5DDsaziZixygUt9mhUIR9h5E5MfgeXeqTcgL3XqxzAIY0slXfRBI6no8blTN4p8YeSQVlCo3I3WM9q4nDnzwh6A2IGmCE7QWFJmXIQasAU2Gdl8rsJwCRX/Yg86aL4tUJAqulUgu3vcW9i6dHSlpitneDO4zTX99oW0v2EDSZrYejt4qGEOIAHNeEzWgdyBEAPQMKKP78x9W5; 4:R4UWiHrJ3MHV4ELJLqzdYnzj4MrpQzkUMhqYcfYBrglAyvnHlfev309lyuY9iIL0jB6Q2BbrIBIg8dGfXzeA3Sl8AmI2DTMufegBd93b7LbPxFkBDs+iFjRE9J8CLLvgQECe4JtsVvPia0+fl6wBoYDfTrhoPnb39eBKxxlJswbhOjOUl+iyEbiAfDUwkgCcjYQP/t/hcRBHK1XqLY+nqeFE7D6f7h3JbuqWINsJNzRzK1br6xnE2xo3VR83Swc0wXS3j5Kn0hXcGx+SaiP2dA== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-MS-Exchange-SenderADCheck: 1 X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(5005006)(8121501046)(3231311)(944501410)(52105095)(10201501046)(3002001)(93006095)(93001095)(149027)(150027)(6041310)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123560045)(20161123564045)(20161123558120)(20161123562045)(201708071742011)(7699050); SRVR:CY4PR07MB2821; BCL:0; PCL:0; RULEID:; SRVR:CY4PR07MB2821; X-Forefront-PRVS: 07915F544A X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(6069001)(136003)(396003)(39860400002)(376002)(366004)(346002)(189003)(199004)(68736007)(486006)(446003)(97736004)(72206003)(86362001)(316002)(16586007)(58126008)(106356001)(50466002)(3846002)(53936002)(76176011)(8936002)(6116002)(81166006)(6666003)(11346002)(478600001)(6916009)(956004)(2906002)(6486002)(44832011)(476003)(81156014)(5660300001)(23726003)(25786009)(52116002)(76506005)(4326008)(186003)(16526019)(8676002)(6496006)(26005)(1076002)(14444005)(2361001)(66066001)(107886003)(105586002)(47776003)(7736002)(2351001)(305945005)(386003)(33656002)(18370500001); DIR:OUT; SFP:1101; SCL:1; SRVR:CY4PR07MB2821; 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; CY4PR07MB2821; 23:UOvfGgU3Tu4ntvUSLBjALveN9/tzpsmr8XWwKReqw6wMCN9oaJLLERDt0//RaRB6QFculeaIQN311Yg5krLG7euoYEz9a2+IfxlsgwcxaFIY39zGLqZRdMRgK7B0EvlSxRY1CdDwocTq4eo1Sz1pQ78lRGqte7ZssU/2LniO9Ign/rAMsxxiKzofo9hxvD+9a0V1QpDCoTT4UvcWJLo0gkcujVb55CdXTQwvnGdiwvM2e4UNkLVqJrFQS8RAqyMPaLaK4dmNYhqklTED2mDi3d7dhi510tHCkvrcRM2rmr+gFprYU+iJhNbo1uAJs4cJANt/TcCZELqsvVcHxNjLgfjYI3Y8Qj5KXaYuUJj+0mATWVsX3M6fXJf22hHL45044y7imsaSPHmbf96WpoycCnOFMiz/2U053sm4tA0Xw9idJ+5+AbhV72tcdhT06BcvzcGmidtVXlF00comB8g94cGEN6KltsTal9lcMOicsOF+ZJxp3HVXhyuSnAL1ricPaucOK+EeReXQ8FBMCxAq2ytvVDU7b4r+HJyltCYd9GgeyfwjskRZOvdhT/onNWcjVYrVar/CobWMfv7B0iNIp2mgK4bKlw8X2zmH0r0etOPWCi1R8enKnJzkZu/YD36gRrg5CbB5q78uNq1RleFSLv0l/sAoA6YYE9PCaBnT4KblJwFBpR0mPVhtkblCN/4d7wni7fuzuiv2NuWvRyAKJUHbIhD54Xm9ovj154B15cIKQ/Qm3VXdTWFHhAvh9WX2RCFAYlv6QLZdNPZFXDaXC/YD85vevOz3jhCbjV/fUG5deXzGKnt5Ck5SmfiKkE0vzlmgz6DFX8zsa4CHAoTit+q6VaE3fuIhW5ftZ9cbkKP0d+cWNyQ+Xmu6qLAChEdPWohtTxp2IDCV+YgIdD4+yb8v4PW7x5SQnXBv0HEoQOK58HVwmlLbkz3FZSbpjS7tJUO33HthtZo3aMEV3oPUjHFGT9JPBs2x2l7pMKGv6cKVGvjUoVGVGGmwLVZfNNMnaukuNanvt84jQyOHwU68YhTWr71SWPRje7OMr6ofkI02pn6ifJVg2cABPcbonJb/PrOoPRIY0SnOHNDLllZAfKvjFVCMC2UhYcCXBpMEgqzuAfUaxIsKYdgv96Ce8/cCj1xzGTHZolQn9Zh/nB3g+9w+FgA5nTonIR7nBiKan+GnoTrrZ3s/I7Qctm/vKFEd3oIhfP0WG25UzavBeZ+DuNdsHnBQJwHfBqKjNHvrJRfpNb9FqxKYHx1mOST2M0h4ymeZCEOb56E6L5P2bLuks+baUjtKZSLOGBakP1pXV8A= X-Microsoft-Antispam-Message-Info: /KXPtL0dvPJr9H1XZkjoaMVt56xu6oROIFYz1C12Rc5sjxRzRJgI3KnSkAGN3P/d6EwkarXSbKJjgKC+MG/CZ7qd7Hzyx7/HQvwo8btep0GrJ0coIRTeKMWXYivCgPpIH7Ae3s01MR5+mn2R136AAe8lxIZNNky63C/tKOOB2lppoCCpnmsxdq00xXqkayrHD0jNbhCW0J0F8Q6Vtu5Gv9Cbqx+fcz7yVsEE9/L+ehNUfiJlJOA9BuZtnKBU2fuUbbiMM+liHAxC7p5PY7m31Vdkkm0ssMXlFn18XlIOCSj4N4wcq0kbewkLk4siDzZuiwcfHy0+n9rzv/ERMOmV9P6WOymY8RYf1KYk5SBcrcs= X-Microsoft-Exchange-Diagnostics: 1; CY4PR07MB2821; 6:2CtjOzgiylzac2p3j1Zi+fxMinfN72/bq5SOollXtDOuS3bmBC1Tqcu1gzpei9Qm6kSUiUcANjmOffSi4UHkxbf2eaJgW65HOguyoQ2fMEt/fL0/MrQTobJz8Q2OvYxexFaPah12J+PCNNCC56WsBipvx/lP5GFn224/F5NbDzbP8Dud7z9eCIHek3fIFFOEmePiUwvYhuJ/KXoEMMhKj55x/Uz8c/qJ8D5mVqG9bhh3rhmXZMOlq9ZPB/HEzm9jXajxQMa3NKrGwGTE/gwJMJaXadNReMwOPc7cRG3zB4WmMv10K4xPfFz9jo2WBoXOp9fWDEr+Z57FovAnaXpOo6tPK3z860ABBl4gjex/LeLSKjCXDyZghHtFeYPz+6/5Ki5NYgHQWjhV6k0Swhh98Vv7zkKd+JosqdlBwFcYNvNmSmHY+EDOrG7gn1y+POdP0rxAngrDDALmtT3JoD0JjQ==; 5:nBLJuQNEfuzAfYTatQITBd0CRTPzG70E2i2sAV4OJkjghwxn0LglwUV7dATKNmGyBzBbOKlLYmf0DmuMwIVdPfaqyV8XqpH12HJphvkX5R7/F1Jbk9he5knQEdpigpU1otXNbzQSChREm+a1jawRuKR7UPKSv4L6T1CZiF2BHno=; 7:NzBQWZy18lqvIWGpUGC3lXM4zQnOP63uk0bJ3N5qSF7UVO85X0awPxkMe9JhebNLt3dXB79bxJM0qcKPyHt4sGMoq7sQzJd9VXQ00diAvrE4uKcOgo8oZWAF3wrqD5WDMEyhOW8hnuMKupSzz0T+tKHK3hzP1G3meillxbupuL317YnaX/0LP8yndUGRT18wQkSu31OcmLAj/WsksnSjBUYj2rnjRp8bBq3bEeae2tKAO0QOaGqT+ysTA3GpciMZ SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: cavium.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Sep 2018 06:34:24.6625 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: c73aa15a-931a-4a6c-67cd-08d616e77367 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 711e4ccf-2e9b-4bcf-a551-4094005b6194 X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR07MB2821 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Intiyaz Basha Removed oom task unconditional rescheduling every 250ms and created per queue oom work queue for refilling buffers. The oom task refills only if the available descriptors is fallen to 64. There will be no packets coming in after hitting this level. So NAPI will not run until oom task refills the buffers. Signed-off-by: Intiyaz Basha Acked-by: Derek Chickles Signed-off-by: Felix Manlunas --- drivers/net/ethernet/cavium/liquidio/lio_core.c | 77 +++++++++++------- drivers/net/ethernet/cavium/liquidio/lio_ethtool.c | 7 ++ drivers/net/ethernet/cavium/liquidio/octeon_droq.c | 91 ++++++++++++---------- drivers/net/ethernet/cavium/liquidio/octeon_droq.h | 2 +- drivers/net/ethernet/cavium/liquidio/octeon_main.h | 4 + .../net/ethernet/cavium/liquidio/octeon_network.h | 2 +- 6 files changed, 110 insertions(+), 73 deletions(-) diff --git a/drivers/net/ethernet/cavium/liquidio/lio_core.c b/drivers/net/ethernet/cavium/liquidio/lio_core.c index 0284204..55ed20b 100644 --- a/drivers/net/ethernet/cavium/liquidio/lio_core.c +++ b/drivers/net/ethernet/cavium/liquidio/lio_core.c @@ -425,56 +425,73 @@ void octeon_pf_changed_vf_macaddr(struct octeon_device *oct, u8 *mac) */ } +void octeon_schedule_rxq_oom_work(struct octeon_device *oct, + struct octeon_droq *droq) +{ + struct net_device *netdev = oct->props[0].netdev; + struct lio *lio = GET_LIO(netdev); + struct cavium_wq *wq = &lio->rxq_status_wq[droq->q_no]; + + queue_delayed_work(wq->wq, &wq->wk.work, + msecs_to_jiffies(LIO_OOM_POLL_INTERVAL_MS)); +} + static void octnet_poll_check_rxq_oom_status(struct work_struct *work) { struct cavium_wk *wk = (struct cavium_wk *)work; struct lio *lio = (struct lio *)wk->ctxptr; struct octeon_device *oct = lio->oct_dev; - struct octeon_droq *droq; - int q, q_no = 0; + int q_no = wk->ctxul; + struct octeon_droq *droq = oct->droq[q_no]; - if (ifstate_check(lio, LIO_IFSTATE_RUNNING)) { - for (q = 0; q < lio->linfo.num_rxpciq; q++) { - q_no = lio->linfo.rxpciq[q].s.q_no; - droq = oct->droq[q_no]; - if (!droq) - continue; - octeon_droq_check_oom(droq); - } - } - queue_delayed_work(lio->rxq_status_wq.wq, - &lio->rxq_status_wq.wk.work, - msecs_to_jiffies(LIO_OOM_POLL_INTERVAL_MS)); + if (!ifstate_check(lio, LIO_IFSTATE_RUNNING) || !droq) + return; + + if (octeon_retry_droq_refill(droq)) + octeon_schedule_rxq_oom_work(oct, droq); } int setup_rx_oom_poll_fn(struct net_device *netdev) { struct lio *lio = GET_LIO(netdev); struct octeon_device *oct = lio->oct_dev; + struct cavium_wq *wq; + int q, q_no; - lio->rxq_status_wq.wq = alloc_workqueue("rxq-oom-status", - WQ_MEM_RECLAIM, 0); - if (!lio->rxq_status_wq.wq) { - dev_err(&oct->pci_dev->dev, "unable to create cavium rxq oom status wq\n"); - return -ENOMEM; + for (q = 0; q < oct->num_oqs; q++) { + q_no = lio->linfo.rxpciq[q].s.q_no; + wq = &lio->rxq_status_wq[q_no]; + wq->wq = alloc_workqueue("rxq-oom-status", + WQ_MEM_RECLAIM, 0); + if (!wq->wq) { + dev_err(&oct->pci_dev->dev, "unable to create cavium rxq oom status wq\n"); + return -ENOMEM; + } + + INIT_DELAYED_WORK(&wq->wk.work, + octnet_poll_check_rxq_oom_status); + wq->wk.ctxptr = lio; + wq->wk.ctxul = q_no; } - INIT_DELAYED_WORK(&lio->rxq_status_wq.wk.work, - octnet_poll_check_rxq_oom_status); - lio->rxq_status_wq.wk.ctxptr = lio; - queue_delayed_work(lio->rxq_status_wq.wq, - &lio->rxq_status_wq.wk.work, - msecs_to_jiffies(LIO_OOM_POLL_INTERVAL_MS)); + return 0; } void cleanup_rx_oom_poll_fn(struct net_device *netdev) { struct lio *lio = GET_LIO(netdev); - - if (lio->rxq_status_wq.wq) { - cancel_delayed_work_sync(&lio->rxq_status_wq.wk.work); - flush_workqueue(lio->rxq_status_wq.wq); - destroy_workqueue(lio->rxq_status_wq.wq); + struct octeon_device *oct = lio->oct_dev; + struct cavium_wq *wq; + int q_no; + + for (q_no = 0; q_no < oct->num_oqs; q_no++) { + wq = &lio->rxq_status_wq[q_no]; + if (wq->wq) { + cancel_delayed_work_sync(&wq->wk.work); + flush_workqueue(wq->wq); + destroy_workqueue(wq->wq); + wq->wq = NULL; + } } } diff --git a/drivers/net/ethernet/cavium/liquidio/lio_ethtool.c b/drivers/net/ethernet/cavium/liquidio/lio_ethtool.c index e1e5808..9e53cdb 100644 --- a/drivers/net/ethernet/cavium/liquidio/lio_ethtool.c +++ b/drivers/net/ethernet/cavium/liquidio/lio_ethtool.c @@ -1115,6 +1115,8 @@ static int lio_reset_queues(struct net_device *netdev, uint32_t num_qs) * steps like updating sriov_info for the octeon device need to be done. */ if (queue_count_update) { + cleanup_rx_oom_poll_fn(netdev); + lio_delete_glists(lio); /* Delete mbox for PF which is SRIOV disabled because sriov_info @@ -1214,6 +1216,11 @@ static int lio_reset_queues(struct net_device *netdev, uint32_t num_qs) return -1; } + if (setup_rx_oom_poll_fn(netdev)) { + dev_err(&oct->pci_dev->dev, "lio_setup_rx_oom_poll_fn failed\n"); + return 1; + } + /* Send firmware the information about new number of queues * if the interface is a VF or a PF that is SRIOV enabled. */ diff --git a/drivers/net/ethernet/cavium/liquidio/octeon_droq.c b/drivers/net/ethernet/cavium/liquidio/octeon_droq.c index a71dbb7..53c25ee 100644 --- a/drivers/net/ethernet/cavium/liquidio/octeon_droq.c +++ b/drivers/net/ethernet/cavium/liquidio/octeon_droq.c @@ -333,8 +333,6 @@ int octeon_init_droq(struct octeon_device *oct, * Returns: * Success: Pointer to recv_info_t * Failure: NULL. - * Locks: - * The droq->lock is held when this routine is called. */ static inline struct octeon_recv_info *octeon_create_recv_info( struct octeon_device *octeon_dev, @@ -433,8 +431,6 @@ static inline struct octeon_recv_info *octeon_create_recv_info( * up buffers (that were not dispatched) to form a contiguous ring. * Returns: * No of descriptors refilled. - * Locks: - * This routine is called with droq->lock held. */ static u32 octeon_droq_refill(struct octeon_device *octeon_dev, struct octeon_droq *droq) @@ -449,8 +445,7 @@ static inline struct octeon_recv_info *octeon_create_recv_info( while (droq->refill_count && (desc_refilled < droq->max_count)) { /* If a valid buffer exists (happens if there is no dispatch), - * reuse - * the buffer, else allocate. + * reuse the buffer, else allocate. */ if (!droq->recv_buf_list[droq->refill_idx].buffer) { pg_info = @@ -503,28 +498,33 @@ static inline struct octeon_recv_info *octeon_create_recv_info( /** check if we can allocate packets to get out of oom. * @param droq - Droq being checked. - * @return does not return anything + * @return 1 if fails to refill minimum */ -void octeon_droq_check_oom(struct octeon_droq *droq) +int octeon_retry_droq_refill(struct octeon_droq *droq) { - int desc_refilled; struct octeon_device *oct = droq->oct_dev; + int desc_refilled, reschedule = 1; + u32 pkts_credit; + + spin_lock_bh(&droq->lock); + pkts_credit = readl(droq->pkts_credit_reg); + desc_refilled = octeon_droq_refill(oct, droq); + if (desc_refilled) { + /* Flush the droq descriptor data to memory to be sure + * that when we update the credits the data in memory + * is accurate. + */ + wmb(); + writel(desc_refilled, droq->pkts_credit_reg); + /* make sure mmio write completes */ + mmiowb(); - if (readl(droq->pkts_credit_reg) <= CN23XX_SLI_DEF_BP) { - spin_lock_bh(&droq->lock); - desc_refilled = octeon_droq_refill(oct, droq); - if (desc_refilled) { - /* Flush the droq descriptor data to memory to be sure - * that when we update the credits the data in memory - * is accurate. - */ - wmb(); - writel(desc_refilled, droq->pkts_credit_reg); - /* make sure mmio write completes */ - mmiowb(); - } - spin_unlock_bh(&droq->lock); + if (pkts_credit + desc_refilled >= CN23XX_SLI_DEF_BP) + reschedule = 0; } + spin_unlock_bh(&droq->lock); + + return reschedule; } static inline u32 @@ -603,9 +603,9 @@ static inline void octeon_droq_drop_packets(struct octeon_device *oct, struct octeon_droq *droq, u32 pkts_to_process) { + u32 pkt, total_len = 0, pkt_count, retval; struct octeon_droq_info *info; union octeon_rh *rh; - u32 pkt, total_len = 0, pkt_count; pkt_count = pkts_to_process; @@ -709,30 +709,43 @@ static inline void octeon_droq_drop_packets(struct octeon_device *oct, if (droq->refill_count >= droq->refill_threshold) { int desc_refilled = octeon_droq_refill(oct, droq); - /* Flush the droq descriptor data to memory to be sure - * that when we update the credits the data in memory - * is accurate. - */ - wmb(); - writel((desc_refilled), droq->pkts_credit_reg); - /* make sure mmio write completes */ - mmiowb(); + if (desc_refilled) { + /* Flush the droq descriptor data to memory to + * be sure that when we update the credits the + * data in memory is accurate. + */ + wmb(); + writel(desc_refilled, droq->pkts_credit_reg); + /* make sure mmio write completes */ + mmiowb(); + } } - } /* for (each packet)... */ /* Increment refill_count by the number of buffers processed. */ droq->stats.pkts_received += pkt; droq->stats.bytes_received += total_len; + retval = pkt; if ((droq->ops.drop_on_max) && (pkts_to_process - pkt)) { octeon_droq_drop_packets(oct, droq, (pkts_to_process - pkt)); droq->stats.dropped_toomany += (pkts_to_process - pkt); - return pkts_to_process; + retval = pkts_to_process; } - return pkt; + atomic_sub(retval, &droq->pkts_pending); + + if (droq->refill_count >= droq->refill_threshold && + readl(droq->pkts_credit_reg) < CN23XX_SLI_DEF_BP) { + octeon_droq_check_hw_for_pkts(droq); + + /* Make sure there are no pkts_pending */ + if (!atomic_read(&droq->pkts_pending)) + octeon_schedule_rxq_oom_work(oct, droq); + } + + return retval; } int @@ -740,7 +753,7 @@ static inline void octeon_droq_drop_packets(struct octeon_device *oct, struct octeon_droq *droq, u32 budget) { - u32 pkt_count = 0, pkts_processed = 0; + u32 pkt_count = 0; struct list_head *tmp, *tmp2; /* Grab the droq lock */ @@ -757,9 +770,7 @@ static inline void octeon_droq_drop_packets(struct octeon_device *oct, if (pkt_count > budget) pkt_count = budget; - pkts_processed = octeon_droq_fast_process_packets(oct, droq, pkt_count); - - atomic_sub(pkts_processed, &droq->pkts_pending); + octeon_droq_fast_process_packets(oct, droq, pkt_count); /* Release the spin lock */ spin_unlock(&droq->lock); @@ -813,8 +824,6 @@ static inline void octeon_droq_drop_packets(struct octeon_device *oct, octeon_droq_fast_process_packets(oct, droq, pkts_available); - atomic_sub(pkts_processed, &droq->pkts_pending); - total_pkts_processed += pkts_processed; } diff --git a/drivers/net/ethernet/cavium/liquidio/octeon_droq.h b/drivers/net/ethernet/cavium/liquidio/octeon_droq.h index f28f262..b201936 100644 --- a/drivers/net/ethernet/cavium/liquidio/octeon_droq.h +++ b/drivers/net/ethernet/cavium/liquidio/octeon_droq.h @@ -414,6 +414,6 @@ int octeon_droq_process_poll_pkts(struct octeon_device *oct, int octeon_enable_irq(struct octeon_device *oct, u32 q_no); -void octeon_droq_check_oom(struct octeon_droq *droq); +int octeon_retry_droq_refill(struct octeon_droq *droq); #endif /*__OCTEON_DROQ_H__ */ diff --git a/drivers/net/ethernet/cavium/liquidio/octeon_main.h b/drivers/net/ethernet/cavium/liquidio/octeon_main.h index 38c055f..073d064 100644 --- a/drivers/net/ethernet/cavium/liquidio/octeon_main.h +++ b/drivers/net/ethernet/cavium/liquidio/octeon_main.h @@ -70,6 +70,10 @@ void octeon_update_tx_completion_counters(void *buf, int reqtype, void octeon_report_tx_completion_to_bql(void *txq, unsigned int pkts_compl, unsigned int bytes_compl); void octeon_pf_changed_vf_macaddr(struct octeon_device *oct, u8 *mac); + +void octeon_schedule_rxq_oom_work(struct octeon_device *oct, + struct octeon_droq *droq); + /** Swap 8B blocks */ static inline void octeon_swap_8B_data(u64 *data, u32 blocks) { diff --git a/drivers/net/ethernet/cavium/liquidio/octeon_network.h b/drivers/net/ethernet/cavium/liquidio/octeon_network.h index 9117b5a..beb3eec 100644 --- a/drivers/net/ethernet/cavium/liquidio/octeon_network.h +++ b/drivers/net/ethernet/cavium/liquidio/octeon_network.h @@ -173,7 +173,7 @@ struct lio { struct cavium_wq txq_status_wq; /* work queue for rxq oom status */ - struct cavium_wq rxq_status_wq; + struct cavium_wq rxq_status_wq[MAX_POSSIBLE_OCTEON_OUTPUT_QUEUES]; /* work queue for link status */ struct cavium_wq link_status_wq; From patchwork Mon Sep 10 06:34:26 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Manlunas, Felix" X-Patchwork-Id: 967875 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="CzxRb8mY"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 427yvr4vtjz9s2P for ; Mon, 10 Sep 2018 16:35:04 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727732AbeIJL1a (ORCPT ); Mon, 10 Sep 2018 07:27:30 -0400 Received: from mail-bn3nam01on0081.outbound.protection.outlook.com ([104.47.33.81]:24292 "EHLO NAM01-BN3-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1727666AbeIJL13 (ORCPT ); Mon, 10 Sep 2018 07:27:29 -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:X-MS-Exchange-SenderADCheck; bh=HCpw9MAP04nSUIHxmGWpzMVM2DujIh5rDWQoWyFtYSM=; b=CzxRb8mYVFjgox7fz8bM9aDOh32xhRVffkRyvlyfHSgL6TxEy6VROBNaK/rymcUvCU+pN8sRWptx37+3nWuwAZ3cUmr76Zbov5p1GTdgMrPkwqdTSWCNvHAbX2Ngf9GFLfnjQMui2tiedGizQ0/9kUPoeMHowcNzYeCYdSXxcC8= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Felix.Manlunas@cavium.com; Received: from localhost (50.233.148.155) by CY4PR07MB2824.namprd07.prod.outlook.com (2603:10b6:903:25::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1122.15; Mon, 10 Sep 2018 06:34:29 +0000 Date: Sun, 9 Sep 2018 23:34:26 -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, intiyaz.basha@cavium.com Subject: [PATCH net-next 3/3] liquidio: Removed droq lock Message-ID: <20180910063426.GA4057@felix-thinkpad.cavium.com> References: <20180910063322.GA4011@felix-thinkpad.cavium.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20180910063322.GA4011@felix-thinkpad.cavium.com> User-Agent: Mutt/1.6.1 (2016-04-27) X-Originating-IP: [50.233.148.155] X-ClientProxiedBy: MWHPR19CA0088.namprd19.prod.outlook.com (2603:10b6:320:1f::26) To CY4PR07MB2824.namprd07.prod.outlook.com (2603:10b6:903:25::14) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 9343bbbf-c566-4d8b-2c87-08d616e7762d X-Microsoft-Antispam: BCL:0; PCL:0; RULEID:(7020095)(4652040)(8989137)(4534165)(4627221)(201703031133081)(201702281549075)(8990107)(5600074)(711020)(2017052603328)(7153060)(7193020); SRVR:CY4PR07MB2824; X-Microsoft-Exchange-Diagnostics: 1; CY4PR07MB2824; 3:Tu++ig3gisaz1u64XbSj22ZG19Wm6xJ8dlxf4RnkrN6nI3vmhnW/9YXTQFxZ0vhUwuV/Yv9ZbPzjVti3FG3oUUvW7riG9TFVdC3ViQzjt/LwXG4cVdW6zoJgstPsg+rHpnwEQUkXxXVzY0bUiYL9YHASruNQnx5cOaKyxuf2cvfXRtVkD1m/qtYthGgY+cmXj5/YD25esyyikzzU/qexxXs86swPxj9BxfF7iTg/9EeRwF44sjoiiM+ov2/M4Bm3; 25:r7myIzhyUaPzqvlQeL7vjRFSPscBVyJrCdTTw2SnIUVTEUd9TUGccSrmhMrNMNO3OU8FwrVTVA1uChX4vRF5e90FI57Cm9jak6LBptFjwIt/7A945BSltxYoBfJt4BG2y5Dlti3ufa0ICDR8zne8hAV97HLYdRE1xGRG579Y/fUNNQ+Y9th43VyYOY50ABM0UNYb6lv6W0SrsX0jB5XEmhHQE7ZKkKqERL7jlgzkstYpP0pCvOkli/SjKonK004kKKujzmGvQHZSWuLWQT08NMq9WncSHfV++ER/1YRNATQiE8fTVtzULGbwj1bXUiYdc3GPARJRdl8pt34OeNitLg==; 31:3ms+ojbKbuTLmSyUvk+x66QisqTvDSZBFgRS/74ACjPfBzwfHn4xAWGu4nCS7RuC0MCcmGPeb3qo3tydbXjO02H3QKQwB7LALynX5a9OY88HIC+KjbLeLaUntlbi4tq6LWnjUX6TF3PldfmdNbKHS+bo1W7dPKBM3HXNpzFyEqUSjwK5EEjoH3gVQn1+oaRDIQfIvRVUn93dkWupiCxPx5Yq1KDiOVcV/t5scskQEJc= X-MS-TrafficTypeDiagnostic: CY4PR07MB2824: X-Microsoft-Exchange-Diagnostics: 1; CY4PR07MB2824; 20:DolGrnfM6TyPTbeizVaIrUADwHOMv+6QTbcuQKjdkbwgmf7HvwKN6yQpnK3n1GkAynKxQbt2OJvx+e9KDJzq10+8uqcgmpvNuMiyjy3b5ggLDjC9l2AX6WYwAGTjS34HNnPaoVwK6sETHemX1ubFWpU06K5NLPt6b6kfgmqYrzJq01jSyJkK2MYTwT8+a9dqATqb4TE7pUvoZDCV15r+XzhSJMWoiBsSoDykKHXvcQasqp9q87A8i3pVA9EgKJnawcQLry2fMy/Lkuz4EizoP5jzWlZBq/E9eQbwBPfgssDUsMGaVhRCm51AffUCGiVjfzb3jtx8x3ipwn/NCief+6KdnXxJcttq/nGzn0wBYC7UStHmZQxKQxHz7u3ftT8/3l2tbPWis4aIVodLTotk6POP4cjQKdo8k60WKcOUCRANmfNiISqbk0c2/WHjROYlacD5LX69nNz5MJEAp1+k7TbgWqe7fgdhzpHs9vCkxuBmaL6zHZ2aQgDakcqYlVgS; 4:hQSzdO//8x7irA5vNUoXNe2glbklt8fJQbuaCh+GPkVp1twji1liwRn/1lVC5HUAsN3zm6QizZnE8SCI0qTk8j+Np+3+pnOZmfyMVZ8AQCZiE3v7+MogCL/lx75njUl08r/tEutHSc50dQOUdV+vo3A/ZTVHihRcpC4X83uzXj1MZeU6Gg2pt/eOffrBvqcf9iuTKqBs/CCSoCBs+4AJJaV75dnfAZ7ae4B8EYhtw4wCK+znwjp2PegaIXfQnVjERg2RVM6jZJh/yZ95ynBJcg== X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-MS-Exchange-SenderADCheck: 1 X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(5005006)(8121501046)(3231311)(944501410)(52105095)(93006095)(93001095)(10201501046)(3002001)(149027)(150027)(6041310)(20161123564045)(20161123560045)(20161123562045)(20161123558120)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(201708071742011)(7699050); SRVR:CY4PR07MB2824; BCL:0; PCL:0; RULEID:; SRVR:CY4PR07MB2824; X-Forefront-PRVS: 07915F544A X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(6069001)(39850400004)(346002)(376002)(136003)(366004)(396003)(189003)(199004)(16526019)(86362001)(575784001)(76176011)(58126008)(66066001)(25786009)(52116002)(6116002)(7736002)(6496006)(76506005)(72206003)(47776003)(23726003)(16586007)(386003)(2906002)(26005)(478600001)(50466002)(97736004)(316002)(3846002)(186003)(305945005)(6486002)(11346002)(476003)(53936002)(33656002)(8676002)(107886003)(1076002)(105586002)(81166006)(446003)(68736007)(5660300001)(956004)(106356001)(486006)(8936002)(6666003)(2351001)(44832011)(2361001)(6916009)(14444005)(4326008)(81156014)(18370500001); DIR:OUT; SFP:1101; SCL:1; SRVR:CY4PR07MB2824; 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; CY4PR07MB2824; 23:KYlG/iAQ46L/MWWFE0CT67hNfB1t25cmeMfY1gMMmDaAOlAperi3By8wBmKfCFFR21BC6hriReHrswfSGavk+vJxBr9NLK8IRdNV7Ep+quQeeZpO0YXB5/obrrFr/3ifJLmox+5lyXPyjajKYQ3A+ND3Puru01gSbajHIDXcgwxejQ1l944+L6T9mCxJH0Ugzhu1xzvUwCnj6+dzXCGtP6W5A7hvPQIys83FiNmac9CSDUCXl4kmakWDxNtxsxPE+CteyBZEcKbY/udrCAN6/EVWjye1YChLY+WtOsBNSNC2lZTJFGfis/pVx+AjCROFjI1qq3Mm/8S0Qxz1cQS/HuXRP+RMKrbvvFzAfgC+mqIJ6rOmfhDl/xOH/eal9TxRq9tF4TwW+QmqVvpgpFnH3CScMP+oI+O0WFfp9F53g5NYITrmwUBaK1SmNBM8JpjfeWW7N6O6yWWlBFiamrMDuxjDakuS0fIndajzMHdDGh2DxLbN40cYh9QVja1c1Yb+kQzkoksASIo0tsoYFrpPWHCxotWKYwnXBtNj3rRPcWZm9w85JpWg263lCa4exWNVc1a3JozaOw/cvd51ncK0Isk0GZnYJQoDvKQpeWEgzHWp0yahJYXkTjHp2I6fS/4DQNlVnQU3bM3ULhDo/CCDY7+ATzST2qbS64lYrJzCkA0rlTeIKP0K9Rebw7+FsoAA+WNBEKSBCe6beOQC6Vgsy/zOaw/00FxIqyjZpHZApofSVmawmBh5jwsvCjHC3Ln651JTyMqcqnpwWmlD1TFPY5fH6ob8g4r/oOcq3yNW/De5H9kzfLcejr6IvXmuXvjQBfDFD46h2B9n0OgNDj2tlDUd9jrR2x+dgssabFCsVE6jXmDNkPxpKM7uXwv5EXXbTYrOzhkV4/DEbKbSwIIcjWHsiuUnSTFH6osPyLrwQA6qYu7pamJ8lEmK3pET1HtmbT82Y7BGCZTJVw0qZnsccl9zQqrEjSh0BVNVqkyNihiy3sqN9tPzN+Xm9xqRogWCdx/5TISHdPV7aS4LMBRdfe/DlqTfnZWqLHuFsLItX3wfFyiV5+zXIpkzR8zSEUS5LkFdfHK6wFGUv56DcsDFGTuXomZh7nh40wEDjSyOPQ59xJQ7VW4MWaO9GE5tY2rvbKN6yhp/NXUnh+lTBxqtwpyaoIxzv3PnuGWOT6mI/Q62IJECBa+qqlaqWZrFBv/JdAeNGPOVtRWHjmH42jdaqUYXdKHP7cJWlvf9qBbprNKIChU7QVCB0UODsvRCSHJgGcztdxWpQoI57eTYB1GsK+tOVk4fsjErhBLhwLuQno7pDlAHgyIXUEilJjk5cILe X-Microsoft-Antispam-Message-Info: urCDVBOOCMtusihL7a79dHn+ml01EgNuc0s7MGNu9b5olerYma4umQWIsN1iRDciYp2fWtfykk3ZGmLs45vVAbuJPjMgTUL7/kmng/ET8SOz0fx8qDQNTlFX2o5vOkX5d3Amp+Rffly/iNb5C5gfJSIziAGkItF6/Lia7ex2bxms8LwWHKLY5K8uX0wXVHWpUQPIp+JHXrV2DZd4kmWd9Vgf1JKzWSbtLDO1evdt64Gz/yjYYF9RMPdvYcsqQyp+jgpvikucVVHgrNqO7LQFWTuQkB+apaEZdSJZevWf4jWVtm50rkQHo2ZMzyv6YZx+fBadFsbNLj7kDlHhF69eE/GDYXV89uc/abmIvuSebXM= X-Microsoft-Exchange-Diagnostics: 1; CY4PR07MB2824; 6:xhVD2S5bj0T0TLcRBWSSIxUdffd0XUhbYBLkDnuOmGC/IlK5pxkwutsok7RJyX4A/XrlUG6NJVu8SCMtj0EhuELm+GfiS0fG7UU+fEWDBbaUIO7RShOWGHObaZp/+PBMUerqDZknYVoQFdDjigt3LA4HBUsaldG+0CwG9tgvemhT0e5QpR5Vlk/o3SuZUZXhBorYpMwg8DrVMiz5KbAk+od+58ULMyUK6aP6510iEyVXw8sh86a9oc9u0VKuQ9I6aPHHtnlc40UFQjCJNmH18syj5v+N4wBb6OIAocaC6RpttTbb8LyFRKibhe9Txa1H86+g9M2kiu82faLoUwA368/zUe1uK/6piJku8FY8v8oSRMuSng/10EGySd+0ByUk97g/UC1H59vvjv25VPr3tW/6ORIdjeykkPBu+Yx0PqaRiUdjHJw1sp2n99Fbqy7VzozNXZ5UmZ2gtVFzRf1qIg==; 5:RR0InlHHopODAhgFkvnTulcyW9oPWCKsbRhBouhiYox69rjw9NDIUL1/0OqVyfZK4hUDMo2IaEqYzb5yRlLdpz1iEM5+5ItN22ariYNPzTvqTze0MDlU2aVnxKYSbz6SmYu40m4ZwHCDdsdJt/4mvXtlRf4m/8aq3mwOeKGVkYw=; 7:jHtLXRc8AGWntCfHQX7/IKCBOSbqIKzlPHTALO/isy27s1zqq/7k+JEObxHJLb2SbiK8nqp5UkMP2WxMLo8E9gMYeGhc5d9QrGAWc7YaOsaSOkLjbAKMu3OSlY0qMpEGyRAl32yN4gF7fHx7Jpw9bfU6hgRS0SomnhqqvYD+L2OAzOQO5DczP9kK9CWFP2ZcBPTl2+ebYQTRoJCd0rMRL5mRNAlR+imr3xpNMsVH+FVf50HnAJCOfQh8xihw5Q1u SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: cavium.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Sep 2018 06:34:29.4461 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 9343bbbf-c566-4d8b-2c87-08d616e7762d X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 711e4ccf-2e9b-4bcf-a551-4094005b6194 X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR07MB2824 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Intiyaz Basha With the changes in patch 1 and 2, droq lock is not required. So removing droq lock. Signed-off-by: Intiyaz Basha Acked-by: Derek Chickles Signed-off-by: Felix Manlunas --- .../net/ethernet/cavium/liquidio/octeon_device.c | 4 --- drivers/net/ethernet/cavium/liquidio/octeon_droq.c | 33 ++-------------------- drivers/net/ethernet/cavium/liquidio/octeon_droq.h | 3 -- 3 files changed, 3 insertions(+), 37 deletions(-) diff --git a/drivers/net/ethernet/cavium/liquidio/octeon_device.c b/drivers/net/ethernet/cavium/liquidio/octeon_device.c index d0ed6c4..0f0275c 100644 --- a/drivers/net/ethernet/cavium/liquidio/octeon_device.c +++ b/drivers/net/ethernet/cavium/liquidio/octeon_device.c @@ -1440,12 +1440,8 @@ void lio_enable_irq(struct octeon_droq *droq, struct octeon_instr_queue *iq) /* the whole thing needs to be atomic, ideally */ if (droq) { pkts_pend = (u32)atomic_read(&droq->pkts_pending); - spin_lock_bh(&droq->lock); writel(droq->pkt_count - pkts_pend, droq->pkts_sent_reg); droq->pkt_count = pkts_pend; - /* this write needs to be flushed before we release the lock */ - mmiowb(); - spin_unlock_bh(&droq->lock); oct = droq->oct_dev; } if (iq) { diff --git a/drivers/net/ethernet/cavium/liquidio/octeon_droq.c b/drivers/net/ethernet/cavium/liquidio/octeon_droq.c index 53c25ee..ad621aa 100644 --- a/drivers/net/ethernet/cavium/liquidio/octeon_droq.c +++ b/drivers/net/ethernet/cavium/liquidio/octeon_droq.c @@ -301,8 +301,6 @@ int octeon_init_droq(struct octeon_device *oct, dev_dbg(&oct->pci_dev->dev, "DROQ INIT: max_empty_descs: %d\n", droq->max_empty_descs); - spin_lock_init(&droq->lock); - INIT_LIST_HEAD(&droq->dispatch_list); /* For 56xx Pass1, this function won't be called, so no checks. */ @@ -506,7 +504,6 @@ int octeon_retry_droq_refill(struct octeon_droq *droq) int desc_refilled, reschedule = 1; u32 pkts_credit; - spin_lock_bh(&droq->lock); pkts_credit = readl(droq->pkts_credit_reg); desc_refilled = octeon_droq_refill(oct, droq); if (desc_refilled) { @@ -522,7 +519,6 @@ int octeon_retry_droq_refill(struct octeon_droq *droq) if (pkts_credit + desc_refilled >= CN23XX_SLI_DEF_BP) reschedule = 0; } - spin_unlock_bh(&droq->lock); return reschedule; } @@ -756,25 +752,17 @@ static inline void octeon_droq_drop_packets(struct octeon_device *oct, u32 pkt_count = 0; struct list_head *tmp, *tmp2; - /* Grab the droq lock */ - spin_lock(&droq->lock); - octeon_droq_check_hw_for_pkts(droq); pkt_count = atomic_read(&droq->pkts_pending); - if (!pkt_count) { - spin_unlock(&droq->lock); + if (!pkt_count) return 0; - } if (pkt_count > budget) pkt_count = budget; octeon_droq_fast_process_packets(oct, droq, pkt_count); - /* Release the spin lock */ - spin_unlock(&droq->lock); - list_for_each_safe(tmp, tmp2, &droq->dispatch_list) { struct __dispatch *rdisp = (struct __dispatch *)tmp; @@ -809,8 +797,6 @@ static inline void octeon_droq_drop_packets(struct octeon_device *oct, if (budget > droq->max_count) budget = droq->max_count; - spin_lock(&droq->lock); - while (total_pkts_processed < budget) { octeon_droq_check_hw_for_pkts(droq); @@ -827,8 +813,6 @@ static inline void octeon_droq_drop_packets(struct octeon_device *oct, total_pkts_processed += pkts_processed; } - spin_unlock(&droq->lock); - list_for_each_safe(tmp, tmp2, &droq->dispatch_list) { struct __dispatch *rdisp = (struct __dispatch *)tmp; @@ -888,9 +872,8 @@ static inline void octeon_droq_drop_packets(struct octeon_device *oct, int octeon_register_droq_ops(struct octeon_device *oct, u32 q_no, struct octeon_droq_ops *ops) { - struct octeon_droq *droq; - unsigned long flags; struct octeon_config *oct_cfg = NULL; + struct octeon_droq *droq; oct_cfg = octeon_get_conf(oct); @@ -910,21 +893,15 @@ int octeon_register_droq_ops(struct octeon_device *oct, u32 q_no, } droq = oct->droq[q_no]; - - spin_lock_irqsave(&droq->lock, flags); - memcpy(&droq->ops, ops, sizeof(struct octeon_droq_ops)); - spin_unlock_irqrestore(&droq->lock, flags); - return 0; } int octeon_unregister_droq_ops(struct octeon_device *oct, u32 q_no) { - unsigned long flags; - struct octeon_droq *droq; struct octeon_config *oct_cfg = NULL; + struct octeon_droq *droq; oct_cfg = octeon_get_conf(oct); @@ -945,14 +922,10 @@ int octeon_unregister_droq_ops(struct octeon_device *oct, u32 q_no) return 0; } - spin_lock_irqsave(&droq->lock, flags); - droq->ops.fptr = NULL; droq->ops.farg = NULL; droq->ops.drop_on_max = 0; - spin_unlock_irqrestore(&droq->lock, flags); - return 0; } diff --git a/drivers/net/ethernet/cavium/liquidio/octeon_droq.h b/drivers/net/ethernet/cavium/liquidio/octeon_droq.h index b201936..c9b19e6 100644 --- a/drivers/net/ethernet/cavium/liquidio/octeon_droq.h +++ b/drivers/net/ethernet/cavium/liquidio/octeon_droq.h @@ -245,9 +245,6 @@ struct octeon_droq_ops { * Octeon DROQ. */ struct octeon_droq { - /** A spinlock to protect access to this ring. */ - spinlock_t lock; - u32 q_no; u32 pkt_count;