From patchwork Mon Dec 12 22:40:09 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Madhani, Himanshu" X-Patchwork-Id: 9471469 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 5D44460760 for ; Mon, 12 Dec 2016 22:40:42 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 4FA01284F7 for ; Mon, 12 Dec 2016 22:40:42 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 4230E2850F; Mon, 12 Dec 2016 22:40:42 +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 7C18E284F7 for ; Mon, 12 Dec 2016 22:40:41 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752813AbcLLWkl (ORCPT ); Mon, 12 Dec 2016 17:40:41 -0500 Received: from mail-bl2nam02on0088.outbound.protection.outlook.com ([104.47.38.88]:60128 "EHLO NAM02-BL2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751697AbcLLWkk (ORCPT ); Mon, 12 Dec 2016 17:40:40 -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=zuOIwTg4MlbRoVCUUhUM93+b+6JeL6csIE8PZw5vLOQ=; b=cumQRU+I+6VvoHicpaGBuKaU/J8Rt10eez61Qn+98l/ix/9cPR7vabZbHR7idHM+Ez47YA8LzHZ3nGnDskCeZ3fieUJkfPAoaIq6idYHws5Ko7zWBvylEt8wY+NA9mVHXDeK0FtlpEElK62xTUoqaLWegG0/aVQHsgmGiIiacQY= Received: from BLUPR07CA060.namprd07.prod.outlook.com (10.160.24.15) by BN1PR07MB198.namprd07.prod.outlook.com (10.242.216.144) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.771.8; Mon, 12 Dec 2016 22:40:37 +0000 Received: from BY2FFO11FD002.protection.gbl (2a01:111:f400:7c0c::124) by BLUPR07CA060.outlook.office365.com (2a01:111:e400:8ae::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.771.8 via Frontend Transport; Mon, 12 Dec 2016 22:40:37 +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 BY2FFO11FD002.mail.protection.outlook.com (10.1.14.124) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P384) id 15.1.761.6 via Frontend Transport; Mon, 12 Dec 2016 22:40:36 +0000 X-IncomingTopHeaderMarker: OriginalChecksum:; UpperCasedChecksum:; SizeAsReceived:1109; 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; Mon, 12 Dec 2016 14:40:11 -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 uBCMeAcN022076; Mon, 12 Dec 2016 14:40:10 -0800 Received: (from root@localhost) by dut1171.mv.qlogic.com (8.14.7/8.14.7/Submit) id uBCMeANF022075; Mon, 12 Dec 2016 14:40:10 -0800 From: Himanshu Madhani To: CC: , Subject: [PATCH v5 5/5] qla2xxx: Fix Target mode handling with Multiqueue changes. Date: Mon, 12 Dec 2016 14:40:09 -0800 Message-ID: <1481582409-22027-6-git-send-email-himanshu.madhani@cavium.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1481582409-22027-1-git-send-email-himanshu.madhani@cavium.com> References: <1481582409-22027-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)(39410400002)(39850400002)(39840400002)(39450400003)(2980300002)(428002)(189002)(199003)(189998001)(5660300001)(4001430100002)(36756003)(4326007)(2906002)(50466002)(48376002)(47776003)(33646002)(50226002)(69596002)(107886002)(626004)(305945005)(81166006)(105586002)(8936002)(81156014)(80596001)(4720700003)(106466001)(2351001)(42186005)(110136003)(38730400001)(356003)(5003940100001)(92566002)(50986999)(101416001)(76176999)(8676002)(86362001)(2950100002)(6916009)(87636001); DIR:OUT; SFP:1101; SCL:1; SRVR:BN1PR07MB198; 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; BY2FFO11FD002; 1:4wB1YQeptj7rR/ITfAMPHn9vc8AEBuw9hV1dEyKBqM1egS4lIaiL6lwAJr2JEQyaEbkf95YQFooXm2iZQfiiGQ2PbGGZmX2W2IKQYJj8zyg27N1ktPW6rOeaJhnKDeLOia42vZ1OseuYesvHq6Gfp6hGBb/Idxfa2A8sLw7/4lPO2h62VB3eY2Kngc3ogZhFfjaph8M6ai8tetLsG3DI2He6fE1lBCquqwJp+/vSVlifO/qxBngLo7K7UhbjIBj5Fv81GxPBdTmYEyGIQPeu9EQHD+UqKGor3zNcSyrqraZ3U71KVE8p/lZFFIDT5m26LrQeKNVpc2RNwhKtioSI0PdCrd3IQS5jxQ2o0IeJ1w8IcfhtY4NygLl+jMpYDhbOD9JcJb7PyBumxxBwgs6vFas38y2fjqDRL5lwTIJahDQiKqqpZaoZGCFMPBISVyb9SQa6do3dlKvzX9vD+Ywd7J0JW9bFHdLlVuEmHVvzRSIsfexAXqSdd759jrDvc4opmiQVFNectnmezDk6hcjJBCRn8MYUIgEAQKHU0j7141smAaA2GR15F04sp0R8G1ZD X-MS-Office365-Filtering-Correlation-Id: 1e12d294-3114-4eb1-2887-08d422dfe417 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001); SRVR:BN1PR07MB198; X-Microsoft-Exchange-Diagnostics: 1; BN1PR07MB198; 3:qZjF4FeUu3+3zjlXqhQoIRoHQFfOajB6+exmtE8gQiBb9Kl1H9YHpU+f30wv2QcO/soElbrhZx5KC9rI2+gjyjBSsACzXdrMxC8rlKxMee2PJdG5/Tdpj3hRJjReWpnyVVZKFJZDHcgSEJWsNepsMw2buJVYT2EXwwLrJ4Q7unA9MZy7jeH/bjQiTM/+vadQxzwXgqCatRFRhBnEzxTKXMdt0taIsPS/jcGhbuv2xD3CblblWz/yxjBomFudAkz+bYLcmHajh5sZTgCFuKb3kCRLZlNahQSdP/Tcm6FI9lxBXxvcUG/EJ0YyYTm2M14/bFgCHZjRqGbTKVDsQ79TM/IgWTt7iYSNUoY7iHr4Soxh7DmyMbsaH4FXqbon+1BZ; 25:EUpdW6qAB5ZB8qepg723Mblp8WmDzUwA/U9gppVlWivfx6+rykWwOy535M771KKogODUy0piguC7Zznpc9bMynigjes4w/0doirijKkpu8IfiDw/nsyxDnafGDdufe/jbLMnWLsdVzIfyzZPVDKlVet9OBi5vgERmBu4JHDNG6vWjGN/DuVQzD678FohTlTc4/uGuJ60EaJwRRHZME5Wvfn34W+TaZ9OSjA05O1T86enASCgSlbBL/E4N0fpfPUCOK1dIDAN9sEl3v4SHiWoP8ar6uaA+CP3fuWiXbGGhJKs6BlBVhDt9yOVZSqMdIoBp+eOZOcRDGWy1PlaTGy3HvvJeGbANGM2aZ8Y8Fpey2vmruKmV91SEIMNjxqFUfk6gVVYXbCoIjiuQ8RJsCDAWvd4fXzH6XYvGTtUtnkSicYf+DKT4GHG2+NnOt2z7FY7TceNLtDBYV1YlWOMd3i+SA== X-Microsoft-Exchange-Diagnostics: 1; BN1PR07MB198; 31:dgutpF9/BIZ4gyuAQ0ETXaCwe2Dl6I0gP2OOBvOO2Hl9Cz5sYEB8hYPxG6fOetwNHmUpa5aam+csw4Ob9yBRBLcS9prmwXMv7OJjxS1aK5kP6CK0JzRXpPNG/oHPHHJQ8/I1PYEisPyGtlbWdJAcljUgn0B+6z/wqijPdHzR4zQOX0QjbeVQlMH/1P6NQJSsH6yaQOXFpzP5XaVdCGiIWz+XOm9VrymOGyiUAZS9wu7aQgN6FQ7e1ITGGghQ6ZNsvM4wJLSe3j4t9YMyj+hc4A==; 20:3d0yHUih4oAb0OHyxShslvB6O0GIMvjR+tY4SSZLjjQ29z5qAyF+WuxoKTyXOTJy2tKHbC6lmTlUa7C/3ntAsrxXzdT7vRmJ9MjpRQBvbMoJubPlMYUr2o4vbYD6eUGzD+0lHS27IaSfK0fl/uPDhCDK9p8xGC85i47GtneFeb2I7cXjic2Hb+L3/khcwKMJc9B7x/26/zAwiPcbu6Dvf+SArBwbON/Z17/j7ebcjcKfGfr5eEmz4ASiy2h+e9SQLTkh5008HQiT1MKP/wRoQN+/ozfaD4Ua96PTA9Ahol9Uy6iNKx1KtB5sDB7O22g2JJG2IPZ+DSgWZsOesL4WnxJ+Zh6xNg8s+i6qyqgqCUvB/UaYPrCQaZgWC3etXY475j3u+XH/u7zpG6yfRaga5rn4GSxRBXQxwaff4Ht10dGGH+j1cFcFnG8KATrxP+L6rUEFkRNZmxPII3D0BJU13lcp8RsGm2ANHuT99HJfOZ9E93Tn9DlNVSFpSctuBmT0 X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040375)(601004)(2401047)(5005006)(8121501046)(13015025)(13017025)(13023025)(13024025)(13018025)(3002001)(10201501046)(6041248)(20161123560025)(20161123555025)(20161123562025)(20161123564025)(6072148); SRVR:BN1PR07MB198; BCL:0; PCL:0; RULEID:; SRVR:BN1PR07MB198; X-Microsoft-Exchange-Diagnostics: 1; BN1PR07MB198; 4:8BWCQazIfceB57V/UUk1uzupmoooGVU2QhcYsE7ZZjY3PB/2gk6t2US4EtVNLjLhBTLI5hoVDn8MkZtZWYwRsmHdmnd+olfvCvCSRgnWnkAPyZXLWhV7PJh18xlois7m7jXCPNN/5iyI4AFAexPLDZiJ4WbwwlwHL9hduISQcSZEeTiI8zvHEL3qM8Kv43iGT/n6u0d8fQq3eH25OmS/MYHavUjebyoBmkDWtIbwF7p7wxZ2suAUcHTyeofoPQDdDEIQVDCc0LVWNlYxnm2gNDYNmjZU/aoegEM0Bi4tjhGCyY50bvJWVKJxc9YjcZgRl4EesBnd8oxRBRka+d08yCGgveVXbrEUQSK5KWn4dg2QrkPnFXaMsWHDMJ+WZrRjkrfV6dH7L6o4vXeGT1ACK/B6wpp/9MgCRd9CvuQ3bG07VBEOaiFjOor7F/qrU0VD1ykhWjcHlyE8JOpN1rX3ltYSNPmE3wrpEpPTFbAS/q+YI0Kc4xMFDUpWRyn5ZuyaOm0G4zjrHZShtxet4738+Mwr3XAf2SbQxwWT4kS3SS7tQMagNUjIWtZQVkIj2ZdVARdRBzo+uumVfH2jMg7PZUXB93wN2qFj7J0yehPGaxv5E3EjQzWwaaroD26+Bypw0Vz1gviyd31Odqg/k3wwgFwYYsN/75BQtmGxypBOl60= X-Forefront-PRVS: 0154C61618 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BN1PR07MB198; 23:f+v+KbvYnAnj8/VXdjdsxB01sFDxMOy7EF29tUyOML?= =?us-ascii?Q?nV04aRCP4MPUSfQGxgkqYoHMbp8eRIT+qGYTxU/obBAsZnD+ruXl4DeOfxxQ?= =?us-ascii?Q?0AGSEhm9rWY98bxps+HVnm+5/INPPvhomkVEFjtIsi92RV/+xiOL9PDyTKj6?= =?us-ascii?Q?YQMX3oiyVt9TKFti428RBz1hC/+r2cNqJ61gQbgZVQ5HM9Uxmqr868jFzpkj?= =?us-ascii?Q?kekuouaDG8YS1YgivVzf3GmDczvPyekKz9eHaadw6QSEYb5QkJGmySbC/w7f?= =?us-ascii?Q?s2ZguBnAVW5xhTy2Bbp9TXB15Q9CmXk10GcHLOBNJvIYLLk19gk3yvsNz/Xh?= =?us-ascii?Q?TQqaMbYkn+kOEq35y4Z+tsnmnVZehYWeigdG6zpmdaj9kCKj7FxGD4QXL/70?= =?us-ascii?Q?zTb/IQ/2eD9MvJstpuqzm8Ag37vd74mTBBSX10z3De/qumg84f4hHcqNWMmg?= =?us-ascii?Q?6oSOtq5AwzfmFbfakJ8yYO9Jo4uo27ba3xuBUELP2DBonQ3gC9Sf3WMBmCqP?= =?us-ascii?Q?vG7F1XSJWsrxsl1Qe9eFOTJkO3TNcGJkpM9FU+zorwQUsBjhisRCjyFeoX0L?= =?us-ascii?Q?IxmnrLNGh0EkY/3ci0JlFhLYSsbXYrm8fRgqLr358871pDymbnGxnzcgcyYp?= =?us-ascii?Q?ZNos6y4lMGAnD6Xd7ECwROYRGHz+NlE1eSDxZ6zXdizmcYSetI+klPKcL+3Q?= =?us-ascii?Q?5/BfOAsbpk5goPB8RBLl9Evbs4DHjE4s+M+SxkZ+IpTnV7mOhXMFtEIZK44z?= =?us-ascii?Q?jnqoN1XveZkpN6pbOlM35yftNlXWVoo5FLoYTaV8o+/ptXdEfiiyd7iPtA+8?= =?us-ascii?Q?tHZK+meMuEIr8NJcGGLeFA3xqrK/CesWgdwsou2krrktLLXsbigglaxyXdfX?= =?us-ascii?Q?FlI8qweHmhBhUadWl1OpEQKpXHOaU/sVg2VmhSTJ3LAIiTk7W887mHJIPSGd?= =?us-ascii?Q?X8NySQnQntM4CS/uyrLnawpOiJBTG+mj7PDzWaRgmA83xO+41br3R5hfwwpv?= =?us-ascii?Q?nDdc+9Hqbm/xQFHS2v5dvpG6fU3lYjLnrCH2HwhP6i9TUEim3KCwKPfU54k1?= =?us-ascii?Q?FLXwEk/B8i1wKPvhE9r0qJ9JaDzGpo2iCHiLyw/9LXUJb45UQLJEL/9W0lFN?= =?us-ascii?Q?SooUODPwWI8C4x9R0XF3S7mLuI21VoFjHHW8JwCnKtHAs/G71C5A=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1; BN1PR07MB198; 6:egueHwWbmqb1OlSQba8xkZc3JKpcZX3d7AhP0SGNphTLSGkz37gKxv9T2s6rWlV1ZeqF1wXj8rve//MASjzGYudGc1p/w0IKBVHZc0eQSMlLCRkxMYlWdc61Rx8fvzMdgvQ8NeEanHfrF3eF8lJBf65mTOZakiksk+uu5VOozk3gj8PsM3UxOW/8lgs6bcTQbWGj7Dt6w/eBF8WWeH5KpgbhaJfihG65Eq+usyNBfVIY8fVautduKFTRI6SH4pBcQvI6SkGg0nxipfUZS8WvdxJnlXjrDPgmBhIJZ5k3bMozcvty+y6yi8mQ4kHObde6lKsxtf+F0EF+XS8v43g9EKVnkeo8wSJPXHKh6ML0ggCXMhTyIRhPS8qUyo1TpYpS40DspKMN1ocJt++mf6bsTudpnpK01AwoL8F/j7luX2Q=; 5:nrv5cXQdpUQnRZj3DupbXxyJvCgp4dBKrDbzsPLJkWV6iN5yKGgC7Y8d+q80FleSNsotyxj/WCYBsZsjIphHMptyDA4lDdQvqzVH5KRn26QHSqMtJGGUoHDCviy+rdMhcgkH1ggR5DEef4yppkEPaQ==; 24:jvxZ8g78H434AWwZjAenlcsF16IVlwY6LtaY1Z+gHptE1SuZjY3QeKAoZsSpcfhi81eosHbX+r96/VCGdcMrK+3+HNQmI2qZu0pCO3DNonI= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; BN1PR07MB198; 7:8gGcToaGfU5EixXXE9gApbhEAcKXCLlZS0YsrLVi/f92vxVQQ28bGWucFQoUCMcTZCY8AdQx650mzY+VPlcIEg5EmYXDiMsf5MOWOnGL9cDmUDMvC3wr6J4Ye4Vw0CIbnYOxRbyAfIBrLlOo4hYtW0Beg+jnP1+DqaPIGY0cRk489ZvL83ntehemarzITA1EDm1Eyjzdj+BQAAxiCavFRKqSfBf5FdxqsdvXSOtdf/IFNbDCSqJNjiwcpQOOV5w5X8+i/zLPkuGkvGjKexpUrmvR9Igjxz4oSwzPRUjweex9AbxgA6vF8w/Ux97aTI9vp2gqV02DcHS4VQUkgsrOyVnLZ6bSofycxgbhICHfktz2HMTCO+9xtrCkqjQAxhWr1IWOHg6wUG9MZ+OJWRA1/OOpC/O3YuQNL+x70xDtsmTSdzm+W0+DQ9+RezKt2lfpAKuXAUpAQpUHQrxaZCVrBw== X-OriginatorOrg: cavium.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Dec 2016 22:40:36.3672 (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: BN1PR07MB198 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 - Fix race condition between dpc_thread accessing Multiqueue resources and qla2x00_remove_one thread trying to free resource. - Fix out of order free for Multiqueue resources. Also, Multiqueue interrupts needs a workqueue. Interrupt needed to stop before the wq can be destroyed. Reviewed-by: Hannes Reinecke Signed-off-by: Quinn Tran Signed-off-by: Himanshu Madhani Reviewed-by: Christoph Hellwig --- drivers/scsi/qla2xxx/qla_def.h | 3 ++- drivers/scsi/qla2xxx/qla_init.c | 2 +- drivers/scsi/qla2xxx/qla_isr.c | 20 +++++++--------- drivers/scsi/qla2xxx/qla_os.c | 53 ++++++++++++++++++++++++++++++----------- 4 files changed, 50 insertions(+), 28 deletions(-) diff --git a/drivers/scsi/qla2xxx/qla_def.h b/drivers/scsi/qla2xxx/qla_def.h index d60cd17..f7df01b 100644 --- a/drivers/scsi/qla2xxx/qla_def.h +++ b/drivers/scsi/qla2xxx/qla_def.h @@ -2734,7 +2734,8 @@ struct isp_operations { #define QLA_MSIX_DEFAULT 0x00 #define QLA_MSIX_RSP_Q 0x01 -#define QLA_MSIX_QPAIR_MULTIQ_RSP_Q 0x02 +#define QLA_ATIO_VECTOR 0x02 +#define QLA_MSIX_QPAIR_MULTIQ_RSP_Q 0x03 #define QLA_MIDX_DEFAULT 0 #define QLA_MIDX_RSP_Q 1 diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c index 400ffd1..632d5f3 100644 --- a/drivers/scsi/qla2xxx/qla_init.c +++ b/drivers/scsi/qla2xxx/qla_init.c @@ -6764,7 +6764,7 @@ struct qla_qpair *qla2xxx_create_qpair(struct scsi_qla_host *vha, int qos, int v qpair->vp_idx = vp_idx; for (i = 0; i < ha->msix_count; i++) { - msix = &ha->msix_entries[i + 2]; + msix = &ha->msix_entries[i]; if (msix->in_use) continue; qpair->msix = msix; diff --git a/drivers/scsi/qla2xxx/qla_isr.c b/drivers/scsi/qla2xxx/qla_isr.c index d27019b..af840bf 100644 --- a/drivers/scsi/qla2xxx/qla_isr.c +++ b/drivers/scsi/qla2xxx/qla_isr.c @@ -3005,6 +3005,7 @@ struct qla_init_msix_entry { static struct qla_init_msix_entry msix_entries[] = { { "qla2xxx (default)", qla24xx_msix_default }, { "qla2xxx (rsp_q)", qla24xx_msix_rsp_q }, + { "qla2xxx (atio_q)", qla83xx_msix_atio_q }, { "qla2xxx (qpair_multiq)", qla2xxx_msix_rsp_q }, }; @@ -3013,17 +3014,10 @@ struct qla_init_msix_entry { { "qla2xxx (rsp_q)", qla82xx_msix_rsp_q }, }; -static struct qla_init_msix_entry qla83xx_msix_entries[] = { - { "qla2xxx (default)", qla24xx_msix_default }, - { "qla2xxx (rsp_q)", qla24xx_msix_rsp_q }, - { "qla2xxx (atio_q)", qla83xx_msix_atio_q }, -}; - static int qla24xx_enable_msix(struct qla_hw_data *ha, struct rsp_que *rsp) { #define MIN_MSIX_COUNT 2 -#define ATIO_VECTOR 2 int i, ret; struct qla_msix_entry *qentry; scsi_qla_host_t *vha = pci_get_drvdata(ha->pdev); @@ -3080,7 +3074,7 @@ struct qla_init_msix_entry { } /* Enable MSI-X vectors for the base queue */ - for (i = 0; i < 2; i++) { + for (i = 0; i < (QLA_MSIX_RSP_Q + 1); i++) { qentry = &ha->msix_entries[i]; qentry->handle = rsp; rsp->msix = qentry; @@ -3097,6 +3091,7 @@ struct qla_init_msix_entry { if (ret) goto msix_register_fail; qentry->have_irq = 1; + qentry->in_use = 1; /* Register for CPU affinity notification. */ irq_set_affinity_notifier(qentry->vector, &qentry->irq_notify); @@ -3116,14 +3111,15 @@ struct qla_init_msix_entry { * queue. */ if (QLA_TGT_MODE_ENABLED() && IS_ATIO_MSIX_CAPABLE(ha)) { - qentry = &ha->msix_entries[ATIO_VECTOR]; + qentry = &ha->msix_entries[QLA_ATIO_VECTOR]; rsp->msix = qentry; qentry->handle = rsp; scnprintf(qentry->name, sizeof(qentry->name), - qla83xx_msix_entries[ATIO_VECTOR].name); + msix_entries[QLA_ATIO_VECTOR].name); + qentry->in_use = 1; ret = request_irq(qentry->vector, - qla83xx_msix_entries[ATIO_VECTOR].handler, - 0, qla83xx_msix_entries[ATIO_VECTOR].name, rsp); + msix_entries[QLA_ATIO_VECTOR].handler, + 0, msix_entries[QLA_ATIO_VECTOR].name, rsp); qentry->have_irq = 1; } diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c index d10a876..8521cfe 100644 --- a/drivers/scsi/qla2xxx/qla_os.c +++ b/drivers/scsi/qla2xxx/qla_os.c @@ -439,24 +439,41 @@ static void qla2x00_free_queues(struct qla_hw_data *ha) struct req_que *req; struct rsp_que *rsp; int cnt; + unsigned long flags; + spin_lock_irqsave(&ha->hardware_lock, flags); for (cnt = 0; cnt < ha->max_req_queues; cnt++) { if (!test_bit(cnt, ha->req_qid_map)) continue; req = ha->req_q_map[cnt]; + clear_bit(cnt, ha->req_qid_map); + ha->req_q_map[cnt] = NULL; + + spin_unlock_irqrestore(&ha->hardware_lock, flags); qla2x00_free_req_que(ha, req); + spin_lock_irqsave(&ha->hardware_lock, flags); } + spin_unlock_irqrestore(&ha->hardware_lock, flags); + kfree(ha->req_q_map); ha->req_q_map = NULL; + + spin_lock_irqsave(&ha->hardware_lock, flags); for (cnt = 0; cnt < ha->max_rsp_queues; cnt++) { if (!test_bit(cnt, ha->rsp_qid_map)) continue; rsp = ha->rsp_q_map[cnt]; + clear_bit(cnt, ha->req_qid_map); + ha->rsp_q_map[cnt] = NULL; + spin_unlock_irqrestore(&ha->hardware_lock, flags); qla2x00_free_rsp_que(ha, rsp); + spin_lock_irqsave(&ha->hardware_lock, flags); } + spin_unlock_irqrestore(&ha->hardware_lock, flags); + kfree(ha->rsp_q_map); ha->rsp_q_map = NULL; } @@ -1890,17 +1907,22 @@ uint32_t qla2x00_isp_reg_stat(struct qla_hw_data *ha) pci_read_config_word(ha->pdev, QLA_83XX_PCI_MSIX_CONTROL, &msix); ha->msix_count = msix + 1; - /* Max queues are bounded by available msix vectors */ - /* queue 0 uses two msix vectors */ + /* + * By default, driver uses at least two msix vectors + * (default & rspq) + */ if (ql2xmqsupport) { /* MB interrupt uses 1 vector */ ha->max_req_queues = 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--; + /* Queue pairs is the max value minus * the base queue pair */ ha->max_qpairs = ha->max_req_queues - 1; - ql_dbg_pci(ql_dbg_multiq, ha->pdev, 0xc010, - "Max no of queues pairs: %d.\n", ha->max_qpairs); ql_dbg_pci(ql_dbg_init, ha->pdev, 0x0190, "Max no of queues pairs: %d.\n", ha->max_qpairs); } @@ -1912,6 +1934,8 @@ uint32_t qla2x00_isp_reg_stat(struct qla_hw_data *ha) mqiobase_exit: ha->msix_count = ha->max_rsp_queues + 1; + if (QLA_TGT_MODE_ENABLED()) + ha->msix_count++; qlt_83xx_iospace_config(ha); @@ -2989,7 +3013,7 @@ uint32_t qla2x00_isp_reg_stat(struct qla_hw_data *ha) host->can_queue, base_vha->req, base_vha->mgmt_svr_loop_id, host->sg_tablesize); - if (ha->mqenable) { + if (ha->mqenable && qla_ini_mode_enabled(base_vha)) { ha->wq = alloc_workqueue("qla2xxx_wq", WQ_MEM_RECLAIM, 1); /* Create start of day qpairs for Block MQ */ if (shost_use_blk_mq(host)) { @@ -3263,13 +3287,6 @@ uint32_t qla2x00_isp_reg_stat(struct qla_hw_data *ha) static void qla2x00_destroy_deferred_work(struct qla_hw_data *ha) { - /* Flush the work queue and remove it */ - if (ha->wq) { - flush_workqueue(ha->wq); - destroy_workqueue(ha->wq); - ha->wq = NULL; - } - /* Cancel all work and destroy DPC workqueues */ if (ha->dpc_lp_wq) { cancel_work_sync(&ha->idc_aen); @@ -3465,9 +3482,17 @@ uint32_t qla2x00_isp_reg_stat(struct qla_hw_data *ha) ha->isp_ops->disable_intrs(ha); } + qla2x00_free_fcports(vha); + qla2x00_free_irqs(vha); - qla2x00_free_fcports(vha); + /* Flush the work queue and remove it */ + if (ha->wq) { + flush_workqueue(ha->wq); + destroy_workqueue(ha->wq); + ha->wq = NULL; + } + qla2x00_mem_free(ha); @@ -5187,8 +5212,8 @@ void qla2x00_relogin(struct scsi_qla_host *vha) base_vha->flags.init_done = 0; qla25xx_delete_queues(base_vha); - qla2x00_free_irqs(base_vha); qla2x00_free_fcports(base_vha); + qla2x00_free_irqs(base_vha); qla2x00_mem_free(ha); qla82xx_md_free(base_vha); qla2x00_free_queues(ha);