From patchwork Wed Jul 19 18:51:51 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Madhani, Himanshu" X-Patchwork-Id: 9853011 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 21D4760392 for ; Wed, 19 Jul 2017 18:52:31 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id EDAD41FFC9 for ; Wed, 19 Jul 2017 18:52:30 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id E268B2621D; Wed, 19 Jul 2017 18:52:30 +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 64C5C1FFC9 for ; Wed, 19 Jul 2017 18:52:29 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932107AbdGSSw2 (ORCPT ); Wed, 19 Jul 2017 14:52:28 -0400 Received: from mail-sn1nam02on0057.outbound.protection.outlook.com ([104.47.36.57]:23506 "EHLO NAM02-SN1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1755058AbdGSSwY (ORCPT ); Wed, 19 Jul 2017 14:52:24 -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=YhEGnHiMEwxoqhXrnChVX+TU8PoU/0Sn94zJCLyX2uQ=; b=F5l0sNEUjgqQ9QmL9OUJ4likFmvqK4BwazUKjzf9Fl+7QP9FBsQbGEGuBL9t5Pbqwtj8h2yA2sfN2r1GfH6pdpTXvX5EpGl3Yjki1C6V4Qz0pqNx+j89sHPaJFSuqd2ynEnnw6RjPCluFuEkqTpKCATh0yEYfstytpeT7hd+Mh0= Received: from SN1PR0701CA0028.namprd07.prod.outlook.com (10.162.96.38) by SN1PR07MB2192.namprd07.prod.outlook.com (10.164.47.26) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1261.13; Wed, 19 Jul 2017 18:52:21 +0000 Received: from BN1BFFO11FD022.protection.gbl (2a01:111:f400:7c10::1:123) by SN1PR0701CA0028.outlook.office365.com (2a01:111:e400:5173::38) 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; Wed, 19 Jul 2017 18:52:21 +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 BN1BFFO11FD022.mail.protection.outlook.com (10.58.144.85) 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; Wed, 19 Jul 2017 18:52:21 +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; Wed, 19 Jul 2017 11:51:56 -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 v6JIpr14008627; Wed, 19 Jul 2017 11:51:53 -0700 Received: (from root@localhost) by dut1171.mv.qlogic.com (8.14.7/8.14.7/Submit) id v6JIprHF008626; Wed, 19 Jul 2017 11:51:53 -0700 From: Himanshu Madhani To: , CC: , Subject: [PATCH 7/7] qla2xxx: Refactor usage of Active command arrays Date: Wed, 19 Jul 2017 11:51:51 -0700 Message-ID: <20170719185151.8564-8-himanshu.madhani@cavium.com> X-Mailer: git-send-email 2.12.0 In-Reply-To: <20170719185151.8564-1-himanshu.madhani@cavium.com> References: <20170719185151.8564-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)(39400400002)(39850400002)(39450400003)(39410400002)(39840400002)(2980300002)(428002)(199003)(189002)(9170700003)(575784001)(86362001)(80596001)(189998001)(105586002)(305945005)(54906002)(2950100002)(5003940100001)(2906002)(626005)(48376002)(50466002)(36756003)(87636003)(106466001)(33646002)(356003)(8676002)(4326008)(50226002)(47776003)(81166006)(478600001)(42186005)(38730400002)(50986999)(5660300001)(72206003)(101416001)(1076002)(76176999)(8936002); DIR:OUT; SFP:1101; SCL:1; SRVR:SN1PR07MB2192; H:CAEXCH02.caveonetworks.com; FPR:; SPF:None; MLV:sfv; A:1; MX:1; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BN1BFFO11FD022; 1:3ah9TFvQQ43hWuHp6OHe1cTybITVKhJBgFlrvOsCSN8/BIQB5apvDlekNH1WDfAbsBF6o0eLLNGrFeUNqt/FpidiocF9bHdnYAVF/f49ATyPMNvdKq+pPDIeQITPBQmQVzqc/kh+6HBo2J6ixKRbUUT5bRAss5D7nRf+S5Xr4RpKRaWGOy0HfxOoZBqKG5K0/+JLI8ocZPbkdc4FhaHjtbaddycTjCtNuQ6QrPiFObpZDLH8393oVIEfrm2siNF6H58ejMHb9VBqMaLJj6BKXxeBl8iRn0bu11nsE6neqcA138VP6R0v6yPPEhubgfHbUI3VE9aGDDzfQFXxZj5QB1oM2O/JnuGcV8nK6rfYg5JRewmjjde+xpRqLghN3x01Ss1lfBwjFFDPKZ24tiIxq5FoDbiqdf8WjCtscrUPGW5x8mT/rk2EfGQ7Co/eGR/EI9cmHWmF5xV6X+osCs1yCw1AvlZiSEIz0D64FWFcc5TsWiN9jKl/5yhOO79PPqEgT/9XxsHGC9JhrfFto8C/3VaFfz4+cNKqxiI2Y8KqjfUfdSDbgznkZDSKCovJcI9r0SPSpHq1phyFyLZ0Eb9VPyvrHabtxDMkjeFDRzmI2YxjbWglCt/TXsfWNHtA5P+gXrXjfkqqAruJo3EbzWnyYUIi4SnR+61RO/VlJwEt2NDiV+0asaGE9yiVESar4VBUs8Wo+uuHFLdtcF3hEOsQH44bLcSVxNU2/200NHaEVPgNphbjnm5XOheOtZ4VqitIW1ZH10ps8DB/UKBbUuxIla2RHkBjuCkwXByfiYZe+YlycH+Fm/33OEMCv4Zs6HF6xat7L9/HaqSe0MA9c3Te/N9rNgATQ6Ai2oFlfRTbJ006KFCMyndEcH+4Khs3AHW3 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: c958c453-0a13-4fef-6b91-08d4ced749cb 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:SN1PR07MB2192; X-Microsoft-Exchange-Diagnostics: 1; SN1PR07MB2192; 3:MdCe+QXRPIPes71Eb7rTP99V2XrHZSXT4fm1+pyc/06SPn+07SlG88+UbYta9C1oMF9EhX2GkUZ7kdp/Au7OPL3NIZHSJ3Pyf4+osFvSnbL26/xMUHJ6qqgauJvCSt8JGWlaaYxJ7mOC7J5w2EBPKJ5aUCiSa34J03k5f0lO8HeNkXmfj05hhS/zB7sjWunQ00G3DiHs6uJXQ5vkMrmu3thohIph7hnvD/YzsrOTi47u4qNAJSpwdNVjNuLH5gBJKrYXbmfMcWDnVrtG6Tef4B4mMAs2eQrhnSBleGLEqR/KAc1Ryxnd6PEDuK7T2HtcNsKFxq72jCWhhkV7HMgkTwz8wZJtVg52lJ0b90xIkiKUbymNNI5eVry007B4UarEGE3fYxH+n5N9I4KYrc2N3frB/nS0ykNedbjctPkgiMplVHKT1IZJCbxHCKrYngcz1Pn300ArzlJEoElM6X+9mV5TeVPKDbrSA05wtH6kY/eT7rd/9Ygwn4Ag08X9wRbhieFg0nllrWoQiG28N5LcoqWgwWqG0wdGfyWnst8y6uM2JEp9Tyl/XRJkoWL0HJ71hpzoi9AR/JTOBhgJp98CAQxrenrhHVTFm3d/OKaqUFwHyZlVzTUY4iUZTD6Rbvet3dF7o+JHm+kgv1+HXd/NvU5qdDoe1SZOxme/mDqDRfDzEbqJS1UIkntKOy5mwu75Um4nBQqqEcoQmCr/9ggBrW2K27BDxpEebXZfp7XjFlpfZgFpjI8BAr4dId/lX+o4nlXu+XWLbVtaCBJ59QvQ58mw3fSNr3sEl/dYqQ/VUJYoHrRcdgKgfjeR8jHrKWq+pdz2GCcP4o+QIU/pJhYZa2qvn5wHuH5H92zhmua1gyXvO6TMLhIDtNxW7Q6RY6KSdXyziT+kVFHgr5AzYxbqJQ== X-MS-TrafficTypeDiagnostic: SN1PR07MB2192: X-Microsoft-Exchange-Diagnostics: 1; SN1PR07MB2192; 25:eMjPaDnGyOTKBNkURSYZJ+G8V/moN6W0yVzUkQOc5tizhaWrGfTLwde13CV11hXjqG7navbPMWUrnvMAeFetJZXbuBMDP7UfH1TYxr23GWtGacJTjX5C6XntickJR13KPHdanXmAsm+CcNPKWjK1nwLhxqoKKl4VZDNEBocRWo60oC07Q05xQdLF2aTiATymrqi5RRC/bIOgC6DXaeLBHozebsa4m46Fe0F7qAOfy8Q3TBv5laTxqr6+RSQ/c9RJLimF4NuTyeOGRo4vF3Fl1jHMNVdb0emPRWNxH9KK4O3U8yJeDaGsTcPHETb8XkI8ibfWXE4SsLYXDR+BvdtMaSjbHYuweiXj2prd9tmuacsugI5TfVhbGJmw8ANVFqyMU97KRKWqpCcbCrvm8ZPDVgh/NsvnnLOT9BjpW7tOnLwplkKcP45i0EnAMaGl43u87mPMzhERWHBNLTxSbX5BsSNCHFbkJmelW59o5RWdrcgR6DhJLeJ3jzkE61qzXDXJaHbWV0Mi1qJPR3KWEwIuO+ewH9t0qZnSWcquCXPz5TqKgWA5xXIWxeIs/OhfoCgfskQ8P4ejoPcvBBVBVIDeB7Zgg/uCk3CWTro3udnjn6sadSIWZdUyQ2F54QORRonR6377MXlhwpEzbWJYXQ68O1DmAz8Cs8xuq5sDodkE94oXhJp11e6LhvgzI4T+DnPW6mvBsguQPcnF2HOoU3UvhF7H4qe+RHzpUkmyW7svhuxXJfcfEXiUkpsxWXXj/9IjbT18hG/46k/Y2MEG9M3/cHDRyvksiGQUnHIgq/fbtDEkHGudKpZjVCjMl1yEICVKIKIj+SWDHQ/8b3SWjpky/Vr7T5YMBvYUy/Pbdku6ByRQIbxbyyX/ZK5LE7zO9b5av+p5ctpvjqP+Yp7jel/E4UBIIgMR+l68aMkggoXDM zI= X-Microsoft-Exchange-Diagnostics: 1; SN1PR07MB2192; 31:/PbJttR5bdOq4kQFoOma8f/X3gYoasM2adALT20erbNbArahS2/wpJTjA0e3PQnBhnS5ND8599gjD8i6vLPBAZh9Pi9y5ML0wOUT682/cYHwVd0aW9b26ekH1t2p2AiuPSEbJrQtGwfPp6lDX241laVQZa4GAMCZ8tE4GmWq+FF61Jd91fFEWKpU4kECT+jFhxNoOBV+LYLdGG2vyWETeLpR4yAtZTZcVZd0vzu+KsKDb+PcFCi2Q3Hm28yAtUZT3X+gV9xm2zCpjCtVr2md5iWzE1+trELTj9wfaPOk3GUORu9Eh5ca7Nwzthfee0LdgCPSICFdbcg51kXBmqeVsYyAtYVlHDGnnxq/tLkbZho8mHz2GfnfBH93FeiROulE1X5RhQuIeyS31LMbRl8/q2YBqgbxdkyi5DvZU7Dj1+WvgVDvqxIotb8ayr7y0L/Z9IMMXUIKqFJtHyxV3l5rkn0EEH6Hq7UO/VDTvhXWZxEOgV8iQwf4YzxERJ1v84KHjLwFWUKfifAX1MXH8omQvk0HkbbQFGps8zzxJeJUTx0MJmmSOPyTZcHEMr9MD4eo81T0A1UvUfSzp4dANwcWwXoIDOKk5G3Lco+yGbmndtmc/R+fgllyWaNl4xP9fe2Osl4vRokAZuH4qZXbmA9JOm8VYlmCwpchEZp29Cxdkne+HE52ofYY4eMnlIERAj2fRvldgVdVewW/iouEgCntqALUltBU5VwPRRL9e0GAJzY= X-Microsoft-Exchange-Diagnostics: 1; SN1PR07MB2192; 20:q3k7/lp41eDpZj9EqlPzy0B8dAxw7Kitxqe5oV7cXkyj8wrpM2Nxv9cFENq5DBOeOKFkcT9I8oTWiV5aAKF9fq4TckhMp6IQYD6qXvhsurFwCA+g3oM3zw4bqdkRK6y73EWH9h/KHvti5hj+SDrAAxrumllku1EXtV33iUR2hZmUSHEDvezBWAtgT4RyfxSVGEQP4hCQsi3MwF61CFluK4NMxzG2enwAAUFnvDxzcNChjVb4MPHg6X7DRUu0ezpleIisMcWEzQgvHGcqzJVXrjRFuczr2NrCyOt9Mscwq1TG2W8Iwj+P5uob7Zw/EV66kkw91pcQUY+71ff4PtuxXah9Gww4rVFdFTQdXQ4WUfJpqplcIeRn0p2QLE21AtpyyNUek8KZ/blRtEA0UqoDe/tZ8d6cxaCGRi7tKUA9UntL3G7QV3mrB/DbU2BUsF0wT7REA/rma276r2l1Rdvk48jGWFWim6oULRzJe/zL2SfEeUq+tIiCy2kBqaVUzdvW X-Exchange-Antispam-Report-Test: UriScan:(236129657087228); X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(601004)(2401047)(13016025)(5005006)(8121501046)(2017060910075)(13018025)(3002001)(10201501046)(93006095)(93001095)(100000703101)(100105400095)(6041248)(20161123560025)(20161123562025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123558100)(20161123555025)(20161123564025)(6072148)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:SN1PR07MB2192; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:SN1PR07MB2192; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; SN1PR07MB2192; 4:q0nHbx8yo66TsBQPEYtpDnk2bqe6nrb1+79S7YDv9l?= =?us-ascii?Q?cfWkfdR3vKMx8SZs77s1pP7kbpfNVlyKch2Sg64Au/e9rdsIoEkmk9QqPenz?= =?us-ascii?Q?Qb5SUD2dUL3Xe/E98HoK37YaJKsKe5kAQs10jL9FlYd+YIB0cPc2ZmaSFOZk?= =?us-ascii?Q?VZ8gV1c1g9xKz9JnOmoXsXOcTPX4CzUQJ3PX3QdUNLcBEyq6CzcIMNyRhsnJ?= =?us-ascii?Q?83ePssH5PsqSvlKXmjKW4LPv11BPf0TKcSBgOenVcEAEk37NWxGHVI1gaIVd?= =?us-ascii?Q?kW6ttJvj+UqQtNsh2oKagCAa5WfxKxN7btKhWCg+jWp04u3NV86x9Auj0y26?= =?us-ascii?Q?8qGnbcS8c5VsMNQUe6UmsehtRLnfU5jwzIFOkTMgFzwGaHPgsEciqGGNfe7e?= =?us-ascii?Q?TumK5DClOIy6NOTT+A3ffXGO4k30r67qzbLRkMU1jSml2pF78V90cqDkqgUe?= =?us-ascii?Q?dN80LBfb9xSPghBgxsi9nK+yVy8Js/KbLO7p3LbqcjAKcWtGnGf9eEYTBmRw?= =?us-ascii?Q?bBo2v2EbPl9Yax7fYDxGm0NS/uO0poxOFmQTuBdRpu7M2Xt0bqTzFtnmUbHx?= =?us-ascii?Q?8u5JUZV6tPUSq53uZaZ+Y+NdNgC6SaPmaVyxViO2uN2Gz/JuGnNHBp8N//KX?= =?us-ascii?Q?E0ibZr1wo/PaT+/NDWjYGMw9mydBO2cUnu8xrUpkTImLGo9VJNLoR5CpHucP?= =?us-ascii?Q?u4ImMm8jPoj1KEkbFDm7e9KNSpWXHXoIRD6ZBBk0mXg97LWUtrLTwnKZkL0c?= =?us-ascii?Q?+ay87dhtaVnadval7ex9UOCo50AfnajFQo21+aGj7MPaHzvA7xd1GDvKvJOZ?= =?us-ascii?Q?xRNnO4nE5hOz/meJpWfKxRB07PQRuo2fQRc+0c51gUBvwFI8P1ofVGScTEOi?= =?us-ascii?Q?Cizw2REqF8v+/QhxsP9aIV8LVTlxfvEOqgGPmZheHrXLNkx0+nrdpCOAv4KF?= =?us-ascii?Q?xHpHW5E68Lgqq/WI18NNfAFKHbdpHZoVzjcAM6GESBGUrwR05qzT/N/79I2/?= =?us-ascii?Q?JLb9ibbfOV53yfyYnQOh68qyVHwo+d7dQFCHMG+arnty7v6dF6ejpqw5ZrhZ?= =?us-ascii?Q?NWm9IlkoqEmqRkesegJxe4yWqRAZmKC6MYPEoBhDvz+saRlUTvPRUdGax/3a?= =?us-ascii?Q?AU5cL5b8pdZWsJsI9+c3506qNLRU1QkLPbg1L4kY05ILblpidwwQdUifMSIA?= =?us-ascii?Q?GVX56pN4TkkgoRnXkj/5Yp4SkvJY7fmIo13zwlSQsxl78hUCpV1U7IwvKuXW?= =?us-ascii?Q?Wj0dpWgl9RkWEFKmj6rQtbK8kh4S/pofrtdz7g?= X-Forefront-PRVS: 0373D94D15 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; SN1PR07MB2192; 23:Zz2UibkLCI+FghzvN6f+B17usitfOjCkAE0E/DQcR?= =?us-ascii?Q?dXEipybHh0T+7FJ2YEap84ZxSPTbx1Ln02WrxkBbliKHNwwVBHBZccN73c5d?= =?us-ascii?Q?S4zl2AbLcRwakhXVlcrids7Vi4daf/9UmpjU8UMX7QOWj+SzIU9V6yRTvjLM?= =?us-ascii?Q?DB38XRD5UmpIc4o0yg8gdVSYwoOK1bnCOtRfWn9Lo2UjVSdbUXKs6/fzjzMh?= =?us-ascii?Q?5S1xoybq/awMYPgZrGAedknXPt4DB6CVEhmO1FA9DK9S0GWT0hsCzmLvIYzR?= =?us-ascii?Q?GAVS7GJwWzn6TFwHBjp9CJ18e5FcBCFWhSuDFtwtVXq4MLLLSkDd/gLxtO9r?= =?us-ascii?Q?R7gaP8VGU0c0GAcTmkc+UyUQJeKDF4/1YBbzTyUDCmurN8l7UeIiHzTMTqJ8?= =?us-ascii?Q?z7lTl7QuGmDLEhcr3aiOHlIztelPSMqlPypGmQlskg4Bdy5f3mcJWuvTc4X0?= =?us-ascii?Q?yWXxy+vFV1KTgm+AGG9nBk8emppYqCfX3eDI5O0MSrEov27Ben4kXQ9aaNzY?= =?us-ascii?Q?HmDuh5Nc9Kq9o983IOOuZwJl8ocvUPffGaXufR/BXfgS2+MW6vF7CrqbBuAg?= =?us-ascii?Q?cxSjwhNMXkQrjiEZkcX8Xgt6vxsBmS/Mu1laurw/BWABMH3J3bxSVbr4T/VT?= =?us-ascii?Q?ozSUaU8S1973dgI83MruwlsqvstJgEmepqdF5cq07ZNF1kYWRaH4IyEPG1o0?= =?us-ascii?Q?iT74KVcmT9E3bws41QVTh/vz3fjIL1G0BwrDXO8JYgo3igAl6AHqc3LIIb1S?= =?us-ascii?Q?4fb6l0Gh4GQ4uVPr3roeOA0kAdhJz5ITiXLLqsep2w72fv/rF47FsEK5255b?= =?us-ascii?Q?P8+Hq5AWlC9JErOr5Tw6dH42tvgpeh03qk7v5oINLw+aMIglh10BMKWYxbUL?= =?us-ascii?Q?MWoaBjLbq9oS4Nq+JI8/8W2ROxhXMFBx7tGOGHjxffN9QKAN4fguj3Iz6zuK?= =?us-ascii?Q?O2xdvxCpI3ft8uNr8jY2ZOXXGozDcjNLvFOOcbdg+a0ukvluk/PBScaQ6OmY?= =?us-ascii?Q?92y7ZQnSESb8ESWIuJ/bms70DYpGn/Hg8vg6Y3kFAmeaQ/VVURMI7VBF4V5z?= =?us-ascii?Q?gfKI9kWuvp63ooS45IYasTKVnxnVPIVo7SPhWSpTuE/KuaufQ=3D=3D?= X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; SN1PR07MB2192; 6:uC50zTL4WYe+OtvHgIHJ1dareG+s+I0EiLTFJ5hCW0?= =?us-ascii?Q?4ojMdI4/7ruMzI5kpm7G8a5sf359j2GdUXZKRaSWsBxDhwFbyAkWns+R3pgc?= =?us-ascii?Q?brMyVk2jsXDR/VG6CTxkm7U/BAjk7BX8wK/iSM5SaZ4FUMIHZyejcc2pCE0q?= =?us-ascii?Q?QUTptn49MhwHQsGwpsPOKqDcJIOJrKiooUSwV9/l03ROzDCKX/wLePOZ5X/Z?= =?us-ascii?Q?3TJh28iKCp44HH5ZZxkdgDil1NMvkg4fsdkljEcZKy1CLFufv4xORwPclTE+?= =?us-ascii?Q?Vk3aq3gqz6DFy2ZJyaN53nu6QcWZHVlMkaQBn6Rg+tW5YyEbsrNCvISKGFY2?= =?us-ascii?Q?X09RoUOf9WXkXSAeqi1CsAcku2HZwY8CiwJh5RYMNQzeY98ZzHQcFk3/9hX0?= =?us-ascii?Q?PIM68LvhAEkPzB+A5yRoqpDm6XP9JwtO2XkXnEQrkENZzoBq25xQEA2hWxlW?= =?us-ascii?Q?XimymSt5CkKKTGSdN5ugtDeb8RYGv39ASiWmrzGaxnXCC5zzCE0SLVEyGtix?= =?us-ascii?Q?HeLY+VouTOQpoomBIfKezi/GsraJ0VPdjlBLMJA2lw8OjNSD5Q6AR4dWhWyv?= =?us-ascii?Q?1AmqZ4VSsrs5MRHgOGGZSjdud60V/5rm5oqMS0zV6HLKvRbfYcGRh4LKhBc4?= =?us-ascii?Q?IpFYEhKe6GNbJDu5QtpLtIgU2PnulBb1S4xzfIWhtyAsNX09hNAsnY7yxVEQ?= =?us-ascii?Q?zmMlVAbtkK9ovJEVAT+K21ITCGlabC1rr/jcpXnDRbUzV67xLTGNu/NCZlnT?= =?us-ascii?Q?zDw2feDX90v/9RjX5e/hNOxhxgYg9wlnTJEFo/LQlC4BgIcS13J/mSZNrzqm?= =?us-ascii?Q?7xlU9qshkgQOO4LlrJofdmo0RSD5TTzxFBuOEGbklabyQFbt4RkW1BSzRp36?= =?us-ascii?Q?UBIjQf08nU2FKkyTWXvvrmUyg68UJafRuZcr4/ZMPaH2zH8SXdwnNMH4/3/9?= =?us-ascii?Q?pVkEG0dl4qa6+ONzLxgvfTjhQzcHIPhjGQVLo+SJ0xE/odPDsCNgXCdLsiZz?= =?us-ascii?Q?M=3D?= X-Microsoft-Exchange-Diagnostics: 1; SN1PR07MB2192; 5:DXF+yY6Dhi7AOXbUkq5E1mw5XSJ3TcvXFWVGMYj9T5BKQdFBa3M/Iokq4BXMJ1W5Bne0RErdphXx/cZSYFdfG5oiQvJkJ4x/pncpJIOwbcv8zC0hOEvbLKSp7wKvXs+3Iv+8D6THlQSWUL6Sois1+xj3hhxElhTn0yll1guWPflsFakPYymkP/8FQLmbzIDw78AVbI533WTKEmo8yMVDfrJ9B8Ny7252Z7sKPiSXI+f9YrcXT6DIyDY1vK7VRxr+Rx6SCkyGAX0HEcJaob0W4KVBNcKzFvuXZ+lI419XoKQ5kIJ/IY0jE48sDuL23N0yaGt6zICzZ1oGp7N3c+qt21FqS2aePHGpmCfBRBpANyypmySWqa91Zmk0P+5dJzEcmq2Tv/qD8rLKirepkCFUM422Osyq6Fm2lsT1Pj+4pPBuWqIqIoEBMjEyQ0CdjXp9gTdpSANZGC++gwLwiQHVeFd7EAiNXA7nfcQJCNwAOMuJmWPz5PTe1LHetUlNeAgw; 24:EWavtr4IT/TD1ai5JnL3DyNLMO4w3UAXmtu4NkAavLlUkOy665PiOdpQWUIwEhQBsXPhK8LJ2VmHB5lsxWPseY5YiQuNrIkBD+Byg0eUanM= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; SN1PR07MB2192; 7:qqua+6kJjkDpkwiu1IR6QXiG4QLGEdDp5NOOY5xHOT8rOcbkHWRwFtrfWMQHrB3bqf6961xbOUmxi8hfDxHBJG5n87QqcntNAeyHtA0hN1y/e9A2vmLI8Qgc3yZxadk1LTeCFq7voFP41odjZBWUizcHBSXZc2+RR1iJyzurdu+dEEBf2nUzRTgXpe+amejWm6mzE+oCwjiJSuLD5539VytF378MbFIMbMYXZRhFD8ULGy11FFswqFUe4H7W/3Z9RkA+fn82THMckbAWGR4J46jKYiZukdHxqYfJRCbM7TnLyIIe4issA+nh6hbzG57g6PtyfCa0vkZXPbdTv0l5rIXO/BV1mzHzKqQ5YWmBSS0INNczvdeeVLcNgWZJKd527OJ1KStkmF0lY4vbvxO2tygz8tkNAPrceQsI7vu1bLpO4GccwEmFfIcFVnpZttpwJRHu63pxCiDDI/fR8KElArViWC/65yOAARRNy1VGIY56jLevfj8Yw3YkHm6hPn++zODyfc7FQdkWCeNhR8HS3GDV3wg0mlNyQAvMPQ3BTyXtH2rzXuNTYbNNrKC/gETzdI5txNWjOvWxNkGL6LjMa29xUViseaq/HdTQaZzdzNAAOZTiUemAK2177q8ZRGAyMdcp38PS4D5MRQiUw8hgYwBC9aazLoi9izqzvDs/j5awcrsCt45vK9c8q4ojaO1o3CQQgV/7MNQ6+NeIgagZqJiSExFwQNRQJNjjm/pCJnuNiVHyLcahTNl981FTKEs6DB07SUNrbAb//QF4nJCEIZ2A/q6wx/0Mv3ZHK+28BZw= X-OriginatorOrg: cavium.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Jul 2017 18:52:21.4009 (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: SN1PR07MB2192 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 --- 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 caee4a2b4002..a17042649eab 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 @@ -458,18 +459,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; @@ -3286,7 +3276,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; @@ -4383,6 +4373,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 b271c3f78c85..582896c37af7 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 da32a06f17a0..faa1b4a40f42 100644 --- a/drivers/scsi/qla2xxx/qla_nvme.c +++ b/drivers/scsi/qla2xxx/qla_nvme.c @@ -377,7 +377,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 256d3a34d4ee..45482c9c73b0 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); } @@ -5926,6 +5931,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, @@ -5986,11 +5992,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; @@ -6571,8 +6578,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;