From patchwork Fri Dec 2 21:44:53 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Madhani, Himanshu" X-Patchwork-Id: 9459307 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 C42296074E for ; Fri, 2 Dec 2016 22:01:22 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id B3BC628591 for ; Fri, 2 Dec 2016 22:01:22 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id A8724285AD; Fri, 2 Dec 2016 22:01:22 +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 C7F8D28591 for ; Fri, 2 Dec 2016 22:01:20 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755210AbcLBWBU (ORCPT ); Fri, 2 Dec 2016 17:01:20 -0500 Received: from mail-bl2nam02on0040.outbound.protection.outlook.com ([104.47.38.40]:43259 "EHLO NAM02-BL2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1754808AbcLBWBQ (ORCPT ); Fri, 2 Dec 2016 17:01:16 -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=n3FBnI/VvpUpCdMSHed8biexSmAt/E7hjrZ2k7aOHY4=; b=JmNaxBWOv4t+hUC24sgBLGPTgFAmJFPj32XyZ5vgolv3pOfodOVJGPZgG25+suvD41QkWWtn908Rd3JH3E0BZUSAa9Vvqfc3wPZzNoJ0PqCB9OV9qIpO0IF07K7LpC5yw2Rs5FtJEJiuwpYkMwwquMd07rp/14DJgIVC+ospQCI= Received: from BY2PR07CA0018.namprd07.prod.outlook.com (10.166.107.13) by CY1PR0701MB2089.namprd07.prod.outlook.com (10.163.142.151) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.747.13; Fri, 2 Dec 2016 21:45:14 +0000 Received: from BN1BFFO11FD039.protection.gbl (2a01:111:f400:7c10::1:109) by BY2PR07CA0018.outlook.office365.com (2a01:111:e400:7bff::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; Fri, 2 Dec 2016 21:45:14 +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 BN1BFFO11FD039.mail.protection.outlook.com (10.58.144.102) 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; Fri, 2 Dec 2016 21:45:13 +0000 X-IncomingTopHeaderMarker: OriginalChecksum:; UpperCasedChecksum:; SizeAsReceived:1101; 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; Fri, 2 Dec 2016 13:44:58 -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 uB2LiwFo013648; Fri, 2 Dec 2016 13:44:58 -0800 Received: (from root@localhost) by dut1171.mv.qlogic.com (8.14.7/8.14.7/Submit) id uB2Liw6c013647; Fri, 2 Dec 2016 13:44:58 -0800 From: Himanshu Madhani To: CC: , Subject: [PATCH v3 2/6] qla2xxx: Fix mailbox command timeout due to starvation Date: Fri, 2 Dec 2016 13:44:53 -0800 Message-ID: <1480715097-13611-3-git-send-email-himanshu.madhani@cavium.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1480715097-13611-1-git-send-email-himanshu.madhani@cavium.com> References: <1480715097-13611-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:CAL; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10009020)(6009001)(7916002)(2980300002)(428002)(199003)(189002)(39410400001)(106466001)(5003940100001)(39450400002)(42186005)(50986999)(2351001)(2906002)(105586002)(76176999)(86362001)(4326007)(107886002)(15650500001)(189998001)(101416001)(26826002)(4001430100002)(50226002)(81166006)(8936002)(356003)(81156014)(8676002)(50466002)(110136003)(33646002)(305945005)(6916009)(38730400001)(626004)(92566002)(2950100002)(6666003)(4720700003)(69596002)(47776003)(5660300001)(48376002)(7846002)(36756003)(80596001)(87636001); DIR:OUT; SFP:1101; SCL:1; SRVR:CY1PR0701MB2089; 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; BN1BFFO11FD039; 1:0uTLWbGokh3jU5nv6jGqQqfIk5tdeX4qAhOTBs9cB8BRtcOc4mtzD1OXkOjLEQvlWM0Kwvj1N+o8QDmJY8jHkUs6vAcZEULFz0EwPM4NHSbAQkc6WaHnU61XhQsI/mlo3z2ZsIsrhJP4VUb0p9y2C4PE9sY09Gv5reY4qDXnD3cwvZbO0gqWEe3cd2xDufR/0jFja8mQwe/AANxQQViVwBOj1Ir+4HoOYi6BsSj6JR1/VpY7d+SzO+Z84ZPOryP8iFKxhkneqqKIymMUoDW3tDUeSBFoOjXKPTO17Bpp5HvSkX+crgebdIgJS5QVK+w+eohUF7DuAguwqxexxQU9K4rhV3WauxNArRxsbxYJcuPpXzmY68nPwzvFwMXubpdz2GFTKoHToPs+cyQNGW381rHhpeIKQhCeFKdT5ARU0arpqATvtYzOgeZTZe9t2p/Jr1H98eUDnqnzR5TKyWLQrZo04JYRMxS5WvYsLW+caGw0OEtnt1LUP+N1hlesRDBmF7Qc6lqEpfSBCDzE0w3R0Q== X-MS-Office365-Filtering-Correlation-Id: 4df0be0a-39e8-4d63-cb96-08d41afc7f8c X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001); SRVR:CY1PR0701MB2089; X-Microsoft-Exchange-Diagnostics: 1; CY1PR0701MB2089; 3:WZfJ/WygD78L+RpEvgCn59CvtHMDl4+mUcEQF53gTJQM/qqTIy7DLSxD35HC7zqr1aJ7jY8yvmPHwI0vqSwLqkgiSbsbrrZmycIADOt29qeiO0dhTZ3vzFLF+YR5li1AnX6KA4+LbtC+r+GA3A5G4yJOzL4+/vQaLzUu/BEPHNllh4pgkzdfJFqXZZBbF26oC90Xyiaq1mHiKeJqmXl15qWhBRM0fYoWokctT++s2DhRBsKPJ/JTIaReJlsxImpp9XuTXA9tHZMZP+/xrGIqQ5wz8sLZwTwnETIfkGzbKgrNrrULe/DiXz6EbI4Gmzrww78707nZwHFXKoIXEXtmGszp+KNgRQdw6m9G4DocBXJ+IR265bcXjsZldpXDm9rw X-Microsoft-Exchange-Diagnostics: 1; CY1PR0701MB2089; 25:6JW3V658aQJ0Cc1dDqW7CVpDb7/jfGDBW7FoFdUX14pbkEbtOMImuj55rCTBsoSQdSLr1aYSci7l87ft3QuVUI/jD/6Lx1D375mKb7ugBTIzrNuBo9jXjO3WIQ46Di0rfvCR0X7uBhRwNNH0qsKvqVmCtYHMvCSGwv8pKxSEYiVMZDL/SWBcvd2jwBtsinSr0C31whCqffuOQPvirPZ+jsItIKav/12i4R/PPgX+4jH6ZkfbKFO+SRdoRrfoXa7cqPQG/n6EtjGWbS80EmBpye0nnxjv4TMG15hFv7zcz0yzriH8nCrBLl36wNJDUoD1x8NbrqRRP9mWLaPL6znjMA4XX/VPAu4nauuVX9FqgrYqvIA+yUQep8CnYY8vN9h1YSL9hWaVWjlNctiERDdWaXuoey35ul6I3D61BxmA5RBcHQdOC3r4rFiEI+CfNa/JGDnIoLK7CVgZQLwsOFp7/sP1hi09QjQ3TFDvrLs913pU94slQQu7iMNxjf2F0HjFvThpzmKnyqEXNGVEGODFgx1ak2SCtS4W1sKK46tnEjUYGBjzdwRx+ngit7W/+Z2taz63udYDIBQ+7RhjGfHy4g4lO0voHtu3P7OeZyz/BQApN7QJ+l3nVrqQ75P2hhKMEXXixXbtgJ2hiz9goQD68MLlbvsBoSQcWTc3srY4QQfaY29pdfeVizTKN289aL6GXt39ATfT7I4hvh9aBTGGdXFHxxcv+qRt3V9bRd8rUS9zJrU0do8L4aYIodX4e2tXmoyXzfaX06qdjo2meYha/iI0qQWfCyuFiU4SC49ZfPFB/LY8PW9oUk61BQ7hGXzjiFXw6UcUCw2cqEW/BWYsVUPkgSWr9R+MZ5+fnrxCgHc= X-Microsoft-Exchange-Diagnostics: 1; CY1PR0701MB2089; 31:f241l6OTUqtpBsIaA+qCl1AbagAT/P3rztnJ5CTFdEB37Zz/KQb2vmOnaNqdlURpH1MdbZZeU2L0locThpTEtCo1w+qj3+XiHSqAt8xSn8m7rYWC64uUotNwC/Azlx6fHpHK7Ty+UwzhB1jPFihjk0BQC95EpfxhgPzPIfEP5sE9KogAEE3LD/EaD4vxwSKIWZeWLvUBRC5t8K+J4VdK+b3gHAoXpRmZMLXtpjCPBlpO1BU7Mn7I/MSIzpfyXvk+HI2dn8VfIBZnPLxYzc+JSAUZEvFjzeQ8VmyhM9dYnhE=; 20:sLlIHPEHtbzh+9QlJ2W0Hv55RIIeBMVp93hDJW/3p2M0hsy2zxNwP4opxVOL0lRGQfC9Vx3HuC5MwvSCYh13r2JJalVu58SzW41KGZRK5zWaduhJwbrc1Wzm8uxo1p7TGjgt+PM85evQc4MPH+vp5J5ewBD5fpiI8Wn9bd7BdKwk6WB8rQRHUFaYEBl8wSN0svitvGeloZVRLbMCcjIDYH7qBnYmRwo48tWJdl98JjP9XSsAzTU1leIriD4m3AA6FLoVIVk/ptKtYqHDvHB1mJN/RQveQ2tWlOVT3rVtA1Wu3jyyp2hB4OdoiF14Mn59o+e5fn0mrc6xAj1XRn0alSZe6M8oWC02lbnBqX/HzFfH2DA0dpCpF22JSCdZVKedyKj32BcHXx7YQFqlCWpbI3VBQE+0L0fjyJ9QR8OeCirqpmcL5wsxBUhXGFci2fNIUP0GtB4aWnDnn/Q5j4VK0B2aZ/g+ILoNeF8DYhODnf4i9nlfyyDiSvLWIHySkPeu X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040375)(601004)(2401047)(13013025)(13023025)(5005006)(13021025)(8121501046)(3002001)(10201501046)(6041248)(20161123562025)(20161123564025)(20161123555025)(20161123560025)(6072148); SRVR:CY1PR0701MB2089; BCL:0; PCL:0; RULEID:; SRVR:CY1PR0701MB2089; X-Microsoft-Exchange-Diagnostics: 1; CY1PR0701MB2089; 4:7/IpwHwehc2mDKFtlJSuwQ/6s5pa581DLUD2fzblX+0FOYPA4YdNCcKwaZOTpOHnFrN9/32GKS9k3TGbnW/fA8NFGBje4ut3GWwH9zKlczrOm01DmzkDSo1T5eWdPbCpQUrgo2uJrAvIou0HaUwqNDwfVhD98djDHz5rSA0BdMxYF8zrRAUp+LefoOJjKx4asIjYcyVpS+r39ID4GgVX3t0DF2+40M6bCUP9dX8xSQzIid3psoQMVOYUDf2p22ZrhvdrIjnvziVIHcRM4wHYdfWEcD5qs4WD4yaZHOsiI00mkEJBiXk0K/U98gsbvMqIPKwoBdAk/CApLOVFriGPz4aiqS7+3q97kL35ZL/TXhjg+wX2sjgtp6x/9tYLHvszkNgCjugH9s/7kxFtjYuKOPYNOVfk4Gn8zy/zSMj9UY3bAaQohLYYO1Sa5IufHtvdqZpfnEDzBwx6MRv50BwFAcKI2JO9cxcz77K5sN4lYrSF7tLIt9hYytmgCOm29UWLs+J24LMlj/P3yR2fcace2EHXigFyb5+DfDumK5BSlDetbfjz025gh2EPrK4CppOSb0OCke1Ztpx4y0AN1WvsvzIX4oIOtJwqizL86bRaXY3hm2bcWRwZBdYeY7J+iPm0 X-Forefront-PRVS: 0144B30E41 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; CY1PR0701MB2089; 23:6+TlGPy6Mw0Lfzd2+CrFNYS/nwqeSvTFnVP9G2A?= =?us-ascii?Q?owqoloByTQS9EZWr1rVlvWkp7C7QPlScMH2lzoYC8/4hfvxgRW+GqFpkfoNH?= =?us-ascii?Q?rLUTi1k5bPWNlM4hwVhNLNX5M8uW1p8y5XxZSpaPcpODlvuDYesDeTRKB92s?= =?us-ascii?Q?72cQmKBOpypnUrcPAyi+F4lqQ2df3/ZI4s69yzsddn1Ovmv9LEV6khNEFd7Q?= =?us-ascii?Q?+O/H1eBoUhIJLXpu8YVWXL1UUsOhvYsMJqyK0srRi0pkaYR8CAlz6gkyaJ1F?= =?us-ascii?Q?HtB/tSvrt4jY9OBcE2iUFtqibW63F3/xuW3glMfemyibJaXWc4WR4mIWAE3P?= =?us-ascii?Q?IsUjy42i4VB6FvqvuD+l+7vZrn/PP7zAZ/caPXimjx1B8WcKZS8APtNdCg3O?= =?us-ascii?Q?sACp3WNj5Z1+lQcm26Pu4sNwFwsiNRHK5o/oUq4BKqOqfMDjMdyka3V7jyIy?= =?us-ascii?Q?vCRjZmISAucbKCZWJi3T26h/qzOh/1ZelCobmunujRTFyRiNWkmV5sdWBXYa?= =?us-ascii?Q?khYNUa0c/0EunXM+1121vSuTDOV8M7cecxfshEfr8g7ZvyegnAD4iT2HYyUJ?= =?us-ascii?Q?3QMiR6ff1sya/ANHANgDWxAOd4WsXcTbiZVD9sTwIKf898HYpT+GthuJI5Kq?= =?us-ascii?Q?8q31WJVxJaCSmk3TBoYEAgcqGUhoxnWdHq4m+oEl95moF2UVMhQZODkaNSgu?= =?us-ascii?Q?y563Tr9bpBlu8n7gPIdn0j21yddGQR28XDQtpPFYY7LsCqKO2fDraOj1vHkU?= =?us-ascii?Q?Orozdiai8mVEjNbbla3EcFqOk4jSqGmSN7Wb5ELeDF7a+J6IOToHyd+RcIWv?= =?us-ascii?Q?+uy1mJjLf6ir9NIJk9WX7UPnZImpJQ9KQlMx4yGzPaUr76ok8bShSsyIqxWn?= =?us-ascii?Q?bqBuAo9TRIycXqsfi3oHhxmf59Cdv6YgC546WimuD5KM5tFdkLzYlbO09/td?= =?us-ascii?Q?t7bcVBbcVksGrym7RfGXJZOQINJxnnZt4IV10Ez4Orj4ePqKeRhIANqxF44Y?= =?us-ascii?Q?KNiPjfHUYEE8mA9fmmQfZcqzPZCen8JrGE6pLEXJ9/KZnqQvQKBiy59D6lNW?= =?us-ascii?Q?q+2Kh7ikRoOLHpj7oRVlHp+KXzY5E8PaOIr0mTpj+7ZA535257aYZ9YFhk2r?= =?us-ascii?Q?xtsjWQM+RwsQmpTd/heEdR9npilUjYrPms3OdAPvuOctIaCQqN2SKMIyjuoz?= =?us-ascii?Q?NbMDFagfTiu2ERgWFyZady7oe9e8FFfHrhCNB?= X-Microsoft-Exchange-Diagnostics: 1; CY1PR0701MB2089; 6:CeVPnruEfVk4pgIhFxaUQXMkZnEOiXYywyF9LngWxb6iwbonI4KUoGhH4StiKiwehERLT+P9d05gguDDRyjTZ1xRF+sTnIvk8MRHCe0fQ3F7nZf/n49IF/DGbiaXenWOtBqWtOIq5f5bcCrJAUusdMfP/t/LykIqHRawQL/RzRuClLpNGUhaTuObRCB/EV73R0U2NSM2Tbe6Lssv12NXTMWqnf7As5axPChdb7YB7ZdfVWLZYeBPu1IU8zij+/4cEZq6wlB46kaXADeuGDiOFMbmmQOOGS/1aPuLI1bb4WzGFngdDiHKTU0vNYdK6YzCJR3XE0doIUhUBScrCw1ETZQxMizlygFMw8ba87GboFI5C6QT06jNh6+tQZpBuU6rd2JbqFAub652oDRR6+lJf9ebGAYVu84QJMuELEMvi7rZ4qYKg6OA3AO+gMgcMxVik+ewBi7UT2z2fmr04L6BCg==; 5:8JfesrLCKZc0ln1Zx58Z3pvHf1UrPIAUDLlicYlYOWj3hqWeofCkKL3/EXkF/RjTizs6WutO1m68YVlbnYFCx3crEEHnDlRqZxL45jSNH94NEWBg3IaCJNOkvJ9J1nDmdvif0NTJMtUjdcROviTldg==; 24:Xg8O+ipQWe5kc3l8IZa988ajDxJ+7/eqHFl9KegftsEiHNL9yinRBTBWSWEYA1JIumHuKIxT7G46sUYBIM/IKNgc3KYdPo3imZ2JnwId0TU= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; CY1PR0701MB2089; 7:nqxNZBz73tzQmEUUcQeUObMrjCO/OwAgkKnGk0yqD5pfnXSuPLi2LEREmnY0rkVBku/9oXXGIUdLzxJxC1QTESSMlmcxkrfq43Pf/IeTLjzrKywHyxVFJiJlhZ/wADZt7gzBUyhZ54tBi3Atz21PH38OMSUGID20P8qZWYPDTk9KAdK4ij6ImsswmWFMMDikZTOsvSkWXib2x+CqlIQW8mT4J6fU1jc26wPPS5vgZ4Il5OyD6TdCHEv1eyp1oPLivZrcPqz8SKvIM9o+njXEO/qGl4O9a0NXQac5BVjhGovH6SNh+zFdbizL37lTbqTXCVKymnj12xovsvhf0NZ6SeXtcTQ8BA1Rt8Jj57VLkV3HGzFhh+3nExSQju/jrbgvyTXRQv6KE1O6hsqRQ0U+eAnbf7SSO8gREd2x1J9benGlH+lIIRuFNQHdfG36zy3LvkBjUFkxVQO6rYEPgy1bEA== X-OriginatorOrg: cavium.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Dec 2016 21:45:13.6352 (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: CY1PR0701MB2089 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 This patch helps resolve some of the mailbox timeout issue discovered during large SAN emulation testing where 1000+ initiators are trying to log into target mode personality. Since current mailbox interface handles submission and processing of commands in a sequential order, command could timeout resulting in some initiator not being able to log into target. Reviewed-by: Hannes Reinecke 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 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);