From patchwork Fri Nov 4 16:33:31 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Madhani, Himanshu" X-Patchwork-Id: 9413145 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 3CF7460573 for ; Fri, 4 Nov 2016 20:24:12 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 1EF062A983 for ; Fri, 4 Nov 2016 20:24:12 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 136932A9E5; Fri, 4 Nov 2016 20:24:12 +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 16DF32A983 for ; Fri, 4 Nov 2016 20:24:10 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754820AbcKDUYD (ORCPT ); Fri, 4 Nov 2016 16:24:03 -0400 Received: from mail-sn1nam01on0065.outbound.protection.outlook.com ([104.47.32.65]:26448 "EHLO NAM01-SN1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1753296AbcKDUYB (ORCPT ); Fri, 4 Nov 2016 16:24:01 -0400 X-Greylist: delayed 13818 seconds by postgrey-1.27 at vger.kernel.org; Fri, 04 Nov 2016 16:24:00 EDT 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=N3XSOEQOoBwpF1sZKpOpj0APX56nqXScjbrrXoXJ1Dk=; b=gmLz1dNIBmnQvuF2mtlQbUwzPCcH0c2h25Lk9iN5ekJvyRoWXNZADydZrN9BDQ+pJ64MJPs+gwgKqeTHQ4e7fEZs1N8D3m5xTrMILzT2lk1FsM241GNhIh5IlK/W4PegnZ0+JNqGv0OD4xt9wTWDtj24LY8k3DjiOTtUb0M+S6I= Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Himanshu.Madhani@cavium.com; Received: from cavium.com (173.186.134.106) by CY1PR0701MB1835.namprd07.prod.outlook.com (10.163.42.156) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.707.6; Fri, 4 Nov 2016 16:33:42 +0000 From: To: CC: , Subject: [PATCH 2/4] qla2xxx: Fix mailbox command timeout due to starvation Date: Fri, 4 Nov 2016 09:33:31 -0700 Message-ID: <1478277213-3848-3-git-send-email-himanshu.madhani@cavium.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1478277213-3848-1-git-send-email-himanshu.madhani@cavium.com> References: <1478277213-3848-1-git-send-email-himanshu.madhani@cavium.com> MIME-Version: 1.0 X-Originating-IP: [173.186.134.106] X-ClientProxiedBy: BY1PR13CA0031.namprd13.prod.outlook.com (10.162.107.169) To CY1PR0701MB1835.namprd07.prod.outlook.com (10.163.42.156) X-MS-Office365-Filtering-Correlation-Id: 28ed13ff-0049-458d-9371-08d404d056cd X-Microsoft-Exchange-Diagnostics: 1; CY1PR0701MB1835; 2:yY+kW+AuZmZrpdkGFt07tfhxy8r/M/kOB0FFaYxM1coz9/Tqw2L+X2uhI93NgQuxx0PCyuLN1lwBQJsyyTLGppyM00nN23jV9f7swUeqJypNfoUwnjZAzkpId5W7RAgq5mJV6T4CFQ0ZhvsMPASCX/mzN/2ZmPrGiZ4OT3jxWqR7RUHpoy9GLHp5L3p5eq/3DXoqQRAoStWCsDSBVj921Q==; 3:4bbX5CsnBsIdmIhysDcEnjq/jXfiZh7GUXcczYRMKMx+DljRlwXS2TMmXF+upWC8+SbXxHJqKb+ag9sHPJ6ym9W+RwzQHJ4ezeUqHD6mmNRsYqV+AyhmH27qmipzJfll3g8glx6JR5jJi5/ypBI3Ww==; 25:lFDbxqIli1h1336Tcr70ixLevJ2OyguA9qqJM5qwPjIyxZ1rIwU9eLRVKZUy7usTNwL/pKD64YW1vumF1H3DcX/7srYS01lQ1TMIHPYKgypYvXcowyMyATQga4b9SoOJ4ofirj79uSAEFGqfZW12CZgOQjzRcyG8kgtzTzZcjNlFaYOCQ3E8aVBV+2upLeUfZwomWUMc2TeVKWp+ZG2s9CZTCXQzJA5FNwh2J1rXx87oJLDfRXW5rPcOzaJvGwiri4AQSaFf0IWNjklzDhlHdDeBZN46OQm36b9ws+7Md5F/AThf8bnvuzQfKeeYtFzzZ8BzjUsdtk3i0Hnbxs8CppATeW0fyYnnieVf+ut81TqSRRuaVx5aQiI3Xp5EpNZM0DrM8r+OzsHl9iFOiskTy2VjgH79xETjx1F1Fe/2A2MIUi0ESr+6QzhinRtraMGD X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:CY1PR0701MB1835; X-Microsoft-Exchange-Diagnostics: 1; CY1PR0701MB1835; 31:FS4/7sU/cOIXF9SwJwpK9FIDWiTDFYOKs19jUfSGdt3C6RoT0NyB1CAb0Hkgku59rozVDJJ1F9HGf0/JTkqJib/wsEdGllz1/6ynARAJMWuSXEAiwTq+z52u+cdQ2bLSxmZup9nRGBQAebVkTRvFMocA/6KVEqXTEHGhfGuARyprYcqn46M5f/QZ7tYbJwWN3uzGwMArbn3yu7pGXCzyL3XH3MskFUBJXx/jJUOzg4liujJBTUP8qxyeTbaMRj+6cDl0DKsxsPl96TENtOY7bA==; 20:yitxTXCXFEuUc+p9HbgBzVhn8NcwmPvYc52BA51PUvUHzxIdH+PVMl5q54wToBYSH14l93XXFsZVKXv9Lsmuw+UgWIttLqrntNkpylCBuUTQWe+ZK8Nh9HkMK8XNXYSUuEjtCG5/5/G+lGbBEE1p7bikvNVS1QK7ZdKwOlRcE+OR62HLiD94An4MThM7vBRCKGbyoXE9ebJMfI1voZg8LdkeeyHfRDvRfaAtpm9ugTr6hovWW3D4+1uQg26zEcSbooAVQcTr0MYevwjEDL4aTQl4zJKhIAvi4EvZ79mxbn5vJ8XXiYQ/oKXAp3yT/LTCLraP7FP1zinyEhMWi21BKaW1kdn8PAuyFKwf5GAX/0ilsVnAGiGWr7onnypW2VUGvc3uOswbDnWcGkSZDHTKkji0bksPEkFEeretWeefT6sHwMiIth5yGdt7c+zpi7uvfe9sqA9JDcjjBIDFBXARJqdLt8qHDcbhboyFSdtJrP40JRlwKwxuOYDWA7RGP6yx X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040176)(601004)(2401047)(8121501046)(5005006)(3002001)(10201501046); SRVR:CY1PR0701MB1835; BCL:0; PCL:0; RULEID:; SRVR:CY1PR0701MB1835; X-Microsoft-Exchange-Diagnostics: 1; CY1PR0701MB1835; 4:d9005SQ3kTNkXrptVofK+KpyaSeJoyF3kDrZL6MRHeTJfUO5IYC1nw/wo9TzyPOVfRRm16OevXUm8wjaOi3yfEJAKnGh8l2Oi8z6f/nRcvFTeJ0ejYFMo57T6cwvWPKR8R7VLG/cbzdX0S/0SPV7tOuTdIjLNXbOD1/uJyn7qqtFIIP7uOfZ+zCRcmxBW6vIxfa2KV8bZAOW9N0ff77A0YkuA7e/eUmTaqxPeKoaycWX2TbSyxJd3Coud3lZnU7Sryh61H3QjQUsVBZ0ih74yY+AujxsRUQcPHs43cmYpXf+OBoFK3OiFMXWxLswn2WdrePC8870ktZ0h/LNq+uGcok4QqQYaMCSE+HNDZo6qI5KpCga1Ghzyrao0EZWaPH8ZlOtPw+pVf4PB5cckJNGKw== X-Forefront-PRVS: 01165471DB X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(4630300001)(979002)(6009001)(7916002)(189002)(199003)(47776003)(50226002)(2876002)(15650500001)(575784001)(86362001)(106356001)(2351001)(229853001)(4326007)(105586002)(48376002)(86152002)(77096005)(50466002)(97736004)(110136003)(21086003)(92566002)(19580405001)(5660300001)(6116002)(69596002)(19580395003)(50986999)(5003940100001)(7846002)(7736002)(101416001)(36756003)(8676002)(81156014)(33646002)(42186005)(4720700003)(81166006)(586003)(189998001)(68736007)(6916009)(2906002)(3846002)(305945005)(76176999)(66066001)(2950100002)(6666003)(969003)(989001)(999001)(1009001)(1019001); DIR:OUT; SFP:1101; SCL:1; SRVR:CY1PR0701MB1835; H:cavium.com; FPR:; SPF:None; PTR:InfoNoRecords; MX:1; A:1; LANG:en; Received-SPF: None (protection.outlook.com: cavium.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; CY1PR0701MB1835; 23:92n7jh0Tk/Nogli18CFeCNNWIRph7qpo0hrmDyA?= =?us-ascii?Q?tIml5h0y3MM/liR6o9tzBt2YMNYsIgHL4m6MZYraLZ+cWNrH07BDqsdolXOU?= =?us-ascii?Q?dlBbifumjoaW5a+8fK55vW4pXJkCqJDYSp0GFTrPDy3q1dXDPqck+4wlpn/9?= =?us-ascii?Q?A3xubYfmbJI5vR0dI0FJwKk4vJzl2yrBFhEOZrh0sP3DbxU2JjeZ9CcpWUo5?= =?us-ascii?Q?z5J0RjNAB1dEmqD2QbTUhZzWbyYa595TFGHDZBk2IX5ZpH819mAF5Ih9lcdA?= =?us-ascii?Q?t5e8SFGtFKy+g9Uevk4lnGLXXPmpNcOzxiL3/fvajn8oHHSVJ6XS2yolyVZv?= =?us-ascii?Q?O40TpSibyw3N4w3dMwxNbKZOiBAWqI7ZctdPEwRIUBeppaGDeIYJ14TeLMww?= =?us-ascii?Q?RwjIZHaMsKUVd8ln1LgjYWXEv/v2/EPAje5XjlAcFRX2aHlUFGNRbWrKy5hf?= =?us-ascii?Q?XRNb7t/gEdKf4vuIZPvbsrcv4ppZN+oJCzWIwSuAWnJPRLfOGhOVbqnNfLvh?= =?us-ascii?Q?nsAkv6Uv/SXh/AJPMYQJYZXYH92a/5Gq8v1dRYURyaq2zUwuwIjoOUyIxSJJ?= =?us-ascii?Q?OIuFBowz0vtoAwBuxEwxbNQjVwh8eMf/kCPx0mY7p8QGUtA2yf0Drbowgb6r?= =?us-ascii?Q?DR82NVHvAGKCsE6cF2Gh7FJz7dqpiA23bx445MwwGVoo8dot+3PuY90suN/F?= =?us-ascii?Q?H1o/u4uwfEpiavPNWiJUkxvoX/HoQZKWAyvPTl1eOM/EO/hwROHKeNCHXpA8?= =?us-ascii?Q?AzzILPv8r9/xCdfRnOWkara9s3HyQeu/CiCxqYMFA+o01VcY+e0+ODHEpPYq?= =?us-ascii?Q?FihOto8U2jUi96wUBlWZABr4fY8j88h+TYpU4heLPMCgivxWI3s13w1XTCZd?= =?us-ascii?Q?XscvOu9a5B9ROEj8gLDa1bMvNn8vW+fiW5vsc7xiypqla+0eBiIMe8Lvy/l6?= =?us-ascii?Q?kHnToYjC48dCuSAUPIxBuAGB1kZ/O/adv69qigC5Bu+89C51W7sjmE2lET8n?= =?us-ascii?Q?kIL/kdjazrxVp7WPz+kir2GVQAtGoYWGH882qK7W2CKFiMqW/QPqergot+n/?= =?us-ascii?Q?jL/af3T94bq6oHT9VvMjA0L7Pfax6ID3E+g/yM+uUm9nHYf8SYIDCBis0wwa?= =?us-ascii?Q?s76XWMWAhWt7yL988Rqxudqov04059bzaA8SZRCSQl+mdHmom0nxN4ga2Uf/?= =?us-ascii?Q?cwfY8XuvUQ1mfii000JkrsD59tb6wALq7Nr7NYrr57U6mewsWTTpCUJTE/VY?= =?us-ascii?Q?3W0c2weOPEWKq5tssUfif2BzNcrCGgpFItJJx1iEZ635blzcSe5k9l2qTdQ+?= =?us-ascii?Q?uqbRJR1UbKVHeCN+DqM8f31y4gZJwWft//yzX1G3oH2Si/keOSfkdF8JuNgY?= =?us-ascii?Q?B0KyfTKgsaDoWokh6pUwls5Yhni69QjbgxDZ8Qg7Nz5CAIOAu?= X-Microsoft-Exchange-Diagnostics: 1; CY1PR0701MB1835; 6:By1IqqI2a52cCV2yJ1cyQAvztpx6rWiEIn/R0UcIGA3tNKuEkJ9dAwSRA1uWPXlpzluLBaboe6z71MkjrJrd7Buu/eGSJyfzOkH3qB1oh4jfis/s5+rTdv9980TNXqWzy0PNZTbrpD8GDh75iTvpdqdqZcG4Zy05TaG4Tw34+cyVFIlyysECzNhzA3H2b451jiEq4kQB1XimaeL8LUnqI/71tgcAFaeuBcGAStigPnDpC8tNirneEXSHyWe7fffnqR9hwnHdDPXDYdLZTCP+W30/fc1sc96w7tLdhvCtMnzaDI9Qe8XLLIcqq6baTece; 5:p3mRb6WMfvztee4KHfOW8RvFlMSRUMGGWnDFIzLLmvOxUIGpis6r6KqFiSCZlQPumeJL8pVNA/y5XYiXfjZUWH5M0cUglsd2oI7Cgd7+JKfnZ15HevPPJaaeF2bHxFsTctBhYvbGCWn7TM1R2ZfjoA==; 24:zBhdebRnKRUDt6JWcF2ETQOSpv1xX4GHMZ7JXLxhGcZ3OaG3dNCKfvEF8svsk3cDh+Cp6Kk8kLXTCDny7nXErWXvq3R/0exIWtOHXitaYe8= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; CY1PR0701MB1835; 7:Px+aGXYUq5VfjDyv/N41sZejDz+2HUArIZR5DkqyD1Y2F4aiTaQUmnIlV2Q38QwCPzeIBZui8x62ASRmpIdq1FPtpX3zfDH9sqw/eAzcz0c5mNlaVPIe13wr6PEMnVrlDH4m7JfwWdZz8ZT9bwgVT51tjrrxd83e+xOE9RRu5A3HmvoKSRRlROKj0le/RjAfCZTsQheUWRtudZ2+MdS4e5HxMvoqT+U9ONbt7ejVAwH1IRN5GNJZ76frUKIbBcTOIlyrYlZs9GzKGqp8nWXgZxGA92VvxL0p8nilsfb+m+kI1S2mvMv6hyytbVss6qKbiaUytCQekM/ML3kkJyjcUmKxIGWDygBwY86TV8+db6I= X-OriginatorOrg: cavium.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Nov 2016 16:33:42.0332 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY1PR0701MB1835 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: Samy Signed-off-by: Samy Signed-off-by: Himanshu Madhani --- drivers/scsi/qla2xxx/qla_def.h | 3 ++ drivers/scsi/qla2xxx/qla_mbx.c | 88 ++++++++++++++++++++++++++++++------------ drivers/scsi/qla2xxx/qla_os.c | 24 ++++++++++++ 3 files changed, 91 insertions(+), 24 deletions(-) diff --git a/drivers/scsi/qla2xxx/qla_def.h b/drivers/scsi/qla2xxx/qla_def.h index 73b12e4..36eb450 100644 --- a/drivers/scsi/qla2xxx/qla_def.h +++ b/drivers/scsi/qla2xxx/qla_def.h @@ -3553,6 +3553,9 @@ struct qla_hw_data { uint32_t idc_audit_ts; uint32_t idc_extend_tmo; + /* mail box work queue */ + struct workqueue_struct *mbx_wq; + /* DPC low-priority workqueue */ struct workqueue_struct *dpc_lp_wq; struct work_struct idc_aen; diff --git a/drivers/scsi/qla2xxx/qla_mbx.c b/drivers/scsi/qla2xxx/qla_mbx.c index b31c36b..b1e0c42 100644 --- a/drivers/scsi/qla2xxx/qla_mbx.c +++ b/drivers/scsi/qla2xxx/qla_mbx.c @@ -10,6 +10,14 @@ #include #include +struct mbx_cmd_info_t { + mbx_cmd_t *mcp; + scsi_qla_host_t *vha; + struct work_struct work; + struct completion comp; + int status; +}; + struct rom_cmd { uint16_t cmd; } rom_cmds[] = { @@ -68,7 +76,7 @@ static int is_rom_cmd(uint16_t cmd) * Kernel context. */ static int -qla2x00_mailbox_command(scsi_qla_host_t *vha, mbx_cmd_t *mcp) +__qla2x00_mailbox_command(scsi_qla_host_t *vha, mbx_cmd_t *mcp) { int rval, i; unsigned long flags = 0; @@ -140,19 +148,6 @@ static int is_rom_cmd(uint16_t cmd) return QLA_FUNCTION_TIMEOUT; } - /* - * Wait for active mailbox commands to finish by waiting at most tov - * seconds. This is to serialize actual issuing of mailbox cmds during - * non ISP abort time. - */ - if (!wait_for_completion_timeout(&ha->mbx_cmd_comp, mcp->tov * HZ)) { - /* Timeout occurred. Return error. */ - ql_log(ql_log_warn, vha, 0x1005, - "Cmd access timeout, cmd=0x%x, Exiting.\n", - mcp->mb[0]); - return QLA_FUNCTION_TIMEOUT; - } - ha->flags.mbox_busy = 1; /* Save mailbox command for debug */ ha->mcp = mcp; @@ -217,7 +212,7 @@ static int is_rom_cmd(uint16_t cmd) ql_dbg(ql_dbg_mbx, vha, 0x1010, "Pending mailbox timeout, exiting.\n"); rval = QLA_FUNCTION_TIMEOUT; - goto premature_exit; + goto mbx_done; } WRT_REG_DWORD(®->isp82.hint, HINT_MBX_INT_PENDING); } else if (IS_FWI2_CAPABLE(ha)) @@ -251,7 +246,7 @@ static int is_rom_cmd(uint16_t cmd) ql_dbg(ql_dbg_mbx, vha, 0x1012, "Pending mailbox timeout, exiting.\n"); rval = QLA_FUNCTION_TIMEOUT; - goto premature_exit; + goto mbx_done; } WRT_REG_DWORD(®->isp82.hint, HINT_MBX_INT_PENDING); } else if (IS_FWI2_CAPABLE(ha)) @@ -297,7 +292,7 @@ static int is_rom_cmd(uint16_t cmd) rval = QLA_FUNCTION_FAILED; ql_log(ql_log_warn, vha, 0x1015, "FW hung = %d.\n", ha->flags.isp82xx_fw_hung); - goto premature_exit; + goto mbx_done; } if (ha->mailbox_out[0] != MBS_COMMAND_COMPLETE) @@ -353,7 +348,7 @@ static int is_rom_cmd(uint16_t cmd) set_bit(PCI_ERR, &base_vha->dpc_flags); ha->flags.mbox_busy = 0; rval = QLA_FUNCTION_TIMEOUT; - goto premature_exit; + goto mbx_done; } /* Attempt to capture firmware dump for further @@ -431,8 +426,6 @@ static int is_rom_cmd(uint16_t cmd) command, mcp->mb[0]); set_bit(ABORT_ISP_ACTIVE, &vha->dpc_flags); clear_bit(ISP_ABORT_NEEDED, &vha->dpc_flags); - /* Allow next mbx cmd to come in. */ - complete(&ha->mbx_cmd_comp); if (ha->isp_ops->abort_isp(vha)) { /* Failed. retry later. */ set_bit(ISP_ABORT_NEEDED, @@ -446,10 +439,6 @@ static int is_rom_cmd(uint16_t cmd) } } -premature_exit: - /* Allow next mbx cmd to come in. */ - complete(&ha->mbx_cmd_comp); - mbx_done: if (rval) { ql_dbg(ql_dbg_disc, base_vha, 0x1020, @@ -474,6 +463,57 @@ static int is_rom_cmd(uint16_t cmd) return rval; } +void +qla2x00_mailbox_work(struct work_struct *work) +{ + struct mbx_cmd_info_t *cmd_info = + container_of(work, struct mbx_cmd_info_t, work); + + cmd_info->status = + __qla2x00_mailbox_command(cmd_info->vha, cmd_info->mcp); + + complete(&cmd_info->comp); +} + +static int +qla2x00_mailbox_command(scsi_qla_host_t *vha, mbx_cmd_t *mcp) +{ + struct mbx_cmd_info_t cmd_info; + struct qla_hw_data *ha = vha->hw; + int rval; + uint16_t command = mcp->mb[0]; + + if (!ha->mbx_wq) { + ql_log(ql_log_warn, vha, 0x1005, + "mbx work queue doesn't exist: cmd=0x%x.\n", command); + return QLA_FUNCTION_FAILED; + } + + ql_dbg(ql_dbg_mbx, vha, 0x1021, "Enter %s/%d: %p 0x%x.\n", + current->comm, task_pid_nr(current), mcp, command); + + cmd_info.vha = vha; + cmd_info.mcp = mcp; + init_completion(&cmd_info.comp); + INIT_WORK(&cmd_info.work, qla2x00_mailbox_work); + queue_work(ha->mbx_wq, &cmd_info.work); + + rval = wait_for_completion_timeout(&cmd_info.comp, mcp->tov * HZ); + + if (rval <= 0) { + ql_log(ql_log_warn, vha, 0x1005, + "cmd failed: %s, cmd=0x%x, rval=%d Exiting.\n", + rval ? "signal" : "timeout", command, rval); + cancel_work_sync(&cmd_info.work); + return QLA_FUNCTION_TIMEOUT; + } + + ql_dbg(ql_dbg_mbx, vha, 0x1021, "Done %s/%d: %p 0x%x.\n", + current->comm, task_pid_nr(current), mcp, command); + + return cmd_info.status; +} + int qla2x00_load_ram(scsi_qla_host_t *vha, dma_addr_t req_dma, uint32_t risc_addr, uint32_t risc_code_size) diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c index ace65db..7478ca2 100644 --- a/drivers/scsi/qla2xxx/qla_os.c +++ b/drivers/scsi/qla2xxx/qla_os.c @@ -2349,6 +2349,17 @@ uint32_t qla2x00_isp_reg_stat(struct qla_hw_data *ha) return atomic_read(&vha->loop_state) == LOOP_READY; } +static void qla2x00_destroy_mbx_wq(struct qla_hw_data *ha) +{ + struct workqueue_struct *wq = ha->mbx_wq; + + if (wq) { + ha->mbx_wq = NULL; + flush_workqueue(wq); + destroy_workqueue(wq); + } +} + /* * PCI driver interface */ @@ -2785,6 +2796,15 @@ uint32_t qla2x00_isp_reg_stat(struct qla_hw_data *ha) "req->req_q_in=%p req->req_q_out=%p rsp->rsp_q_in=%p rsp->rsp_q_out=%p.\n", req->req_q_in, req->req_q_out, rsp->rsp_q_in, rsp->rsp_q_out); + sprintf(wq_name, "qla2xxx_%lu_mbx", base_vha->host_no); + ha->mbx_wq = create_singlethread_workqueue(wq_name); + if (!ha->mbx_wq) { + ql_log(ql_log_fatal, base_vha, 0x00f0, + "Unable to start mail box thread!\n"); + ret = -ENODEV; + goto probe_failed; + } + if (ha->isp_ops->initialize_adapter(base_vha)) { ql_log(ql_log_fatal, base_vha, 0x00d6, "Failed to initialize adapter - Adapter flags %x.\n", @@ -3059,6 +3079,8 @@ uint32_t qla2x00_isp_reg_stat(struct qla_hw_data *ha) qla2x00_free_fw_dump(ha); + qla2x00_destroy_mbx_wq(ha); + pci_disable_pcie_error_reporting(pdev); pci_disable_device(pdev); } @@ -5011,6 +5033,8 @@ void qla2x00_relogin(struct scsi_qla_host *vha) */ qla2x00_free_sysfs_attr(base_vha, false); + qla2x00_destroy_mbx_wq(ha); + fc_remove_host(base_vha->host); scsi_remove_host(base_vha->host);