From patchwork Tue Aug 28 18:32:55 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Manlunas, Felix" X-Patchwork-Id: 963064 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="dOkVMr3+"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 420HSJ0f2rz9rvt for ; Wed, 29 Aug 2018 04:33:03 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727146AbeH1WZz (ORCPT ); Tue, 28 Aug 2018 18:25:55 -0400 Received: from mail-cys01nam02on0055.outbound.protection.outlook.com ([104.47.37.55]:57045 "EHLO NAM02-CY1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726807AbeH1WZz (ORCPT ); Tue, 28 Aug 2018 18:25:55 -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=275rkw4+UvwAUSJEiuv1y7DoB5bkGXaX/2aAWlS9GU0=; b=dOkVMr3+H0bOwJG6w3mkNk/4/wzH5kjKHJMdQQuxJeGPylCfTjqW4UJdgA+dOSde1L+wNiw5Q3nA2RjqCET3fnAgOKq5ijxC0jCLYBOSxosHW4LNFQ2eY7ql4gHWbMsqgwY/3RCEBEqLYRvusNvz3cVkFDGHP+TM712VwJFxRws= 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.1080.14; Tue, 28 Aug 2018 18:32:58 +0000 Date: Tue, 28 Aug 2018 11:32:55 -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, ricardo.farrington@cavium.com Subject: [PATCH net-next] liquidio: fix race condition in instruction completion processing Message-ID: <20180828183255.GA7536@felix-thinkpad.cavium.com> MIME-Version: 1.0 Content-Disposition: inline User-Agent: Mutt/1.6.1 (2016-04-27) X-Originating-IP: [50.233.148.155] X-ClientProxiedBy: DM5PR2001CA0001.namprd20.prod.outlook.com (2603:10b6:4:16::11) To CY4PR07MB2821.namprd07.prod.outlook.com (2603:10b6:903:25::11) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: f52f2808-a030-486b-4dcf-08d60d14adc7 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:zru/KAgpplNarYU8kBNPtQ7OfztXSGTj8FEiMxghcg9cpTVkNAnaXKKBvoAKrEUmTNaTKjDWof5+r1yj8FPOdnwaoalk45qA90hLpRtLS1OTV8vtTJ8DwMkV7qqinOWtxNGuJ8zqSolMPNHVwGjHOLSmnCoyXqc3+6MDfhYzG8biYCoR8iMnuRkuySzuWNqlUlBXSiSPCJ1U381dVT0eZR1v0fImarGTMTw3NM4VxhnhvKNpK3fDielHKrV4Y7Kj; 25:W7nGzuD02sL0fxCuj+5s/Q1TADvR1+ORJelLfcrhiNRDG7WmIkVLNEWkMck0+VVEWpB7LxeGgKwF8V+b3iAEQ3qpsNBG09nFSI25ZBvnvgWol/atsLmcUO2/nbmrfy5SDUOudXBAAjYaP0CEmdJUmMzlfUTC+C7fmxSZWaamyY4FD8xGetu4j0x2bVtMMJdMqiwmM4ofJgK6PFi4wMp0tmL661dnfcM3/L9oa9Dn58Zci1Ccyj/JtbNsXl7c3Illa02lmqfwO7csvvbMBXy+RtbEFEueSYtZ91/6e7zdRAIdWqrutjVAObiCb6Q/NDEFsqKSO3NRvdFj2x7gF1j2RA==; 31:0GYsGHec3od46K/gTVciwDyOTR0EwhXy7ztuWdhP+oSteqJXCzP2CbhEAUWz368SL4T33Pd/Ad223d9YDZevi+5OQS7tjmn5jrGbY6eBzvHXKt4EvM5Ib9dtCPpu+L12oihNa+yMHN+jf6NhtdSpZDoBuGcA2xq3SpZv9EQBE5FmX6fB4gF4ShiiqDIa0k366KwRFL1UmSUyRmlAAHSyeu9kZCHRVP3O7xUmFzzHhWw= X-MS-TrafficTypeDiagnostic: CY4PR07MB2821: X-Microsoft-Exchange-Diagnostics: 1; CY4PR07MB2821; 20:wCUGXQhyfxKQK2Zgj4Kbg3nYxSO7A9iyghu6h5z9KMAE08/PLw0zvkfmT1PcKQqcSAbnPcGHziNTtv/TD3sBAAFuxfSyyZ9BEDwk0ZBq7eJ3UHn38XklpIMLeZo70GtT6lSP/Ypq/9cEm5C/dIGY2r/nmXRB1Hjx9S8G+dwKG4RHZ5gxS8SIOYokrYvG5MX7K1v8JCISrpgITD7qtBx2hhymvGnxA7tiZ9Ik0X/qrSbzFRmeZkHErxcO09fOWbSV39ZnlKrblfRj4CdzQ9vYvEtgNhKtXytaVN3DkXnAl6o34586fFnHNL6NSur3x5vxS/4rvhbHBSOuq3c/90YLTTB6bSnZAUe4eF4eGG3OK9pUO74q9tD/LAt1oi/5o83f/PLfWpbJ9WRGN7eGrNmE7jo7bIDij8sgRqCNkz4+NURD4aq4mgHy4Ywr+u8N/AdaxRlnsZQRAoV8unjl+7KyCLodFtA067z/D2A+t7Udjy1mHuavRxB/1+zntOfrA789; 4:eObOyku2A+3CcXI23Rhezkdm/DC+l4pQBFPQZqmDjYzT+MYyQaG6b+8kLYAxyqgzD+iS9/mao9IAPcBpQGGN3S9ABlc8/43uCdzSTNH22rL6Apb+hHDEYESa7lkLsD0D0j8MDx5spgFL2KvQN7TRTX4KufYRhDLSVmQzt5HW8wyxba+DJ/l8rd7/s5pz9IWn6Bn0OK3fScyVsz3gV7VGxqU01E/twEqP3q+YAcUesQGm25cW/AIurgzBOPfY96lgRjQ9HfZxSNw6hyRwfnw6Ig== 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)(8121501046)(5005006)(3231311)(944501410)(52105095)(93006095)(93001095)(3002001)(10201501046)(149027)(150027)(6041310)(20161123560045)(20161123562045)(20161123558120)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123564045)(201708071742011)(7699016); SRVR:CY4PR07MB2821; BCL:0; PCL:0; RULEID:; SRVR:CY4PR07MB2821; X-Forefront-PRVS: 077884B8B5 X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(6069001)(376002)(396003)(346002)(136003)(366004)(39860400002)(189003)(199004)(26005)(53936002)(478600001)(23726003)(186003)(6116002)(4326008)(1076002)(76506005)(25786009)(3846002)(6666003)(386003)(72206003)(107886003)(5660300001)(14444005)(16526019)(6486002)(6916009)(8936002)(86362001)(486006)(44832011)(476003)(956004)(33656002)(8676002)(58126008)(316002)(305945005)(68736007)(7736002)(97736004)(575784001)(50466002)(52116002)(105586002)(16586007)(2351001)(106356001)(6496006)(2906002)(66066001)(47776003)(2361001)(81166006)(81156014)(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:TrbJEBl3oY3Vr7tznzLsXDa3l4NUpdkqMbbjIPfMwth+Z5u0p7koYXQ5U0ewbajVN9MOjpUUfr2T3Xc57RP3t+UvIXr/vVGbJc0/C63+0Q0eJJLcN8loEM9SYttQpkhkmLVE/X+7w4T3iuhEOI/NpPaRWwqMXtQhibzfy/HJcQ3is/zVh4AcINKLIH23nxGNgxTZI/s95JuSzfxoqFptP0Gaqo9GB24bDvvjZ2quqHvUutICOZWGJcksiovduuw/lur3cSMuyinw+gD6Ft3t+wNVTIf6bTYaRAUidU5snEkfT2zkf5IJkR7OFxTEccZWfuwthKGhrB46gJjuMfnvxPkb78d6phvfxfrxbO0F4WwPpSCmlwEcE3k7PvXC4wSnM9rt8osd967XzUc9PzB2NwwPvwQh/yBz0D5WQc3JJALxaKewTShMbYrD4/CU/h7GYJDnNNan7gEX2BqW9iZOg6QcHuckiPWhYus9z4vfrk9lu+7zK09oCpNxK09ql1zpOkwCJLCjkztUF4JIwDYhgvIb/4r8ZiKbfde9K1sfzYcgOGATXPB7iVMt0ZhKznQU3ZYOrT0lGdf32cdpDD9Jl5jw28YcGRIrN4Y9gJMt51Kje2zXLLlZ8XZc3aeWDcRv1itDwnnMPQyXjwgq4iEbKzkgESPahz8OJUOKuGbTMkVoHhoVUjStsuh2U8IA+6bbh8w14vkcnInlqmaaAjgFljBgN1ckf40nZtCYAARK2j2fQMdU6OOcJNyzqmAN3BaFEr44a8I03wfXnl+mIpLRqfvDAcrIwiuyGBnKyEB83b7Z3NVuqnB9raWNBzcvMgK04wl4D70iLzWVHIQU4HRlWLdRKMfeSpZQuD2ijdHGff2t25Wdvzx0de9c/IALAakqsQXCCl3z971zCPbEjMCeCAZZWmwheHSiLPaZ+KUtMylMjmN2yGzHNCLMjTWQk7X7hRDka5ruhcB2g1RDCANq7CsWlQyJen240gD6BWleAS13msK37UBr1XdQHCDI7/3AcwgjxJ51Svds3btVc6yJd1Ft//biutesMKRaWAmOjihRMFC0ELjN34P7N1hBqMR/acDrXqNwPOvzYfmgt+L6W5Ew1OylER1pZE5IpgE72dn8dch/siuI11hsvEWzDiBM8wIs5IIpHY8neeQaF/DWPv7DILc4Jf2op9WJ+epu2wXaGZjEsXovAtadxC8DgpbxgtpAtKHfndllYNxzd8YOs9hF3vuwFrLeHX8jPvEyReXV758qn+gDvkYXCPIt2jidiuvCfMQ2DdUSE2ws3MluoQ== X-Microsoft-Antispam-Message-Info: PGSCrbRHVohM0dSgVoRSc9E1v5tfxInENBVfJiIBQLvWX8AakrQyjCoxu2JC53dKelIm6bVUC4Xu9sxH9N3jJLJ7XrFIJve8hBWYePUboel3DCkBzcJoS4K0cG0ZFVXvyrOTL4biFmWvmY7ha55mrggomK7KHOgp4OW7PjvG1l3jV0tUwBqSUWKgSUatoOj8AIOaqa35y8q1IWWRrTL41eyAc35OvzKI0tEnhcmEjPpBp+plEZgldA1BhfXUp2f9B8evd4gjmOQKutIFIlz6LdJF4Zl1RezNwx8ZQRt8AzvQegpA0kiNMyzp9Xt7x0VknBEf+J/gTlaH3ycRRzyUfyoYfCx2gjPeNWwVA3Vd/y0= X-Microsoft-Exchange-Diagnostics: 1; CY4PR07MB2821; 6:Xe/GB6Tr333SF7tNwDM7GVwpHE+CRddqC9iNHcCIcR1CjWUDIlYmA1TkAGYJlD4HoKQtKNBKLWqD8/4ao/8G1CDyXc4q7gGm6Ay/LHqS5E+ncALPRpZkH2JoXDJVtI0Npa0p94/lO5yzLKx3qh5tQdv6DOsOGgKefF+llVVc4+oeuglNaEIC0/TQG4q710bbPVtVRrJx1Jlk7w0sG5XKrzD8DBpGhdhhhamEBcYDkTSyWm7eeEFBVP2g4fO8m5gtDvQbEu1+AGvr5Iv4536yM72IctfD1Uc8sT/eE3COSIS8RgdysLIhfYzfThPJpVS6krGmSS/4yEHuT2/nTgpsNVVzN9WddSHBFoXog+PnNziIwHrGiYqmFkSyndhP+uK7oY0eMPZpNG6m+qFSK7bd2JIUqjswbVTsT7lZ0nSgRlbDpBm3iK8cw1Cac8XQhzLVOxc4ubUqmtKk8xWlmmkw9w==; 5:6zURwhhdwKnxCaG911xUIzW6iFxyk94q+Vywdnkk0eZPtz+1jyumSWKQESFvvjYUUY4gM/YaJ8R1IeZXHICnhiSF/3SQWJ7OzcN7tIxRTlTiKpGqojJqVWLSvGUe+CjWu1iwk4C71UUKATYEumW4r3h/JkLGjpRBvTOkJYg47ck=; 7:OHe4sNt6lgJFy828y+J9gAgPsewC0wZACj0Fvx0LysEBAbANuksMdvFiRIyvBerU/MhsT6MAT174e3MJ7fXoBHb+me8nh1vdfRmFFSBwVNqRvExN/lCSGPqlROdKhVNMo2/iQg8TdPIKGZdKdK83QIR0MV16AQnKVzETRUJiaGvwSUaB7G/fu3Bgu9NqiTd5KXZ+QVzt/XQs27c6FhSfPuWE8bpcKP5V5w/0Vs9bKiwq7NzswTrkJMAIzWDv02of SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: cavium.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Aug 2018 18:32:58.3889 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: f52f2808-a030-486b-4dcf-08d60d14adc7 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: Rick Farrington In lio_enable_irq, the pkt_in_done count register was being cleared to zero. However, there could be some completed instructions which were not yet processed due to budget and limit constraints. So, only write this register with the number of actual completions that were processed. Signed-off-by: Rick Farrington Signed-off-by: Felix Manlunas --- drivers/net/ethernet/cavium/liquidio/octeon_device.c | 5 +++-- drivers/net/ethernet/cavium/liquidio/octeon_iq.h | 2 ++ drivers/net/ethernet/cavium/liquidio/request_manager.c | 2 ++ 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/drivers/net/ethernet/cavium/liquidio/octeon_device.c b/drivers/net/ethernet/cavium/liquidio/octeon_device.c index f878a55..d0ed6c4 100644 --- a/drivers/net/ethernet/cavium/liquidio/octeon_device.c +++ b/drivers/net/ethernet/cavium/liquidio/octeon_device.c @@ -1450,8 +1450,9 @@ void lio_enable_irq(struct octeon_droq *droq, struct octeon_instr_queue *iq) } if (iq) { spin_lock_bh(&iq->lock); - writel(iq->pkt_in_done, iq->inst_cnt_reg); - iq->pkt_in_done = 0; + writel(iq->pkts_processed, iq->inst_cnt_reg); + iq->pkt_in_done -= iq->pkts_processed; + iq->pkts_processed = 0; /* this write needs to be flushed before we release the lock */ mmiowb(); spin_unlock_bh(&iq->lock); diff --git a/drivers/net/ethernet/cavium/liquidio/octeon_iq.h b/drivers/net/ethernet/cavium/liquidio/octeon_iq.h index 2327062..aecd0d3 100644 --- a/drivers/net/ethernet/cavium/liquidio/octeon_iq.h +++ b/drivers/net/ethernet/cavium/liquidio/octeon_iq.h @@ -94,6 +94,8 @@ struct octeon_instr_queue { u32 pkt_in_done; + u32 pkts_processed; + /** A spinlock to protect access to the input ring.*/ spinlock_t iq_flush_running_lock; diff --git a/drivers/net/ethernet/cavium/liquidio/request_manager.c b/drivers/net/ethernet/cavium/liquidio/request_manager.c index 8f746e1..f943aa7 100644 --- a/drivers/net/ethernet/cavium/liquidio/request_manager.c +++ b/drivers/net/ethernet/cavium/liquidio/request_manager.c @@ -123,6 +123,7 @@ int octeon_init_instr_queue(struct octeon_device *oct, iq->do_auto_flush = 1; iq->db_timeout = (u32)conf->db_timeout; atomic_set(&iq->instr_pending, 0); + iq->pkts_processed = 0; /* Initialize the spinlock for this instruction queue */ spin_lock_init(&iq->lock); @@ -495,6 +496,7 @@ static inline void __copy_cmd_into_iq(struct octeon_instr_queue *iq, lio_process_iq_request_list(oct, iq, 0); if (inst_processed) { + iq->pkts_processed += inst_processed; atomic_sub(inst_processed, &iq->instr_pending); iq->stats.instr_processed += inst_processed; }