From patchwork Tue Dec 6 19:07:46 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Madhani, Himanshu" X-Patchwork-Id: 9463143 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 A931C60236 for ; Tue, 6 Dec 2016 19:08:33 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 989B8284CA for ; Tue, 6 Dec 2016 19:08:33 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 8D42F284C9; Tue, 6 Dec 2016 19:08:33 +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 C60DA284C9 for ; Tue, 6 Dec 2016 19:08:32 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753313AbcLFTIb (ORCPT ); Tue, 6 Dec 2016 14:08:31 -0500 Received: from mail-sn1nam01on0058.outbound.protection.outlook.com ([104.47.32.58]:27184 "EHLO NAM01-SN1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1753065AbcLFTI0 (ORCPT ); Tue, 6 Dec 2016 14:08:26 -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=AkIVcG7pqPJXpu4eBOU+9ennf86FYesOayNcBQlpfO4=; b=kBCpTyR6/e61EPyJOfAVqC4S3I6WVdEG8PwKXPyHgvohbXGyghRgI6ItOcVm8xR1r2ZBZ7mCP0rMJYJx699UdlFpsrEmFSgV0GWy2obf8aYXUoRpdqTtFUo6HK1uyPRkZQ/YI2InLUB0OlDr8+iUw3XSMMFLBKyq8T9Ul9VgiSY= Received: from MWHPR07CA0003.namprd07.prod.outlook.com (10.172.94.13) by BY2PR0701MB2086.namprd07.prod.outlook.com (10.163.156.151) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.747.13; Tue, 6 Dec 2016 19:08:19 +0000 Received: from BL2FFO11FD056.protection.gbl (2a01:111:f400:7c09::117) by MWHPR07CA0003.outlook.office365.com (2603:10b6:300:dc::13) 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; Tue, 6 Dec 2016 19:08:19 +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 BL2FFO11FD056.mail.protection.outlook.com (10.173.161.184) 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; Tue, 6 Dec 2016 19:08:18 +0000 X-IncomingTopHeaderMarker: OriginalChecksum:; UpperCasedChecksum:; SizeAsReceived:1105; 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; Tue, 6 Dec 2016 11:07:50 -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 uB6J7npd032415; Tue, 6 Dec 2016 11:07:49 -0800 Received: (from root@localhost) by dut1171.mv.qlogic.com (8.14.7/8.14.7/Submit) id uB6J7nS0032414; Tue, 6 Dec 2016 11:07:49 -0800 From: Himanshu Madhani To: CC: , Subject: [PATCH v4 6/6] qla2xxx: Fix Target mode handling with Multiqueue changes. Date: Tue, 6 Dec 2016 11:07:46 -0800 Message-ID: <1481051266-32362-7-git-send-email-himanshu.madhani@cavium.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1481051266-32362-1-git-send-email-himanshu.madhani@cavium.com> References: <1481051266-32362-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)(42186005)(106466001)(105586002)(48376002)(50986999)(76176999)(33646002)(36756003)(50466002)(101416001)(2351001)(92566002)(4001430100002)(305945005)(189998001)(4326007)(38730400001)(39450400002)(2906002)(8936002)(50226002)(39410400001)(8676002)(81156014)(107886002)(81166006)(356003)(7846002)(80596001)(5003940100001)(69596002)(4720700003)(47776003)(6916009)(6666003)(5660300001)(2950100002)(110136003)(626004)(86362001)(39850400001)(39840400001)(87636001); DIR:OUT; SFP:1101; SCL:1; SRVR:BY2PR0701MB2086; 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; BL2FFO11FD056; 1:DbQ51c+NeS/owYf/qIxgD6CiTyc8POOAbo7TrOMURgI68WwOm5JMxgaT02omG2RI0EzzEu5nJpJRdDL2xAoY5UHpMzCxcckKYfngnRTqQQeBxvmml4/5LyxvFyS5zbq0LW/s5d0hV9alN9JdlLU+HT5Wens/lW4kCxCOZ/Z/HhKm4mHHdUIiw8gJLCi4uA0ZbimIOv93WmHqjuTnILdN+btW+9RMv/7YTmoKVq9lmfZm/Yv2dn7ozykLob1bz5p7n3bxwORDfyEToGHR+I2pN3l8OyH0dEHGEqJVGyyvm8uVU+XWxecN7nINrDf47GItG0I6Drx+GOJ6e1VYiqFzVF0am5rl6uDPFrAzuKBmJYBVCQxp9L9PUTtnvqOYwEThVMG+8usRQDVRYV2wgGn0Xz+nIIrio+HPMmCEoCnB2ybn+nK1TGVOn0596/rHMqDoktWloqUoGG3n+m2JAYkzV7Z7xvY90cbXQ2Byuynya+Yc2km+qdcrgwyOpmE0PSqkzXtWUliFbV7SxfB8utZHBjPfX0gEMGo+mc+qafXit00hYmOnh3wrpyB0ZFPxzdzK X-MS-Office365-Filtering-Correlation-Id: 3666b9c8-296a-4d16-d45b-08d41e0b3d7d X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001); SRVR:BY2PR0701MB2086; X-Microsoft-Exchange-Diagnostics: 1; BY2PR0701MB2086; 3:W7VHeKs75lg2vIdgiDVQceJ/vXN9Q1S2nRpgRUFyPHEz9rZxPsaB3d4yM9jMIfYNBCzTZbeEqicz8pdqNwQwc0REBoP8vyJ+h2wJdUhrC90T04SZ1jRA1zAjffmjzqgvnog/HUI16RrkUJxzjCJkoDLoolGK3ScOi4TeV3RwRUpXNXL+MkGqvyuKsk/rjVbtfE8iPotDO3W5Vn7/221YHTuQ66JtoPH0SfvkTLdjS9qxR9wlQYhFuX9REyUFALNi2sGpdKDxZDY8Z3I3GAFahN5FN0+nPXBy8JFX6D1318mMfSXSUUfuN3bttqRqr5L+/uuJ+6jA3dLIs4OF4LgK+o7ARIILJBGZBx5293jAPDE88WYbvQT175S3wa3QjC1X; 25:asCDqfzI45AFzKGUeWWo25PMG5m7WAIFbdxmxwJRiHKGq0RorqyDufNF7fTbxQ5c64b30k+/asm61cn0gWOvWYcx1UnPTteh0zWyXSMa1EVcbfasBAq8hRiITd7opvJZnniZxnkisq76d7ZrAqKEj63Pvt3LnXyj/pM3LVdUzRDPTevhquTeBdV5d5g0xdrQTNs/hG94sWAAgADN5AB0xLFQXScGLJc+gv5RiBfbLPGRlJgOHbznRZNP+Fl+Ve9Oixeb8DguXtXQDZrm11M1U9NKtG+JMtTD7ZB/TGnDCzAKc/EtGjaO42DkCaY4Yn8Cp466kiN0V1GvgW60uS7JoCMwV9+coja6DN3GJcfJclfkG8BNKOxk9/4uyh+z01gyZk5J17LB4H7ITZbXF/yRRyNjCo2tpz2INGmTRxZNWLMCPo67zHh6YVanVNX3bNZSNrnLgzUijV3x7afjR73sRg== X-Microsoft-Exchange-Diagnostics: 1; BY2PR0701MB2086; 31:apU4wuopj4Whkh7CZDJZroDeaYJ17psHve3xRQJZBgUIGLzdW/Id/5gxLyStNDH4sRKGB5YuIBemtfRvrl8vnnPcTq+4cFLPfxvFPKejwzKN3NNIU3DmSAYl7+6rDgMOJfjxyKshn+eN58aLN+T8pcVSbbKw2RZxRZ28c9ylW85RmXRImGXOCXy+9SWZVP8x1UlxBMGJu6K3nMWF4NWB9T5HpZdjG2KdwP5/vuaMfclZidz7SkmdXGu0NTWeGjBFJuQjTKxzj4MZKXgp+Wf3UzDoAHulhmStRBZBiDPyvEI=; 20:SR75ZQilPd9/sXICnd5ytfkQ8EPx5NNXrXw0Nf3MJqshSptpPcBOUD8EqZA5ajV7Z81S6GIpwxQM6eqFsyeN0SOeTnaqo/0gWGj4OPCdZLsQbZ6cFpQnZViC9PlSXAU84W8Fmg/nAyNgAIW5aXGU3MAr1HfnNdI5GXXOSOUNHd2hLmKxbteN/m7FZxRdmQArdMZHsgB1ylTic10x8Zoq1FiA53fyXkPOfKewkbcf/unvOdocmNZMQeKquinIRFMmJsZkKN5UwH8g17n6MIYkfrMSN2UOoIIWobV60JB0UpFvoFpTfCb8NnQPEceD7ArcZMsFJsot0mqIvaKC0PXFZag2qkv91oOCkvXg1prayCFnSroj8ndIej9Ss4AEwOuOUUFn2SGqP7QkEi+zMFrS2C7hJVya3iJSzmP286D+JJIwK9uQ421cTUC1+iI2U7IpLezFdVH6SkcWAbYdNO7mbocOU96Jqs4qij8G38DG6FBOJiklja+EjG5WN/+Ikskn X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040375)(601004)(2401047)(13017025)(13023025)(13015025)(13024025)(13018025)(8121501046)(5005006)(10201501046)(3002001)(6041248)(20161123564025)(20161123562025)(20161123555025)(20161123560025)(6072148); SRVR:BY2PR0701MB2086; BCL:0; PCL:0; RULEID:; SRVR:BY2PR0701MB2086; X-Microsoft-Exchange-Diagnostics: 1; BY2PR0701MB2086; 4:jv7ALIXHVOLZvI97Exk7FnJ+Cat5LqoDW1dB8ZS7olHdLoRKNgRe5r8mP7bGKQuqqaS5DKrl4sGyjphrfTKe7JgrJVuUvMVg5WnQOIaiQLlhsPbCelxKTrRUx9JVJXwL8v7eVmI/JeJZ/eJXmBtmL4+3Ea1N3ezd+2w0IFXPwylFwPI2dM95pLE/cwOqwweTT4eLLzHJ7A9ru7wSAPNUKk5Z19P3CZ9L3GAjeZ02O1sF02Tyz61sWtCdykx3dIo+IKGylbkxG3ODC9rFaApS4Un14I05pJxtUswWvvmFa6FWtoZ3rsVFE+YRMfEnzzYss8tIfZy5yYhRDpkWFooX0n0IoSaBihOkZ8SynbNM5UhjLakPkRg1+cpJy+WkFUiJ9zJeCyD6e5Y2zfcnkKvNuS1Si27V4A8H7GRWLtcfJB4KJIOvtMWhKoYldSgVMeoHuBtQALcDe9G5g0o5EaC1opoNYDrnfmqND6HcpkCWqJMS2xQgSeW834BDmObwRHZcoDqDVSpl3waPTJXRxkHX2r8SI4yk/vK0kE/XjkwCxQQvvJseRqO+kHwi0edvtNHhuBhRenqqfd+XkiCcZWDR/MarFlbTSl+c0+urSCiQRkMfFYtUZRQkzbdDOv5NgtYRdFobQ68vKYyL2A494XXJexFDeqpHmiq3HlJDUXGFHyc= X-Forefront-PRVS: 01480965DA X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BY2PR0701MB2086; 23:uJ3seb2KhpidCz/YhTGpM5P8oDFrHuODnCVq4WF?= =?us-ascii?Q?FDOhATxgG4J2unA8xIVakBAweETAQ36iccjRSDU5TXOyN1+xc0+oMZX4yQbS?= =?us-ascii?Q?Tomi9vZ2ntdyuntwbgkjBAiYaBvjsMbEMPHEiyv2CfVOZao/qc88sjf88Pfh?= =?us-ascii?Q?fGyduSE37zWWoUcOhnm1YFl4UQc/Oja2XDmmG6ysWSX6zwA9qbymIrksFBxe?= =?us-ascii?Q?VCW/8kMQxX9cPF5TLsOnZWTfZ01oGoDclhwmHzI5VIXJhgp12WLp+y/ibfb0?= =?us-ascii?Q?IvqD7yZn+NcYkCWNfINUfNarIe87Uzulc7r4yT2loVPzMg68jyh+7rR0/gPa?= =?us-ascii?Q?ky7umKEgTcnduL9jqC1lLlJaggrc8YeoxQ2GkC8lUtmdjzVIDjDrNKlBxC4N?= =?us-ascii?Q?rIYoTA//lwpRGLa37c7dkBPLBC8DzBKZj0iVaymRT9SA1hOnbMvJbLKkPvZN?= =?us-ascii?Q?AIV+BcN7pSK8u3IYpePyJS9Z5Sotewm7x5nDtdwGv3HaapxsLHoAg2NcKtjW?= =?us-ascii?Q?vghT3Qp6pLkq0kgdSIS/hYz4NfplzVxcDJhvBpshLWxIu89L9cDlPJVfQqmv?= =?us-ascii?Q?iECd25hdeiFo8OER0DJpOOJD3G7GnsnymYy2eBbWpPnJbfblzCnfVr8KdXIh?= =?us-ascii?Q?UHUELW0baRbqg7NXe0KAvNLnawpbKWZpzeL4w2+/qKXzly4XPvsZnAmKLuFc?= =?us-ascii?Q?NChKoeCGCpUhl5v78i6XDZOizge3PjesKMhuTov4hIOhKjyVl10QrswgM8Vz?= =?us-ascii?Q?dmXmIK6cyaaH9dg5t5JgC3Osf8brMj0naNAj8HSINUxy2tAEteOl7ShhvY8S?= =?us-ascii?Q?2dmMerHjjgzfOa2vlFGczji468vmuVAXMcE+Begk8MXjOLcrcw2jVo0H3Q2A?= =?us-ascii?Q?9s+lICeubqkWNkRRNreYco+XkC0USCSie05ZkvwrZWINOqpwpiijrUM1cGUd?= =?us-ascii?Q?g5Oe1PiZJd2YFVC4JZD2xK2HDvfLjO2tByHHPl5x5xE9z/LmvaxZmhEkwf8j?= =?us-ascii?Q?pcDT2X1yB6dVV0rsCYj43fdsGQWKfnAhCuzasDCgca20ybck1XcUgrqVI6fG?= =?us-ascii?Q?IQjxdzH+prboZpYdrMNX9NLn26Nmlsm6EPoCmIlDGbnn/nn68mcMp4j74Qfm?= =?us-ascii?Q?beBSNZIVW6ewPXaz6M1M5sGjygeXLj+ktpcVy0N4gtMxiIt2CPrqDC3qXqYj?= =?us-ascii?Q?CiVmOu+Rt83KnCuNDMYOwgiA7KxvFad0JARnp?= X-Microsoft-Exchange-Diagnostics: 1; BY2PR0701MB2086; 6:7Fj6oKbP6kPNykwBjPfBHrMUUC5PGgV+DegiBxvZZTHU5WfDTohL+g37ChNRASMl4yZa84jS3g2ets5rRoA0R6y4ngZ9L1O02snDcvIMveExqBYrirHyEfw2LHRa0pYXb2C/wipq25Z+TgYaQUqli0tbPJ9EG0mrMSNfwSU+zMUxfSWwLnkw3ziWTYYZTb5p+lgkUR82sEAZTDxt1JNTAzkNieOrHaIKISKaucIx4hS553OkUUuZwMqp8LgntJnSXRpYxGlXtu9dqsL6bg4MMHNp2UqZ2cTFj2v9DiLEECTiX54aUyvhA7384HZC9e8BtmZGQ603ZW/iMIk2FbPLCNL7IDY/XnYGABgapfTGl0CELOejfpsOOZ3QPlCoWpJFLvxP6DRdA32fJhHGpeEzdMxrzV1DxuEGNkW6Y4ZYqEhtPJsHNsqi98vUzBjIQmLLpnM/R/lWAv4OJ7Szvr79Yw==; 5:TTt+yv2DXBPJwIyHepYPNXeXEZz0l39kOe1xJTiKOkZtIbFs6OFBmzb1j6+TdLcxxMDTBCS1rRDpmwROKxE8D44l4knPU2tkQuzsFTtZOwuiS744Bn/tk4sc2oSk/cq38p98m3ohmdB/2ri2nNWFfw==; 24:yIhj6ua1fgHgc8zrYLpqQcfBRdSONFV0McRIiqOABeemr6E1VC/ZalPhD8zRpcbEq34YAgWeufa1K5iEoE6In0B4/khm10No+y37ERgExbo= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; BY2PR0701MB2086; 7:6W/iu1n5WvRoj1/Y+Knig/k25zY9WA8i0dOWzOrvy0fYr2b+36YIwP8aXtkywOLElC6oPcjV2oXb2Qbdruyhy9Q9qZl/hU9qnGE2/DHVXqtW2LrBi+u7j2aeenkVeN7YfIS5Iuq09lP+QS1FiBlxsHAg3J05QMvVx3zEWSMNFm9SDIzVpKZ7KcXHZQnfnvtyqzOfC5UbLm4x6TxGw/LkszXdwhbQhGW2mq1aaaUG95yAlQTPpTsRhf7due1t1dcqAG7zTPlbcKw9WVr6DXIt7EgB03ka+51pRtJ093QQ2D999jhVflQcjoHC3ZPHcj4w1Uvr9QyYyZCiQYqONNRhPFSjMvxFPTLVBTIrvYIwJF7RZwGw0FvJBIA/jCtwz/LBWFwdEJhJyDm0tuZrEWgu7fCxaQwy15ym2v7qt9Cl7aW1BjHw7CrQuVDI8zMBId1UDPjnYLN7lTLlM4T3c9oqww== X-OriginatorOrg: cavium.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Dec 2016 19:08:18.7624 (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: BY2PR0701MB2086 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 --- 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 | 51 ++++++++++++++++++++++++++++++----------- 4 files changed, 49 insertions(+), 27 deletions(-) diff --git a/drivers/scsi/qla2xxx/qla_def.h b/drivers/scsi/qla2xxx/qla_def.h index 7629ef9..84f2cc3 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 58b4be7..98e4904 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 bc7008d..544f957 100644 --- a/drivers/scsi/qla2xxx/qla_os.c +++ b/drivers/scsi/qla2xxx/qla_os.c @@ -436,24 +436,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; } @@ -1887,17 +1904,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); } @@ -1909,6 +1931,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); @@ -3280,13 +3304,6 @@ static void qla2x00_destroy_mbx_wq(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); @@ -3484,9 +3501,17 @@ static void qla2x00_destroy_mbx_wq(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); @@ -5206,8 +5231,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);