From patchwork Wed Nov 30 20:24:56 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Madhani, Himanshu" X-Patchwork-Id: 9454905 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 2123C6071E for ; Wed, 30 Nov 2016 20:44:57 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 150D8283F3 for ; Wed, 30 Nov 2016 20:44:57 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 09B3028472; Wed, 30 Nov 2016 20:44:57 +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=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 CB63F28400 for ; Wed, 30 Nov 2016 20:44:54 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757623AbcK3UnO (ORCPT ); Wed, 30 Nov 2016 15:43:14 -0500 Received: from mail-sn1nam01on0085.outbound.protection.outlook.com ([104.47.32.85]:50533 "EHLO NAM01-SN1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1757162AbcK3Ulj (ORCPT ); Wed, 30 Nov 2016 15:41:39 -0500 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=IJHGJw6I8yAIb490WD7JRbTnZR+H45gjdXWsrTVPk3U=; b=QeDKVnD7dccqcq81sMH2WxZMY47YkmW+lhKP2dGKyqa6D+SKGcaaPht9Jhobjt+LZ+WnKkv1GH8Lg47MYTK+sTiuBRKLkBat0fcMTFNXcypl5yHQTHWsWpcKCh52sKUsnRln+I7iSb5f+ifmt+TEYVtLa1lw+Pb0KTaZxnYLY7I= Received: from BY2PR07CA0016.namprd07.prod.outlook.com (10.166.107.11) by BLUPR0701MB2081.namprd07.prod.outlook.com (10.163.122.151) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.747.13; Wed, 30 Nov 2016 20:25:46 +0000 Received: from BN1BFFO11FD044.protection.gbl (2a01:111:f400:7c10::1:184) by BY2PR07CA0016.outlook.office365.com (2a01:111:e400:7bff::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.761.9 via Frontend Transport; Wed, 30 Nov 2016 20:25:45 +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 BN1BFFO11FD044.mail.protection.outlook.com (10.58.144.107) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P384) id 15.1.734.4 via Frontend Transport; Wed, 30 Nov 2016 20:25:44 +0000 X-IncomingTopHeaderMarker: OriginalChecksum:; UpperCasedChecksum:; SizeAsReceived:1096; Count:15 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.309.2; Wed, 30 Nov 2016 12:25:26 -0800 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 uAUKPC1Q016482; Wed, 30 Nov 2016 12:25:12 -0800 Received: (from root@localhost) by dut1171.mv.qlogic.com (8.14.7/8.14.7/Submit) id uAUKPC67016481; Wed, 30 Nov 2016 12:25:12 -0800 From: Himanshu Madhani To: CC: , Subject: [PATCH v2 4/5] qla2xxx: Add Block Multi Queue functionality. Date: Wed, 30 Nov 2016 12:24:56 -0800 Message-ID: <1480537497-16429-5-git-send-email-himanshu.madhani@cavium.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1480537497-16429-1-git-send-email-himanshu.madhani@cavium.com> References: <1480537497-16429-1-git-send-email-himanshu.madhani@cavium.com> MIME-Version: 1.0 X-IncomingHeaderCount: 15 X-EOPAttributedMessage: 0 X-Forefront-Antispam-Report: CIP:50.232.66.26; IPV:NLI; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10009020)(6009001)(7916002)(2980300002)(428002)(199003)(189002)(110136003)(33646002)(69596002)(105586002)(39410400001)(2351001)(305945005)(626004)(5660300001)(86362001)(575784001)(4001430100002)(50226002)(107886002)(101416001)(106466001)(80596001)(5003940100001)(8676002)(81156014)(8936002)(76176999)(81166006)(42186005)(4720700003)(6916009)(47776003)(38730400001)(36756003)(50986999)(6666003)(2950100002)(92566002)(189998001)(39450400002)(2906002)(4326007)(7846002)(50466002)(48376002)(356003)(87636001); DIR:OUT; SFP:1101; SCL:1; SRVR:BLUPR0701MB2081; H:CAEXCH02.caveonetworks.com; FPR:; SPF:None; PTR:50-232-66-26-static.hfc.comcastbusiness.net; A:1; MX:1; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BN1BFFO11FD044; 1:YMkarzmgqO495PWjY0WaaZ7p98sBXjF8iKLzUNEIqLsw8Iyr5uSFBsrToi6NcbE2E3D0Khe65pZn51Z1uIlrVXSVvbrDIWe2E67CAq64i0uQhs8RhnqRhvYyeXYfJTngRNID+AXuNu7Sh3GO0u4qX61uIGkF2foKClBPqQejWUcMrSJruW8c47S7rEr0ReIIaAPYkcib1o431J3rchNEDgJhUMkheY9r8tntg/Q4wQJjIx4NiKqOPOsyh46KsGpBm8SMd3Dnvgv6IkuYRjn+i+FA2xJ9xAV1X3+7MwK+Rap/cG4kXg8k+vbcrByaYk5ZH2eKY3FQEvxu/xD4SOx+r7EoQk5QtEkGFNAvmfrIAg06AYjNYQeTq0YV0O141g/NuqGzFs/eTpdhj3QdgveykE/YWUrJQGX0vmNcr1iyRhvMVFZa9I2QnOLMupe+0/ahmECTXvFk+5+FPdTYgTZWn6l0+DUIBmdtEDe53iAQ2/WqiIBmy8ruU+QvEvoF2ZpNuNk0ydYRiYgGWrXboGf2mS7rNnFTPVmDayaEKNDvrsVlGVbSphuUd30m7MX8fU9i X-MS-Office365-Filtering-Correlation-Id: 8e43e58d-4f3d-47b5-aaac-08d4195f103f X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001); SRVR:BLUPR0701MB2081; X-Microsoft-Exchange-Diagnostics: 1; BLUPR0701MB2081; 3:ZRUYJCemhbwzbwzqDYyGlA7fpYnVi95ulpGTcdQ8seBpAUeG2Qjj8h8AvIDSCawq4KhYgpsdD1tMJj0Mzq+dUaP5vXKINxg3dahWa8V9csqoNkDiWi8J0Hz4be5ir+fCQsQvrX+3RDLRYOaQxcmEVxg1zHtvLTwfzlH47Rf6tptDnxpNM14P3hNRbVw/mS3TuCOd7X6uuJQzdA7e/FBTDxM3R6eSlAzRQexd6ySmjrYIhRvuq/9HeigOgitg8/TW8Nl4JcuHIAFcC8yoS3I+5ifVl02+HLTvD4hnPv5ch5LOurlhnTRsFze+b+JMi+spBQtw71sIBCHjm1Z5wai6X1iS+qnWxnKMRD3+JB1kpb6JzSzeGDIZ7fdlkqYQK8Z0 X-Microsoft-Exchange-Diagnostics: 1; BLUPR0701MB2081; 25:7Mg9JTWhcP0KGjDtQAYAXuk2x+xa22RmukMpmdfI6EoL6jevoezSb+PJ0HnZSftUi2CSGAKONwNFOxG+f+g7RaVKztSRM9kMvwN9jh1uxxr5gbY394++AFkYyLE0o6yIp0vwWjI37RaqMzquv7jT0XxK1qnvSDOkDi0T740zAieCkbRlVTEfk17VlwvoeWyErkAbVuVoK9KWPE0Pu9FwB0q5VonI6eUh9T3xySfS57QA3VooGAY4+OLFA8r6bHY3eaC5KBCMm3Dc0ZYW7+Ijqo1XRUJ3lXqCU2xU6tLmJC/0cMQCw73vHWROXf/gVrbUCNU9uw739/6I6v16wMdX0MNFlAnS6QpxsfPDGONTKdfAVz7tI3d4Wh4SovNoZ9m4O+KdCA+yQjy9KwPJc8ORSElkA+KqPfh84feCy4g3+rMSGwAm9CKFlk+em++y58/jmTJRwrRRzQTI971EMziUsMh+OWl4gVNuO2dObMfMRyO4VPrvhkZTQif0GXqy35/4zRWtJYw5hfNZeyoYfgxG+Ky/Sr7J8FnvaZSZFLq68S/O6CxdloM2VmSLKdnDGynUeeTXLo0A0nr0S5Mwpk14uIniBW8QxHSNvaEY9vJdn/zfQBwP+MSmpHKlUe6/ovqTAHr+fozuh/9c0KKD1olHRYfosWuoBcc0DCAZYMAfMY5akblW+P43m7uuNbaiOn8LsmSZJRyRoQ9Jgu89MfHCuNvO4OoTkwEsPpIfhHkax6yaHCcDmfHGBan02l0IhneTz2m7kCSPUpqYYsgLhk87hYXEi6fiVqae1UNx0Xtmr/Ys0Nr6LvdEa/PO6Z2Qm8awUHLJ+daoogMfn8R2CIv8aD1Ykti3yfq4glr1tHCgnlQ= X-Microsoft-Exchange-Diagnostics: 1; BLUPR0701MB2081; 31:attqKd6fmgH9TFe0D9nbLYTB7Iws0JgQJupEtEpX0SqWqO2xJZ/btUBS4y/BRbD3c1ETLSqm1RfXOamH7AGIKNNiO/12v2F0KJXK6v7fvmqpR7IbjAllIayZrXKacSy9yyJqtnpaShL1MESZoCgOiM1SHsAHNAIQ7rmZHBbEx+a8HK86yy2kR+LW5SWc4GIP1OkRxaFA2NVmWYg4o6FcIgNPKVEaqBPPBk+YHXOwcVk9wtCvCbVZB0CD6sB6Pwrit16PzQ0BhMyhpneIi+ERcmPiDRQ1G78cjqNvoNkl7Rc=; 20:eKYZVT22uvh4GBAYI7HjEM7QCuo2aO24M7sxzfLPWFSUQy0x1c8mbPTgXFJeH9xKaN3iMiE1+1EiKWEmz3DNDo1SIRiYnnAXoYDi0Dh/kvdyVyg9DrIgHyvKaV/YKt98+segyGItPjdKfnAZ0M/vU4jo9LGXrLY2W0skmp6oQqdvoshZN6dtUhhMg92+CohcptUVGLntio2NeiZyggtWFk59T5dnBgUS425d19hZHQBE5PEXqp7O9w7SfgjxBXEMNQf1KtsfcOYmWV4WdiWEfj//Mbtz93CX3Okg6oi183DRd5nysvajUxaA9HvDN+73Q4KZHIU8zBtjMi/wNNCZqAUTNlSDlnWVrw0xO/k0KBRNXvGehNK6IY0DF/9h1zmkijpgAVzKchQAwqIX48/49tzjQmcSr+Ss4ud/+YQwRic1YSv8ALQMIoKMuPkpoBpA7PbLtltGWlEypTl9GYZ2lrmlUpVmfTcDYesIBS1d9mrkoXgufvyXzNsSJDcmXL5r X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040375)(601004)(2401047)(8121501046)(5005006)(13018025)(13023025)(13017025)(13015025)(13024025)(10201501046)(3002001)(6041248)(20161123555025)(20161123562025)(20161123564025)(20161123560025)(6072148); SRVR:BLUPR0701MB2081; BCL:0; PCL:0; RULEID:; SRVR:BLUPR0701MB2081; X-Microsoft-Exchange-Diagnostics: 1; BLUPR0701MB2081; 4:hhtH4aCuGRgMLsyBMReGe+mJqGPe/gSgcPHYi+aNAr8rAXjMG42ilMVq+5HPUFyqZeoNZ7gvupgRy0cwVvQnXJAIswX4Sm+mkDlOKJzsMq4a8sX12gsLF3mBZ+VSeF1RwAhHJJ/fra65SNOhtQP3lFVICj7eikUxSKbIqxHYFNrhpRbfERSRdINVJo3gCpBlR5S1s9xjSQ9GFTUjR4etdifdww5mDcMeKFf2aHF9aOGkC4S4YUh8D2aO0tha88pHnNVXI2kZRndQmrm9bVYBuObsCSe4M+HMjpbHYsgPR7d9gTJBhKmPQW5XDGCB/TbOtf3k0XAQSflCjkAKIzehZww7s2GiWlzSNam2ctMZC4IfuIIUzz1rBj52iRONJpTP6xOnaUSX2cceseXdt4no5fbmHS06UGOqeQdGOr1ueuK11kETHilhuwiIOYMz1tpXOyps6ZzMOmU8F3dnlBhNcs3rAPT62z2YPzbOUp0GyZnn+GR1uNZSNJN/S7Lkaeiqr5ea96Gi9+55MeWn7YOsmGIUyIdz2k03dNz82fPKGyM3Tl0gEdgnMMH4smeCSiG24dsS0Fpf467P0/d2wqFiUVF0x4ZYmis2RdU3KHHwKljbDR8PVQjBhpxNODoyXOOi9sQ2rpZtMeaGprxYK0YeYds3WZFG3bhwtB5Ij0JNG/Q= X-Forefront-PRVS: 0142F22657 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BLUPR0701MB2081; 23:KsFXjwb5o7DDy2s07uqamx6NlP2RbyVYoAs4H32?= =?us-ascii?Q?xseqEXZi8MkLFEBUcs9Hc6azoFRz9/Wa4wxS7pxXUsOM4tP1rZjGhhMHy+G1?= =?us-ascii?Q?hK/z7x/wukt2Sh/3ry30hS+qYNU+7KMQ5sIt8Lsy1ZnbNTog/LeHKpCNaC2+?= =?us-ascii?Q?W0WP7WhvpqiuZopN/LxlBhccLHSscHHcZ8vYyStPvjl7fYn2ni19qZ7KJwOD?= =?us-ascii?Q?3cfJNk7ZDImGmbJziE7FzxXM+9BapVao2StPyvs6cUN3Fi4+oHyb2GAZKpxe?= =?us-ascii?Q?ZhX1l40sXbFEAfytNLhvfZArTmF5WQKSWNXV7BXGFcSfW79cPDiSmCkhkPxO?= =?us-ascii?Q?1lCvyLa5+6KF/GgotKTVNXHo96JpNm5SL0x5uFmZNrv4Tm8SY7LhLIwIkIRV?= =?us-ascii?Q?Ajs3vZmLRLE0zvPt/uNTmqZm1nXljvwcvxlH6DYck8JDrP4rNRELZxadsQko?= =?us-ascii?Q?iNW7XXM1aLc7ytnUpP5gYHU8ZFhX5W76ZPFFkF+7rswT1j85yFiD7bAWt7vO?= =?us-ascii?Q?3bAd1C7l9a0qFZ+PTQGEYlVE6sIx5gv7LbKO/K+jxCDhoBlXcrkWDMrJ5bDC?= =?us-ascii?Q?PhGAmk2rFpb2PnGtN7axx/tjO/a0T0lSeD53xkMjoxV1c+WUh77c+0lTWnn0?= =?us-ascii?Q?hjqVAyXSrl63fT2xEi0OUt1QOdZ8ia4o4KAu13RYuOfmI8CNJUvFzR8A26Os?= =?us-ascii?Q?b2DfYHpw+PWjppA6I50K94/v7PPhqXadyQ8ATp0AAKVL8siHerOk9gBoyFu1?= =?us-ascii?Q?46keFyW8v1zelxoWbl4JPTeNMXvSkL1meky8mp3YWyZ6upULulsDnJgYgm0m?= =?us-ascii?Q?A8xSyxJ0m6Goo0xAOq/EhcNJr062fufidnwZdNMfh2qtJNXjeTYIpHEtLM1V?= =?us-ascii?Q?hjJcFgNSVTITJhBmptd/cW+AdbACQhoq5iAdXBXo3NkrfFPXJVJ1azkbzc6e?= =?us-ascii?Q?beudYOQerYcXB+T8kA7q1YG/ZTNOhio4h0hib5CWgR41LYeg+GbKCYC5iHyk?= =?us-ascii?Q?e/oqamvM0Szt4ymOmFf7ejwnbbS6IXEtPVxmxm4aXiz3fe5XjTr0eY10I05L?= =?us-ascii?Q?9xAavrsjdMhjx3OLukL2//MusNbvvmK7S/Xv/O8t6wQIpM2TWZtt50DuSa6L?= =?us-ascii?Q?JW0Ye6sPh0nMWB+xThwF0NNBG3psrggXHTxe/3DcdusYucKGmolhwLhLtXa/?= =?us-ascii?Q?E+okmL/DiUq4IKJg=3D?= X-Microsoft-Exchange-Diagnostics: 1; BLUPR0701MB2081; 6:mQNfkZxN9Asnsd22iL9kXgBAC87t2hlLkXgNz5D8Txrdy9apaH4A7SHDxgC8b7MIpQ9dTgqf/qojUbKhPSqfPCOU5+qvuaCJrIihbRT87BjZJjEjOxUVsxoSNOSk7X0N2naxBsSqjswATbZKeQNSefJEZQDzIlCYeBIxLAhtqKe0CUfBmv9edavZe/AtD8QMzh0TUtSC1ITbdwgeXb4aM6EsEcS/cSJszgB1rhn/eueHXLzNMj+Swo43JeWtSdYWqxaS3YGeOEPwjQleqV/YSlR+7W4VSxyregbwkt7tWquVMcR7NEMrXdzAcPUh1u95oOfKN67ZoBu33nObGlnoS8mlVrK85rAsB7FMKr8KkPfOjQ/w5U8LLAHWGxxmgs8TmkZEsB4SXiaSWqjx7EE6XYYzp6dPewwtPi2IRUsq9yP9/AI+i37gG7t9/uOzbyTfZ+2Utsx4lPynAUtoS0x3bg==; 5:TFb805f+CKS9PQmqFvtw/0sqMkPcSv2ZnFNTtyQPRSzgq7zshY3fAYKrhTXOQMP8bl7eJLMUobf+nsXY/uMwSttDORLVc18zEMez9XadtlFP1/ki9Ck8KVKNrqR1ifO4pmjevEyhEMyR/Uil0aN1zQ==; 24:K2HyHWQl9CZF3BbdICODGyM0i9v2GmDak6wtCvcqQOIyP1bl/0PZ5EGs4j9cLd0RwKrjgs1FJ2Ke5d8eX0/p/yjVItmL8d+8bY9GomPkf64= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; BLUPR0701MB2081; 7:UjB22u4YnMj4RY0HMJ4TRZ5M+dP/UzFxLqkIHo/JL+eDNqg0KAbb5fJeJ/Hae6GnshFgnHsjSWGa8kt0TEtrp8jSPnpis9r3tpUMJ/D03L6Js+hJdmLTaa+7tkYXXr2aBAOYCYfijtRBabfUZ/35NWSJogt+pTvQK9YZzPU03fjYVfOCff6PeEiIplSaftrqdgYxHGppeSR71f9Huf2uS+iC5vmrSZLZ8f4RBl3l+g7UhM7fJsACp/kQWYO7qd4jGjCTEWzmOv+L5TkPgDh57RNBW9YvzEYSIEhyI0rb7RAgUYgISHCu7KDQEnxVAxU/kNa0bBboi7IUlpUfoebircq4mqzutkrCC2qs8GiwpM9juSW6Tk2WE/QySVRJO7Z4QpkmTAtAmOqT2YM620V7IzQzCTeNOWYidT2ZBv11PB5+BxNDS9kv4RMLwg2nM65L2HwYh2qHGS4a0NyOA5HvMA== X-OriginatorOrg: cavium.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 30 Nov 2016 20:25:44.7533 (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: BLUPR0701MB2081 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: Sawan Chandak Tell the SCSI layer how many hardware queues we have based on the number of max queue pairs created. The number of max queue pairs created will depend on number of MSI X vector count or number of CPU's in a system. This feature can be turned on via CONFIG_SCSI_MQ_DEFAULT or passing scsi_mod.use_blk_mq=Y as a parameter to the kernel Queue pair creation depend on module parameter "ql2xmqsupport", which need to be enabled to create queue pair. Signed-off-by: Sawan Chandak Signed-off-by: Michael Hernandez Signed-off-by: Himanshu Madhani --- drivers/scsi/qla2xxx/qla_isr.c | 39 +++++++++++++-------------------------- drivers/scsi/qla2xxx/qla_os.c | 41 ++++++++++++++++++++++++++++++++++++----- 2 files changed, 49 insertions(+), 31 deletions(-) diff --git a/drivers/scsi/qla2xxx/qla_isr.c b/drivers/scsi/qla2xxx/qla_isr.c index 0c4910b..d0802af 100644 --- a/drivers/scsi/qla2xxx/qla_isr.c +++ b/drivers/scsi/qla2xxx/qla_isr.c @@ -3005,7 +3005,7 @@ struct qla_init_msix_entry { free_irq(qentry->vector, qentry->handle); } } - pci_disable_msix(ha->pdev); + pci_free_irq_vectors(ha->pdev); kfree(ha->msix_entries); ha->msix_entries = NULL; ha->flags.msix_enabled = 0; @@ -3019,24 +3019,12 @@ struct qla_init_msix_entry { #define MIN_MSIX_COUNT 2 #define ATIO_VECTOR 2 int i, ret; - struct msix_entry *entries; struct qla_msix_entry *qentry; scsi_qla_host_t *vha = pci_get_drvdata(ha->pdev); int cpus; - entries = kzalloc(sizeof(struct msix_entry) * ha->msix_count, - GFP_KERNEL); - if (!entries) { - ql_log(ql_log_warn, vha, 0x00bc, - "Failed to allocate memory for msix_entry.\n"); - return -ENOMEM; - } - - for (i = 0; i < ha->msix_count; i++) - entries[i].entry = i; - - ret = pci_enable_msix_range(ha->pdev, - entries, MIN_MSIX_COUNT, ha->msix_count); + ret = pci_alloc_irq_vectors(ha->pdev, + MIN_MSIX_COUNT, ha->msix_count, PCI_IRQ_MSIX); if (ret < 0) { ql_log(ql_log_fatal, vha, 0x00c7, "MSI-X: Failed to enable support, " @@ -3050,16 +3038,17 @@ struct qla_init_msix_entry { ha->msix_count, ret); ha->msix_count = ret; /* Recalculate queue values */ - if (ql2xmqsupport) { + if (ha->mqiobase && ql2xmqsupport) { cpus = num_online_cpus(); ha->max_req_queues = (ha->msix_count - 1 > cpus) ? (cpus + 1) : (ha->msix_count - 1); - ha->max_rsp_queues = ha->max_req_queues; /* ATIOQ needs 1 vector. That's 1 less QPair */ if (QLA_TGT_MODE_ENABLED()) ha->max_req_queues--; + ha->max_rsp_queues = ha->max_req_queues; + ha->max_qpairs = ha->max_req_queues - 1; ql_dbg_pci(ql_dbg_init, ha->pdev, 0x0190, "Adjusted Max no of queues pairs: %d.\n", ha->max_qpairs); @@ -3077,8 +3066,8 @@ struct qla_init_msix_entry { for (i = 0; i < ha->msix_count; i++) { qentry = &ha->msix_entries[i]; - qentry->vector = entries[i].vector; - qentry->entry = entries[i].entry; + qentry->vector = pci_irq_vector(ha->pdev, i); + qentry->entry = i; qentry->have_irq = 0; qentry->in_use = 0; qentry->handle = NULL; @@ -3164,7 +3153,6 @@ struct qla_init_msix_entry { ha->mqiobase, ha->max_rsp_queues, ha->max_req_queues); msix_out: - kfree(entries); return ret; } @@ -3217,7 +3205,7 @@ struct qla_init_msix_entry { !IS_QLA27XX(ha)) goto skip_msi; - ret = pci_enable_msi(ha->pdev); + ret = pci_alloc_irq_vectors(ha->pdev, 1, 1, PCI_IRQ_MSI); if (!ret) { ql_dbg(ql_dbg_init, vha, 0x0038, "MSI: Enabled.\n"); @@ -3273,11 +3261,10 @@ struct qla_init_msix_entry { if (ha->flags.msix_enabled) qla24xx_disable_msix(ha); - else if (ha->flags.msi_enabled) { - free_irq(ha->pdev->irq, rsp); - pci_disable_msi(ha->pdev); - } else - free_irq(ha->pdev->irq, rsp); + else { + free_irq(pci_irq_vector(ha->pdev, 0), rsp); + pci_free_irq_vectors(ha->pdev); + } } int qla25xx_request_irq(struct qla_hw_data *ha, struct qla_qpair *qpair, diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c index fc578d3..d0cd360 100644 --- a/drivers/scsi/qla2xxx/qla_os.c +++ b/drivers/scsi/qla2xxx/qla_os.c @@ -354,7 +354,7 @@ static int qla2x00_alloc_queues(struct qla_hw_data *ha, struct req_que *req, goto fail_rsp_map; } - if (ql2xmqsupport) { + if (ql2xmqsupport && ha->max_qpairs) { ha->queue_pair_map = kzalloc(sizeof(struct qla_qpair *) * ha->max_qpairs, GFP_KERNEL); if (!ha->queue_pair_map) { @@ -667,16 +667,26 @@ static void qla2x00_free_queues(struct qla_hw_data *ha) struct scsi_qla_host *base_vha = pci_get_drvdata(ha->pdev); srb_t *sp; int rval; - struct qla_qpair *qpair; + struct qla_qpair *qpair = NULL; + uint32_t tag; + uint16_t hwq; if (unlikely(test_bit(UNLOADING, &base_vha->dpc_flags))) { cmd->result = DID_NO_CONNECT << 16; goto qc24_fail_command; } - if (vha->vp_idx && vha->qpair) { - qpair = vha->qpair; - return qla2xxx_mqueuecommand(host, cmd, qpair); + if (ha->mqenable) { + if (shost_use_blk_mq(vha->host)) { + tag = blk_mq_unique_tag(cmd->request); + hwq = blk_mq_unique_tag_to_hwq(tag); + qpair = ha->queue_pair_map[hwq]; + } else if (vha->vp_idx && vha->qpair) { + qpair = vha->qpair; + } + + if (qpair) + return qla2xxx_mqueuecommand(host, cmd, qpair); } if (ha->flags.eeh_busy) { @@ -2368,6 +2378,8 @@ static void qla2x00_destroy_mbx_wq(struct qla_hw_data *ha) uint16_t req_length = 0, rsp_length = 0; struct req_que *req = NULL; struct rsp_que *rsp = NULL; + int cpu_id; + cpumask_t cpu_mask; bars = pci_select_bars(pdev, IORESOURCE_MEM | IORESOURCE_IO); sht = &qla2xxx_driver_template; @@ -2733,6 +2745,16 @@ static void qla2x00_destroy_mbx_wq(struct qla_hw_data *ha) goto probe_init_failed; } + if (ha->mqenable && shost_use_blk_mq(host)) { + /* number of hardware queues supported by blk/scsi-mq*/ + host->nr_hw_queues = ha->max_qpairs; + + ql_dbg(ql_dbg_init, base_vha, 0x0192, + "blk/scsi-mq enabled,HW Queue = %d.\n", host->nr_hw_queues); + } else + ql_dbg(ql_dbg_init, base_vha, 0x0193, + "blk/scsi-mq disabled.\n"); + qlt_probe_one_stage1(base_vha, ha); pci_save_state(pdev); @@ -2836,6 +2858,15 @@ static void qla2x00_destroy_mbx_wq(struct qla_hw_data *ha) if (ha->mqenable) { base_vha->qps_hint = alloc_percpu(struct qla_percpu_qp_hint); ha->wq = alloc_workqueue("qla2xxx_wq", WQ_MEM_RECLAIM, 1); + /* Create start of day qpairs for Block MQ */ + if (shost_use_blk_mq(host)) { + cpumask_clear(&cpu_mask); + for (cpu_id = 0; cpu_id < ha->max_qpairs; cpu_id++) { + cpumask_set_cpu(cpu_id, &cpu_mask); + qla2xxx_create_qpair(base_vha, &cpu_mask, 5, 0); + cpumask_clear_cpu(cpu_id, &cpu_mask); + } + } } if (ha->flags.running_gold_fw)