From patchwork Tue Dec 6 19:07:42 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Madhani, Himanshu" X-Patchwork-Id: 9463137 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 CBCFA6022E for ; Tue, 6 Dec 2016 19:08:24 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id B9559284CA for ; Tue, 6 Dec 2016 19:08:24 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id ADC2A284CC; Tue, 6 Dec 2016 19:08:24 +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 8301A284CB for ; Tue, 6 Dec 2016 19:08:22 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752557AbcLFTIN (ORCPT ); Tue, 6 Dec 2016 14:08:13 -0500 Received: from mail-cys01nam02on0068.outbound.protection.outlook.com ([104.47.37.68]:44864 "EHLO NAM02-CY1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752854AbcLFTIJ (ORCPT ); Tue, 6 Dec 2016 14:08:09 -0500 X-Greylist: delayed 73620 seconds by postgrey-1.27 at vger.kernel.org; Tue, 06 Dec 2016 14:08:09 EST 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=R+FrPv9ETVVjyaGbqBhlOEIlPQJnypVKCWTAlwfARO51SiYvJlVUeX0gjThZe2f8VwsCuq6ITzknBjkkHHLEVrKMlR7dIYXIByPJUWPkABjxTWa4smyGxqMujs7PLkAcY1Hj3VHJ8XWo/r1Nu5Fn++S1wSJqlcSODY41II6ABH0= Received: from MWHPR07CA0024.namprd07.prod.outlook.com (10.172.94.34) by CY1PR0701MB2092.namprd07.prod.outlook.com (10.163.142.154) 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:07 +0000 Received: from BL2FFO11FD056.protection.gbl (2a01:111:f400:7c09::175) by MWHPR07CA0024.outlook.office365.com (2603:10b6:300:dc::34) 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:06 +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:05 +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; Tue, 6 Dec 2016 11:07:49 -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 uB6J7mcb032399; Tue, 6 Dec 2016 11:07:48 -0800 Received: (from root@localhost) by dut1171.mv.qlogic.com (8.14.7/8.14.7/Submit) id uB6J7mh8032398; Tue, 6 Dec 2016 11:07:48 -0800 From: Himanshu Madhani To: CC: , Subject: [PATCH v4 2/6] qla2xxx: Fix mailbox command timeout due to starvation Date: Tue, 6 Dec 2016 11:07:42 -0800 Message-ID: <1481051266-32362-3-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)(189002)(199003)(92566002)(106466001)(105586002)(5660300001)(42186005)(76176999)(626004)(101416001)(33646002)(50986999)(4720700003)(6666003)(6916009)(2950100002)(38730400001)(47776003)(110136003)(39410400001)(39450400002)(15650500001)(2351001)(8936002)(305945005)(2906002)(50226002)(356003)(4326007)(86362001)(36756003)(48376002)(39840400001)(39850400001)(107886002)(50466002)(81166006)(8676002)(4001430100002)(81156014)(5003940100001)(7846002)(80596001)(189998001)(69596002)(87636001); DIR:OUT; SFP:1101; SCL:1; SRVR:CY1PR0701MB2092; 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; BL2FFO11FD056; 1:7EI5YUmj48Tu6I7m+QYWAwSIpcugqaP+xpkE8wqKKKzvDweJC3bFIPHgmNuQRlwJRwIaHJf62UbNpRP2rKvZLCY175okDsLBlqfuOr8cZ3jOC0B8jskfuTKd0+GIJp4G5o/jIjbdXiHHAASlCJmU5ALPMjqtOQEOWwXGjmkNr4B9ZwfeIZKbobulAIPv6fLTdQoYhvjFTbckzoysnBj/tJWW7tP69YLDf0HpKxigfO+u+x/ok8dO9o2oOwOQOeBCAElWOzw25UuDy3XQ1BuTYPPdrpxyWFoCrNrdKZ6ws1OvRejws5H5suKRlzuwcKmc2sHx1BeeR+Wny6L6bedoBhSODU0SPMoo0umfDGZs45GtvTuYY7gIbyCRF2o1MyfgtUvD2jAyL2BQyFgNaa4ElUDuRx21C+KMjSIvNJIRP8KLqRiWWZhS+MtxV+EHPMC0ZUk0w/VB+xdYAF6GXpHAwUIn4xAban7csQrt1+oa8VIEHwn1BP/10MmIygOGhKUeZFrp2FUb05efhocEy5yZkR2zrvjGjdiwVXg1Qvv4drxdSjhZi6o4ut8NTb8E/1K9 X-MS-Office365-Filtering-Correlation-Id: 9c7d0a9f-2822-489f-5f91-08d41e0b35f3 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001); SRVR:CY1PR0701MB2092; X-Microsoft-Exchange-Diagnostics: 1; CY1PR0701MB2092; 3:Ol49lZIrkFxICtNtBDj4gjzVhD/iyzS00STTmNgsepk2bRgdmSraT2SMD53TCk9dLEQ99VRc9433f8S2S0shI34gEY4lCpQLYzsWK09UQaZ0pmrhw1DynIa7OIDgL50LcFOsl6Rqai+Z4eXYt705HfBlIx/3MIOepd/etF9Htd28J0gf1UGBNvNtb+LPFB1DlXTjt1KnknmrM10KO/ZqcgDzW1nm0PsQthndI85WJfWq0F6OkMLUklCyirEXliZ9MmwiGz4T3MD9PlstgougSb1d04PKHxjKwAU8qLrvxy/tJUOA7ZK4gk9O676chmPquxiWVXGfG5m3LOHMHJSB3qwAqQkcDMjpDePL4SnSfo22FcG0myT0EjfMUoos/YZp; 25:QH8UwB0SJK2hSwOYO66+71dP8v6mSr5wHRuUBvT0uFV3G0git0wwMFS5bpWipgp6kDCo/CwoxOyThR89NeUVB9BvWMU6+4NiDHjudsR9rlyWQY2Qdrl49+Nc6k7ejgaTU7EMsyMrGzZSdqWXs6+aJ3qic0xSYIFMm/c64h9xjRn9TSVFSeaTmQMuR5BMWgCY3xGZzmKTv/xNUDm1pDqRaD63CpupWV/kTYcnQq0e2RI1/lJ0qTr2wQj2qTbdd9aKhLVb1W6U732GQAoj3ROTY4BU4E+ofK+o2FwR+OsVoJgAdT4upg/iImTc6JV712J9hTps/tlKLWqovOKBeyU/ZqYfbXRAF41onuX+wCg7ONICQ1jsPdabXxqPvQpz/vKnRhpx9EDvt/nATQU3Df8KAhPti+boaavee0WMsTTxEjXSggk0lzb7OCTEZLh6AVrhFXpaxKD/Tt6kVufSeX/2OQ== X-Microsoft-Exchange-Diagnostics: 1; CY1PR0701MB2092; 31:5Hl8GDBMDjrr10R25NOwgKgnKCZazV7BnoixtVPcXzr/2+YUiAtWKx9rDrx3xmJddWekL7R3zlWonXqyTgJtGfqAcaEQsm3R10GHjp7KARzBX1D2HfiDsxJCYVY6izG5N3N4r3C6I7omc7IKUfiy3Whi0DpLk6+KGUCY8qMuPHgsSCDRLlMjvmskx0+UqBqsd44xuyOoBEHs9i6mpYngSnSyJTcJj/UAEU5WBGNdBFw4yRNtwiQYnbzYcFMeHGvVNbBiirU/mEyy+xNm9kpIQw==; 20:KSuomc0HxTukCRvhaEsZwe1hXMWPGKo+lKQ10XPERZ/TU6E/XYACpwZFuwjsXD+Aq2PyYIqWFbKWUGWvnFtDxQFW+ATGHMKF1lvmaZIQ0QWsvgfsovNVz9xK07bu/TNK72BRNnJ3ghrZsOkTxlt7Ai/CxRgjT3TDYR+QIES4DrK0hcGM6410zkSCIo6XETuWpu/tHrgCMciMbLFwhGOJk+iR0n0pUqvEXvvMmHKm/1e7SeNGQcMXD2LVvzkEpP55Y4QlphKCk+Y0EOA0BdB3761nYM/9pKeld0hhsSzlnrpjiXAI6JrjR6n6U1kNXt8LAdoEbRJ0buG5pFBPwxeV3RaaNlwoT3y+SyZHifox4IBtx6u8HLaHqHVT0GxlaRd7xtIN5W4iAeV+C01SKCXYO/6x5Ym1olsgs3XBMEvEkcEd9iSCXvBvp3cb1d1alhM7MggVJPsKPQrJOiSP6GAo6xgT2IJFWocoW2AlQ2td3zvQq5vjZ1MFPP8Y2/3W+JQa 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:CY1PR0701MB2092; BCL:0; PCL:0; RULEID:; SRVR:CY1PR0701MB2092; X-Microsoft-Exchange-Diagnostics: 1; CY1PR0701MB2092; 4:gs+eGm5TrBhpRZYXlJ+4LxmHrETY1gGXtkLPY3upxy2aQTPhkoRqfthc0faM5Zv9U4d7bsvwXtiFOsAZKWqzv2CbG1sIBFlhRSW5SI+MTO1JqvR+tALd4YP3cNqCQd/4LoDmzMt8qSxij6zpchXxuB2rt/vN4/peYVM9GVtN0NWip43hePH0wgwqC/nL+dA15wwVX4js5XfrWmk2u6O/Ykgl/hhhIInmKiiwfxITvPRmeK30WKizOY3yeSDg9ISfI3W29fcDBUedc+9hKk0v4f+ac6lBUFyCE+K2axng0hFY5TTlRelTbYnb+nFLep7Lg0z8Cl8oPPdfuy8MIz6Hc7/S1d5Xjxp3SIaR4ONzSvyWXJVZO1IUvrCYWVBC2ytNZHeQR1dB76kEitRmnHre7o4wMqV1R9b0kHx6iBhS8o2Mcog+7DWJqT1IegxXyP/ZToL0vAxFJAz0xL6jKaFRRfbFYW55j30WR68kZLsLHXSsiQ7Plbwtnjq3Hw7OJyT8Do84VRfPlW8YuytZY2nwivL3IqpHba2JN0qjN9Xegx3fxRq3QlA15GQ5rLX25+og2lTDQHEOJ1P+Gm6K987brniv42NNhrW/KxEtCyd0qbnsfUZr2R6Q8Y9eqOkfXunctG2v/9TpGuespcioylS8pGatmMz94Pg4CwmtVW4MM5c= X-Forefront-PRVS: 01480965DA X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; CY1PR0701MB2092; 23:p64AnNxh4B94mKq29cvotiegFHWWFeoh2jCRCK0?= =?us-ascii?Q?T/1pxsHfhQxa8Qjkb9/I0ogRkhKByNUwGAfnNj3IWB3Dt7nklh4GKAz0RaEb?= =?us-ascii?Q?zyRybzDzvZeHEHDz5HF5U+sY1+RjSAqsORPtlLDaI8KXJ9VHU0u2IhHbiqI8?= =?us-ascii?Q?ZnLoK5H8e3nz3nknLc6Zh7wsxJLpCWy5ABvIyl09OohvO5+2elsWzqBs2Alv?= =?us-ascii?Q?AZvoHvA8lwXKVMJu2ZsHUHF9RxUE813uYP839QulSQKSiRo/0P5sX25X+qg8?= =?us-ascii?Q?I5kuz5UdFEd+FoMBje5H6bx0vkE6okdmhoRn1THAYpmh/Hq/YB2OAJnX/hqg?= =?us-ascii?Q?Qkc2WaUi8uyQyn86/kdGFvdFkdwY9Yn6O+EvA+9hGrJ2OiLldT4hDb/IwHvV?= =?us-ascii?Q?/Qw61kLkxcEmoFW192djNmx2vZT7vyRwsqvKZN2ZK0Q2sKN8jM02xOnDAxs8?= =?us-ascii?Q?5dGqVMX+IgptVdLkoPsRQqQ58UO6Af4HGfR2FXZaMAkY3VDcXnamUJt75utw?= =?us-ascii?Q?zX1xdt/qw0c5xiRl0yYah+oXF+h/+drLXa/Adenppnjc6uyAfEqIHxLdudnG?= =?us-ascii?Q?T3U+rb5ey2GvoQUZiDSkNGeu5Pkio+TElKMaIckAXppHPbLo2Lulgj9HJGuN?= =?us-ascii?Q?XM/1NSTqDPw/4R7kLvzYwaZOcT9pJEhLZx0VLQ0xszMw3M0ZBIqaz1RlxrMu?= =?us-ascii?Q?qUTnbos6ACg2FXbX1VN1hPUgIdqbQFpegZX9U/PxLDgccFwRFzN5IN1j0jJ2?= =?us-ascii?Q?DyjRCFeiznRpIdeCl7LL5HUmxlj11mz1fT6yM75/n/QtwDh3wX3QnhS1w5qF?= =?us-ascii?Q?jShYHHRCPf6Cv699qMfmPKElN/0x/tsJOGBb2PRw+Mls+qVYhIW4HjBFfuYZ?= =?us-ascii?Q?cpl1vOgQv1idrBU4/t1Len3e3pqj4SIe5ZFoAWqNO2j3tmIVmN1s00nRGThc?= =?us-ascii?Q?gdPqq3hBhOI0Pk2GgZqnksjHqe7dhsyA1WKaf220m8LhusNlSmQK6YV/oVUq?= =?us-ascii?Q?O0VuRH2xRxdo5r2SARUcjVPhQXAVDwuy9NY0PuxdCoQJkOqHfgmLK2EbOOdF?= =?us-ascii?Q?9p9rbtCjbZzYCbFv+XLIas3sP07qv4Q8/UPJkS4HWb707OkGxs5cSxdqcCoi?= =?us-ascii?Q?wZ0/Zjs/wNQf+BjWLqGlRKk/iJANYduGNeiHlffWkMe9vj/nRfrEjdJcTi87?= =?us-ascii?Q?kjfpe/i6CSyx2U1cmAzhIOJeOMXQG9x+OwUsP5HqOCFfdgtpldSKegz/xTg?= =?us-ascii?Q?=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1; CY1PR0701MB2092; 6:o9H1vvnsSO4NXNrXVWS9wYHVQvS36oJIOhWzHIwepMUtdJmVUjUXL4SVBZlCpgVjacPgqeD3/VkcL6oKXKabLouxArGLHT4Dgf3VCE8HCESasxg++qwhG/zHMek95vfzrL9twzyv+/OUzWkiuFZdrlAHvLi91yXJnbwArY9fO6XAA/gAhQNCDQMDJ0XYKwkI5WvCf2ZaG+lEQZVeGu9xp0mlGDABCH3qL9mnUEkxMpfnJ3LSerAW+8lvDIh9nH3MyK+ZgwaC/G5PfD+FOC9X0T1K7nZ9nA73lJXtznIU1HdjB8d9KhME5GZ5ZZUr2CiKn3aNIALVcPXLd19wP6bxXD+v/NeS3mEnOGRJsFC3N7nxzkZbxON+8YlzuMYUg8Ycst/5fKWYgXDPzb2YEiWGiS+y740/dv9UH3smGqpX+Yebjq//N191Q+GU8axk/gjQgRFfrnr2ZSVo534zx0Y7Sg==; 5:49k+A5s15+pQ/D3V2itlzE+ebVG7sPO5250Ns4tNWis0PVS9EnEIf4HFhEAbdaidOGHiruqBaBw8SVdGneUC2DgMevSaU2khVT82LH1GotbxA0sSOk8zkU72Xo6AkO4kDvMz5o7qjT84+9w+4SpgOw==; 24:6ZoAJjyb9lQypTaM2UBgCpOUDkwfGKceh//4wRfVBknYKMDKh6lcGh4SF+oNRvYx7uBJEhhYXH9sWlRZJbBmwBw0HKgubMvFaBoxKW8+cjc= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; CY1PR0701MB2092; 7:bxvzplobW7Vyh7u84XmLicQHQ4Q6DZjgX+a7zbymKrwGezUlQKiS4HnQ/ZT30CdMvVDpcjEXqiugNWFk3T1ttxcYqLPw824YGWI0ll/Q/4P1jwcihHbcoYSIq7VjMXCHHhA0S21u+EE1OdVCedyAfMCvXHtM/sVSJligJSvl5eJZIVRLDKmBFvVYzljicou83+ZCEBQHgvG67H6CtfQybyiHGzPg88X8fZmHBjS+zx6T04ax9vQdMldckRheCTpLRDUqJ58d8krOQ1sY8RbyH+oRoTRwN9zR7iW05cRJt7Yy+DFJvy1+LgOMp5dbRu1NSIaCy5CzBRElbNFHrRSi5ChxH8sno+/zcgKdJCkmZ/IYzJCgayWjZOErXX5TWtUIB9mCHaqrJVvpQeLo+d7KaG5fs8lg42kuwS5wkI+rgFhpaLATy/M+Uh7LUi0NLp7F7sjOiOZeFJMlhNYtExkcHg== X-OriginatorOrg: cavium.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Dec 2016 19:08:05.6898 (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: CY1PR0701MB2092 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);