From patchwork Thu Feb 2 19:42:24 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Madhani, Himanshu" X-Patchwork-Id: 9553169 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 DB06060236 for ; Thu, 2 Feb 2017 19:59:33 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id CC08928480 for ; Thu, 2 Feb 2017 19:59:33 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id C0BC028499; Thu, 2 Feb 2017 19:59: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 C1E7328480 for ; Thu, 2 Feb 2017 19:59:32 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751818AbdBBT7c (ORCPT ); Thu, 2 Feb 2017 14:59:32 -0500 Received: from mail-bl2nam02on0056.outbound.protection.outlook.com ([104.47.38.56]:44362 "EHLO NAM02-BL2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751806AbdBBT73 (ORCPT ); Thu, 2 Feb 2017 14:59:29 -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=S2RC/3YW9xBXhB0cIho2l6gTP1uAqDeMlXEo2Z9ZCI4=; b=c6/vybyhlvkNF3+53uZfLHrN7nSAigIxJqyQm53geFlteHkvWBDnLOm8wDp73IYZjEHSKxqRhf5QLzE88b+Jq3pJAbRL1g8uoTIEmP7yj6tm3uwh/a6JBSZeL+eJoUQZYKmAHxH6kqhlfH3d3EyfpXDmXDD1S4OLcpUhg59q7BI= Received: from MWHPR07CA0028.namprd07.prod.outlook.com (10.169.230.14) 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.860.13; Thu, 2 Feb 2017 19:43:12 +0000 Received: from BY2FFO11FD017.protection.gbl (2a01:111:f400:7c0c::124) by MWHPR07CA0028.outlook.office365.com (2603:10b6:300:1c::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.888.16 via Frontend Transport; Thu, 2 Feb 2017 19:43:12 +0000 Authentication-Results: spf=none (sender IP is 50.232.66.26) smtp.mailfrom=cavium.com; linux-iscsi.org; dkim=none (message not signed) header.d=none; linux-iscsi.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 BY2FFO11FD017.mail.protection.outlook.com (10.1.14.105) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P384) id 15.1.874.2 via Frontend Transport; Thu, 2 Feb 2017 19:43:11 +0000 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; Thu, 2 Feb 2017 11:43:07 -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 v12JgrAd000400; Thu, 2 Feb 2017 11:42:53 -0800 Received: (from root@localhost) by dut1171.mv.qlogic.com (8.14.7/8.14.7/Submit) id v12JgrZA000399; Thu, 2 Feb 2017 11:42:53 -0800 From: Himanshu Madhani To: , , , CC: , , Subject: [PATCH 01/15] qla2xxx: Fix delayed response to command for loop mode/direct connect. Date: Thu, 2 Feb 2017 11:42:24 -0800 Message-ID: <1486064558-365-2-git-send-email-himanshu.madhani@cavium.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1486064558-365-1-git-send-email-himanshu.madhani@cavium.com> References: <1486064558-365-1-git-send-email-himanshu.madhani@cavium.com> MIME-Version: 1.0 X-EOPAttributedMessage: 0 X-Forefront-Antispam-Report: CIP:50.232.66.26; IPV:NLI; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10009020)(6009001)(7916002)(39450400003)(2980300002)(428002)(189002)(199003)(48376002)(5003940100001)(36756003)(50466002)(8936002)(54906002)(50226002)(8656002)(1691005)(4001430100002)(2906002)(305945005)(2201001)(8676002)(626004)(81156014)(69596002)(107886002)(86362001)(356003)(81166006)(80596001)(92566002)(38730400001)(47776003)(2950100002)(189998001)(50986999)(5660300001)(5001770100001)(105586002)(6666003)(101416001)(33646002)(42186005)(106466001)(76176999)(4326007)(4720700003)(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; BY2FFO11FD017; 1:92EyShcdX1MsXHrnjfE/9KR6bOCUO/h2hMSs25HOLGJ3Br2BCbRpz3rdzCaR3Bodjoipte4ug+ucGLK/7HNDcj27kALi4CwX2xxW6+WYWHez0KBaai1QGMd6fEiMCLrQ+hTGabxR/olrmmrChtCJ4V4s/Kpeb1j5dabnVFo24I8pGgA3YckKrr6c5bc11XhuMUptw9n3HFaGYEGZ/D1EiWgv3dNHugx9jSKq/pBVhEIaxyDXZG7j2kKmYqg4Ax9XIYhLygCobBewCmAsMopGuptMktsgOIDlBcvQNnC4W/Vv0eSpe1UWoVDDOsTSYVRbQHq7XzWvytGzaT/UpGV9Cto5BtjFrqdLG2iID3zg7qUqAgI7DVDwu2LaXiPMJ6vAWbVXCIq9e1U+nnc1l2C6rPwrul5iJUHTG4NhcMTwB7Lt4w5U0N4uvnulNZz5PMja0sqY02J2PWIJPmJnpx1NOUnujTMOGyw5bxCKzxaNQxAl1soHzcqadsAfBLED7Bg2cPdK05CLBxACEIM03d/ink7fZr8CFRKvpojooOlmXRg= X-MS-Office365-Filtering-Correlation-Id: 097ad8e8-20b7-41e0-1c37-08d44ba3b8f7 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001); SRVR:CY1PR0701MB2092; X-Microsoft-Exchange-Diagnostics: 1; CY1PR0701MB2092; 3:lv8PtOc1rpb55oxmYxqyoNh5kn5qxx7qv8V2JDM9wcW4lj/mj5qkD7ZAbMqtG7keAbpKP2SaBGCrqLT7B2WWiIGHTcCsEBorGUo2tjko+A/hhif4CUMQAaaicDKLVy5xcWlalP/n4Np5+RMmPRAXLjHkQPMiBBbnqDpH8tjLJtOnFnQt5p0zUoSPArhETJm6dqHws/p/+s3QHlDIW9c8bR/Hzbv19B1+5F0sIU9XtJAgDeUze6fDGjAyLZ+gIEdcUyYaznG2nxkBukuGQzPhJrNwoYXa43zISzVfE8nu9pDJWO3TxFBbTIubQ1REdi1MnqN3cflwH4ILV2HLk8EFCeUGjhScULK4NxTo0Ni6DFOWoos1qZWu3Gw9i5MLRvsc; 25:IdHLYNOVnwTxnG6LTPfg+QinOOR7gb4cBk4aDLBfaO8B4QGHWkqH7TSJrqFKJTOIUGUhPoUeY3tFK39+sz/kVJHfznCB5DagPhrZSc4dCxsBKnNHP/EdOw4P/Fw0AStzwVxGZyc48rk1UVoE9AEwvTYggjJLu3wtA8k+RMd75y8PKrQ03CuY6WM/Fj/wqqGOInRbk7KaGyoZCn2xDweMHl5Q4DUAdPWCRe+pL0igcYmP3xzD9qqEdJXpXswo0tH1ZhHJqjENdqTv3qqv06rZ1cKtAL69QeMqzDsLF9zvNGZm6p1SD+vUc4gle1s8YWXHsKIFH6kOtyglH7sY61UCCcabjpb59SxL2fTRtT5CW3dX3CDUCa7F1aLXAs6CTvO3ZSNJ1ficFzEI8O5LHREKXqdPG5rXTU7DgV+3ezRgTLV9DyEqKCoA4Xs8TzKfe+SrlFFBA/qSxKZhgm6B9iD3Ig== X-Microsoft-Exchange-Diagnostics: 1; CY1PR0701MB2092; 31:a9uKsBoK/b/g97f6XKfTfW/o3zjHDcmFHHz2GaaavHctHeNxOnKGPPBnZQSzdGynfjElSZQOgoQ+FtwOhe6VKQXBtPnIu4M2BhDTBEQuoxwxpOo5Jc0O+oNfnqTVmOBl0KG5S5XxCO3C4DIPbgkyihZpWQ/OBolfnfIbR3/J1DOxUCH3+KnKJylX2Tf6/xhVVObV4dBSSVxeXe/YLGgJNpqeGSQUlFjUysuInrBewO4qHpXXVBRG1vF29WJIwaO5VCrZ3/i7CbshiXngaZWyzQ==; 20:qG3b/0mST6Wy1P314G7UaKrdxV5mT/VE6CbdZsFsSDSiD4XJRICrYzNr7vgvM3Uj4ycyabMUz9t/D29L9t0SbyRxpvkydt8NeKY59dUX8r82/ufrFE2OdCPvrIawgh2idxCQtXV0FCIm85VknVIdnA8tQxL451m6N5bb82rOKcXVKJHqtxLAHgCXDCT4BBRoRmHkl10l42ScqX+Bvzpe5DeJ43PqDK4P5IlL9DiejmqAP7WrjR1ZfeEwl28sQaW0E7o9GkqCgb2fHUVVWjtbXRE9UQvUggNnkRYAVAa20sgIGo+st4+7rttOtdACeb8EW2U7MYjiuNwU4HbJ4b3zb/mbXVwDu7girl2jFDx74fFvgAZjnZDDuYO93a4L/ZGcZ8ECiiq0s1nlig+TTr4nnIkzrpz8UwrKvkbvRX3gkjBto1Sw3So/6jIrg01X6ysqE88CSui2l1VUOkeVpTr6/VWTdNwBs4AuoB75ZbugNiyHeJp9mDf86xdRcBBrfk01 X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(209352067349851); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040375)(601004)(2401047)(8121501046)(5005006)(13023025)(13017025)(13015025)(13018025)(13024025)(3002001)(10201501046)(6041248)(20161123555025)(20161123558025)(20161123564025)(20161123562025)(20161123560025)(6072148); SRVR:CY1PR0701MB2092; BCL:0; PCL:0; RULEID:; SRVR:CY1PR0701MB2092; X-Microsoft-Exchange-Diagnostics: 1; CY1PR0701MB2092; 4:xfMPVPxnyMbk18wXze9vtjKMIDpbBNY+mBht01kMx/XhJpqGU3Jvnl8cMXOS56NeoA/b2RtLxUp4BKX0lBYfxU/8nPBC7UkQQxI/oKA00aIKTbaBDw/vBSujYBgv8PaUvZUd0A34bZ6AMOHG6oWH+GNWeXpsEPscNf18uHUlDcXr11qDFY4iW9MnwkAw8NEYyqs3+Lj21frVfirEXNAMhgbho6pRSEr5X4HF9BcKBWlKy38pwmTRCuzW4oY0F5uEnD8l4HmmBjDdnyRs7L0LsA+7Da1S71OfonPtxgZdq9SLrdUJ2mUmROJo2ePS3MTcHYw9rcMSELwrZwR+4XJS7sMrzQUF1TITEmEnf6/dXI+p+h6I9bEsjGeh+YTpmvkzTbfsaswDEqferqV9ADVLlaSasKvwUBwwORC7cmxskH3kITI6eKmwlxp+d+IXt51oOKv1FBYn2BTo+RB9IYQME/+XRkXB88kZ7oDg5bl1Tv1lnzth2uol7hGqSPi3j6y+lafl3hwGhwTArsYo5TkCtp74DcprgJBhoRZcIzN2XMXizIkQbNQNbcQyl0rDSDAS+pUXLypZS5UyjGWzNTm9wMPOyY1rDkJGmfiyPqKm8CT1yxUO6ELWG4Bf2Uc4nPcB3UwNU2Sf4UC5ySGcjMNLWROJ4BYqiAgxlx7MOHDditlKigv29GssyeJvcnh1AAddt+XA0g/ejr7++oflaDvFDBOv+ZXYZoTP6uEUszg+8/HF6JRjC6MKNRfUMPQ7JEyD X-Forefront-PRVS: 02065A9E77 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; CY1PR0701MB2092; 23:D6mM1yJGi21/MnpR7RGdFQPB7zA2YXxi/YBUiLL?= =?us-ascii?Q?gVDmh1l2JC7UKozx9YjAi4C7lzoIoRkwFTqrlvgXRHq9uy1MhWjcFTlZhY2C?= =?us-ascii?Q?57bdFpr69AQnE4xQDUWfPoiU8975zhWtu+rk1/F+pIpse2CNVEY22zqLKskY?= =?us-ascii?Q?gyBMD4A4U7PHBGkh/RkrVXZz3AZYtH/l/1FzfAqQ30X0ro0Yn5B51YrLYNNg?= =?us-ascii?Q?hDEZ2W5JbJyotHJcRwyxxaXNZJFzGzNJb0D9zeXSYw+4bl0DGVpGNjzMCmek?= =?us-ascii?Q?JAZMM5H18udA1FdUYUW6jfk+xasbjp9eahelTCL0vrHVkw5oR9JnTkLvgG9L?= =?us-ascii?Q?Vt+XVxMK6QzYHBGUazoI2+2s9xhOcljgfVyVN6QRpA7lflLrACvfjsivTfdZ?= =?us-ascii?Q?O7U37lvVEt1pBrIYWv2n12mGwwKR4GXSKKJIZIlGbyFklcNjB1NOaWhiQcca?= =?us-ascii?Q?3/jAponeNXX6/ww1wZM/i/zQdHdhBEsI+0J3TGbkPggJ7UwPPcB/ssoRCd2C?= =?us-ascii?Q?Zop1qpOnJfEDexmK+jQ+YuBFjV02uNLWp/eWqWJRH6Cx2SvUo+XPyw2sfoEO?= =?us-ascii?Q?wp8+QBxci1eSORTypuCAjk6R4I1ZCIphqvl+D2vk5Xi5fyjt9WnE8kAgTdIg?= =?us-ascii?Q?LEXvWr+UqK2I4tw3FKAjU38YkvxfIU/FBbgCJAlLSBDFZ7PdGDaY7PLz3gsf?= =?us-ascii?Q?s+6/iT6xLdqtDK0UDpuGd/KKlOhjqNIPVJgwIRr5lUToix3gswYP337yygW4?= =?us-ascii?Q?AxANQ/9U18PmStZK9vS7n3oyR0ucxanrfIe30x4XH6CJMI6owiz9sKufxwtN?= =?us-ascii?Q?hLDj6YSD+DYafAchlDbDlXVbtAAkVoknfsurEW8Z0ccULrlHneLoszQ7YegJ?= =?us-ascii?Q?dftK3ONvfUdMI9jx7evLbqGwktwisRagTsD6GrduWFYgmcLZNsS8DBioOlFn?= =?us-ascii?Q?TEJqarY8KsLDtT+c4HgPwPFxPHZBMKQitVs3U8fd2ipp/96tkBx+NkQHAkZ8?= =?us-ascii?Q?AchpVmpRnl9+WfzcJ2hPdWmedDHVdcDnESzPzUO66pWW5CFuHrpZIvlKU5xx?= =?us-ascii?Q?MuZIypkiIDJ9kQDBZPAegc1A+On9WZt6Vblu+XcoKHwECAoU6JlBUmRKlKBg?= =?us-ascii?Q?hUr6/yEfIRwgu476XT3Sjaw7d9YvXsxqINzA/YELE6Cz9OVrgYgjR0Q=3D?= =?us-ascii?Q?=3D?= X-Microsoft-Exchange-Diagnostics: 1; CY1PR0701MB2092; 6:noPyqFQZZ3s/OwL/+C2782NpFN2qNKfhYhEwTs+Qte25V9bha0QA6/FIZoBZ0nqmcs+fCpLFGszlg7bBYKYPWeGKF81ulX9vbQ80saZl/IBqiKiqLzekccTwTpmIuwp8PencrlfxY1Ekumysx3VSH1hAVY5U1th2WUtp/jdCfp3mOcZ8QPEL8ZEf/b6bGcRYf8ljTzwrK5a7Ov9yer5Fz+eX3yforqm5r6oF+eLe6aKyGH9ZYKR7cM2ZYwEVVrBjPOSQ99eCdYaQP4jhCNTgQ7Pk2ptfS9Fa3VC8/LJZ1+EPLfsEc4TvNltbWcNgkMcPm9j3gYB8fxu4uNrhxvge6CgM6nFjj4k2v+Z6IzcbLn+1Myqyc+9tlRdoGGUFUaEORAQ5SZfg2XcUxPVmMkzAActwYD+aj61WUUbRmOM3gnw=; 5:Ab54Dx4jvWk19v4fNIL8CCTN1AC/xZRPsMz1j8enoIrthBpRb0Mcpt2U+6PUlzAC+T9UtWtw+wAeIgMpuIU1QE4iKBbN6Z56PVW63/bXvM1F8RdHaIn4nooQVFOfbG+Z7iGBkmA+DmKzOAnbJr8JQXs6Mm11Ymjk+SLlO42GTfo=; 24:NdbOnlrWbmQ1iLj3ccOl2fVdY98KdOCHRR4EPqKaXybkpLI0qBVCYNa3ExC6SAbblc6xfN/JjCjctVnIKHF8bkIyy3vUazLDtdlIm+kFP9w= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; CY1PR0701MB2092; 7:x/9V4i/NcPvXSesHu2dpoKIfUZ2cYVXCmgDTTkfdGICEs6VFjb04QlLKc3maSftaaPlodx+4OhT5DeBYEOQ+y8uuizUMbh9lFPFWglmfIqPyEdUw1MCSkuL1BqaEL/Z/6daGT7xJYEOyFt7iRd08RUGcfHS1hSJZKhBdxkWRymLi6zh8LEDovP3xlxZTwoCXbpdwOmUpkVtxq7DkTrbS3psP7u22Sz7TyS5wPCP4ublYHYELsYVLfVom4ZpLmD/LfxCIaXjSPyfToVmrMKCTa+2+W1pbZvilUvkbmQgo8MHx5T0JkuD7JzcFLBqWe5HHWXAgzgOvMxM59JFD4M5jLkhvKSP6d1obsSOTj2DqWCIV7+16WoYe+FO/KyNd3zh7dIxqSY50EC7njUyUki9t9+BmjXamkXAR65H0y/kKkAbtjMUsIAjwqMII2JZPdO4aGW/IWTY7NgWo2bMlz6bMscnsCBpO7+EWpwxq0Zv2XY5a5q6L0QLCqrpowzvVapcOoyw2vYzL4g9l1KggE7KZMlmLTQtTRD3QdmKKVBCnQ8pBub5h5F9chfrSL763Vlk9 X-OriginatorOrg: cavium.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Feb 2017 19:43:11.8853 (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: target-devel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: target-devel@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Quinn Tran Current driver wait for FW to be in the ready state before processing in-coming commands. For Arbitrated Loop or Point-to- Point (not switch), FW Ready state can take a while. FW will transition to ready state after all Nports have been logged in. In the mean time, certain initiators have completed the login and starts IO. Driver needs to start processing all queues if FW is already started. Signed-off-by: Quinn Tran Signed-off-by: Himanshu Madhani --- drivers/scsi/qla2xxx/qla_def.h | 13 +++++++++-- drivers/scsi/qla2xxx/qla_gbl.h | 1 + drivers/scsi/qla2xxx/qla_init.c | 12 +++++++++++ drivers/scsi/qla2xxx/qla_isr.c | 14 +++++++++++- drivers/scsi/qla2xxx/qla_mbx.c | 6 +++--- drivers/scsi/qla2xxx/qla_os.c | 45 ++++++++++++++++++++++++++++++++++++++- drivers/scsi/qla2xxx/qla_target.c | 38 ++++++++++++++++++++++----------- 7 files changed, 109 insertions(+), 20 deletions(-) diff --git a/drivers/scsi/qla2xxx/qla_def.h b/drivers/scsi/qla2xxx/qla_def.h index 8b1c06d..2d7d478 100644 --- a/drivers/scsi/qla2xxx/qla_def.h +++ b/drivers/scsi/qla2xxx/qla_def.h @@ -3291,6 +3291,10 @@ struct qlt_hw_data { #define LEAK_EXCHG_THRESH_HOLD_PERCENT 75 /* 75 percent */ +#define QLA_EARLY_LINKUP(_ha) \ + ((_ha->flags.n2n_ae || _ha->flags.lip_ae) && \ + _ha->flags.fw_started && !_ha->flags.fw_init_done) + /* * Qlogic host adapter specific data structure. */ @@ -3340,7 +3344,11 @@ struct qla_hw_data { uint32_t fawwpn_enabled:1; uint32_t exlogins_enabled:1; uint32_t exchoffld_enabled:1; - /* 35 bits */ + + uint32_t lip_ae:1; + uint32_t n2n_ae:1; + uint32_t fw_started:1; + uint32_t fw_init_done:1; } flags; /* This spinlock is used to protect "io transactions", you must @@ -3433,7 +3441,6 @@ struct qla_hw_data { #define P2P_LOOP 3 uint8_t interrupts_on; uint32_t isp_abort_cnt; - #define PCI_DEVICE_ID_QLOGIC_ISP2532 0x2532 #define PCI_DEVICE_ID_QLOGIC_ISP8432 0x8432 #define PCI_DEVICE_ID_QLOGIC_ISP8001 0x8001 @@ -3914,6 +3921,7 @@ struct qla_tgt_counters { struct list_head vp_fcports; /* list of fcports */ struct list_head work_list; spinlock_t work_lock; + struct work_struct iocb_work; /* Commonly used flags and state information. */ struct Scsi_Host *host; @@ -3933,6 +3941,7 @@ struct qla_tgt_counters { uint32_t fw_tgt_reported:1; uint32_t bbcr_enable:1; uint32_t qpairs_available:1; + uint32_t iocb_work_sheduled:1; } flags; atomic_t loop_state; diff --git a/drivers/scsi/qla2xxx/qla_gbl.h b/drivers/scsi/qla2xxx/qla_gbl.h index b3d6441..862d5f5 100644 --- a/drivers/scsi/qla2xxx/qla_gbl.h +++ b/drivers/scsi/qla2xxx/qla_gbl.h @@ -193,6 +193,7 @@ extern struct scsi_qla_host *qla2x00_create_host(struct scsi_host_template *, void qla2x00_handle_login_done_event(struct scsi_qla_host *, fc_port_t *, uint16_t *); int qla24xx_post_gnl_work(struct scsi_qla_host *, fc_port_t *); +void qla2x00_schedule_work(struct scsi_qla_host *); /* * Global Functions in qla_mid.c source file. diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c index f654314..9f3db52 100644 --- a/drivers/scsi/qla2xxx/qla_init.c +++ b/drivers/scsi/qla2xxx/qla_init.c @@ -3212,6 +3212,7 @@ void qla2x00_fcport_event_handler(scsi_qla_host_t *vha, struct event_arg *ea) } else { ql_dbg(ql_dbg_init, vha, 0x00d3, "Init Firmware -- success.\n"); + ha->flags.fw_started = 1; } return (rval); @@ -4036,6 +4037,7 @@ static void qla2xxx_nvram_wwn_from_ofw(scsi_qla_host_t *vha, nvram_t *nv) atomic_set(&vha->loop_state, LOOP_READY); ql_dbg(ql_dbg_disc, vha, 0x2069, "LOOP READY.\n"); + ha->flags.fw_init_done = 1; /* * Process any ATIO queue entries that came in @@ -5526,6 +5528,11 @@ int qla2x00_perform_loop_resync(scsi_qla_host_t *ha) if (!(IS_P3P_TYPE(ha))) ha->isp_ops->reset_chip(vha); + ha->flags.n2n_ae = 0; + ha->flags.lip_ae = 0; + ha->current_topology = 0; + ha->flags.fw_started = 0; + ha->flags.fw_init_done = 0; ha->chip_reset++; atomic_set(&vha->loop_down_timer, LOOP_DOWN_TIME); @@ -6802,6 +6809,8 @@ uint8_t qla27xx_find_valid_image(struct scsi_qla_host *vha) return; if (!ha->fw_major_version) return; + if (!ha->flags.fw_started) + return; ret = qla2x00_stop_firmware(vha); for (retries = 5; ret != QLA_SUCCESS && ret != QLA_FUNCTION_TIMEOUT && @@ -6815,6 +6824,9 @@ uint8_t qla27xx_find_valid_image(struct scsi_qla_host *vha) "Attempting retry of stop-firmware command.\n"); ret = qla2x00_stop_firmware(vha); } + + ha->flags.fw_started = 0; + ha->flags.fw_init_done = 0; } int diff --git a/drivers/scsi/qla2xxx/qla_isr.c b/drivers/scsi/qla2xxx/qla_isr.c index 0266380..fb1c39c 100644 --- a/drivers/scsi/qla2xxx/qla_isr.c +++ b/drivers/scsi/qla2xxx/qla_isr.c @@ -712,6 +712,8 @@ static void qla_irq_affinity_notify(struct irq_affinity_notify *, "mbx7=%xh.\n", mb[1], mb[2], mb[3], mbx); ha->isp_ops->fw_dump(vha, 1); + ha->flags.fw_init_done = 0; + ha->flags.fw_started = 0; if (IS_FWI2_CAPABLE(ha)) { if (mb[1] == 0 && mb[2] == 0) { @@ -765,6 +767,9 @@ static void qla_irq_affinity_notify(struct irq_affinity_notify *, break; case MBA_LIP_OCCURRED: /* Loop Initialization Procedure */ + ha->flags.lip_ae = 1; + ha->flags.n2n_ae = 0; + ql_dbg(ql_dbg_async, vha, 0x5009, "LIP occurred (%x).\n", mb[1]); @@ -801,6 +806,10 @@ static void qla_irq_affinity_notify(struct irq_affinity_notify *, break; case MBA_LOOP_DOWN: /* Loop Down Event */ + ha->flags.n2n_ae = 0; + ha->flags.lip_ae = 0; + ha->current_topology = 0; + mbx = (IS_QLA81XX(ha) || IS_QLA8031(ha)) ? RD_REG_WORD(®24->mailbox4) : 0; mbx = (IS_P3P_TYPE(ha)) ? RD_REG_WORD(®82->mailbox_out[4]) @@ -870,6 +879,9 @@ static void qla_irq_affinity_notify(struct irq_affinity_notify *, /* case MBA_DCBX_COMPLETE: */ case MBA_POINT_TO_POINT: /* Point-to-Point */ + ha->flags.lip_ae = 0; + ha->flags.n2n_ae = 1; + if (IS_QLA2100(ha)) break; @@ -2695,7 +2707,7 @@ void qla24xx_process_response_queue(struct scsi_qla_host *vha, struct sts_entry_24xx *pkt; struct qla_hw_data *ha = vha->hw; - if (!vha->flags.online) + if (!ha->flags.fw_started) return; if (rsp->msix && rsp->msix->cpuid != smp_processor_id()) { diff --git a/drivers/scsi/qla2xxx/qla_mbx.c b/drivers/scsi/qla2xxx/qla_mbx.c index 0c92e54..db32822 100644 --- a/drivers/scsi/qla2xxx/qla_mbx.c +++ b/drivers/scsi/qla2xxx/qla_mbx.c @@ -3614,11 +3614,11 @@ struct tsk_mgmt_cmd { if (rptid_entry->format == 0) { /* loop */ - ql_dbg(ql_dbg_mbx + ql_dbg_verbose, vha, 0x10b7, + ql_dbg(ql_dbg_async, vha, 0x10b7, "Format 0 : Number of VPs setup %d, number of " "VPs acquired %d.\n", rptid_entry->vp_setup, rptid_entry->vp_acquired); - ql_dbg(ql_dbg_mbx + ql_dbg_verbose, vha, 0x10b8, + ql_dbg(ql_dbg_async, vha, 0x10b8, "Primary port id %02x%02x%02x.\n", rptid_entry->port_id[2], rptid_entry->port_id[1], rptid_entry->port_id[0]); @@ -3633,7 +3633,7 @@ struct tsk_mgmt_cmd { } else if (rptid_entry->format == 1) { /* fabric */ - ql_dbg(ql_dbg_mbx + ql_dbg_verbose, vha, 0x10b9, + ql_dbg(ql_dbg_async, vha, 0x10b9, "Format 1: VP[%d] enabled - status %d - with " "port id %02x%02x%02x.\n", rptid_entry->vp_idx, rptid_entry->vp_status, diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c index 817c594..291fc74 100644 --- a/drivers/scsi/qla2xxx/qla_os.c +++ b/drivers/scsi/qla2xxx/qla_os.c @@ -4322,7 +4322,11 @@ struct qla_work_evt * spin_lock_irqsave(&vha->work_lock, flags); list_add_tail(&e->list, &vha->work_list); spin_unlock_irqrestore(&vha->work_lock, flags); - qla2xxx_wake_dpc(vha); + + if (QLA_EARLY_LINKUP(vha->hw)) + qla2x00_schedule_work(vha); + else + qla2xxx_wake_dpc(vha); return QLA_SUCCESS; } @@ -4572,6 +4576,45 @@ void qla24xx_create_new_sess(struct scsi_qla_host *vha, struct qla_work_evt *e) } } +static void qla2x00_iocb_work_fn(struct work_struct *work) +{ + struct scsi_qla_host *vha = container_of(work, + struct scsi_qla_host, iocb_work); + unsigned long flags; + int cnt = 0; + + while (!list_empty(&vha->work_list)) { + qla2x00_do_work(vha); + cnt++; + if (cnt > 10) + break; + } + + spin_lock_irqsave(&vha->work_lock, flags); + vha->flags.iocb_work_sheduled = 0; + spin_unlock_irqrestore(&vha->work_lock, flags); +} + +void qla2x00_schedule_work(struct scsi_qla_host *vha) +{ + unsigned long flags; + + spin_lock_irqsave(&vha->work_lock, flags); + if (vha->flags.iocb_work_sheduled) { + spin_unlock_irqrestore(&vha->work_lock, flags); + return; + } + vha->flags.iocb_work_sheduled = 1; + spin_unlock_irqrestore(&vha->work_lock, flags); + + /* + * We're in the middle of bringing up the adapter. + * the scheduled work need to go out now. + */ + INIT_WORK(&vha->iocb_work, qla2x00_iocb_work_fn); + schedule_work(&vha->iocb_work); +} + /* Relogins all the fcports of a vport * Context: dpc thread */ diff --git a/drivers/scsi/qla2xxx/qla_target.c b/drivers/scsi/qla2xxx/qla_target.c index edfdea8..270e01c 100644 --- a/drivers/scsi/qla2xxx/qla_target.c +++ b/drivers/scsi/qla2xxx/qla_target.c @@ -613,6 +613,7 @@ int qla24xx_async_notify_ack(scsi_qla_host_t *vha, fc_port_t *fcport, break; case SRB_NACK_PRLI: fcport->fw_login_state = DSC_LS_PRLI_PEND; + fcport->deleted = 0; c = "PRLI"; break; case SRB_NACK_LOGO: @@ -1551,6 +1552,9 @@ static void qlt_send_notify_ack(struct scsi_qla_host *vha, request_t *pkt; struct nack_to_isp *nack; + if (!ha->flags.fw_started) + return; + ql_dbg(ql_dbg_tgt, vha, 0xe004, "Sending NOTIFY_ACK (ha=%p)\n", ha); /* Send marker if required */ @@ -2906,7 +2910,7 @@ int qlt_xmit_response(struct qla_tgt_cmd *cmd, int xmit_type, else vha->tgt_counters.core_qla_que_buf++; - if (!vha->flags.online || cmd->reset_count != ha->chip_reset) { + if (!ha->flags.fw_started || cmd->reset_count != ha->chip_reset) { /* * Either the port is not online or this request was from * previous life, just abort the processing. @@ -3047,7 +3051,7 @@ int qlt_rdy_to_xfer(struct qla_tgt_cmd *cmd) spin_lock_irqsave(&ha->hardware_lock, flags); - if (!vha->flags.online || (cmd->reset_count != ha->chip_reset) || + if (!ha->flags.fw_started || (cmd->reset_count != ha->chip_reset) || (cmd->sess && cmd->sess->deleted)) { /* * Either the port is not online or this request was from @@ -3251,7 +3255,7 @@ static int __qlt_send_term_imm_notif(struct scsi_qla_host *vha, ql_dbg(ql_dbg_tgt_tmr, vha, 0xe01c, "Sending TERM ELS CTIO (ha=%p)\n", ha); - pkt = (request_t *)qla2x00_alloc_iocbs_ready(vha, NULL); + pkt = (request_t *)qla2x00_alloc_iocbs(vha, NULL); if (pkt == NULL) { ql_dbg(ql_dbg_tgt, vha, 0xe080, "qla_target(%d): %s failed: unable to allocate " @@ -4581,7 +4585,8 @@ static int qlt_24xx_handle_els(struct scsi_qla_host *vha, } if (sess != NULL) { - if (sess->fw_login_state == DSC_LS_PLOGI_PEND) { + if ((sess->fw_login_state != DSC_LS_PLOGI_PEND) && + (sess->fw_login_state != DSC_LS_PLOGI_COMP)) { /* * Impatient initiator sent PRLI before last * PLOGI could finish. Will force him to re-try, @@ -4620,15 +4625,23 @@ static int qlt_24xx_handle_els(struct scsi_qla_host *vha, /* Make session global (not used in fabric mode) */ if (ha->current_topology != ISP_CFG_F) { - set_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags); - set_bit(LOCAL_LOOP_UPDATE, &vha->dpc_flags); - qla2xxx_wake_dpc(vha); + if (sess) { + ql_dbg(ql_dbg_disc, vha, 0xffff, + "%s %d %8phC post nack\n", + __func__, __LINE__, sess->port_name); + qla24xx_post_nack_work(vha, sess, iocb, + SRB_NACK_PRLI); + res = 0; + } else { + set_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags); + set_bit(LOCAL_LOOP_UPDATE, &vha->dpc_flags); + qla2xxx_wake_dpc(vha); + } } else { if (sess) { ql_dbg(ql_dbg_disc, vha, 0xffff, - "%s %d %8phC post nack\n", - __func__, __LINE__, sess->port_name); - + "%s %d %8phC post nack\n", + __func__, __LINE__, sess->port_name); qla24xx_post_nack_work(vha, sess, iocb, SRB_NACK_PRLI); res = 0; @@ -4636,7 +4649,6 @@ static int qlt_24xx_handle_els(struct scsi_qla_host *vha, } break; - case ELS_TPRLO: if (le16_to_cpu(iocb->u.isp24.flags) & NOTIFY24XX_FLAGS_GLOBAL_TPRLO) { @@ -5100,7 +5112,7 @@ static void qlt_24xx_atio_pkt(struct scsi_qla_host *vha, unsigned long flags; if (unlikely(tgt == NULL)) { - ql_dbg(ql_dbg_io, vha, 0x3064, + ql_dbg(ql_dbg_tgt, vha, 0x3064, "ATIO pkt, but no tgt (ha %p)", ha); return; } @@ -6231,7 +6243,7 @@ static void qlt_disable_vha(struct scsi_qla_host *vha) struct atio_from_isp *pkt; int cnt, i; - if (!vha->flags.online) + if (!ha->flags.fw_started) return; while ((ha->tgt.atio_ring_ptr->signature != ATIO_PROCESSED) ||