From patchwork Fri Jul 21 16:32:28 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Madhani, Himanshu" X-Patchwork-Id: 9857293 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id B76F160385 for ; Fri, 21 Jul 2017 16:32:53 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id A08732872B for ; Fri, 21 Jul 2017 16:32:53 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 9537528767; Fri, 21 Jul 2017 16:32:53 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 156492872B for ; Fri, 21 Jul 2017 16:32:52 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754524AbdGUQcu (ORCPT ); Fri, 21 Jul 2017 12:32:50 -0400 Received: from mail-bl2nam02on0044.outbound.protection.outlook.com ([104.47.38.44]:61520 "EHLO NAM02-BL2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1754487AbdGUQcq (ORCPT ); Fri, 21 Jul 2017 12:32:46 -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=2cJkj19jU+wnDv74oAjCuM9PSoVPaxalKjYI2f9c82Y=; b=nvGqlLZr1Y91NIsPcLZlsevKoUsq1WTH/q8RtAS/I+yRoVcXOMFEHJB1dPA7JLCSPz5NaTyV0RlExQ786YA7bifdQGDE6q7VgXbYIeywwieAhUVxR6DBK1IjNuDxi0RJaVP16WqiAADzKp2/JT3e+9tXxcWQSjQQQlp+NNo0ZF0= Received: from DM5PR07CA0037.namprd07.prod.outlook.com (10.168.109.23) by SN2PR07MB2512.namprd07.prod.outlook.com (10.167.14.152) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1282.10; Fri, 21 Jul 2017 16:32:43 +0000 Received: from BY2FFO11OLC016.protection.gbl (2a01:111:f400:7c0c::189) by DM5PR07CA0037.outlook.office365.com (2603:10b6:3:16::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1282.10 via Frontend Transport; Fri, 21 Jul 2017 16:32:43 +0000 Authentication-Results: spf=none (sender IP is 50.232.66.26) smtp.mailfrom=cavium.com; vger.kernel.org; dkim=none (message not signed) header.d=none; vger.kernel.org; dmarc=none action=none header.from=cavium.com; Received-SPF: None (protection.outlook.com: cavium.com does not designate permitted sender hosts) Received: from CAEXCH02.caveonetworks.com (50.232.66.26) by BY2FFO11OLC016.mail.protection.outlook.com (10.1.15.61) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P384) id 15.1.1240.9 via Frontend Transport; Fri, 21 Jul 2017 16:32:43 +0000 Received: from dut1171.mv.qlogic.com (172.29.51.171) by CAEXCH02.caveonetworks.com (10.17.4.29) with Microsoft SMTP Server id 14.2.347.0; Fri, 21 Jul 2017 09:32:29 -0700 Received: from dut1171.mv.qlogic.com (localhost [127.0.0.1]) by dut1171.mv.qlogic.com (8.14.7/8.14.7) with ESMTP id v6LGWTYx032398; Fri, 21 Jul 2017 09:32:29 -0700 Received: (from root@localhost) by dut1171.mv.qlogic.com (8.14.7/8.14.7/Submit) id v6LGWTII032397; Fri, 21 Jul 2017 09:32:29 -0700 From: Himanshu Madhani To: , CC: , Subject: [PATCH v2 6/6] qla2xxx: Refactor usage of Active command arrays Date: Fri, 21 Jul 2017 09:32:28 -0700 Message-ID: <20170721163228.32339-7-himanshu.madhani@cavium.com> X-Mailer: git-send-email 2.12.0 In-Reply-To: <20170721163228.32339-1-himanshu.madhani@cavium.com> References: <20170721163228.32339-1-himanshu.madhani@cavium.com> MIME-Version: 1.0 X-EOPAttributedMessage: 0 X-Forefront-Antispam-Report: CIP:50.232.66.26; IPV:NLI; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10009020)(6009001)(39840400002)(39450400003)(39860400002)(39400400002)(39410400002)(39850400002)(2980300002)(428002)(189002)(199003)(575784001)(86362001)(50226002)(8676002)(72206003)(1076002)(189998001)(5660300001)(81156014)(81166006)(47776003)(105586002)(626005)(106466001)(87636003)(478600001)(36756003)(42186005)(69596002)(80596001)(2906002)(2950100002)(54906002)(4326008)(50466002)(48376002)(8936002)(305945005)(356003)(5003940100001)(50986999)(33646002)(101416001)(38730400002)(76176999); DIR:OUT; SFP:1101; SCL:1; SRVR:SN2PR07MB2512; H:CAEXCH02.caveonetworks.com; FPR:; SPF:None; PTR:50-232-66-26-static.hfc.comcastbusiness.net; MX:1; A:1; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BY2FFO11OLC016; 1:JacxOMczWt8MTMh5zDBilm6ujSgUMKyvf0GuW/JHot6ZkAmHycfy7xNcccRP/2IZzIlA2E88Gy/9ZqWoCTV74Yw8Fz2CHJncU6bMcI/I3zrMix0tkAUe+vzzOMnof34E6Py4YCvdhBp0Juy24ZCy4yi9wUeIMA2BWeUKn0PXfTJmmXFA6VCQYy13w7OMijdjp3vkTKHBsrx7IuXplXADG9/ahdNtFXT8uvd9AgHb1TFL9iGx25FmMQ/IwUtRF07OLQTZyblrkrPbzN2329QR23Swtkhs4EfjXQUmd/DCDpktu3Qpj7KeFVAtZsqbr7E/iNDfVm/A6RM8/TyFzb6TaqyTGCD47+47UI1a3YbqiQg9Y2vUxWAQ9zrIb++EAliEIUaQTY2+/887p7meTHVr+zYSH2tYWwMw1dLiEtDLtjvgszdNGbRPpxGMPQyTUExkWoKRDg8YXE2NQeuwdcbquICY8p1bKEt4a9kJkgiDMo5It/zokTuhbxFp650YcfXKhDRs1cgOvxjp+4WgWCQRT9ladplCZOXypRs2ukORpSlfcWJ2BkxA5Sgx+ecNhOY4QvqYPHEx4KNgG5xIcN3OSDOZpx2Ulb+56s6A0uvFRsmvmy+a1zxUCjdGK+0elL1z+AUedEnrvGOyhny+ntU6XlBsH2frS+DzKbNfE47tFFyDu/XwN78qnFF6U7/a4ZgrAcW4g/9jNlzo5cdGFFfrlWzNvOpCNNk+CmEVQp2yYn0CDWydFOmLvR9NXMPlOWiDDBktWcJ2WrxEGoETbpk1ndgDcIMeSD5ceuobtWqwUqkt/zMWZeoLkDdqzkK+HWG+nwQojuplbJnJVbgC1/2CyA== X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 696d7c70-c2cc-4686-bed0-08d4d0561cf2 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(300000500095)(300135000095)(300000501095)(300135300095)(22001)(300000502095)(300135100095)(2017030254075)(300000503095)(300135400095)(2017052603031)(201703131423075)(201703031133081)(300000504095)(300135200095)(300000505095)(300135600095)(300000506095)(300135500095); SRVR:SN2PR07MB2512; X-Microsoft-Exchange-Diagnostics: 1; SN2PR07MB2512; 3:GW4+eiSEQXSgeccQAgaOBSF5/cmqu+VGwPsz0SUgRctoJTxhqYqSpTb0u/DX8C7YyUn9WjGOsb8dhdnjc87L/9kVXMwT6PLBj+XlyGNtG7uu5glr1ighs5DronYqkBlqkaBo58rAaEx4Dg3EG/eW5cYNZYJnkU8n+48uJ5b+u3qwNXahdSDmoD8dwpND5cK/L4ZZNqlGKnhYEGAUvxUYIwBMSgk3/0uUzrLtyMEy/u0AgqO2HWD2OK6lw7kdlfYpInjuUj0NHJMduQ00x/Mu8J+sVC4gzRlst8IbIImWX5XnFea2j7CpPtvXvk7tXTbBKO0n5wHi5Vh/y6RyVaxZf+2Zb3VWEEewmfcz9D6WbhJktlYcft6+sI+UFevNH2nmIaOYD91u9eryk11F1dZT3wH4VBTJOlMwJTgq8k0OW2PWG8pTYBIJB7VGltJOqxpgHFe6BoOOUqiG+OfhBUZ6dGMqFzdmrL8SKEdRV1Jq0ZB+Bf1xIVkKAjS++CeBK9CiYGwNQo29Y3qjTiCcE/LygAkTMATXt5OpwWUfL+0ijWVpRXlzgR9j93PZpXBXyGs4KOk90GMAxCMNn5gLXNn2KM1M4QGU7rdiVyuGC+fpvzh6KCw3+LU4lBoe6ugS4ot1weK79I9agB9+oNNDhi6eHg53eOOlGwUnpt9TgmroPZVrZkvGZZRHwMyk4fsuG4lVlMbS38VNoRx8QLSxLVKhMNEmPG18tFZoHemTlq7ZFWmGOyXkGIfOwQVrNl9bxt7reEUqVxp5eI+MLl3fsYv6Vvy76oWVLOTOdeYMn4oOwWEZxWJx4uCEHnfge+2DdnQ8cjl0xYdlxmJ1G30PltjLSM0cpAOiMM83mjl3kZe6HoOTvzFiB+EmigqZJMhRmk4SH5Z0ZQpv06hRzT+/CVBD6g== X-MS-TrafficTypeDiagnostic: SN2PR07MB2512: X-Microsoft-Exchange-Diagnostics: 1; SN2PR07MB2512; 25:HEByk+wjctkG3rQLq/hOU7XUiNBgihipit7Whq2v+BI4TMvWlRH2tnr+3eL0Frjr7Hqh++zWEDtpknlw+jeODQT7zh+C7KFQo5eN5iN1/WZc1d1QQsumTNDRY7IOMpHHuMabXf8eOREcvraLu45AcXzdwVhl3EBXwDec+hHEiKN4uRm1s4LBdEtglQrs/lLL4C+Q69aM00q0YJpMnqGPX/IXfay8Xfl+6MRXS3zWjJOAkNq5Z9OQX27uZa1zHmC2CriC9Fcqtd9UTEn2a16D3mFzJiTJUWT2hD4FkyBZCTnZ7C5MMwd4mHHTyiCrEOyZQ9wKKS3eOAWlRosenw24fjw0kemQiLFqoTaJnxs1LiFPnupCTBPgSu3oKhGFJwVpi8OYmLKCnq0SStuMtHh5xz2Rg+QeCO0it1ZkzxJoYES2M/bwTztP1LKH7WVNbWhuoK5ZRbhX8XfcHe5DC34DQpS1/NpnIoGp64JyONMCqaNM7HS2dSE1afMH1IbVofrhBizoAyrzKd7VHpCHQPkrKEBC/6iWbKPxNQJS+ztH8jc1kE6JO0p2DZhgAtzU/gOXNj+CRJIV5Oe4MGXXR/eePi2MDiLBfUYDpO9r1fK3LZa+xX4PDTgMjrTQ10YHlBw1gqJhgZ8Q9+WGyrKlSW9csuheeVIalhfj4s8HCSbOMcG4WANQDZSZIHymorSDNp9O1zMncN09Dnz59oESOKvYt5oMxhJ5ap+qzNAOGBL3f/P+NMsQXi4bgYH8JIV3YG440onURSz8SicjF1A7kpUf1qAkocZUs/BAs0F/MIORsbzMNV3kYBnUToFlCMSpXWbgUI7Yo06mmScTu6RHtSPvs9LlsqWLIRhxca4uz4/VuUG20EGmitWZo32J9EQHv0O/prZl5y8hoJLA3eUth3AppvJ3K5sZNmXlGEOWZ5GnM rg= X-Microsoft-Exchange-Diagnostics: 1; SN2PR07MB2512; 31:DhNV+qqlBncVJrynzdVgpM4tn0CuqF325qkWyIJZObfdF+YuM7X5R9NQOcETmu2dRjlbW3Wx4bSUo5o4zNAWbhUnjbHecEwkqnVCX/wCI897R/9pvt+Dwz6PmLALksjrswaa/HYgnpWmYPi+/Y3mV4jFj3iaM2fDneGw4pvAV1ZkQ1yZuClON8wVwAj75fLwfxfYQGJkGAuYPKJcc/YRWapX8eNTzljpxnhdaipFDrP4+Vmilljbx0Kqf9WpGlOyFEFuACrjUDM3Nb6uahfYfVMMJy/3SDeGwO5PJF0a139ERWz/2PW6DKpY4sk3VBEeW4lvCYeH4/ZNug6GvE4KDefF1fyhQAO5tLWw6W0a3fUcvHuFLaStWQvSEjEQkvpLzeFcWyQ2F+pVWZWi+HFA02fHWidu/cdtaTEhRlYgfQqd6rFWp9nZ/AsYL7IMOIKqgCGpIjXmEDgihl1Fad2Q5Z1REEOdl9jt1q5brXboE32s9CLfHsSwZ9PipqOF7Y77dCwlu4qSKFC7C7s8/eqDr7UFxdjMGP4Uc2/IwhlVDR4I73ctcwT9VWKJnzStL05/NvaZ8MUjDmhvK0wO2C8IwFrID7BmIWHFZnicZ6b/4/2McqYRj0GhQ0FfGHP2HFkU9u4MwizFvKxP3SkYW6KOJzh3TZfTdpc+KxJ8LTaBK0OQM+Qr0T0BB77uUcKEhgZGlt+VVEMAwjQx1mkG3X1u5w== X-Microsoft-Exchange-Diagnostics: 1; SN2PR07MB2512; 20:PJwmsslT1AZ2k0jhAr/pl2sre5vhj0U1sv+Ry51W/tzh4mUMDkPlN1c6WU8JyfFQ3saoYaH//LxNT3uVXGCVMPix7a9RoBLHvmN9+JuOYzP+OaJZNpr7l4qZJODkguEyP5BsO76HvpESKgI8mWHbQNlRty2jEXfnFpPmD3NtzouqSPSxXl0WGJa27X4MZOTVkOLqv0SXrV3uea7q3H8ZL2ttqAOL5734zASdbVUp2lwEc4sBNY89QzMqktVExc3nDYo3iyO5dvdwZPOXyZsRhuJ+1/yb4IYwI9p0mYqJk4zvKbVe7y4aqCl3lf9cg0mQ0fsSBT1u63WnEgmsjBm0PwpXgsLqGskVaVtqZ6RTXAXZIT3VOqej3I+igLDTVBoVrncgCJ5UYdwkoHwSYxaSOthJBH0kCmkyq8GWKsEYXYSekg2gnPioVpmbhzT/4bzu05bc2ETGpMoxdKP3URqJ8rTTk60WR1cstX7bOHIS0IPGyTtLXefNM/3qn8LWRLNJ 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)(8121501046)(13016025)(5005006)(13018025)(100000703101)(100105400095)(93006095)(93001095)(10201501046)(3002001)(6041248)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123564025)(20161123555025)(20161123562025)(20161123560025)(20161123558100)(6072148)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:SN2PR07MB2512; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:SN2PR07MB2512; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; SN2PR07MB2512; 4:msArA2goSqezFhvT3WfXNWa60FAVZH9Q2G+VqdZbKT?= =?us-ascii?Q?Ttvm1IK6/zh4r+erdyaSWsCvrGL9EJE+j+ADFZDG6Cz78q3nYZ3dRky2nNb/?= =?us-ascii?Q?tHlgXdhm6HQbNddSeSswZA6NuHHWD5g/k59ekAkqUuqxzXcSoM1TUfV/FIEV?= =?us-ascii?Q?DqBHN4Jnzv2o8syvzm2XY0lzGcg5smQ/AWe0JsSZWySQQR0xO73GnxZ79eiJ?= =?us-ascii?Q?p3ETR4nZ18FfUvOlm8XvAeQXF29+33f2wGX4Uu46uYR4Mlsj1jiUNK1giBUR?= =?us-ascii?Q?vDjtPWW2Gd7wG6eeq6Nwac9ExiC046r4i/wmuuT9aP9nxo5uQQ6IM511tXbX?= =?us-ascii?Q?zvJ316OaZItNDcgAZjTfjKCWjUudOSbADiruaoT8Kkd3k6Btx/hH+txPB/JZ?= =?us-ascii?Q?N5iAMuA8wDzMG9hzO9hbWNax6Oted6Yhq3Lh/ONxKDh/TST8VtzbXGmdqbCJ?= =?us-ascii?Q?af8aYSviw8n9ZEHJvMJL8SFgAO16M0dO756WdNpPbCaCF85uBdoabF+VJder?= =?us-ascii?Q?DPXnrTcpHPDI613xyurZRPEfAA5fpGYmH+XM2bE41ZaXD6w8D0AtLCoeLZBt?= =?us-ascii?Q?MSfxBSevsm0WBJ732ElEWP7E1F4oqE/rNo5wL1W6PwympAyhkS6sK2TwOftn?= =?us-ascii?Q?2aN9L9h6CZJ5TZRPmGEihj5vNTIH0R9Ed/NXp8D3xDRH1cCg8mmmxsYs1MsA?= =?us-ascii?Q?DW/vMbMJNadqBnoZYpzWG1Qb5D0greobcJl+MIFxG1G1TeOQqbgKdAhRiK6v?= =?us-ascii?Q?OvXxNVRLdr2R2mDJhg7mmwnZxW3N1tPMIVp/8l9pwP9TnWL8u1/z6Z+1t1Og?= =?us-ascii?Q?FLCECEhXQndBqO/Ccnk7V8ZpoioCrho1esbKqLIOdhbDcJ1UPobZfVioeDGz?= =?us-ascii?Q?eUXPyDrd42g7Zt/bQPE+6VQvF1Ev0mZ1mWV/V6uUnpGPROA+ucfwzonp+D/X?= =?us-ascii?Q?cfAQECyq5JC3UUL2tTLwv9xAk4xlSOAdKtY5V9GsaIpwz+hZqo9uFfeUjlHD?= =?us-ascii?Q?0C8Nj4fpcjOm5LkIzmzzxFzvJz6TP2WGl1ihTRsqXFcb3sIN2xiNQQPtFiC2?= =?us-ascii?Q?WdTKNiktU1x9YYXIeOCsbRVWBoYBwO84Z/d/rLBwinSUGOwn6ICUWnB5WEMy?= =?us-ascii?Q?84E9XspTIrsDXcoPKs2X80JVhIL0JCBpgd7RrUDnuetqFpqQNprnGfZXzo0r?= =?us-ascii?Q?NS5q8dXIAPuFU=3D?= X-Forefront-PRVS: 0375972289 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; SN2PR07MB2512; 23:RwF8iMv9ya8kGEDZuxPkETYM1APPHoQRQ8NY61J0l?= =?us-ascii?Q?mnwJ2x6K2fqgstKWFdyAjvtOsJosQOsfvpWV2bB9sNIHLNfs9nlIR2Yx7abW?= =?us-ascii?Q?b4AyMJRTEa2K2LWnwxcY/+WfbgWfoaNJMiGueMle7emqLgtZAPA1xm5YGDi5?= =?us-ascii?Q?w1Q1GzS2ZErsnAaaolh7DyPj7Zj4E0GeNU8YlZU1xmfMo4SBFDxV1hEXzVih?= =?us-ascii?Q?g3FnRwzhY+tnjmWqaoB3t5c8oJGpSR/RHhVhaSfbQ+rcboKBW2MIRL3ofm3o?= =?us-ascii?Q?xBZOYezBWuewd8PkoY1g4O1iRCnFi/Nz5vdvsJui/ia9MmBWVErICsy/KUF5?= =?us-ascii?Q?Q54n0/DgN+dzNTKziJB+STHaKjK+dgKXQkB1QykoSONiomdHwLeEL91Rw5U2?= =?us-ascii?Q?yOdDrvJ89rT3Tul31r8mULQEO0rkosIgFfI7PLRJTx8aGAfim3/fwc1jxYy0?= =?us-ascii?Q?4qe1bP75NIVAr7Bf0mmMJaQsbWqEl0JHj4YF/w69QlNLkbNHKqisN0qMI3p4?= =?us-ascii?Q?LQltdPwQuV+pdPmlBDPXRuJ6vzFd2Q2SpgrokpOL9pC95w00lU/O7qBiqOC7?= =?us-ascii?Q?AZkfkwCA/ZyhuoA91msKrSdwnEHFf4Xy3Nth33FCiRanLzFmpiZZXQPeL4iV?= =?us-ascii?Q?I0U5QSRWFtubevpFEDmrp/FnDsY8T2UCnjxsFOtDGmdAwblXzxZ0E+KYY3GX?= =?us-ascii?Q?rGwnheJxLOAbFwYhXfQI9fV45T+9gH4w7SDsXE/znYKZ3cfxLpsxCimI7qlN?= =?us-ascii?Q?lCXe4BbqsnzxjN4nxBZNH9rKi/y9cSjKj/UAzbHhvMMakicEQerWs+1h95eY?= =?us-ascii?Q?ehrWsmqm+LNryr05QEcJ5NOpG5ShtBbdCtCt556ODbycBnkNCKKnVT8Y8o4c?= =?us-ascii?Q?1geSxT1cXIwFyb8GO0iJaqaQhVOv1xXl4O695+raGcN72DD4lgbjtYs/Bnxv?= =?us-ascii?Q?bBOIz0iJeya1iV/0lnS0Eg2/cxyZjfOBcRsAThQlCGtAtzrOpp1ZufQHLaoo?= =?us-ascii?Q?h7BGh1lC4g0p8B0o7cssD01Ngs+oohh+iPcya6J7wcrHe6rdG+Xki4li+Bhy?= =?us-ascii?Q?tVJpiVWQ8p8dg0EZMVlJLHbaAr/iLYi9XPZC2A9onFmDYBg7Wslb/pQTX1pF?= =?us-ascii?Q?49GnXOaqt5URFk5VStoMURbPDVJsAtS?= X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; SN2PR07MB2512; 6:ea2Izr3LMe1UaIkTIBPZ+Lmn/HjUhYsMhVNrTuhhpF?= =?us-ascii?Q?LUJjt3KqCr4Fw+MtyXWnNm5BdOSQEsvgG9OMqw0AXhj4nJsPwA6GWqkzkCi1?= =?us-ascii?Q?nxbF7RsdeLtLpqWseZeMiftSSwYgV1iR+PoCzI5jMZFLCF3PN6/jCl6pLLkK?= =?us-ascii?Q?FOLHquZtOOL7ew70Qxz7bJqGqL5bI6pcYt1tPXiTyslG4tiPGi+H8NWmBxNb?= =?us-ascii?Q?SarS6KSBEudZCqQdk7Z3NtueQRzG6O0W/eC76DyK0uuvxmTOYVKlQObPrRSS?= =?us-ascii?Q?NfSxDFqUXyfz38p/78g8r0Qzd/5QjQaa+MvtnclcJLuGVtU7ZpdTAGiSt9v0?= =?us-ascii?Q?fKjFcqUc0X77+zKYWIwa9nOP11uVIByIqPGaGd3ZGiWeEKy4/h0xVFB0dnQ1?= =?us-ascii?Q?o02+qS6nNAyNYv4eWlPr8xozstz69NdaXhRlPhtmwxWVOke/+GsFF9bDLfw3?= =?us-ascii?Q?s0QLrdB+AAvDQkGNAjl9obmRcd1/kni4tw2Vc/18VAqKZ47h7W3egPhzI6x4?= =?us-ascii?Q?uOsC+yxTuZq7nYdJNavOARrJ7sF4LdkBplCTMK49GPF23yHiX7Hn1z3OzFd0?= =?us-ascii?Q?OSUUJN/rpCLfDxivNbDDw21zxOUrzJjIIXv5ER8VuV+XakOGA+bDrPHuTOsD?= =?us-ascii?Q?b35lair5UOJ+kb4wd22lUw1tYQwjqf0LmwfbCs7sNqOiIPZ9WatPBXAHu2dO?= =?us-ascii?Q?ebCO1jVWUIpzBlfJCwSevRQ4nCGxOp46QayArxUaFQ4TOK6TXn0Xj7HDoPgm?= =?us-ascii?Q?fjK2SuHVZ8o4LftXyNPY+A6K52KMAm7Dfd13Kk4WZ91bZ2AfHlyrWRMDf4qU?= =?us-ascii?Q?oDilDkxGe3hWZgvxJDqaOorV8wP/U9rcJg3I9nyF65k4D3lnEZHvNz+Uh5+2?= =?us-ascii?Q?HLePapIcXo2Q/ZnUJ+esi/LK09mdAvuoorKQu/h5so/deyR8hLiX/P0QCpqU?= =?us-ascii?Q?S4rN6evNQT4N6DJCWyukukJ0KLCh780aRSAxtDowCTTEhXJcxL37LCCOnlh4?= =?us-ascii?Q?M=3D?= X-Microsoft-Exchange-Diagnostics: 1; SN2PR07MB2512; 5:BjyxCx+xI5ST3jxNts21lP4+MPBM2jgxZ9HkZC5Nn6TezfKdWOKsOQbMUKw8UaTEreTKf9jglMS5vsN3l/gxyQSMgERpUElY+9iyFheq/FMZMT2sOMBBffbnAbYHoJZtY+oKS5MELKA64YE9HN9qSeUWv06Y3VoNh0tNvwVxoIW17Bk7YGCvOzWIY8ZsaqdiPKGRBSXlW9MaWfvx4l2itLf40vM0CxPkBm9ixK1IQW8E4XSdTr/m7VQHrywTDixznUbHpqGWKkwdN+FuxvUREtfldqtJ7aWjk3s8gEYvaJmef6SiqiY9YkDktIJu2DH6UcgD2EosSoaetp1xk50pOEs8PPVsF/1+wnib+wpIUjTtnGWjtsGXCZtQGMweEZZG8GIcIxb80TsJvFVadE1Z/y8AU9E/fR/5FkrOELnn6oGf91xrbQ1aFRG96mUcEvOJgHogcZHf16zmLyD+Xcwufl/9QcCY6VKVH87A/dPFLdzV/ZqhhHliPbXnpffKET+d; 24:DHXMb9dNVziIAti1gV+fV6hGT9kM0Tp/r6uh7YNU9EsDmr9yoA2EuH6hpc6Ha70XU7VvvC5F0msCnjyfxElKuiUfGsxmtHGjb744gUCMwDc= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; SN2PR07MB2512; 7:ZaXrG1dh649JtpkdeENs0NfmPGJ7PbWFo/l+RbjKabE/hkLTP4lWZRz7wExpXkIGARIDIX6w+obv9URNx6iUEFLZAnGmtZqAB/YF8j6e5RjX6QFDLP1ixP9ilR/YHCOu8/btdanKt/RKH73343l5NWPlM2AXc5klitiPt58h3q36V0UA2P4IcRK37ErNphpTIQuJC6qXsZIPFOP+cSaNIcbZr7pBFMKD87e/NmFkTA4QRoShQa+5CW5Sd3l4yiq2DRidXD9L3PT3La0dXpvPYRS++2z8yFpm5RLfufPh/3foVyHwAgrfgeCOgwKFY4CKue1LFFjUCq4Az9Mx/9TERaiOmiNfB9+G5Gzbz0FdfqMNHyce+PGULE32lWFsmukE4987tT1HrTpqEGCFWcjJikwI9suXVlaiuUQAy6D9ARNGMDZ0cT451U5Fm3Lng9P+7CEPlBbrM0/OXh8GMpv1gQNxVmVzTlYreS5ugQkIFsDB65J8J94NNny0OJB5Q6oJX+20xRPrrcJ5QcFLFZ5T3tPrmDH4bFA5j+uk7o6IUXXEkmYGNdpTps/R4WjZyOJJlPJLfu/i6+R0+MdmJSI15RFnWxXiVmOmMd75R1LklH3IniRPM9rxtrV8Sg0OjF/rM6drAdv81uVga7iWo9pujtLwOelp4cy1gNnHY4e4pLPvx1heI1Vg8z1aETqVBw2mQ1QZJjfOTiZKD4L3K6VxImy7T7B/9i2UAAFGgVj/TBbhFKV3AxHy3GpFhCop5JhsYmuBhpAlQDeThK7rGnQJuGmnpaHxFeynnYnKcW5pHAU= X-OriginatorOrg: cavium.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 21 Jul 2017 16:32:43.5334 (UTC) X-MS-Exchange-CrossTenant-Id: 711e4ccf-2e9b-4bcf-a551-4094005b6194 X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=711e4ccf-2e9b-4bcf-a551-4094005b6194; Ip=[50.232.66.26]; Helo=[CAEXCH02.caveonetworks.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN2PR07MB2512 Sender: linux-scsi-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-scsi@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Quinn Tran Cc: Bart Van Assche Signed-off-by: Quinn Tran Signed-off-by: Himanshu Madhani Reviewed-by: Bart Van Assche Reviewed-by: Johannes Thumshirn --- drivers/scsi/qla2xxx/qla_bsg.c | 51 ++++++++++++++++++++------------------- drivers/scsi/qla2xxx/qla_def.h | 31 +++++++++++++++--------- drivers/scsi/qla2xxx/qla_init.c | 7 +++--- drivers/scsi/qla2xxx/qla_inline.h | 23 +++++++++++------- drivers/scsi/qla2xxx/qla_iocb.c | 16 ++++++------ drivers/scsi/qla2xxx/qla_isr.c | 31 +++++++++++++++--------- drivers/scsi/qla2xxx/qla_mbx.c | 6 +++-- drivers/scsi/qla2xxx/qla_mr.c | 19 ++++++++------- drivers/scsi/qla2xxx/qla_nvme.c | 2 +- drivers/scsi/qla2xxx/qla_nx.c | 6 +++-- drivers/scsi/qla2xxx/qla_os.c | 29 +++++++++++++--------- drivers/scsi/qla2xxx/qla_target.c | 18 ++++++++------ drivers/scsi/qla2xxx/qla_target.h | 5 ---- 13 files changed, 139 insertions(+), 105 deletions(-) diff --git a/drivers/scsi/qla2xxx/qla_bsg.c b/drivers/scsi/qla2xxx/qla_bsg.c index 2ea0ef93f5cb..356cea400d19 100644 --- a/drivers/scsi/qla2xxx/qla_bsg.c +++ b/drivers/scsi/qla2xxx/qla_bsg.c @@ -1920,7 +1920,7 @@ qla24xx_process_bidir_cmd(struct bsg_job *bsg_job) return rval; done_free_srb: - mempool_free(sp, ha->srb_mempool); + mempool_free(SRB_TO_U(sp), ha->srb_mempool); done_unmap_sg: dma_unmap_sg(&ha->pdev->dev, bsg_job->reply_payload.sg_list, @@ -2043,7 +2043,7 @@ qlafx00_mgmt_cmd(struct bsg_job *bsg_job) if (rval != QLA_SUCCESS) { ql_log(ql_log_warn, vha, 0x70cd, "qla2x00_start_sp failed=%d.\n", rval); - mempool_free(sp, ha->srb_mempool); + mempool_free(SRB_TO_U(sp), ha->srb_mempool); rval = -EIO; goto done_free_fcport; } @@ -2533,6 +2533,7 @@ qla24xx_bsg_timeout(struct bsg_job *bsg_job) int cnt, que; unsigned long flags; struct req_que *req; + struct unify_cmd *u; /* find the bsg job from the active list of commands */ spin_lock_irqsave(&ha->hardware_lock, flags); @@ -2542,30 +2543,30 @@ qla24xx_bsg_timeout(struct bsg_job *bsg_job) continue; for (cnt = 1; cnt < req->num_outstanding_cmds; cnt++) { - sp = req->outstanding_cmds[cnt]; - if (sp) { - if (((sp->type == SRB_CT_CMD) || - (sp->type == SRB_ELS_CMD_HST) || - (sp->type == SRB_FXIOCB_BCMD)) - && (sp->u.bsg_job == bsg_job)) { - req->outstanding_cmds[cnt] = NULL; - spin_unlock_irqrestore(&ha->hardware_lock, flags); - if (ha->isp_ops->abort_command(sp)) { - ql_log(ql_log_warn, vha, 0x7089, - "mbx abort_command " - "failed.\n"); - scsi_req(bsg_job->req)->result = - bsg_reply->result = -EIO; - } else { - ql_dbg(ql_dbg_user, vha, 0x708a, - "mbx abort_command " - "success.\n"); - scsi_req(bsg_job->req)->result = - bsg_reply->result = 0; - } - spin_lock_irqsave(&ha->hardware_lock, flags); - goto done; + u = req->outstanding_cmds[cnt]; + if (!u || u->cmd_type != TYPE_SRB) + continue; + + sp = &u->srb; + if (((sp->type == SRB_CT_CMD) || + (sp->type == SRB_ELS_CMD_HST) || + (sp->type == SRB_FXIOCB_BCMD)) + && (sp->u.bsg_job == bsg_job)) { + req->outstanding_cmds[cnt] = NULL; + spin_unlock_irqrestore(&ha->hardware_lock, flags); + if (ha->isp_ops->abort_command(sp)) { + ql_log(ql_log_warn, vha, 0x7089, + "mbx abort_command failed.\n"); + scsi_req(bsg_job->req)->result = + bsg_reply->result = -EIO; + } else { + ql_dbg(ql_dbg_user, vha, 0x708a, + "mbx abort_command success.\n"); + scsi_req(bsg_job->req)->result = + bsg_reply->result = 0; } + spin_lock_irqsave(&ha->hardware_lock, flags); + goto done; } } } diff --git a/drivers/scsi/qla2xxx/qla_def.h b/drivers/scsi/qla2xxx/qla_def.h index b3e3982a9db0..8f36d8d588c6 100644 --- a/drivers/scsi/qla2xxx/qla_def.h +++ b/drivers/scsi/qla2xxx/qla_def.h @@ -291,6 +291,7 @@ struct name_list_extended { struct req_que; struct qla_tgt_sess; +struct unify_cmd; /* * SCSI Request Block @@ -457,18 +458,7 @@ struct srb_iocb { #define SRB_NVME_LS 20 #define SRB_PRLI_CMD 21 -enum { - TYPE_SRB, - TYPE_TGT_CMD, -}; - typedef struct srb { - /* - * Do not move cmd_type field, it needs to - * line up with qla_tgt_cmd->cmd_type - */ - uint8_t cmd_type; - uint8_t pad[3]; atomic_t ref_count; wait_queue_head_t nvme_ls_waitq; struct fc_port *fcport; @@ -3284,7 +3274,7 @@ struct req_que { uint16_t qos; uint16_t vp_idx; struct rsp_que *rsp; - srb_t **outstanding_cmds; + struct unify_cmd **outstanding_cmds; uint32_t current_outstanding_cmd; uint16_t num_outstanding_cmds; int max_q_depth; @@ -4380,6 +4370,23 @@ enum nexus_wait_type { (IS_QLA27XX(_ha) || IS_QLA83XX(_ha))) #include "qla_target.h" + +typedef enum { + TYPE_SRB, + TYPE_TGT_CMD, +} cmd_type_t; + +struct unify_cmd { + cmd_type_t cmd_type; + union { + struct srb srb; + struct qla_tgt_cmd tcmd; + }; +}; + +#define SRB_TO_U(_p) container_of(_p, struct unify_cmd, srb) +#define TCMD_TO_U(_p) container_of(_p, struct unify_cmd, tcmd) + #include "qla_gbl.h" #include "qla_dbg.h" #include "qla_inline.h" diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c index 072ad1aa5505..8c6dd13982be 100644 --- a/drivers/scsi/qla2xxx/qla_init.c +++ b/drivers/scsi/qla2xxx/qla_init.c @@ -1404,10 +1404,11 @@ qla24xx_async_abort_command(srb_t *sp) struct scsi_qla_host *vha = fcport->vha; struct qla_hw_data *ha = vha->hw; struct req_que *req = vha->req; + struct unify_cmd *u = SRB_TO_U(sp); spin_lock_irqsave(&ha->hardware_lock, flags); for (handle = 1; handle < req->num_outstanding_cmds; handle++) { - if (req->outstanding_cmds[handle] == sp) + if (req->outstanding_cmds[handle] == u) break; } spin_unlock_irqrestore(&ha->hardware_lock, flags); @@ -2799,7 +2800,7 @@ qla2x00_alloc_outstanding_cmds(struct qla_hw_data *ha, struct req_que *req) req->num_outstanding_cmds = ha->cur_fw_iocb_count; } - req->outstanding_cmds = kzalloc(sizeof(srb_t *) * + req->outstanding_cmds = kzalloc(sizeof(struct unify_cmd *) * req->num_outstanding_cmds, GFP_KERNEL); if (!req->outstanding_cmds) { @@ -2808,7 +2809,7 @@ qla2x00_alloc_outstanding_cmds(struct qla_hw_data *ha, struct req_que *req) * initialization. */ req->num_outstanding_cmds = MIN_OUTSTANDING_COMMANDS; - req->outstanding_cmds = kzalloc(sizeof(srb_t *) * + req->outstanding_cmds = kzalloc(sizeof(struct unify_cmd *) * req->num_outstanding_cmds, GFP_KERNEL); if (!req->outstanding_cmds) { diff --git a/drivers/scsi/qla2xxx/qla_inline.h b/drivers/scsi/qla2xxx/qla_inline.h index 9a2c86eacf44..a2c29334a5bd 100644 --- a/drivers/scsi/qla2xxx/qla_inline.h +++ b/drivers/scsi/qla2xxx/qla_inline.h @@ -206,6 +206,7 @@ qla2x00_reset_active(scsi_qla_host_t *vha) static inline srb_t * qla2xxx_get_qpair_sp(struct qla_qpair *qpair, fc_port_t *fcport, gfp_t flag) { + struct unify_cmd *u; srb_t *sp = NULL; uint8_t bail; @@ -213,11 +214,13 @@ qla2xxx_get_qpair_sp(struct qla_qpair *qpair, fc_port_t *fcport, gfp_t flag) if (unlikely(bail)) return NULL; - sp = mempool_alloc(qpair->srb_mempool, flag); - if (!sp) + u = mempool_alloc(qpair->srb_mempool, flag); + if (!u) goto done; - memset(sp, 0, sizeof(*sp)); + memset(u, 0, sizeof(*u)); + u->cmd_type = TYPE_SRB; + sp = &u->srb; sp->fcport = fcport; sp->iocbs = 1; sp->vha = qpair->vha; @@ -230,7 +233,7 @@ qla2xxx_get_qpair_sp(struct qla_qpair *qpair, fc_port_t *fcport, gfp_t flag) static inline void qla2xxx_rel_qpair_sp(struct qla_qpair *qpair, srb_t *sp) { - mempool_free(sp, qpair->srb_mempool); + mempool_free(SRB_TO_U(sp), qpair->srb_mempool); QLA_QPAIR_MARK_NOT_BUSY(qpair); } @@ -238,19 +241,21 @@ static inline srb_t * qla2x00_get_sp(scsi_qla_host_t *vha, fc_port_t *fcport, gfp_t flag) { srb_t *sp = NULL; + struct unify_cmd *u; uint8_t bail; QLA_VHA_MARK_BUSY(vha, bail); if (unlikely(bail)) return NULL; - sp = mempool_alloc(vha->hw->srb_mempool, flag); - if (!sp) + u = mempool_alloc(vha->hw->srb_mempool, flag); + if (!u) goto done; - memset(sp, 0, sizeof(*sp)); + memset(u, 0, sizeof(*u)); + u->cmd_type = TYPE_SRB; + sp = &u->srb; sp->fcport = fcport; - sp->cmd_type = TYPE_SRB; sp->iocbs = 1; sp->vha = vha; done: @@ -263,7 +268,7 @@ static inline void qla2x00_rel_sp(srb_t *sp) { QLA_VHA_MARK_NOT_BUSY(sp->vha); - mempool_free(sp, sp->vha->hw->srb_mempool); + mempool_free(SRB_TO_U(sp), sp->vha->hw->srb_mempool); } static inline void diff --git a/drivers/scsi/qla2xxx/qla_iocb.c b/drivers/scsi/qla2xxx/qla_iocb.c index a36c485fae50..838b5e338701 100644 --- a/drivers/scsi/qla2xxx/qla_iocb.c +++ b/drivers/scsi/qla2xxx/qla_iocb.c @@ -384,7 +384,7 @@ qla2x00_start_scsi(srb_t *sp) /* Build command packet */ req->current_outstanding_cmd = handle; - req->outstanding_cmds[handle] = sp; + req->outstanding_cmds[handle] = SRB_TO_U(sp); sp->handle = handle; cmd->host_scribble = (unsigned char *)(unsigned long)handle; req->cnt -= req_cnt; @@ -1474,7 +1474,7 @@ qla24xx_start_scsi(srb_t *sp) /* Build command packet. */ req->current_outstanding_cmd = handle; - req->outstanding_cmds[handle] = sp; + req->outstanding_cmds[handle] = SRB_TO_U(sp); sp->handle = handle; cmd->host_scribble = (unsigned char *)(unsigned long)handle; req->cnt -= req_cnt; @@ -1677,7 +1677,7 @@ qla24xx_dif_start_scsi(srb_t *sp) /* Build header part of command packet (excluding the OPCODE). */ req->current_outstanding_cmd = handle; - req->outstanding_cmds[handle] = sp; + req->outstanding_cmds[handle] = SRB_TO_U(sp); sp->handle = handle; cmd->host_scribble = (unsigned char *)(unsigned long)handle; req->cnt -= req_cnt; @@ -1827,7 +1827,7 @@ qla2xxx_start_scsi_mq(srb_t *sp) /* Build command packet. */ req->current_outstanding_cmd = handle; - req->outstanding_cmds[handle] = sp; + req->outstanding_cmds[handle] = SRB_TO_U(sp); sp->handle = handle; cmd->host_scribble = (unsigned char *)(unsigned long)handle; req->cnt -= req_cnt; @@ -2044,7 +2044,7 @@ qla2xxx_dif_start_scsi_mq(srb_t *sp) /* Build header part of command packet (excluding the OPCODE). */ req->current_outstanding_cmd = handle; - req->outstanding_cmds[handle] = sp; + req->outstanding_cmds[handle] = SRB_TO_U(sp); sp->handle = handle; cmd->host_scribble = (unsigned char *)(unsigned long)handle; req->cnt -= req_cnt; @@ -2148,7 +2148,7 @@ __qla2x00_alloc_iocbs(struct qla_qpair *qpair, srb_t *sp) /* Prep command array. */ req->current_outstanding_cmd = handle; - req->outstanding_cmds[handle] = sp; + req->outstanding_cmds[handle] = SRB_TO_U(sp); sp->handle = handle; /* Adjust entry-counts as needed. */ @@ -3033,7 +3033,7 @@ qla82xx_start_scsi(srb_t *sp) } /* Build command packet. */ req->current_outstanding_cmd = handle; - req->outstanding_cmds[handle] = sp; + req->outstanding_cmds[handle] = SRB_TO_U(sp); sp->handle = handle; cmd->host_scribble = (unsigned char *)(unsigned long)handle; req->cnt -= req_cnt; @@ -3459,7 +3459,7 @@ qla2x00_start_bidir(srb_t *sp, struct scsi_qla_host *vha, uint32_t tot_dsds) cmd_pkt->entry_status = (uint8_t) rsp->id; /* Build command packet. */ req->current_outstanding_cmd = handle; - req->outstanding_cmds[handle] = sp; + req->outstanding_cmds[handle] = SRB_TO_U(sp); sp->handle = handle; req->cnt -= req_cnt; diff --git a/drivers/scsi/qla2xxx/qla_isr.c b/drivers/scsi/qla2xxx/qla_isr.c index c14fab35fc36..fba8bfdd1627 100644 --- a/drivers/scsi/qla2xxx/qla_isr.c +++ b/drivers/scsi/qla2xxx/qla_isr.c @@ -1251,6 +1251,7 @@ qla2x00_process_completed_request(struct scsi_qla_host *vha, { srb_t *sp; struct qla_hw_data *ha = vha->hw; + struct unify_cmd *u; /* Validate handle. */ if (index >= req->num_outstanding_cmds) { @@ -1264,8 +1265,9 @@ qla2x00_process_completed_request(struct scsi_qla_host *vha, return; } - sp = req->outstanding_cmds[index]; - if (sp) { + u = req->outstanding_cmds[index]; + if (u) { + sp = &u->srb; /* Free outstanding command slot. */ req->outstanding_cmds[index] = NULL; @@ -1289,6 +1291,7 @@ qla2x00_get_sp_from_handle(scsi_qla_host_t *vha, const char *func, sts_entry_t *pkt = iocb; srb_t *sp = NULL; uint16_t index; + struct unify_cmd *u; index = LSW(pkt->handle); if (index >= req->num_outstanding_cmds) { @@ -1301,12 +1304,14 @@ qla2x00_get_sp_from_handle(scsi_qla_host_t *vha, const char *func, set_bit(ISP_ABORT_NEEDED, &vha->dpc_flags); goto done; } - sp = req->outstanding_cmds[index]; - if (!sp) { + u = req->outstanding_cmds[index]; + if (!u) { ql_log(ql_log_warn, vha, 0x5032, "Invalid completion handle (%x) -- timed-out.\n", index); - return sp; + return NULL; } + sp = &u->srb; + if (sp->handle != index) { ql_log(ql_log_warn, vha, 0x5033, "SRB handle (%x) mismatch %x.\n", sp->handle, index); @@ -2165,6 +2170,7 @@ qla25xx_process_bidir_status_iocb(scsi_qla_host_t *vha, void *pkt, struct fc_bsg_reply *bsg_reply; sts_entry_t *sts; struct sts_entry_24xx *sts24; + struct unify_cmd *u; sts = (sts_entry_t *) pkt; sts24 = (struct sts_entry_24xx *) pkt; @@ -2176,8 +2182,8 @@ qla25xx_process_bidir_status_iocb(scsi_qla_host_t *vha, void *pkt, return; } - sp = req->outstanding_cmds[index]; - if (!sp) { + u = req->outstanding_cmds[index]; + if (!u) { ql_log(ql_log_warn, vha, 0x70b0, "Req:%d: Invalid ISP SCSI completion handle(0x%x)\n", req->id, index); @@ -2188,6 +2194,7 @@ qla25xx_process_bidir_status_iocb(scsi_qla_host_t *vha, void *pkt, /* Free outstanding command slot. */ req->outstanding_cmds[index] = NULL; + sp = &u->srb; bsg_job = sp->u.bsg_job; bsg_request = bsg_job->request; bsg_reply = bsg_job->reply; @@ -2330,6 +2337,7 @@ qla2x00_status_entry(scsi_qla_host_t *vha, struct rsp_que *rsp, void *pkt) uint16_t state_flags = 0; uint16_t retry_delay = 0; uint8_t no_logout = 0; + struct unify_cmd *u; sts = (sts_entry_t *) pkt; sts24 = (struct sts_entry_24xx *) pkt; @@ -2356,8 +2364,8 @@ qla2x00_status_entry(scsi_qla_host_t *vha, struct rsp_que *rsp, void *pkt) /* Validate handle. */ if (handle < req->num_outstanding_cmds) { - sp = req->outstanding_cmds[handle]; - if (!sp) { + u = req->outstanding_cmds[handle]; + if (!u) { ql_dbg(ql_dbg_io, vha, 0x3075, "%s(%ld): Already returned command for status handle (0x%x).\n", __func__, vha->host_no, sts->handle); @@ -2378,14 +2386,15 @@ qla2x00_status_entry(scsi_qla_host_t *vha, struct rsp_que *rsp, void *pkt) return; } - if (sp->cmd_type != TYPE_SRB) { + if (u->cmd_type != TYPE_SRB) { req->outstanding_cmds[handle] = NULL; ql_dbg(ql_dbg_io, vha, 0x3015, "Unknown sp->cmd_type %x %p).\n", - sp->cmd_type, sp); + u->cmd_type, u); return; } + sp = &u->srb; /* NVME completion. */ if (sp->type == SRB_NVME_CMD) { qla24xx_nvme_iocb_entry(vha, req, pkt); diff --git a/drivers/scsi/qla2xxx/qla_mbx.c b/drivers/scsi/qla2xxx/qla_mbx.c index 28728c49d8df..2f1d80ca6740 100644 --- a/drivers/scsi/qla2xxx/qla_mbx.c +++ b/drivers/scsi/qla2xxx/qla_mbx.c @@ -1306,7 +1306,8 @@ qla2x00_abort_command(srb_t *sp) spin_lock_irqsave(&ha->hardware_lock, flags); for (handle = 1; handle < req->num_outstanding_cmds; handle++) { - if (req->outstanding_cmds[handle] == sp) + struct unify_cmd *u = SRB_TO_U(sp); + if (req->outstanding_cmds[handle] == u) break; } spin_unlock_irqrestore(&ha->hardware_lock, flags); @@ -2923,7 +2924,8 @@ qla24xx_abort_command(srb_t *sp) spin_lock_irqsave(&ha->hardware_lock, flags); for (handle = 1; handle < req->num_outstanding_cmds; handle++) { - if (req->outstanding_cmds[handle] == sp) + struct unify_cmd *u = SRB_TO_U(sp); + if (req->outstanding_cmds[handle] == u) break; } spin_unlock_irqrestore(&ha->hardware_lock, flags); diff --git a/drivers/scsi/qla2xxx/qla_mr.c b/drivers/scsi/qla2xxx/qla_mr.c index 10b742d27e16..fe5b990a88ad 100644 --- a/drivers/scsi/qla2xxx/qla_mr.c +++ b/drivers/scsi/qla2xxx/qla_mr.c @@ -2292,7 +2292,7 @@ qlafx00_status_entry(scsi_qla_host_t *vha, struct rsp_que *rsp, void *pkt) struct req_que *req; int logit = 1; int res = 0; - + struct unify_cmd *u; sts = (struct sts_entry_fx00 *) pkt; comp_status = sts->comp_status; @@ -2305,11 +2305,11 @@ qlafx00_status_entry(scsi_qla_host_t *vha, struct rsp_que *rsp, void *pkt) /* Validate handle. */ if (handle < req->num_outstanding_cmds) - sp = req->outstanding_cmds[handle]; + u = req->outstanding_cmds[handle]; else - sp = NULL; + u = NULL; - if (sp == NULL) { + if (u == NULL) { ql_dbg(ql_dbg_io, vha, 0x3034, "Invalid status handle (0x%x).\n", handle); @@ -2317,6 +2317,7 @@ qlafx00_status_entry(scsi_qla_host_t *vha, struct rsp_que *rsp, void *pkt) qla2xxx_wake_dpc(vha); return; } + sp = &u->srb; if (sp->type == SRB_TM_CMD) { req->outstanding_cmds[handle] = NULL; @@ -2626,7 +2627,7 @@ static void qlafx00_multistatus_entry(struct scsi_qla_host *vha, struct rsp_que *rsp, void *pkt) { - srb_t *sp; + struct unify_cmd *u; struct multi_sts_entry_fx00 *stsmfx; struct qla_hw_data *ha = vha->hw; uint32_t handle, hindex, handle_count, i; @@ -2656,11 +2657,11 @@ qlafx00_multistatus_entry(struct scsi_qla_host *vha, /* Validate handle. */ if (handle < req->num_outstanding_cmds) - sp = req->outstanding_cmds[handle]; + u = req->outstanding_cmds[handle]; else - sp = NULL; + u = NULL; - if (sp == NULL) { + if (u == NULL) { ql_dbg(ql_dbg_io, vha, 0x3044, "Invalid status handle (0x%x).\n", handle); set_bit(ISP_ABORT_NEEDED, &vha->dpc_flags); @@ -3134,7 +3135,7 @@ qlafx00_start_scsi(srb_t *sp) /* Build command packet. */ req->current_outstanding_cmd = handle; - req->outstanding_cmds[handle] = sp; + req->outstanding_cmds[handle] = SRB_TO_U(sp); sp->handle = handle; cmd->host_scribble = (unsigned char *)(unsigned long)handle; req->cnt -= req_cnt; diff --git a/drivers/scsi/qla2xxx/qla_nvme.c b/drivers/scsi/qla2xxx/qla_nvme.c index 97a7b222b549..fb4adb39ecf0 100644 --- a/drivers/scsi/qla2xxx/qla_nvme.c +++ b/drivers/scsi/qla2xxx/qla_nvme.c @@ -360,7 +360,7 @@ static int qla2x00_start_nvme_mq(srb_t *sp) /* Build command packet. */ req->current_outstanding_cmd = handle; - req->outstanding_cmds[handle] = sp; + req->outstanding_cmds[handle] = SRB_TO_U(sp); sp->handle = handle; req->cnt -= req_cnt; diff --git a/drivers/scsi/qla2xxx/qla_nx.c b/drivers/scsi/qla2xxx/qla_nx.c index a77c33987703..8b86c2b3c286 100644 --- a/drivers/scsi/qla2xxx/qla_nx.c +++ b/drivers/scsi/qla2xxx/qla_nx.c @@ -3668,6 +3668,7 @@ qla82xx_chip_reset_cleanup(scsi_qla_host_t *vha) int cnt, que; srb_t *sp; struct req_que *req; + struct unify_cmd *u; spin_lock_irqsave(&ha->hardware_lock, flags); for (que = 0; que < ha->max_req_queues; que++) { @@ -3675,8 +3676,9 @@ qla82xx_chip_reset_cleanup(scsi_qla_host_t *vha) if (!req) continue; for (cnt = 1; cnt < req->num_outstanding_cmds; cnt++) { - sp = req->outstanding_cmds[cnt]; - if (sp) { + u = req->outstanding_cmds[cnt]; + if (u) { + sp = &u->srb; if ((!sp->u.scmd.ctx || (sp->flags & SRB_FCP_CMND_DMA_VALID)) && diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c index d9a115577dc8..8a79d81f3faa 100644 --- a/drivers/scsi/qla2xxx/qla_os.c +++ b/drivers/scsi/qla2xxx/qla_os.c @@ -1335,6 +1335,7 @@ qla2x00_eh_wait_for_pending_commands(scsi_qla_host_t *vha, unsigned int t, struct req_que *req; srb_t *sp; struct scsi_cmnd *cmd; + struct unify_cmd *u; status = QLA_SUCCESS; @@ -1342,9 +1343,11 @@ qla2x00_eh_wait_for_pending_commands(scsi_qla_host_t *vha, unsigned int t, req = vha->req; for (cnt = 1; status == QLA_SUCCESS && cnt < req->num_outstanding_cmds; cnt++) { - sp = req->outstanding_cmds[cnt]; - if (!sp) + u = req->outstanding_cmds[cnt]; + if (!u) continue; + + sp = &u->srb; if (sp->type != SRB_SCSI_CMD) continue; if (vha->vp_idx != sp->vha->vp_idx) @@ -1697,6 +1700,7 @@ qla2x00_abort_all_cmds(scsi_qla_host_t *vha, int res) int que, cnt, status; unsigned long flags; srb_t *sp; + struct unify_cmd *u; struct qla_hw_data *ha = vha->hw; struct req_que *req; struct qla_tgt *tgt = vha->vha_tgt.qla_tgt; @@ -1711,10 +1715,11 @@ qla2x00_abort_all_cmds(scsi_qla_host_t *vha, int res) if (!req->outstanding_cmds) continue; for (cnt = 1; cnt < req->num_outstanding_cmds; cnt++) { - sp = req->outstanding_cmds[cnt]; - if (sp) { + u = req->outstanding_cmds[cnt]; + if (u) { req->outstanding_cmds[cnt] = NULL; - if (sp->cmd_type == TYPE_SRB) { + if (u->cmd_type == TYPE_SRB) { + sp = &u->srb; if (sp->type == SRB_NVME_CMD || sp->type == SRB_NVME_LS) { sp_get(sp); @@ -1768,7 +1773,7 @@ qla2x00_abort_all_cmds(scsi_qla_host_t *vha, int res) vha->dpc_flags); continue; } - cmd = (struct qla_tgt_cmd *)sp; + cmd = &u->tcmd; qlt_abort_cmd_on_host_reset(cmd->vha, cmd); } @@ -5917,6 +5922,7 @@ qla2x00_timer(scsi_qla_host_t *vha) uint16_t w; struct qla_hw_data *ha = vha->hw; struct req_que *req; + struct unify_cmd *u; if (ha->flags.eeh_busy) { ql_dbg(ql_dbg_timer, vha, 0x6000, @@ -5977,11 +5983,12 @@ qla2x00_timer(scsi_qla_host_t *vha) index++) { fc_port_t *sfcp; - sp = req->outstanding_cmds[index]; - if (!sp) + u = req->outstanding_cmds[index]; + if (!u) continue; - if (sp->cmd_type != TYPE_SRB) + if (u->cmd_type != TYPE_SRB) continue; + sp = &u->srb; if (sp->type != SRB_SCSI_CMD) continue; sfcp = sp->fcport; @@ -6562,8 +6569,8 @@ qla2x00_module_init(void) int ret = 0; /* Allocate cache for SRBs. */ - srb_cachep = kmem_cache_create("qla2xxx_srbs", sizeof(srb_t), 0, - SLAB_HWCACHE_ALIGN, NULL); + srb_cachep = kmem_cache_create("qla2xxx_srbs", sizeof(struct unify_cmd), + 0, SLAB_HWCACHE_ALIGN, NULL); if (srb_cachep == NULL) { ql_log(ql_log_fatal, NULL, 0x0001, "Unable to allocate SRB cache...Failing load!.\n"); diff --git a/drivers/scsi/qla2xxx/qla_target.c b/drivers/scsi/qla2xxx/qla_target.c index e101cd3043b9..0aa0088f2988 100644 --- a/drivers/scsi/qla2xxx/qla_target.c +++ b/drivers/scsi/qla2xxx/qla_target.c @@ -2379,7 +2379,7 @@ static int qlt_24xx_build_ctio_pkt(struct qla_qpair *qpair, */ return -EAGAIN; } else - qpair->req->outstanding_cmds[h] = (srb_t *)prm->cmd; + qpair->req->outstanding_cmds[h] = TCMD_TO_U(prm->cmd); pkt->handle = MAKE_HANDLE(qpair->req->id, h); pkt->handle |= CTIO_COMPLETION_HANDLE_MARK; @@ -2908,7 +2908,7 @@ qlt_build_ctio_crc2_pkt(struct qla_qpair *qpair, struct qla_tgt_prm *prm) */ return -EAGAIN; } else - qpair->req->outstanding_cmds[h] = (srb_t *)prm->cmd; + qpair->req->outstanding_cmds[h] = TCMD_TO_U(prm->cmd); pkt->handle = MAKE_HANDLE(qpair->req->id, h); pkt->handle |= CTIO_COMPLETION_HANDLE_MARK; @@ -3709,6 +3709,7 @@ static struct qla_tgt_cmd *qlt_ctio_to_cmd(struct scsi_qla_host *vha, struct req_que *req; int qid = GET_QID(handle); uint32_t h = handle & ~QLA_TGT_HANDLE_MASK; + struct unify_cmd *u; if (unlikely(h == QLA_TGT_SKIP_HANDLE)) return NULL; @@ -3734,13 +3735,14 @@ static struct qla_tgt_cmd *qlt_ctio_to_cmd(struct scsi_qla_host *vha, return NULL; } - cmd = (struct qla_tgt_cmd *)req->outstanding_cmds[h]; - if (unlikely(cmd == NULL)) { + u = req->outstanding_cmds[h]; + if (unlikely(u == NULL)) { ql_dbg(ql_dbg_async, vha, 0xe053, "qla_target(%d): Suspicious: unable to find the command with handle %x req->id %d rsp->id %d\n", vha->vp_idx, handle, req->id, rsp->id); return NULL; } + cmd = &u->tcmd; req->outstanding_cmds[h] = NULL; } else if (ctio != NULL) { /* We can't get loop ID from CTIO7 */ @@ -4161,14 +4163,16 @@ static struct qla_tgt_cmd *qlt_get_tag(scsi_qla_host_t *vha, struct se_session *se_sess = sess->se_sess; struct qla_tgt_cmd *cmd; int tag; + struct unify_cmd *u; tag = percpu_ida_alloc(&se_sess->sess_tag_pool, TASK_RUNNING); if (tag < 0) return NULL; - cmd = &((struct qla_tgt_cmd *)se_sess->sess_cmd_map)[tag]; - memset(cmd, 0, sizeof(struct qla_tgt_cmd)); - cmd->cmd_type = TYPE_TGT_CMD; + u = &((struct unify_cmd *)se_sess->sess_cmd_map)[tag]; + memset(u, 0, sizeof(*u)); + u->cmd_type = TYPE_TGT_CMD; + cmd = &u->tcmd; memcpy(&cmd->atio, atio, sizeof(*atio)); cmd->state = QLA_TGT_STATE_NEW; cmd->tgt = vha->vha_tgt.qla_tgt; diff --git a/drivers/scsi/qla2xxx/qla_target.h b/drivers/scsi/qla2xxx/qla_target.h index 7fe02d036bdf..b2032a4efbc2 100644 --- a/drivers/scsi/qla2xxx/qla_target.h +++ b/drivers/scsi/qla2xxx/qla_target.h @@ -872,11 +872,6 @@ enum trace_flags { }; struct qla_tgt_cmd { - /* - * Do not move cmd_type field. it needs to line up with srb->cmd_type - */ - uint8_t cmd_type; - uint8_t pad[7]; struct se_cmd se_cmd; struct fc_port *sess; struct qla_qpair *qpair;