From patchwork Wed Jun 7 21:43:19 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Madhani, Himanshu" X-Patchwork-Id: 9772893 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 C35C260350 for ; Wed, 7 Jun 2017 21:43:52 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id D0A182847A for ; Wed, 7 Jun 2017 21:43:52 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id C461C284F4; Wed, 7 Jun 2017 21:43:52 +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.8 required=2.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_HI,T_DKIM_INVALID autolearn=unavailable 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 B4AE72847A for ; Wed, 7 Jun 2017 21:43:51 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751424AbdFGVnt (ORCPT ); Wed, 7 Jun 2017 17:43:49 -0400 Received: from mail-by2nam01on0079.outbound.protection.outlook.com ([104.47.34.79]:3181 "EHLO NAM01-BY2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751412AbdFGVnq (ORCPT ); Wed, 7 Jun 2017 17:43: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=bkHYzFBJIjWVdphV+cfjedT9f5vTx3lLO0IgyVRIVqE=; b=lGUUr5fmWXbRb+KSukXo4rRiq+rLHwTHz3GKn1es/5x8JZOKm5J0bfF3L9RmqKv+tOm2ZFBHt5i8Fusita5UtJrmB0kXXuB6niF6zTrQ59VEjABkkKvARGG98mLq9KU33gUGZLazFoduL/NeEV/MmMxXjUGx3JnIxFqR9qf6vf8= Received: from SN1PR0701CA0074.namprd07.prod.outlook.com (2a01:111:e400:52fd::42) by DM2PR07MB431.namprd07.prod.outlook.com (2a01:111:e400:243a::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1143.10; Wed, 7 Jun 2017 21:43:43 +0000 Received: from BN1AFFO11FD028.protection.gbl (2a01:111:f400:7c10::113) by SN1PR0701CA0074.outlook.office365.com (2a01:111:e400:52fd::42) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1157.12 via Frontend Transport; Wed, 7 Jun 2017 21:43: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 BN1AFFO11FD028.mail.protection.outlook.com (10.58.52.88) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P384) id 15.1.1101.12 via Frontend Transport; Wed, 7 Jun 2017 21:43:42 +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, 7 Jun 2017 14:43:39 -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 v57LhdCZ023149; Wed, 7 Jun 2017 14:43:39 -0700 Received: (from root@localhost) by dut1171.mv.qlogic.com (8.14.7/8.14.7/Submit) id v57Lhdi1023148; Wed, 7 Jun 2017 14:43:39 -0700 From: Himanshu Madhani To: , CC: , Subject: [PATCH 01/15] qla2xxx: Combine Active command arrays. Date: Wed, 7 Jun 2017 14:43:19 -0700 Message-ID: <20170607214333.23110-2-himanshu.madhani@cavium.com> X-Mailer: git-send-email 2.12.0 In-Reply-To: <20170607214333.23110-1-himanshu.madhani@cavium.com> References: <20170607214333.23110-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)(39450400003)(39410400002)(39850400002)(39840400002)(2980300002)(428002)(199003)(189002)(9170700003)(80596001)(575784001)(6666003)(50226002)(5660300001)(4326008)(305945005)(38730400002)(107886003)(87636003)(54906002)(478600001)(42186005)(1076002)(189998001)(356003)(72206003)(50466002)(33646002)(5003940100001)(8676002)(48376002)(47776003)(8936002)(2906002)(81166006)(86362001)(76176999)(101416001)(105586002)(2950100002)(106466001)(50986999)(36756003); DIR:OUT; SFP:1101; SCL:1; SRVR:DM2PR07MB431; H:CAEXCH02.caveonetworks.com; FPR:; SPF:None; MLV:sfv; A:1; MX:1; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BN1AFFO11FD028; 1:8wCCA9/DZtg9mGfvlSgBbNSLIQmGoOHTmA7lkKFvyC9Fjgq7cYN5/D+9LAKiXjI/WYsnu5ZQgBlGqyE4CH/iKUecZPQ4PjdKgxdmJGMyoWQBVBfqx7x6cEewlyFrdCwjVKbdOktNixMG7Rz/kmZTdRcyE3QbrMuara9YNVLUWExVj5JsqbE8oTTm4xna+mIGyTELLbPCiURRJje9PBmig4QuULY1zwPbctdt2iHBFYWz5GhEraM1mvmfj8U/xj+RaxyCVuMRNiLR6oELhajDcIdXOdYdzZ6JTy8PgBHB/rYqGLHx+rJps8qcs/pD6EUAspT4eXWOqAVh9jbnVgapZV59diPELQB0XEuBSeCjQ8N2Bp/flRxVhN8z4EhOoHE8KFFbDf1kehNp4IEiJkeS3SmxqfXFzVILm/8gUpOeHzQDefXOwnECug/2Ww2FQxBF6ISd16aaJrv/CDAJBbE7TBbBpA6Lu1UTr3tfzy2SADCGcxUkex9yhUBiuCGlVXjU X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM2PR07MB431: X-MS-Office365-Filtering-Correlation-Id: f4c26fc7-03c1-4ec6-2063-08d4adee44b5 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(2017030254075)(201703131423075)(201703031133081)(201702281549075); SRVR:DM2PR07MB431; X-Microsoft-Exchange-Diagnostics: 1; DM2PR07MB431; 3:z9Sv7fy6QdNFa6pVe6iLm47UjT4COhTQ+QVyaRW9MzcfSu7UHX/bwtbUG3kwen1aRTLf8RIekUF50dhdiDSEOhx8akUg2I+nXgWOPBqGEhcRO4uauutHuf7l/UUn5VApYtOG9Hm0OZ/0pZ5PiddnFRFp1B00w1GJ+HCKkoPuyUlKWXHKNXngluE5aS+fjYIO2GwoX7mXxlmm9gjVyUqz62byPoFOFkrz8YeAkiBtvyoK6XS5mrUKjONK88mwILFXBN9R5jt3PD/u18uk3eeV5ZR//dv/09Cpjtx0O7rN41nhuK0Rlf2nV7yVJht7gzVpw5SjJdPyTpToiR+UICPn14ljwc88YBGLNDEwle74qKdj4j57sesC+O4wa7g8JosCHxQAmokOQeDWROPAnbgoJ9FlClFvLySHCyX9J1CZtTTvQ5GEiBRQuvrWeJcA7vd+17tET96ra4d3DxXBG0xVez7qiyEumsDeHZlERhnAQrcaVG7Dpou6bkUaPyTLjfsL X-Microsoft-Exchange-Diagnostics: 1; DM2PR07MB431; 25:22VfiCdUUXnhr5BhZSL8Izj9xU3nPRo3w1zX5mGXkClANptilrq/qJ6cOL/UqhM+aYzq8oVnQpjGfKoi5YN4MIadlYIAd45rAAXtULc95msqo1ruNq/ppQjG68evLtMGjXlpdqMp3Xj2hsrc9KQjrKQZDMDbd4uKf/j3aT65tbIrnMpYduoQ78eubAOQjWT3KTQv61or12twFMmicwL0FVB5D4yauNVwCS7NScprqToR5Vwvn+OtCHIkivzEBXJ6CrHz7RUDKKJwr7Dmxe+c64ibXTNU7ijS6MmGGs8pIWthGixQo3D+oyjieL0a1438P/0CV0MG6VmlqC35gdukVEDifVTnDO6LzHSoqbDG1DXftmfDWqrEpm5LvwfE0Km001xfZ8e18/Nd4qEl9uaoHDYsKLj++4BfftfADfAA8WtBNYyp8rg70z/uQg0JxRjIhD7Gl1Hai2YEhh7VSZL810vA0W5M+CCLyT9kknI4smM=; 31:40Biv+9XICPzwKzRGNmlM9hxxce930D7fTA257a4Us13L4yJ2BjvB1rumsi9Jx464yvAkMpDFrhrsOMPXe8tlg5Xxy2NGlO/215+tzE2ZepMpGf/XFJ137WduU9rrRNjEaOUKI9kRb4xff3ulWJO1UPiJ6unjKQdaz+5CjgWbf29s4l0j5wVm1QoL7jCL1bOYThc6RijKjziGZYzyTkLxnBhzwc0MzZF31RSuPuBkcp+1jB4+valbbMXiXYSPrJT X-Microsoft-Exchange-Diagnostics: 1; DM2PR07MB431; 20:3XUWfXgnFM5cx8KNIR2Tq+qxZYz3moSZiBC1EbtQCkDFGG1zCiWLiI3eUBdWia5jrzzEwHeeb+/l4Tscd3fHWAwnI0YCpu8VOWcZLNsl0IOuMqppeC6RWz8ClnjaTrgQbgAt+jk2Ih2KhVsgQiOOhJhukrn4mgsGsxIsfquXCPaQ+ASX4p90NoHept4Z5ZeG/P/vMeBsB1hQbzsBazqAgKHB/UDSi9hnxqy21B0OumvWEOqi17KrEcjhufaOaZgLuS2/uGu0IBzw76ZYU41DnwJn558kmmOUPDdpczn2ZnucFncraakp/Fqvm0UKkeIVoiKAnF1ZmvMOdHQD/o4UAfqGkfSpIkIZMk12UOaE6JqBQ7oIwAqFKS97zBALrpNuotqA83/vHVEYbySOsTqo2lDCA11SAO6On7gvONwvYQtGW3ZMrLHea7+Zg0ic9QQ/egGYDG3Ogf4nsTgNAKpILDKrct37dXmj/h80Frgnocm/qyxdvnZZZTY+w/ClNfQ2 X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(601004)(2401047)(13018025)(13016025)(8121501046)(5005006)(93006095)(93001095)(100000703101)(100105400095)(10201501046)(3002001)(6041248)(20161123555025)(20161123564025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123562025)(20161123558100)(20161123560025)(6072148)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:DM2PR07MB431; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:DM2PR07MB431; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; DM2PR07MB431; 4:fpioKnX7J2cD3yjMEbBy+ayic5a/5rL1Yp3d9/mdHpC?= =?us-ascii?Q?qihhgBrq2OpxhYn3bD70V1PET7lUg8ZteAHqxIqTM+UIkNfY9vetBoI4Cipj?= =?us-ascii?Q?UDSvBxRmooWQs1KnKmhryjp0z5eYaCLyCjL619bV9wD/blITK0WCxt5JC1dN?= =?us-ascii?Q?/uQnwc4XSl+CQvNXHjh17dfycaLcUYtZz05VQRt+ujb57zBGz7SD7j78dsJD?= =?us-ascii?Q?a2wBVup4l172qHjHLWIKm0Ds8fcEuwCCYQ58+mI+3B5n89e6xiaxojma/r/g?= =?us-ascii?Q?+C8Wc+sNChE//3XnSGqRjMCceKh8xG/S7/vQT2mezUjP9qQcndyrU/3YPHbk?= =?us-ascii?Q?2W1P5m6dkD+M3qEHatxMBGgmu9y/I3IGjzch9rh4ElZnTx00UMWvlNFQkGyB?= =?us-ascii?Q?zrgZT1Dbsb7GE2vDD7MOdkjQLyYOjpOi4skl+QZOI9TY/HwBWQyUJX5YBu0z?= =?us-ascii?Q?gJ/XTKcD98G4Wx83F397FElKhJfx4E7fbxhjZxGGaVEr7SqW7rR9/od8Emew?= =?us-ascii?Q?l5Hl7YRqgLzDfbW4yh5K4x+gflQCKEnAOhmy1TT7tDckSEMUm2gFOz7EimSC?= =?us-ascii?Q?to9pj+3jIh8WLZAM50x4OxMNtpD36cBCyVCpL9l1g4MyT5GRVQq7Ln8xzmeM?= =?us-ascii?Q?BNOqePqiV34ogwH7QiBc0J7I/8PEstLEZfbYlD+kfbhM24n5ofvKPDHm4s5g?= =?us-ascii?Q?WaiWB0Voh3JB0s+u6d4DVlgaDBiDZM+Jxty+f7oeaeI2Q/w9xjnwMRpPNCe4?= =?us-ascii?Q?t32uVUxNpw5Csp422ecQ5FK4aO74FpVYZk+uQjGgayr547R03Jcm/vhLXYGN?= =?us-ascii?Q?MsDzhr5mQcVKO18VJ8PROIYod1BAM8+qus/eMksR3hwN5T0bDusvskHyxhtz?= =?us-ascii?Q?DYDho89bvY8BM6dykTFoN0enIl3oqP8z7Xn1ZkcAjK6gUcpfas5VbEn+BCUY?= =?us-ascii?Q?R1NFabi17m5ypoosoJ1Vl9LSLx8cgO0xe/qZU3iXdGOECVt7zRwDFrKDysV0?= =?us-ascii?Q?tpjwi6U/bYRDkbYYSH1PFAB4UqGYWtMYGhWDM4sxkdEgKphrBy64LhobdfHa?= =?us-ascii?Q?wQZMx1getuuN+nMhfEn9Q+1n/jzmNvISlLFHpWEXycoFqdOTyc4/U19oyhGb?= =?us-ascii?Q?gNhgGdjSXBDkwLwBqd1iox10WStUrdzY/pq3+egLbdF8L5oMsx+Dh4hcB6wq?= =?us-ascii?Q?zrE5uH9J3cBE=3D?= X-Forefront-PRVS: 03319F6FEF X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; DM2PR07MB431; 23:sNF70y/iZ1DmsrgAVEUMSgjUhpTaYwlkOy9zohGj/m?= =?us-ascii?Q?UG7tzy+mxGshTp1vSYqW4VJtEmA8H+Q2zwCZ5usO2b9mABeq/60F/rrRVHdP?= =?us-ascii?Q?+J1yJ89kegJZu/B9Vq84Tgk68JkbNjH1zN32XhW9bM2Wmd1l4BnGD+4ft8Nn?= =?us-ascii?Q?RZ11Xtxz9pDp0uEzLWs9IKbmeoSALazp1QK/54evQKCKOYsiO4AFp/CwhAPB?= =?us-ascii?Q?cgC5cpVg6EAZ+uXepq9c9vBoWJrpJyMFs/9d44qa0p9BBOs5H47Qdm0p1Uas?= =?us-ascii?Q?c/DtlfEZeM0fYLCKFy9dCffnF0QqCIRHHvjEJ32pVnLmrbXaygfNwflrO7+Z?= =?us-ascii?Q?Wzr0kP7xcqtP4xra1GOnQRagmaEyQ4Dt93C0PxftfvtQcGo7KSLgU78YePzU?= =?us-ascii?Q?OOPweDe5k3ocZtonR7bgh4zzWbRCnWEctK4QCw7bwS/jvE+Ibg2vPNHnt8Cy?= =?us-ascii?Q?skkk5EaQkVJLY30YC9586ZCfU+qaXHMkKDTzOIgj1mchC9R59dP/HXeKUJr0?= =?us-ascii?Q?B6/HGGDBTTr138P1/gqiaToixFGJXAiQMi7BZ07sPqQ4CFtSxBxDH2Lz/Mw+?= =?us-ascii?Q?oFxO5QHvt78XFi0dqb4dDoovanYHpaS3aKP0GjMRtRNzzdPSFPOKwzVBg/tI?= =?us-ascii?Q?faWKvQu6ip/KZmr+hKiDMxseX6mHs1rULpKCLfHzvTQLy4WN8q798AwwsWQf?= =?us-ascii?Q?SsEJDMi9OxgtNQTtsKx1LKZ1BfbX60zeUNX8VRf6QkWU8AG1Yfcswf2jjcI7?= =?us-ascii?Q?2BLr7OhkyfWsn0iZ4s7Wp709dI3jOkAxkCvcc2orsGV7vFImV+PIrSc39P+J?= =?us-ascii?Q?z5CPXhqyfwBW+ii5NC5Yb7VMNpLk0ZiyRUDOmJhf5KuwpIAzr3vCHOk4aAwR?= =?us-ascii?Q?gH/8xyzyiMnq6Mt0yMxocKX5d5TueziNwnYHq1+WV/BrBl4qyVwm4oJJe6RI?= =?us-ascii?Q?tphD7jfVqxVHUvP3nplzESRqJ6m3apBm0oJzAFID3L2REQq1lttTNh+RWQJK?= =?us-ascii?Q?DouJYhkSZMFk//2cF0xQPhMEhqz3luCsXUWiMZqjUQL/9JUZ2BejtrVgYTwj?= =?us-ascii?Q?GQ13iw8LdVT0ex0b1ZGJKeceNlLDt7m86XSiRQJ8I6TIjYVDjti51cnIqfq8?= =?us-ascii?Q?2bdGzw3/9QHdyyFb/KiwpPlX8RUQjj?= X-Microsoft-Exchange-Diagnostics: 1; DM2PR07MB431; 6:pbwG0Dy2PbfYcdlv38QBX68M+TDC749pB+X4DZZcwHL4ROmnj59m+1uREQmt/v5GMDF6OZdUc1lRa7PhNxRBi52ZH6I1MuaotWcCV9yfIQqBoOdkf8wFRrHu57Fkwx48XdqUhrygjue82U69Gt6O1M0RUy4lSoCrOcbwZuhlgMuGbRdeFG/4sgTsa4SCz+cxGVQXBbcuKnwsjSlNc7u1oG657RGis9QQU89B3IJCTAV3voSyzC2+PRP9KuN+zrF42Qp3QgklR7vkIEovD3eboWLSdyYOC/qRVwb5ywXFMRsFHXGC1/SIg3Es00XRfFVD7tBOFiEAsbI79cgUnbKNEP+f+pHt4RYi/S2L52aqdsSuokDIKTWiIr3Z2spDg0axDWnsuO+2SODfsJL2ZTBosCXcnXmMoAhkqHbXB6EbMo8WtmPXOhLQYv1SUYSUZghOSohsmBrjhv34VYbstSge0cGeBQCKCZxfnFYMmPsHgkrFVxkq6HY/0y/gM/f+LlyT1QciENVaRpCZoe4+1MuMjg== X-Microsoft-Exchange-Diagnostics: 1; DM2PR07MB431; 5:Xp7aKP5oPQI6mSLFaJl7fv8i9BVwBlD45fX709Bjq5DUW6tewqmODWP5YHjC+jyjjjkW9Hpeze2OixaW6Q4I4lAo3QVymtXw1gXctclhWub0cesInvEhwaiGeOfdV5ywrhIY0vw3Bs7KUvFLyGzUFWogVHxOgwspeSLFcSznjdkR51Hdva/mxQP4RrPqVSQZuwrpXJ4VigL9bmwWnnn68plZ7XGDFuFBXUN4QgrMSEekOoBdnIGfjwtWxcUFzs61sBbuKosUxf4+VDP3E1yiGHjdGxXC04YrD/fg/vBKORqhTynyqp+x/j3SSdJCqG+layIlaDLVg4AtKT0FMg6L/A1YR06Ey9bWXkqbJoHXL2sLncc+kVws03slN2540uiss+YPLElpxtg/veKfJIdY0oABPQGV3DQ5beaSl0GHVh+0GMckk2B8aJqwBW0ERsvlUL6Azz6TUzl8XoXrwbJfnA2yJgoCuZZoha+2GnNN0KWncPhRPLATtXdoLr0buQa8; 24:IrlAFoB/TczFLTPjpBEu1vlA4lS5gdC0HTtfhmi/H4WrekAgcKb5/zVdvWSO9XHJE5GpvqlUfn1Lgj61v5SDvAZRYM9oJt8lXG8VrNDxcVI= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; DM2PR07MB431; 7:UyIqfFd+L5EZIhZHghglTfYgk1DNha8DKyWnxNnf8kTqv3wREI1vBV7aZMtQtUXGN+3/N9lNN0XEUKwoml5K4EDi+vlwFT3qrF09B0WhqFjj6oo7sO/luZazsbiA9SC2Sj2nmps6oj1lVFFDadMykb0ekoa/an6WCgNDV7UaCtHoUuvH3upzMJ03XSgdk9+RlDZg/wGseS7v4yEB5uGSkNPuZExs0q7WfB/awtJbJEeypw/a87ewLJwxdGxXmJ1nPjgqdaeSmm2eLMAEAGtkCDy2i4jwfu24A3jMlmJxafE6mEa4fQzwWE3okMIF35xK+qX1yq79IuY1/P4r+tbqwQ== X-OriginatorOrg: cavium.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Jun 2017 21:43:42.9193 (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: DM2PR07MB431 Sender: target-devel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: target-devel@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Quinn Tran Merge active/outstanding cmd arrays from target side and initiator side together in prepration for Target Multi Queue support. Signed-off-by: Quinn Tran Signed-off-by: Himanshu Madhani --- drivers/scsi/qla2xxx/qla_def.h | 15 +++- drivers/scsi/qla2xxx/qla_gbl.h | 2 - drivers/scsi/qla2xxx/qla_inline.h | 1 + drivers/scsi/qla2xxx/qla_isr.c | 48 +++++++++---- drivers/scsi/qla2xxx/qla_os.c | 75 ++++++++++++++------ drivers/scsi/qla2xxx/qla_target.c | 144 ++++++++++++-------------------------- drivers/scsi/qla2xxx/qla_target.h | 23 ++++-- 7 files changed, 164 insertions(+), 144 deletions(-) diff --git a/drivers/scsi/qla2xxx/qla_def.h b/drivers/scsi/qla2xxx/qla_def.h index ddf93efe3986..1b5049b1ef4a 100644 --- a/drivers/scsi/qla2xxx/qla_def.h +++ b/drivers/scsi/qla2xxx/qla_def.h @@ -437,7 +437,18 @@ struct srb_iocb { #define SRB_NACK_PRLI 17 #define SRB_NACK_LOGO 18 +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; struct fc_port *fcport; struct scsi_qla_host *vha; @@ -3287,9 +3298,6 @@ struct qlt_hw_data { uint32_t __iomem *atio_q_out; struct qla_tgt_func_tmpl *tgt_ops; - struct qla_tgt_cmd *cmds[DEFAULT_OUTSTANDING_COMMANDS]; - uint16_t current_handle; - struct qla_tgt_vp_map *tgt_vp_map; int saved_set; @@ -4258,6 +4266,7 @@ enum nexus_wait_type { WAIT_LUN, }; +#include "qla_target.h" #include "qla_gbl.h" #include "qla_dbg.h" #include "qla_inline.h" diff --git a/drivers/scsi/qla2xxx/qla_gbl.h b/drivers/scsi/qla2xxx/qla_gbl.h index f8540f5c9e5d..63355f40ff2f 100644 --- a/drivers/scsi/qla2xxx/qla_gbl.h +++ b/drivers/scsi/qla2xxx/qla_gbl.h @@ -834,8 +834,6 @@ extern irqreturn_t qla8044_intr_handler(int, void *); extern void qla82xx_mbx_completion(scsi_qla_host_t *, uint16_t); extern int qla8044_abort_isp(scsi_qla_host_t *); extern int qla8044_check_fw_alive(struct scsi_qla_host *); - -extern void qlt_host_reset_handler(struct qla_hw_data *ha); extern int qla_get_exlogin_status(scsi_qla_host_t *, uint16_t *, uint16_t *); extern int qla_set_exlogin_mem_cfg(scsi_qla_host_t *vha, dma_addr_t phys_addr); diff --git a/drivers/scsi/qla2xxx/qla_inline.h b/drivers/scsi/qla2xxx/qla_inline.h index 9996ec0daab1..99028d48c664 100644 --- a/drivers/scsi/qla2xxx/qla_inline.h +++ b/drivers/scsi/qla2xxx/qla_inline.h @@ -250,6 +250,7 @@ qla2x00_get_sp(scsi_qla_host_t *vha, fc_port_t *fcport, gfp_t flag) memset(sp, 0, sizeof(*sp)); sp->fcport = fcport; + sp->cmd_type = TYPE_SRB; sp->iocbs = 1; sp->vha = vha; done: diff --git a/drivers/scsi/qla2xxx/qla_isr.c b/drivers/scsi/qla2xxx/qla_isr.c index 2984abcc29e7..8aaddb75f964 100644 --- a/drivers/scsi/qla2xxx/qla_isr.c +++ b/drivers/scsi/qla2xxx/qla_isr.c @@ -17,7 +17,7 @@ static void qla2x00_mbx_completion(scsi_qla_host_t *, uint16_t); static void qla2x00_status_entry(scsi_qla_host_t *, struct rsp_que *, void *); static void qla2x00_status_cont_entry(struct rsp_que *, sts_cont_entry_t *); -static void qla2x00_error_entry(scsi_qla_host_t *, struct rsp_que *, +static int qla2x00_error_entry(scsi_qla_host_t *, struct rsp_que *, sts_entry_t *); /** @@ -2280,6 +2280,14 @@ qla2x00_status_entry(scsi_qla_host_t *vha, struct rsp_que *rsp, void *pkt) return; } + if (sp->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); + return; + } + if (unlikely((state_flags & BIT_1) && (sp->type == SRB_BIDI_CMD))) { qla25xx_process_bidir_status_iocb(vha, pkt, req, handle); return; @@ -2632,8 +2640,9 @@ qla2x00_status_cont_entry(struct rsp_que *rsp, sts_cont_entry_t *pkt) * qla2x00_error_entry() - Process an error entry. * @ha: SCSI driver HA context * @pkt: Entry pointer + * return : 1=allow further error analysis. 0=no additional error analysis. */ -static void +static int qla2x00_error_entry(scsi_qla_host_t *vha, struct rsp_que *rsp, sts_entry_t *pkt) { srb_t *sp; @@ -2654,18 +2663,35 @@ qla2x00_error_entry(scsi_qla_host_t *vha, struct rsp_que *rsp, sts_entry_t *pkt) if (pkt->entry_status & RF_BUSY) res = DID_BUS_BUSY << 16; - if (pkt->entry_type == NOTIFY_ACK_TYPE && - pkt->handle == QLA_TGT_SKIP_HANDLE) - return; + if ((pkt->handle & ~QLA_TGT_HANDLE_MASK) == QLA_TGT_SKIP_HANDLE) + return 0; - sp = qla2x00_get_sp_from_handle(vha, func, req, pkt); - if (sp) { - sp->done(sp, res); - return; + switch (pkt->entry_type) { + case NOTIFY_ACK_TYPE: + case STATUS_TYPE: + case STATUS_CONT_TYPE: + case LOGINOUT_PORT_IOCB_TYPE: + case CT_IOCB_TYPE: + case ELS_IOCB_TYPE: + case ABORT_IOCB_TYPE: + case MBX_IOCB_TYPE: + sp = qla2x00_get_sp_from_handle(vha, func, req, pkt); + if (sp) { + sp->done(sp, res); + return 0; + } + break; + + case ABTS_RESP_24XX: + case CTIO_TYPE7: + case CTIO_CRC2: + default: + return 1; } fatal: ql_log(ql_log_warn, vha, 0x5030, "Error entry - invalid handle/queue (%04x).\n", que); + return 0; } /** @@ -2746,9 +2772,7 @@ void qla24xx_process_response_queue(struct scsi_qla_host *vha, } if (pkt->entry_status != 0) { - qla2x00_error_entry(vha, rsp, (sts_entry_t *) pkt); - - if (qlt_24xx_process_response_error(vha, pkt)) + if (qla2x00_error_entry(vha, rsp, (sts_entry_t *) pkt)) goto process_err; ((response_t *)pkt)->signature = RESPONSE_PROCESSED; diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c index dcf50aa61e9d..d92e65b40c44 100644 --- a/drivers/scsi/qla2xxx/qla_os.c +++ b/drivers/scsi/qla2xxx/qla_os.c @@ -1649,8 +1649,9 @@ qla2x00_abort_all_cmds(scsi_qla_host_t *vha, int res) srb_t *sp; struct qla_hw_data *ha = vha->hw; struct req_que *req; - - qlt_host_reset_handler(ha); + struct qla_tgt *tgt = vha->vha_tgt.qla_tgt; + struct qla_tgt_cmd *cmd; + uint8_t trace = 0; spin_lock_irqsave(&ha->hardware_lock, flags); for (que = 0; que < ha->max_req_queues; que++) { @@ -1662,27 +1663,57 @@ qla2x00_abort_all_cmds(scsi_qla_host_t *vha, int res) for (cnt = 1; cnt < req->num_outstanding_cmds; cnt++) { sp = req->outstanding_cmds[cnt]; if (sp) { - /* Don't abort commands in adapter during EEH - * recovery as it's not accessible/responding. - */ - if (GET_CMD_SP(sp) && !ha->flags.eeh_busy && - (sp->type == SRB_SCSI_CMD)) { - /* Get a reference to the sp and drop the lock. - * The reference ensures this sp->done() call - * - and not the call in qla2xxx_eh_abort() - - * ends the SCSI command (with result 'res'). + req->outstanding_cmds[cnt] = NULL; + if (sp->cmd_type == TYPE_SRB) { + /* + * Don't abort commands in adapter + * during EEH recovery as it's not + * accessible/responding. */ - sp_get(sp); - spin_unlock_irqrestore(&ha->hardware_lock, flags); - status = qla2xxx_eh_abort(GET_CMD_SP(sp)); - spin_lock_irqsave(&ha->hardware_lock, flags); - /* Get rid of extra reference if immediate exit - * from ql2xxx_eh_abort */ - if (status == FAILED && (qla2x00_isp_reg_stat(ha))) - atomic_dec(&sp->ref_count); + if (GET_CMD_SP(sp) && + !ha->flags.eeh_busy && + (sp->type == SRB_SCSI_CMD)) { + /* + * Get a reference to the sp + * and drop the lock. The + * reference ensures this + * sp->done() call and not the + * call in qla2xxx_eh_abort() + * ends the SCSI command (with + * result 'res'). + */ + sp_get(sp); + spin_unlock_irqrestore( + &ha->hardware_lock, flags); + status = qla2xxx_eh_abort( + GET_CMD_SP(sp)); + spin_lock_irqsave( + &ha->hardware_lock, flags); + /* + * Get rid of extra reference + * if immediate exit from + * ql2xxx_eh_abort + */ + if (status == FAILED && + (qla2x00_isp_reg_stat(ha))) + atomic_dec( + &sp->ref_count); + } + sp->done(sp, res); + } else { + if (!vha->hw->tgt.tgt_ops || !tgt || + qla_ini_mode_enabled(vha)) { + if (!trace) + ql_dbg(ql_dbg_tgt_mgt, + vha, 0xf003, + "HOST-ABORT-HNDLR: dpc_flags=%lx. Target mode disabled\n", + vha->dpc_flags); + continue; + } + cmd = (struct qla_tgt_cmd *)sp; + qlt_abort_cmd_on_host_reset(cmd->vha, + cmd); } - req->outstanding_cmds[cnt] = NULL; - sp->done(sp, res); } } } @@ -5862,6 +5893,8 @@ qla2x00_timer(scsi_qla_host_t *vha) sp = req->outstanding_cmds[index]; if (!sp) continue; + if (sp->cmd_type != TYPE_SRB) + continue; if (sp->type != SRB_SCSI_CMD) continue; sfcp = sp->fcport; diff --git a/drivers/scsi/qla2xxx/qla_target.c b/drivers/scsi/qla2xxx/qla_target.c index 88eea4d34487..25145be51381 100644 --- a/drivers/scsi/qla2xxx/qla_target.c +++ b/drivers/scsi/qla2xxx/qla_target.c @@ -115,8 +115,6 @@ static int qlt_issue_task_mgmt(struct fc_port *sess, u64 lun, int fn, void *iocb, int flags); static void qlt_send_term_exchange(struct scsi_qla_host *ha, struct qla_tgt_cmd *cmd, struct atio_from_isp *atio, int ha_locked, int ul_abort); -static void qlt_abort_cmd_on_host_reset(struct scsi_qla_host *vha, - struct qla_tgt_cmd *cmd); static void qlt_alloc_qfull_cmd(struct scsi_qla_host *vha, struct atio_from_isp *atio, uint16_t status, int qfull); static void qlt_disable_vha(struct scsi_qla_host *vha); @@ -2291,28 +2289,35 @@ static inline void *qlt_get_req_pkt(struct scsi_qla_host *vha) /* ha->hardware_lock supposed to be held on entry */ static inline uint32_t qlt_make_handle(struct scsi_qla_host *vha) { - struct qla_hw_data *ha = vha->hw; uint32_t h; + int index; + uint8_t found = 0; + struct req_que *req = vha->req; + + h = req->current_outstanding_cmd; - h = ha->tgt.current_handle; - /* always increment cmd handle */ - do { - ++h; - if (h > DEFAULT_OUTSTANDING_COMMANDS) - h = 1; /* 0 is QLA_TGT_NULL_HANDLE */ - if (h == ha->tgt.current_handle) { - ql_dbg(ql_dbg_io, vha, 0x305b, - "qla_target(%d): Ran out of " - "empty cmd slots in ha %p\n", vha->vp_idx, ha); - h = QLA_TGT_NULL_HANDLE; + for (index = 1; index < req->num_outstanding_cmds; index++) { + h++; + if (h == req->num_outstanding_cmds) + h = 1; + + if (h == QLA_TGT_SKIP_HANDLE) + continue; + + if (!req->outstanding_cmds[h]) { + found = 1; break; } - } while ((h == QLA_TGT_NULL_HANDLE) || - (h == QLA_TGT_SKIP_HANDLE) || - (ha->tgt.cmds[h-1] != NULL)); + } - if (h != QLA_TGT_NULL_HANDLE) - ha->tgt.current_handle = h; + if (found) { + req->current_outstanding_cmd = h; + } else { + ql_dbg(ql_dbg_io, vha, 0x305b, + "qla_target(%d): Ran out of empty cmd slots\n", + vha->vp_idx); + h = QLA_TGT_NULL_HANDLE; + } return h; } @@ -2323,7 +2328,6 @@ static int qlt_24xx_build_ctio_pkt(struct qla_tgt_prm *prm, { uint32_t h; struct ctio7_to_24xx *pkt; - struct qla_hw_data *ha = vha->hw; struct atio_from_isp *atio = &prm->cmd->atio; uint16_t temp; @@ -2343,8 +2347,9 @@ static int qlt_24xx_build_ctio_pkt(struct qla_tgt_prm *prm, * the session and, so, the command. */ return -EAGAIN; - } else - ha->tgt.cmds[h - 1] = prm->cmd; + } else { + vha->req->outstanding_cmds[h] = (srb_t *)prm->cmd; + } pkt->handle = h | CTIO_COMPLETION_HANDLE_MARK; pkt->nport_handle = prm->cmd->loop_id; @@ -2888,7 +2893,7 @@ qlt_build_ctio_crc2_pkt(struct qla_tgt_prm *prm, scsi_qla_host_t *vha) */ return -EAGAIN; } else - ha->tgt.cmds[h-1] = prm->cmd; + vha->req->outstanding_cmds[h] = (srb_t *)prm->cmd; pkt->handle = h | CTIO_COMPLETION_HANDLE_MARK; pkt->nport_handle = cpu_to_le16(prm->cmd->loop_id); @@ -2994,7 +2999,7 @@ qlt_build_ctio_crc2_pkt(struct qla_tgt_prm *prm, scsi_qla_host_t *vha) crc_queuing_error: /* Cleanup will be performed by the caller */ - vha->hw->tgt.cmds[h - 1] = NULL; + vha->req->outstanding_cmds[h] = NULL; return QLA_FUNCTION_FAILED; } @@ -3676,50 +3681,38 @@ static int qlt_term_ctio_exchange(struct scsi_qla_host *vha, void *ctio, return term; } -/* ha->hardware_lock supposed to be held on entry */ -static inline struct qla_tgt_cmd *qlt_get_cmd(struct scsi_qla_host *vha, - uint32_t handle) -{ - struct qla_hw_data *ha = vha->hw; - - handle--; - if (ha->tgt.cmds[handle] != NULL) { - struct qla_tgt_cmd *cmd = ha->tgt.cmds[handle]; - ha->tgt.cmds[handle] = NULL; - return cmd; - } else - return NULL; -} /* ha->hardware_lock supposed to be held on entry */ static struct qla_tgt_cmd *qlt_ctio_to_cmd(struct scsi_qla_host *vha, uint32_t handle, void *ctio) { struct qla_tgt_cmd *cmd = NULL; + struct req_que *req = vha->req; /* Clear out internal marks */ - handle &= ~(CTIO_COMPLETION_HANDLE_MARK | - CTIO_INTERMEDIATE_HANDLE_MARK); + handle &= ~QLA_TGT_HANDLE_MASK; if (handle != QLA_TGT_NULL_HANDLE) { if (unlikely(handle == QLA_TGT_SKIP_HANDLE)) return NULL; - /* handle-1 is actually used */ - if (unlikely(handle > DEFAULT_OUTSTANDING_COMMANDS)) { + handle &= QLA_CMD_HANDLE_MASK; + + if (unlikely(handle > req->num_outstanding_cmds)) { ql_dbg(ql_dbg_tgt, vha, 0xe052, "qla_target(%d): Wrong handle %x received\n", vha->vp_idx, handle); return NULL; } - cmd = qlt_get_cmd(vha, handle); - if (unlikely(cmd == NULL)) { - ql_dbg(ql_dbg_tgt, vha, 0xe053, - "qla_target(%d): Suspicious: unable to " - "find the command with handle %x\n", vha->vp_idx, - handle); + cmd = (struct qla_tgt_cmd *)req->outstanding_cmds[handle]; + if (unlikely((cmd == NULL) || + (cmd->cmd_type != TYPE_TGT_CMD))) { + ql_dbg(ql_dbg_async, vha, 0xe053, + "qla_target(%d): Suspicious: unable to find the command with handle %x cmd %p\n", + vha->vp_idx, handle, cmd); return NULL; } + req->outstanding_cmds[handle] = NULL; } else if (ctio != NULL) { /* We can't get loop ID from CTIO7 */ ql_dbg(ql_dbg_tgt, vha, 0xe054, @@ -3732,7 +3725,7 @@ static struct qla_tgt_cmd *qlt_ctio_to_cmd(struct scsi_qla_host *vha, } /* hardware_lock should be held by caller. */ -static void +void qlt_abort_cmd_on_host_reset(struct scsi_qla_host *vha, struct qla_tgt_cmd *cmd) { struct qla_hw_data *ha = vha->hw; @@ -3767,42 +3760,6 @@ qlt_abort_cmd_on_host_reset(struct scsi_qla_host *vha, struct qla_tgt_cmd *cmd) ha->tgt.tgt_ops->free_cmd(cmd); } -void -qlt_host_reset_handler(struct qla_hw_data *ha) -{ - struct qla_tgt_cmd *cmd; - unsigned long flags; - scsi_qla_host_t *base_vha = pci_get_drvdata(ha->pdev); - scsi_qla_host_t *vha = NULL; - struct qla_tgt *tgt = base_vha->vha_tgt.qla_tgt; - uint32_t i; - - if (!base_vha->hw->tgt.tgt_ops) - return; - - if (!tgt || qla_ini_mode_enabled(base_vha)) { - ql_dbg(ql_dbg_tgt_mgt, vha, 0xf003, - "Target mode disabled\n"); - return; - } - - ql_dbg(ql_dbg_tgt_mgt, vha, 0xff10, - "HOST-ABORT-HNDLR: base_vha->dpc_flags=%lx.\n", - base_vha->dpc_flags); - - spin_lock_irqsave(&ha->hardware_lock, flags); - for (i = 1; i < DEFAULT_OUTSTANDING_COMMANDS + 1; i++) { - cmd = qlt_get_cmd(base_vha, i); - if (!cmd) - continue; - /* ha->tgt.cmds entry is cleared by qlt_get_cmd. */ - vha = cmd->vha; - qlt_abort_cmd_on_host_reset(vha, cmd); - } - spin_unlock_irqrestore(&ha->hardware_lock, flags); -} - - /* * ha->hardware_lock supposed to be held on entry. Might drop it, then reaquire */ @@ -4084,7 +4041,7 @@ static struct qla_tgt_cmd *qlt_get_tag(scsi_qla_host_t *vha, 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; memcpy(&cmd->atio, atio, sizeof(*atio)); cmd->state = QLA_TGT_STATE_NEW; cmd->tgt = vha->vha_tgt.qla_tgt; @@ -6638,21 +6595,6 @@ qlt_83xx_iospace_config(struct qla_hw_data *ha) ha->msix_count += 1; /* For ATIO Q */ } -int -qlt_24xx_process_response_error(struct scsi_qla_host *vha, - struct sts_entry_24xx *pkt) -{ - switch (pkt->entry_type) { - case ABTS_RECV_24XX: - case ABTS_RESP_24XX: - case CTIO_TYPE7: - case NOTIFY_ACK_TYPE: - case CTIO_CRC2: - return 1; - default: - return 0; - } -} void qlt_modify_vp_config(struct scsi_qla_host *vha, diff --git a/drivers/scsi/qla2xxx/qla_target.h b/drivers/scsi/qla2xxx/qla_target.h index c328a267c4c3..2120456c4709 100644 --- a/drivers/scsi/qla2xxx/qla_target.h +++ b/drivers/scsi/qla2xxx/qla_target.h @@ -70,6 +70,16 @@ /* Used to mark CTIO as intermediate */ #define CTIO_INTERMEDIATE_HANDLE_MARK BIT_30 +#define QLA_TGT_NULL_HANDLE 0 + +#define QLA_TGT_HANDLE_MASK 0xF0000000 +#define QLA_QPID_HANDLE_MASK 0x000F0000 /* qpair id mask */ +#define QLA_CMD_HANDLE_MASK 0x0000FFFF +#define QLA_TGT_SKIP_HANDLE (0xFFFFFFFF & ~QLA_TGT_HANDLE_MASK) + +#define QLA_QPID_HANDLE_SHIFT 16 +#define GET_QID(_h) ((_h & QLA_QPID_HANDLE_MASK) >> QLA_QPID_HANDLE_SHIFT) + #ifndef OF_SS_MODE_0 /* @@ -664,6 +674,7 @@ struct abts_resp_from_24xx_fw { struct qla_tgt_mgmt_cmd; struct fc_port; +struct qla_tgt_cmd; /* * This structure provides a template of function calls that the @@ -744,11 +755,6 @@ int qla2x00_wait_for_hba_online(struct scsi_qla_host *); #define QLA_TGT_STATE_DATA_IN 2 /* Data arrived + target processing */ #define QLA_TGT_STATE_PROCESSED 3 /* target done processing */ - -/* Special handles */ -#define QLA_TGT_NULL_HANDLE 0 -#define QLA_TGT_SKIP_HANDLE (0xFFFFFFFF & ~CTIO_COMPLETION_HANDLE_MARK) - /* ATIO task_codes field */ #define ATIO_SIMPLE_QUEUE 0 #define ATIO_HEAD_OF_QUEUE 1 @@ -858,6 +864,11 @@ 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; int state; @@ -1077,5 +1088,7 @@ extern void qlt_do_generation_tick(struct scsi_qla_host *, int *); void qlt_send_resp_ctio(scsi_qla_host_t *, struct qla_tgt_cmd *, uint8_t, uint8_t, uint8_t, uint8_t); +extern void qlt_abort_cmd_on_host_reset(struct scsi_qla_host *, + struct qla_tgt_cmd *); #endif /* __QLA_TARGET_H */