From patchwork Wed Nov 30 20:24:54 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Madhani, Himanshu" X-Patchwork-Id: 9454845 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 02BE76071C for ; Wed, 30 Nov 2016 20:25:45 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id EA2E42015F for ; Wed, 30 Nov 2016 20:25:44 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id DEFD8284A2; Wed, 30 Nov 2016 20:25:44 +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 19DEB2015F for ; Wed, 30 Nov 2016 20:25:44 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1756888AbcK3UZn (ORCPT ); Wed, 30 Nov 2016 15:25:43 -0500 Received: from mail-bl2nam02on0082.outbound.protection.outlook.com ([104.47.38.82]:17968 "EHLO NAM02-BL2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1753868AbcK3UZm (ORCPT ); Wed, 30 Nov 2016 15:25:42 -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=l/Swv5YalVhSPUPGyka932+Wz8mYCp93sktdxYrQ2Rk=; b=nClYfHAhEL+481ShMbyJsC7Ad914fT2/5I7xgOPLPbRLhLGnbfUlz4oujLCLlRbkn980WRkTaHTbDip8r4bwsN7fil4H2mlJIHrqoWZSaokk+1A7wMOKyPXTH+RlOrgw/2n+Rav8kD0VUOPtjF0LHIl7Y/2EpnCkQ6zQm0OZS2M= Received: from BY2PR07CA0021.namprd07.prod.outlook.com (10.166.107.16) by BLUPR0701MB2082.namprd07.prod.outlook.com (10.163.122.152) 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:38 +0000 Received: from BN1BFFO11FD044.protection.gbl (2a01:111:f400:7c10::1:105) by BY2PR07CA0021.outlook.office365.com (2a01:111:e400:7bff::16) 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:38 +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:37 +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; 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 uAUKPCFF016474; 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 uAUKPC2Q016473; Wed, 30 Nov 2016 12:25:12 -0800 From: Himanshu Madhani To: CC: , Subject: [PATCH v2 2/5] qla2xxx: Fix mailbox command timeout due to starvation Date: Wed, 30 Nov 2016 12:24:54 -0800 Message-ID: <1480537497-16429-3-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)(189002)(199003)(39450400002)(4001430100002)(189998001)(80596001)(107886002)(106466001)(110136003)(2351001)(6666003)(38730400001)(8676002)(81166006)(305945005)(8936002)(50986999)(356003)(7846002)(2950100002)(86362001)(105586002)(5003940100001)(6916009)(15650500001)(101416001)(92566002)(76176999)(33646002)(39410400001)(50226002)(47776003)(81156014)(4720700003)(4326007)(2906002)(50466002)(42186005)(69596002)(5660300001)(626004)(36756003)(48376002)(87636001); DIR:OUT; SFP:1101; SCL:1; SRVR:BLUPR0701MB2082; 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; BN1BFFO11FD044; 1:dLoM8sMxFK6FSyh5UMGjnI1O0BbnMfKNpwqJ2SsJrLpmFGJJ8Z44PMRqO/7/Xym6Q5Jz3Nh64G6qCbag7vh675ovbOd+bKF6bEdvYHoWrkAF1tOM5AFERmWsDPeqgwGyDUF1Mv6kARVpz0JfJhYWmtumfDEtpiPAoBiXEasjl4/03yYRGdJ2N4WXlRSnmaeyGOEQiGcu5ESBHJUWwHM4RKDQOw2nR3Y7M48h9gJM5VVt5ErgkmwAVV51Pm6PgeFBxsiMklbh80qreZ1/n2T04n/sijXMLUswso2R8bL6ebTc6tWNqMZgsxTta/V7Sra8Xa6+RvT0GQNmkXB/yQ4tqsj8vJuscQue93KkEZIoarebQlrf+NuFwcaJxcaYNdEKlfSPMSQisPlznQDFxBSODWXNhftBaTH9CMnNNG2zKMB1TYoTbTaIVxGZ4Y2Xg9cFgEvF3xXf5CnzYJyZDC5MUSNYM2iNWmB3IBoJLJOV8Dike6VcvOW5Z7uUnH4darTpYLc36E7Vrd2HUsBTbiRll3eeC7Nq40Lk0uk1aY2B+nacUTiT3xnKaO+XSf60x8JM X-MS-Office365-Filtering-Correlation-Id: ad28d46b-d9e4-4aae-1b06-08d4195f0c0e X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001); SRVR:BLUPR0701MB2082; X-Microsoft-Exchange-Diagnostics: 1; BLUPR0701MB2082; 3:vxFC618lr/fjW2MaR6Eu2GDloyu5ZbWAKl0Pws3Q5HrvHSpYJnOwAeYPQGRVGAwRGUDyQ2kUPerhhUr3PWrSbqa00XYM58Cq1kQ+My+9JdnkNpqLi7n2IFlm76vjCQAmMsmt7fcK34+tOQ1vOwDj+CxMVzzei8F5q+C0F7piirXLkJAKkG0wKL6iRktXb7IQfRaLzWI+ls/Mwdpe+qbLmeoSBh5zozeuDpJKN5vEhKcUliZPZY4Iyk5kmmXDpGcQgOKWYJPhdR4LARZBV5aO+MCNDFzyLK5OsoyPqh9tgVnybdaaJOySVReNNkRQtdsTQxMvC8cJwfOjqkqr3k7Fd7WzDe0oqb5fBpbAmNJRWEmRU+p8gxlNzGfY4xMEYMI8; 25:bx8HEPpnh/4P8wAA+BCvrzGBkctsqHqlll77qaeLmcjczijbq8EaRlmf0nwXWhChjDKNJ6Dt6t0YIXjueN3qAJOFpt167I32TM28XJKoEhF8P2l99WE+DvYN/ild47BNPaTQVZe01EiGwY2iZK1IAO5+PT5ctqhrxNLG85rNYhlBrVYO4EOgZy7luzP/vZwdmyrfpEPP+m3AlFxutcIiq09dvcHXqIXQIiopsP3H1OArF0HFQ/L7c8getJYTWrT6rSkXR6vzcqFCGGEDW1n7BywKrXAjkfEaj5CpvwWjfcimLN683ssbXdsvnIXqZWSlgwKtnOuWCImWpyqSmo08RPtRTuGlGiOIn8qqnjzzsQAUmkFEev02RQZk/HQGPgKigmFIFNkVl/iY4OPuv07CrNtMODQwDHyXXylQkYUURyqot/0P9p1l3A1Ai5HRtZd4hP3B1Vh7BnxKj9edpt9c5w== X-Microsoft-Exchange-Diagnostics: 1; BLUPR0701MB2082; 31:wVMG4RzuM5GZAS31YnrScHFan3A42U3xQuTbiAa9OYxS1d0ea6zFnALyNU9luhHgIk/fAxiNajvxc4aFcCYJhdW3RkKjeNfyx0usWSDkYCUgaDFMtklh4PgHLoib7F+xgdhCHY+MtxmgpwQO/4+2MNnlQG3cDgRpzBoecylOfe9Owsaaw3a5YqrlwASV1VtbrqtD/i5Hv7vG0tvkFQk4ZsD2M/X5p2K0cHvefBZ/1CJT0rnVOClJzJSiesILMXfc/9pwUt0q/e0NCwuARrUidQ==; 20:nsSP/k3ncVaKPbpBdwYUOodMmWmY4imAETX2BEtIbYwXC8f51xSr/ry7aWT1dpo5CTh5N5NhJ2voGF9JfZ2mQjyZ5yCHTmpqw7j7pufM/Cdnanddca1AmSo/zYxfDbwC6uORlrs0I4NNuhqV7g/6xBr0GOp2lpaWYGzD+5JH3fiLpPUAK/zkhPbPbagFSc3M4/y/2oUtImEE8uB6jwEVBfxaPxOThigg1J7Nevsib6kWF8uIZ/fzJ/VxktNrZVGFcxro2wQY4dlqLWGcPsT1sHHXZq4OF3woen3FkYg5iz2Wwli+Xg6vH4/Z91d3anmyrQgckyBYLtoTjAupSHS3hP0nG2dQifTmZypG4YRjP+evi82dRfTh9gHqvrL8d/i+cxWZScu7tHron5pb/jPDSLGAXgthf+IhSuqgq78ihogNIR40iFSbzTulfaJWnnmrTSbB5cpPsE6Xn54s9FX6nI5Sh+wbLNrEfSMQPRmB3SMnZ1Rl6uvmBzwwFfj8E3xa 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)(13023025)(13018025)(13024025)(13017025)(13015025)(5005006)(3002001)(10201501046)(6041248)(20161123564025)(20161123555025)(20161123560025)(20161123562025)(6072148); SRVR:BLUPR0701MB2082; BCL:0; PCL:0; RULEID:; SRVR:BLUPR0701MB2082; X-Microsoft-Exchange-Diagnostics: 1; BLUPR0701MB2082; 4:FybbUAHbhBYhswjyLHFwkRUvLBzsq6q1jOpcz0exrk3fdu92JHaeAmGOgyq7VCoFN5hRH93Tji3K55vpsRh8fnmI8c7NgSdtlqOdmGGMi2mLLD7Bds2bX+rnQehx9MUafFNIzM3cKBOFm/sFtodpT+oDRsJCHvU6rtUeE3f+/rUpiHOD5xJlbKqE98jRpnyNvsZTbeqZG9hZGHkuoM/hk1Betkv9JK41+u/WyqHY/+5XXhIUfn9S2GEO3Mba2S/ebsHKtItYhpDd+o21B8jgpdd9ZgeYM7+7pBdJYAdKiyXSufchjIPDxNE9pZque46VJ+zClHe6z7a/I5aamlzl4gSRZYxXQnhL8enmcggol19TDmyaAfB6pTPNFrKi8F6QXkP/W/kgDJFPippC8PN6+HhQ4YUYnWxBNRM00kOqgySwtCDVt7X76AddOYaXz0/+L58UrcEIa1mXAm1hAIdxwGq9KDykY8fBVpDlQqv0cnoxKUtyMKwoNVPhc+d4Gn5LzPc2BzF9PcnrZSKsg/NjggGOtvbAn1/35HlAyRAloClUgdTCmUDFIwMKJlWf/sQKAc3iOBpu/UPq5M7HgEYforGP+AU3W5Y5D55zK7eZ9hW62QTwjIp+GKNHFUs3h5Eq7ZxRsPFInvPqsQ+0GEXJZxjOdonCHVR5YUvMrfzxraY= X-Forefront-PRVS: 0142F22657 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BLUPR0701MB2082; 23:yi2BaePcyfySp3zrn85HsRqrxzHPuH2BwRBlbHp?= =?us-ascii?Q?f9apYSFRU/mSFxUdJuR6HSFug98ZC9e819nDcy0dKAixHmhOSoSqkMfDcMXu?= =?us-ascii?Q?tNfaqCC4INOYpznNpdzunR0foFg+r4O2uh4oZYZypaNz3EJIolyBHMMSnu7o?= =?us-ascii?Q?ffI2/JzEdR58Li+mivQWL5eFYNOM1jZKtRHXFofV7eAdi4mLkvKxiRD9dK86?= =?us-ascii?Q?mi7V7NV/upTIRmAgtMoo7m9wDwbatFotrI9cPJDCVqBMHzNGE3XVpYyqXQLl?= =?us-ascii?Q?S1GJYPoEPgqolZ7QVzPStT7YNddeiT732RK9rlMpv43bwvTihU0BwZaF+rog?= =?us-ascii?Q?/mFuZAa49TILj4cWmBhWLmadhEDNAUgshJlUSbFAHvuE7RlPMnPvU5DwLQXW?= =?us-ascii?Q?B8tTB/w85Bww0jbQM64rg6QYB5y5S77EfeznPOSJIbXJtGLbDiNC6Ppjq1QU?= =?us-ascii?Q?Gtj1iG+CZapSHNQwsTITpLcOWvdNkLicmtADId6iiiG+7ZQb3E0U08nzf0l7?= =?us-ascii?Q?76Hm/iSUPHydzf/J+sOkz9Js5SCv2qQmEgM4/WoQu2Axw38LF8mVHxlwqCdf?= =?us-ascii?Q?ZjscbtbxGcFpwMviCZ+JgtvXWlqgRGSY4P8RJtUVQjMHjHgrT1CvUXyG5JzK?= =?us-ascii?Q?tnhsr0GSj5lBb7B3i9I5mLOMXtVEautZ7oHfxVp/qJaKXxa8rjP58XzzCN1a?= =?us-ascii?Q?LV/UFMCULXUcpdIdDWu1CjNMpcu/lY4e0r9pyKnl3Mfwj7Hp0EbddldRWuMt?= =?us-ascii?Q?AhaiK1010vjSrGAAK7fst0rTFlt7Eks/GgOVh8sadHckXTsP4HcLdZ9lsnsu?= =?us-ascii?Q?ZLBXHaT4I4iRMJ4KuH3XG8kpqLWenpjCzL8CvdOMNI13RVVLcX8UG2+VCQUd?= =?us-ascii?Q?ljMV6ZTP27JC6yp6+MEAfZ/dDV9PwGYHcmkGf8c04AJWVWVkPh5d/WbSnxz1?= =?us-ascii?Q?aRdJUE/xvfMrBT5DiLTiqKmdQ5GcWGrhqyowdZYvOxYd6OD4pwBqXLXZZjCU?= =?us-ascii?Q?g7KMfEj+f5gVHKqILObTTkXicAHx7oRKo81BKqWKvSYe/Wh7uEpPFMrJxDn0?= =?us-ascii?Q?12qUz42oCMxXRAZXenZgM/h0ADJuChVJHsd3V74sI+qLSYSUEu0LwBpEc/iP?= =?us-ascii?Q?f6GPzE3NHZi6Rh0bO+0QU5rZ5V2z14Xn+pTdC1iacTETpWpZCKDuOnt4yT/v?= =?us-ascii?Q?qUaowDB0NnyepCv0=3D?= X-Microsoft-Exchange-Diagnostics: 1; BLUPR0701MB2082; 6:ufN9GmMc66toX1MtGK2JuTTIQOCwPDzJdeOMSXOW5KvkMlMjKCOSoLyInMOcF4cQYBgq0ZlkACeGHwdx+r901YPgGorISf6l57DEurPe0fIrTKG8cZxMpTfqHHVtF9p+CIRktN2I+ud+/HMWrsNsZkOU9gEZnVRXWh32NSg5imwdM9wBevE1ykuDYl/U4Q8Dt7MGMY0jXWn5RWMeVwl3L9zjMp0cQD7TTs49BS9fwPLRQZ6VAlCtq5QSwKdlBSHWs+x2HYA4Uzg68+VXs6DW8YNNZIi6ev1kbCu2c3wrzygpTbUEYdGUJ1HCt5Q/A8KJOnC9gHNNJOt5fklD7o9r4dsXpW77ejATrOL5k7WX4sUZ8seNYb9ocmA9JgK6snkArMnv+yXqMQD0+O2p9BEmwGTpHlmJUjbxdjSFT18vYNbuuPKQo8DGOJLgBYOOCkNeYtT3dV+l1ye5dXYWLKsIhg==; 5:ZQJxPhQwxQw2faYxt3QP3SsRAVVkDc+c4cn1JNFcYQDvBt5E2nfRtGgtCQVm/58/QYkL4yik4n3zDmbWwTIHinfYEKzaByQ3CDk3bNbOuKCLzlBB+Zi2BJ6NUVR724ACUkABEuOann939BlqsiWHAg==; 24:5GUh6Pmya8LbrpZV/7phh6/6ChbhU6q4wanNon1vrpzmbHMlgS6c2W4Ro6K2KRoYxxIzfIZrTm6CMCK0AMD6163xPOEWpbPvn9xQuBWsr+U= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; BLUPR0701MB2082; 7:+u4Hb8tKvqqVnskAFui/Ghz4RrmIgfFbKTbXxnBj496TokAf66mktpWuh9EXvMvKPRQTAB6Q+g61KIdQkvaOlOer4S6vqI1miRV+87iq8NfroQQ6Zbce3N/fqygOuYFGydnwJ4GkwO2tnH4gf2Aq2iP2w1WXEDHjyTcyetUj+B4GHdn8oP4rPBtfynjL9dqgCcwFEzeu7ZGQwI/8Zb8EbtYI6w4dZIaSMIZ294/pyaBV3O6TXrYqtqvQflPqgOQx7m3gYKG5PCw4ysrD/W5mfc8AoVqqSKiUz9o0npXgzN22uOML0exssVdJfCusG73LW+8+A9o2K9I54WAH3yR+T/OmampC+Ss4tdtcrIPKPEc576VYGwC8r+JXrRY9zbWkIRqvuoPvPC5ycwH8cHFzj1lw4QWMGkDmeAaK9hUxnfVol0peNZT+Mg8ZcEuGQzXH8Tb7awbKtj0xvh4Z8SCZ+w== X-OriginatorOrg: cavium.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 30 Nov 2016 20:25:37.7489 (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: BLUPR0701MB2082 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 Reviewed-by: Hannes Reinecke --- 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 5236e3f..9a6ddcb 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..14068fb 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; } +static 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 56d6142..4616424 100644 --- a/drivers/scsi/qla2xxx/qla_os.c +++ b/drivers/scsi/qla2xxx/qla_os.c @@ -2370,6 +2370,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 */ @@ -2806,6 +2817,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", @@ -3278,6 +3298,8 @@ uint32_t qla2x00_isp_reg_stat(struct qla_hw_data *ha) qla2x00_unmap_iobases(ha); + qla2x00_destroy_mbx_wq(ha); + pci_release_selected_regions(ha->pdev, ha->bars); kfree(ha); ha = NULL; @@ -5046,6 +5068,8 @@ void qla2x00_relogin(struct scsi_qla_host *vha) qla2x00_unmap_iobases(ha); + qla2x00_destroy_mbx_wq(ha); + pci_release_selected_regions(ha->pdev, ha->bars); pci_disable_pcie_error_reporting(pdev); pci_disable_device(pdev);