From patchwork Fri Jun 16 22:47:39 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Madhani, Himanshu" X-Patchwork-Id: 9793795 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 14A2A6038E for ; Fri, 16 Jun 2017 22:48:02 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 0554E2867C for ; Fri, 16 Jun 2017 22:48:02 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id EDB1C286A0; Fri, 16 Jun 2017 22:48:01 +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.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_DNSWL_HI 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 5F92E2867C for ; Fri, 16 Jun 2017 22:48:00 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752026AbdFPWr7 (ORCPT ); Fri, 16 Jun 2017 18:47:59 -0400 Received: from mail-sn1nam01on0079.outbound.protection.outlook.com ([104.47.32.79]:62048 "EHLO NAM01-SN1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1750903AbdFPWrz (ORCPT ); Fri, 16 Jun 2017 18:47:55 -0400 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=jNS8+WTniBwxXkTHsARU26tXaDpt5rscvGShT2geQf0=; b=RGtFSE3R1tv2lTIz7/W2eUHMb590sjLjj8reZEMeXeb+GmUJHjk4ZmCkUTXyHAH2uGccTcFSDMhihR1VhUoRSso8yS/OPDjJ+ANqNfSANi2AYvLFYG04Lcetzog0crWmpz6YiFLK3fr0e32tyQvXzkSsmH0kYE67j+gkwwkJZEY= Received: from BN6PR07CA0039.namprd07.prod.outlook.com (2603:10b6:404:a3::25) by CO1PR07MB427.namprd07.prod.outlook.com (2a01:111:e400:103d::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1178.14; Fri, 16 Jun 2017 22:47:51 +0000 Received: from BY2FFO11FD035.protection.gbl (2a01:111:f400:7c0c::120) by BN6PR07CA0039.outlook.office365.com (2603:10b6:404:a3::25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1178.14 via Frontend Transport; Fri, 16 Jun 2017 22:47:50 +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 BY2FFO11FD035.mail.protection.outlook.com (10.1.14.220) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P384) id 15.1.1157.12 via Frontend Transport; Fri, 16 Jun 2017 22:47:50 +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.347.0; Fri, 16 Jun 2017 15:47:44 -0700 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 v5GMliCa003728; Fri, 16 Jun 2017 15:47:44 -0700 Received: (from root@localhost) by dut1171.mv.qlogic.com (8.14.7/8.14.7/Submit) id v5GMlix3003727; Fri, 16 Jun 2017 15:47:44 -0700 From: Himanshu Madhani To: CC: , , , Subject: [PATCH 1/6] qla2xxx: Add FC-NVMe port discovery and PRLI handling Date: Fri, 16 Jun 2017 15:47:39 -0700 Message-ID: <20170616224744.3681-2-himanshu.madhani@cavium.com> X-Mailer: git-send-email 2.12.0 In-Reply-To: <20170616224744.3681-1-himanshu.madhani@cavium.com> References: <20170616224744.3681-1-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)(39400400002)(39450400003)(39830400002)(39410400002)(2980300002)(428002)(199003)(189002)(9170700003)(8676002)(305945005)(48376002)(50466002)(101416001)(76176999)(47776003)(50986999)(8936002)(50226002)(5660300001)(4326008)(72206003)(2906002)(80596001)(87636003)(1076002)(81166006)(478600001)(2351001)(106466001)(33646002)(6916009)(110136004)(6666003)(2950100002)(38730400002)(575784001)(86362001)(5003940100001)(189998001)(107886003)(356003)(42186005)(105586002)(54906002)(36756003); DIR:OUT; SFP:1101; SCL:1; SRVR:CO1PR07MB427; H:CAEXCH02.caveonetworks.com; FPR:; SPF:None; MLV:sfv; A:1; MX:1; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BY2FFO11FD035; 1:1eKNAYH1W6DdC6gabZn5sk99G1kj6Ea8f+wxQ+MObPUH3fsfpReyt8MTpoPJZSw5SFecvlkdIcHt+U3YBYIZQxekHdMFZizLcPqwKqBvd3Ak8N8Hp1eTg/7zGE/ySvL1Iq2zvKTxHWiU0k91a1w2t6giG+rohChTzflO9douXXrWSgk0JQ+z8WFjjRKLydqr2XEW0XlHJ1C+ijt3WdKw2IAjsX7Om0HUonCeEYTimlLBrTmKLst2WDyiooYEf5ssZsq62EaNKfly7xZTOTIt5xiwjzj6UeZEXAeR493RwBQhT/tsW4O0uA1FNFrxiipNwRCAySrrizm9TQk+816JTZQnvLivf2cnmHX8pRXt9YnABEZD6KYLwZGhAkCEmljlzt8WqAhEVQYaeoKdE2kC90mR+4X5j1QrDzLRQAvuzeGpUK2J7fYAENY/gvoEP1/sKad9KDnSEyl7sa/vJq63MwMOLvRTr1pz6XECchgo9UjDq+tNfQdSPwPvaHLpDashXEQh6F5uPq8BLgXjXOrcWA== X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: cca1c8af-ebf7-4e31-3a4a-08d4b509b7a3 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(2017030254075)(201703131423075)(201703031133081)(201702281549075); SRVR:CO1PR07MB427; X-Microsoft-Exchange-Diagnostics: 1; CO1PR07MB427; 3:QX4dkpKv+e9vXYrycvJFAYojTGn+w7lLbaheliKRO5/gdvf8313LpF7aXfcQm5bNe0+d7t1sJlgFSUcqdGXQSmA9JrTIbDQZNmcpf2b8B15QhGk0cy3kKHtTjGSlEqmoOsuiWGp5MxAW2dHrXPZgQUtvzN2KDjZ3zdlrINVF+BiMqL7cyctdYhy9hUJkuexQD0MvkxkyRQB/yW3hgv+0mkh1YEh6bbzkSXmCE8QFrPXZfm9OAIb9SuJXpplHn1qdKro3qDunMKEyhlAfAiSqLlzvBMqY//oGXOjhEbLvBKj0bToxwf0lnBrMnwk1XUDL5ES0UULl0DBt+I62rdhk8mRq1tYuIHB78WGpLX0OSOrUoUCs2+nTkIlCL1KcyP3jpTM06AJ5sfCIgG7T0yMbdmiVsIYdN/TUJj4+hjTmbYHX5yil8DlTsyEZ2g9rL9xtJN+PFSt5mpYQ8S26U/sepdK+bycnOmPuHohYcbsa4NLGj3EmTqn3ISlaoECNdoaT X-MS-TrafficTypeDiagnostic: CO1PR07MB427: X-Microsoft-Exchange-Diagnostics: 1; CO1PR07MB427; 25:bQ05T7Tiuvf5FZeM2Qv1zk7VgZO+sCIulnl2tHfUTbMCPX3ZwYL/LdBOGH8IPgYiYu/+POipOjmDnbJYs7KI12hdskFpBrsRPWFavQ06EYvoMROEBUWRy0YInsozgsBGaLvduyhqbHqaeMVjR9Kgh3DDLi4tBayPE2ur3kXb/1UK5uJemWJui7FJvsPZvtpOgfPYOH71Jon5FjWCIqtyF6HHq1J0swxYWV+pwgbq1tY8bUcrsAJCbDLbFn8tVQ/8FwDuW+PUrLvmlThZ1RoIvj/2pdy4vwef/DM2aSw6Us0RIF10Wjevn+CEcu2Rz0bcnBlBzAfo1tCX6NNYuJIuRjIetoW845NQoBZjTto/HpcqeFLwg0YvRVw01cfjR9CR91g6o9MH63B6tfqDf3APa3CQm9HVF7YW+80PVek9rXJezBO2d18Hix6CU/BJar1/StBwAPqaYTeDN2XuzTsqjr9CccNFYnJFTp902DZV9Pc=; 31:OHlDuHtOWv2NL5qyIJB0aIfrVr+fn6ssPS3+mJcdrt6eb+fnoJ8gJk8welomB8JiP8xX8pMyHmb91xLYnVvkqFzq7jEeFIhiqsHwaTcS1vTqDDqoPG5A10y1+LsUkvaJvoVpHOCI4pnfsBdfnhZPGS7P/W739sr/YVoTziRBngmYyPTa0FdS7JqUNy0tBxUa7iRsjXjUjjq9vg2h0sMOU3BrZTv6rOEQTt+pXwUu3CQz4wUnOj7mebzGpeN7/0WG X-Microsoft-Exchange-Diagnostics: 1; CO1PR07MB427; 20:njGvZJ/RnGf5KEo1jMjQ8bqv5OFa1EzALId+vh6D46BkOEM3ILSxFJFPCkExOFjfaEirIC0PGSJBpO9p0emUlzdcXAKmXF/InBH1cBHmB4r1G27fL+7MNqoaUxIFCpSRHGeHmTdIX6RGMFfCpimkTYAlZdmSmNqV0aj8cjSvSB7wwUiuPkCy+CKX63ZXwdnEDQhZ+1jKvJ8pn4Er1rZL0KEhiAhZH+KcFa9SvBwSP5g5OtfSpOYFdCqUFRpvBYHvjoRIxjDMfgOyv6gBCRtbAKFaei1097Ju3aaeQLNyUR2Yf+/C40q8m18WfvMdNRaOykwoOSJ70DWn1kPR3JfFlKHzmUTyPhquv6DVE+jliXno0+7qwYyB5Uf9N63jVGhv9PAKjmFUxOfsz3ZRm+ZWORzzyajRay6vo8dmKdjC3i7cGiDJ3n/jGD01fGxRugj7SiFO7Lr5j3riByLOsXcfQ3i/N13TAnnxv/XXeHP+/C9cZRagKo5Z7sRw6D2cF0V3 X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(209352067349851); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(601004)(2401047)(8121501046)(13016025)(5005006)(13018025)(93006095)(93001095)(3002001)(10201501046)(100000703101)(100105400095)(6041248)(20161123558100)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123562025)(20161123555025)(20161123560025)(20161123564025)(6072148)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:CO1PR07MB427; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:CO1PR07MB427; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; CO1PR07MB427; 4:2QupgYPrclV/Of2pU3+IpTLbUfWKynYs89z69aUBQaD?= =?us-ascii?Q?tPTZmO9xFelWu+emrYZ7qUE7mgpPFxWCNd1Bk0d7ncvcAotL0Sh1K/SnWCZ8?= =?us-ascii?Q?NJ/nIlfzvDqc7cEs2jXpHmGS71JFLMekP0+xzuvhRrG1fsV1YYkpklXKED+v?= =?us-ascii?Q?Yt2u+kQCaMhNjsFHP1AwCjfCp0wTk9OOt41+yz5SqwRpPfmQJvFh720gCvtJ?= =?us-ascii?Q?S6sDLEf7SxLlBkA7YXG6NTjlVJjrMfG+qxAskVVqatHBmPnemxAoUG1jKofr?= =?us-ascii?Q?0iI8mJ5mSTqyqosjqnbtGr3wzg/+rH1gowspzhx9XRPjBYbM0JEoSFlA/mLQ?= =?us-ascii?Q?j6ydiNJsHjZx9TowGrUUygz0sf1P+BKmGCXhHTj5oVFoccyDG0tMyXEDB7XA?= =?us-ascii?Q?USg09igS5EVMGU1WARGW0VezbV7G4Sfill4HQMj6a8n0z86FjICx1KZx65LH?= =?us-ascii?Q?JvXWQVNgnGjxG8pao39ho79MO7H8W5lvDR7Pxf2GBgUpmJrks+SNVX0AhxbM?= =?us-ascii?Q?hzPks00o4PuR8yLhYTEQc6/YhJN5JYV7H+64ziG4yzfxyopMMBq07Te11Wfb?= =?us-ascii?Q?zWswTWP2fy68UfoRyBzQXs1dB2citaB2L8byiL4tGa1L5ifJFnhMEaS9tFGr?= =?us-ascii?Q?Hn/Qd5egBl6asDe8K64LtVDeVpYqLKTBYPKUOamPCXdrHvXMm7Xx5kQByLFj?= =?us-ascii?Q?oHg0tgF3glbnLKn+JvIMK9wpXHyj83Ib+phf/LxPKGkwPwamcunI5hZcI2w9?= =?us-ascii?Q?X3T81nfhOYWJIlJKPZvG4DN9zw+/i04VwCBGu0L+iQ8NzYAAnP/WGPV5VtXX?= =?us-ascii?Q?lPA4AEsNHMORucXMdbuliTPm894VStqtiSIZOVurrD356SgBOHzKAwh7Wxfw?= =?us-ascii?Q?Lm9l5tTbRvTjRKeguDLJhPuA3S519MoEvsjYU5h2jPYOyBuhrteWNpk7qRMv?= =?us-ascii?Q?7Yd0El6UWZtY9P6bgVYIrnkxRBH5YqQgJNQdEXgbTyCcMq4waREx73p+H2aH?= =?us-ascii?Q?RcT9DsQH2TmbVM67HNBmMZ4EdP5Z3e8jmao9ZeQXuCPgIzEP0luCWTbhUF/s?= =?us-ascii?Q?lT5iQqrQUI1DVjktJ3fWuM10BK6j18JtXJdGxOnGLfKikuUB1k5JBdp8LTw5?= =?us-ascii?Q?8hn9jgwZGjRom3G5McGTeBh5y1WvV9WsVPg/b1jL76OqHKckQEEJlRWqn4ef?= =?us-ascii?Q?2vtJJvZKAPYHAuJLFR6djKiOf1AFNt6nZfyKfqJDdJzQQQa4/GrLwHA=3D?= =?us-ascii?Q?=3D?= X-Forefront-PRVS: 0340850FCD X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; CO1PR07MB427; 23:jPWzuyAbuBN2AfhwKRGGH60Ijp8Nu82FROGGygpTWK?= =?us-ascii?Q?Oz5KLhomdL7efK/PwykqBMcMwnp0CH0AlhLIowm58y/sBeOUXQ6vQQl4wvhE?= =?us-ascii?Q?HfvrV1VrTYYlL2+YaRVcmRJ5pagE+337rM/hMdD1S/ciVFdMnT8btkqdQDAs?= =?us-ascii?Q?V84f6eQGUbezfoS+ZIYHwM2ML8zbiHS1kDwD00ismonVYgDmQrm3mnA8Ck/W?= =?us-ascii?Q?2I6x3uS18XNJOzysSKwJBQRVT2keAwUg6KnhGJb+FOv+A209AFPqAQH+mJXV?= =?us-ascii?Q?00yucmqtg3/SBZLKR/Zb7Z/peXWg1evsXAkQtRpb7fRfWypTtFdAWanBBXt1?= =?us-ascii?Q?vSX58owiDIdf2q+Zew10QpRSgdGM5aEBA/EoXVZjv4xNgz9vNMccL3DRPu9r?= =?us-ascii?Q?ZLh+exBulGv6DLbXdg1LIpuwnPMM3WSBdZHcPcwpStGvJbgkF07XOO2z1JiQ?= =?us-ascii?Q?NfCkADFNv+fO4Ndq5/JOHgAF+Jfg+zYtmD0GJUrfoJbXXe1duM4deAEMvXNW?= =?us-ascii?Q?VHpGuCa4KN8H/i80e5iCGieNynpg94Xq4yqYVi0bCUZOA02NKJFUPt0ZJ9St?= =?us-ascii?Q?SceQYKOIXon0YompE3vgJqgvNDR/ifRJuJrDMPlz/I/r54HOV6kP2y6lNDy9?= =?us-ascii?Q?9p5EydCViknU1wd3DXAbSQ2O71tjpz7XWUzcqvWdtzOE/+VqE7m+mOSd0RYH?= =?us-ascii?Q?Y7XXseJr9QUQDvtFikIfJBoE61pZx7uReRUWuPvaCehzsq98oKRhu5U6JaSh?= =?us-ascii?Q?2i20O9irb92/yGcIg+8gP+KwIpOF60EOLddW4KkrSyAp3zMY83gyyP2i32LF?= =?us-ascii?Q?QRj7YQKwOhkwBGgbowdKQ9HimDZQZOwvQMCN8Me9xJ1XIsWQmq55rT5aMekn?= =?us-ascii?Q?vwaefmr5UfOoaHg5WBEERfcGBZCe2nONxzMta/nKtkwUMsJQtcEydJ0iUdHr?= =?us-ascii?Q?+zgyCMy8GiJrhltroc79Wbi+8w6N47PKGCv6xgFWg0J+cJeGwzmyK0sZo35L?= =?us-ascii?Q?8YhJ/0Etp0VJJhcm3XkbQOtwk25Gx+cceXcMV/zpA1ahgBBi0QoYijpPNnz5?= =?us-ascii?Q?iVwu+7V37CkFjAR56BxElgnAaUrk/Ix60YsE7JAUPYPKFe3F4yRoA2X3AgzX?= =?us-ascii?Q?Wlf8bLOm3ObA6IMtOjFl6+S5o3i9dgTa8ogFaLWIovN7p7zfm+lg=3D=3D?= X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; CO1PR07MB427; 6:HdeuLwpzaBltN4LRBzc9Qet0qyyTmIcEjF6JGz4Scse?= =?us-ascii?Q?MaiX6NqM7E+Wa+E52BDyKazZhMt4LGSbxP2RtKkUh9brh5d6SAtkkE4lpfCn?= =?us-ascii?Q?lKZSRw5VS3VddvG24lcooGxBJkXTgCLyDms6PAs7y4nnT+szsGCJwjzl6AVE?= =?us-ascii?Q?eESLz9Lm6Cu5eApf831jhlWgcJMog/758UzGqI8rkbC/gM5cxoBtOEFO02fe?= =?us-ascii?Q?GQto5irIzwP1leorl7331KvzFWbZSEI+zCNoQSj6Y+TOPDXQIMnxwRLCztEQ?= =?us-ascii?Q?MLRCXdwsqQM+ly8nE+4fsGnwXMR+uZU13iR479B8AbRpJVoETCBSspn9fSiu?= =?us-ascii?Q?wv5n5FY90TPemnRGKjC/WPO1AW7pP0alUCqQhrcQJfsDmeV/8FyDHPu0wjf+?= =?us-ascii?Q?HvkXWp4m7Rl08DdOLgnwoEKlPN/UT2ykmqifLiI629Owe7ormS4dwON7GTxO?= =?us-ascii?Q?YNV1pxGmaohNMZ3JV5hbiTTo69hp7Bu3A+Pk2jN6tN4MSRH61u1Py0IkGlQD?= =?us-ascii?Q?DPY3/u4K3EgXB7JH78IXFL2d6bCPGUNQHAaVBE2ibiIRpj0lPTTUP0rTuYkI?= =?us-ascii?Q?SILdZwpx3ie5je1Hg/5HZyGFDoS3AUEX222U6O7gfpozYQKYiwouGMCP1y4J?= =?us-ascii?Q?Aotq7UYEyP0xBrzJlif2xrpRJKuG9vyPJLMGnuNaf3FUxMmw902AI2D3PwxV?= =?us-ascii?Q?4Q2+cTW1IFtnwcPuGz95mYAsqzPyzb/qslV9v8E3Oj9V2MHNbdbRoNfyPyxq?= =?us-ascii?Q?OPiAfkYGhPu8w5Mtnu21ucEGkr/TTU4TkmbrEgTuwp1A+ar8MSr7QEEHZRJ7?= =?us-ascii?Q?lYLWRoZn+a19HkCKKUDj2fxzT5pJ5oBcoqg9OSwYx3jt0DmmAXKuuAmbJ6zp?= =?us-ascii?Q?UyHltfx/khkFpKhXVLWSEJtQzS8rB9IAByCdfB4lsfG/DebQK9FJFQujq1pe?= =?us-ascii?Q?z1MqObg8PXBt35cO5/Zt0xNKTkguIc8kEKqy3d6lPO77KwNUVW9cVyua6SPA?= =?us-ascii?Q?=3D?= X-Microsoft-Exchange-Diagnostics: 1; CO1PR07MB427; 5:AMBOoAFJl9QPTL5grJlBjPi+G8aDrg07/n3KPTuZjC7Kn5MZbT5XCTBrpNnrvN+CzLmenJhMNQY4OFQpAobJ1rNmzZVhw9h54AxbDDi0+XFMnccu9TAivSsc6R3OiNqQ/biNtS1/4s3cPKUDkLIfzLFvhSE9hH4JbHf9jdCiarpyCWeqCyYXwVvgCnj3J0nH3ddpqxklejne41wE69YPSPBMeosnxJ5EERRJbkjVNLY8AcbiWO+DSpBhh5EPq5Vhb43NsYQ3h0xrftshkr564x6j4x2YtvgpXgZLHGozH57Krp/tcMey09eyESTcVLSCopq88wFOHEUIw7mk0e1gtsYROg98/Bj69MbXsYrT1YtwSnww3Jcja/NqRVq4+tkMRCxmbYqR0HBLkMXjjdcKDnhlCMeVWx5s10J1d5hzGI5xV4G+JI+RiG1yzqdaN5Aga5tp/oF7FJmTvtMcpxeKuKj3Iz6FkJUsRpP6PJ/0t/0uoLd2GQ58S23vK4MV81Mc; 24:LeAxyD28kJixiAI9lQKeiGU4zFQMs5hyOh2CrWfUcER0URGhRqE6ftVmdSNgQegOm0+ECyASiogJZcAevoyI2q7lBM9tcSYTfW4uctSR8z0= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; CO1PR07MB427; 7:t/H8DSzpV7rbRKuSuWgLrgyJajxIVQ7R+3czobSoppG6t/A1zzcSFit93Y3KZ5g9fqJHoCGtlss1XqcAlDEnAdJvTbje0AjL0vs9D9oeo09rjUNexFMr+2Nbg67mq1WlqACit53vYTJ0xDGoPZ9ujJgtaYZaGqXQ7XOd0TrOxVJAtP801Z+/1SWS3hYbhCJiSqZmdhWsFxF4sgx4BMbAnxAwA9TJa5r4HDB4KzxtkKNSWHHMmOALLNUm5JjXK+u81iWEzl9npsieIu0EdBcvfpZCxBZ0GiI1zZrWy4hwsDZhTN4J/YmXmEHMPvUy/OpnI3UBRS5aReQ7iKM4gsdtjH6LoyKb5XNxKBsX7CopOZR+8aWiF1Zhth1ZnugzhqSPNIC/v/tula913s15dr1T4zT0T3w5xEWPQk0oweFi1xmgdjXyV30sF/vFhl3Po+6ZpiQt5oazGIrp+Bx8iMdE4mbbV+Az3+aF2EfXNJ8mi9i8GM7JFfCKJscAfJiDwAozFM0JepZ0ofhg6ARWLdquYUuNBcKiVTqvxD4MsIABqiXpY5stw5W4o79HxI3jSp+dLGt86qB1qetopN8yfPeAQCU4hGngBjyJJUPsALuaIjtOMOjJ1aKXio7mLKiuktlTC5n5P60cSMyxbw7G2ZI2HFreVk/3N3onCTYlIYRAv2bticqKk1QSDoNU/D0X1RZLWyUQuQlRCLA1djvjU3c7oE/WduhJrNZ7a8hAxGI38rDrSQ08grQRaALh2vDM8V9N319n7uYkrU66FQFhCFKOAbkU8VoihujA7r/uH8yqeS0= X-OriginatorOrg: cavium.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Jun 2017 22:47:50.4315 (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: CO1PR07MB427 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: Duane Grigsby Signed-off-by: Darren Trapp Signed-off-by: Duane Grigsby Signed-off-by: Anil Gurumurthy Signed-off-by: Giridhar Malavali Signed-off-by: Himanshu Madhani Reviewed-by: Johannes Thumshirn --- drivers/scsi/qla2xxx/qla_dbg.c | 9 +- drivers/scsi/qla2xxx/qla_def.h | 31 ++++++- drivers/scsi/qla2xxx/qla_fw.h | 13 ++- drivers/scsi/qla2xxx/qla_gbl.h | 1 + drivers/scsi/qla2xxx/qla_init.c | 168 ++++++++++++++++++++++++++++++++++++-- drivers/scsi/qla2xxx/qla_iocb.c | 21 +++++ drivers/scsi/qla2xxx/qla_mbx.c | 33 +++++--- drivers/scsi/qla2xxx/qla_os.c | 4 + drivers/scsi/qla2xxx/qla_target.c | 4 +- 9 files changed, 257 insertions(+), 27 deletions(-) diff --git a/drivers/scsi/qla2xxx/qla_dbg.c b/drivers/scsi/qla2xxx/qla_dbg.c index c0c90dcc7c7b..cf4f47603a91 100644 --- a/drivers/scsi/qla2xxx/qla_dbg.c +++ b/drivers/scsi/qla2xxx/qla_dbg.c @@ -15,9 +15,10 @@ * | | | 0x015b-0x0160 | * | | | 0x016e | * | Mailbox commands | 0x1199 | 0x1193 | - * | Device Discovery | 0x2004 | 0x2016 | - * | | | 0x2011-0x2012, | - * | | | 0x2099-0x20a4 | + * | Device Discovery | 0x2131 | 0x210e-0x2116 | + * | | | 0x211a | + * | | | 0x211c-0x2128 | + * | | | 0x212a-0x2130 | * | Queue Command and IO tracing | 0x3074 | 0x300b | * | | | 0x3027-0x3028 | * | | | 0x303d-0x3041 | @@ -59,7 +60,7 @@ * | | | 0xb13c-0xb140 | * | | | 0xb149 | * | MultiQ | 0xc010 | | - * | Misc | 0xd301 | 0xd031-0xd0ff | + * | Misc | 0xd302 | 0xd031-0xd0ff | * | | | 0xd101-0xd1fe | * | | | 0xd214-0xd2fe | * | Target Mode | 0xe081 | | diff --git a/drivers/scsi/qla2xxx/qla_def.h b/drivers/scsi/qla2xxx/qla_def.h index e1af9db3691d..bd1b3fef95a4 100644 --- a/drivers/scsi/qla2xxx/qla_def.h +++ b/drivers/scsi/qla2xxx/qla_def.h @@ -343,6 +343,7 @@ struct srb_iocb { #define SRB_LOGIN_RETRIED BIT_0 #define SRB_LOGIN_COND_PLOGI BIT_1 #define SRB_LOGIN_SKIP_PRLI BIT_2 +#define SRB_LOGIN_NVME_PRLI BIT_3 uint16_t data[2]; u32 iop[2]; } logio; @@ -436,6 +437,7 @@ struct srb_iocb { #define SRB_NACK_PLOGI 16 #define SRB_NACK_PRLI 17 #define SRB_NACK_LOGO 18 +#define SRB_PRLI_CMD 21 enum { TYPE_SRB, @@ -1088,6 +1090,7 @@ struct mbx_cmd_32 { #define MBX_1 BIT_1 #define MBX_0 BIT_0 +#define RNID_TYPE_PORT_LOGIN 0x7 #define RNID_TYPE_SET_VERSION 0x9 #define RNID_TYPE_ASIC_TEMP 0xC @@ -2152,10 +2155,12 @@ typedef struct { uint8_t fabric_port_name[WWN_SIZE]; uint16_t fp_speed; uint8_t fc4_type; + uint8_t fc4f_nvme; /* nvme fc4 feature bits */ } sw_info_t; /* FCP-4 types */ #define FC4_TYPE_FCP_SCSI 0x08 +#define FC4_TYPE_NVME 0x28 #define FC4_TYPE_OTHER 0x0 #define FC4_TYPE_UNKNOWN 0xff @@ -2180,7 +2185,8 @@ typedef enum { FCT_SWITCH, FCT_BROADCAST, FCT_INITIATOR, - FCT_TARGET + FCT_TARGET, + FCT_NVME } fc_port_type_t; enum qla_sess_deletion { @@ -2237,10 +2243,12 @@ enum fcport_mgt_event { FCME_RSCN, FCME_GIDPN_DONE, FCME_PLOGI_DONE, /* Initiator side sent LLIOCB */ + FCME_PRLI_DONE, FCME_GNL_DONE, FCME_GPSC_DONE, FCME_GPDB_DONE, FCME_GPNID_DONE, + FCME_GFFID_DONE, FCME_DELETE_DONE, }; @@ -2274,6 +2282,16 @@ typedef struct fc_port { unsigned int login_pause:1; unsigned int login_succ:1; + struct work_struct nvme_del_work; + atomic_t nvme_ref_count; + uint32_t nvme_prli_service_param; +#define NVME_PRLI_SP_CONF BIT_7 +#define NVME_PRLI_SP_INITIATOR BIT_5 +#define NVME_PRLI_SP_TARGET BIT_4 +#define NVME_PRLI_SP_DISCOVERY BIT_3 + uint8_t nvme_flag; +#define NVME_FLAG_REGISTERED 4 + struct fc_port *conflict; unsigned char logout_completed; int generation; @@ -2306,6 +2324,7 @@ typedef struct fc_port { u32 supported_classes; uint8_t fc4_type; + uint8_t fc4f_nvme; uint8_t scan_state; unsigned long last_queue_full; @@ -2313,6 +2332,8 @@ typedef struct fc_port { uint16_t port_id; + struct nvme_fc_remote_port *nvme_remote_port; + unsigned long retry_delay_timestamp; struct qla_tgt_sess *tgt_session; struct ct_sns_desc ct_desc; @@ -2745,7 +2766,7 @@ struct ct_sns_req { struct { uint8_t reserved; - uint8_t port_name[3]; + uint8_t port_id[3]; } gff_id; struct { @@ -3052,6 +3073,7 @@ enum qla_work_type { QLA_EVT_GPNID_DONE, QLA_EVT_NEW_SESS, QLA_EVT_GPDB, + QLA_EVT_PRLI, QLA_EVT_GPSC, QLA_EVT_UPD_FCPORT, QLA_EVT_GNL, @@ -4007,6 +4029,7 @@ typedef struct scsi_qla_host { uint32_t qpairs_available:1; uint32_t qpairs_req_created:1; uint32_t qpairs_rsp_created:1; + uint32_t nvme_enabled:1; } flags; atomic_t loop_state; @@ -4085,6 +4108,10 @@ typedef struct scsi_qla_host { uint8_t port_name[WWN_SIZE]; uint8_t fabric_node_name[WWN_SIZE]; + struct nvme_fc_local_port *nvme_local_port; + atomic_t nvme_ref_count; + struct list_head nvme_rport_list; + uint16_t fcoe_vlan_id; uint16_t fcoe_fcf_idx; uint8_t fcoe_vn_port_mac[6]; diff --git a/drivers/scsi/qla2xxx/qla_fw.h b/drivers/scsi/qla2xxx/qla_fw.h index 1f808928763b..dcae62d4cbeb 100644 --- a/drivers/scsi/qla2xxx/qla_fw.h +++ b/drivers/scsi/qla2xxx/qla_fw.h @@ -37,6 +37,12 @@ struct port_database_24xx { #define PDF_CLASS_2 BIT_4 #define PDF_HARD_ADDR BIT_1 + /* + * for NVMe, the login_state field has been + * split into nibbles. + * The lower nibble is for FCP. + * The upper nibble is for NVMe. + */ uint8_t current_login_state; uint8_t last_login_state; #define PDS_PLOGI_PENDING 0x03 @@ -69,7 +75,11 @@ struct port_database_24xx { uint8_t port_name[WWN_SIZE]; uint8_t node_name[WWN_SIZE]; - uint8_t reserved_3[24]; + uint8_t reserved_3[4]; + uint16_t prli_nvme_svc_param_word_0; /* Bits 15-0 of word 0 */ + uint16_t prli_nvme_svc_param_word_3; /* Bits 15-0 of word 3 */ + uint16_t nvme_first_burst_size; + uint8_t reserved_4[14]; }; /* @@ -819,6 +829,7 @@ struct logio_entry_24xx { #define LCF_CLASS_2 BIT_8 /* Enable class 2 during PLOGI. */ #define LCF_FREE_NPORT BIT_7 /* Release NPORT handle after LOGO. */ #define LCF_EXPL_LOGO BIT_6 /* Perform an explicit LOGO. */ +#define LCF_NVME_PRLI BIT_6 /* Perform NVME FC4 PRLI */ #define LCF_SKIP_PRLI BIT_5 /* Skip PRLI after PLOGI. */ #define LCF_IMPL_LOGO_ALL BIT_5 /* Implicit LOGO to all ports. */ #define LCF_COND_PLOGI BIT_4 /* PLOGI only if not logged-in. */ diff --git a/drivers/scsi/qla2xxx/qla_gbl.h b/drivers/scsi/qla2xxx/qla_gbl.h index beebf96c23d4..6fbee11c1a18 100644 --- a/drivers/scsi/qla2xxx/qla_gbl.h +++ b/drivers/scsi/qla2xxx/qla_gbl.h @@ -99,6 +99,7 @@ extern struct qla_qpair *qla2xxx_create_qpair(struct scsi_qla_host *, extern int qla2xxx_delete_qpair(struct scsi_qla_host *, struct qla_qpair *); void qla2x00_fcport_event_handler(scsi_qla_host_t *, struct event_arg *); int qla24xx_async_gpdb(struct scsi_qla_host *, fc_port_t *, u8); +int qla24xx_async_prli(struct scsi_qla_host *, fc_port_t *); int qla24xx_async_notify_ack(scsi_qla_host_t *, fc_port_t *, struct imm_ntfy_from_isp *, int); int qla24xx_post_newsess_work(struct scsi_qla_host *, port_id_t *, u8 *, diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c index 48c0a58330d4..8a2586a04961 100644 --- a/drivers/scsi/qla2xxx/qla_init.c +++ b/drivers/scsi/qla2xxx/qla_init.c @@ -37,8 +37,11 @@ static struct qla_chip_state_84xx *qla84xx_get_chip(struct scsi_qla_host *); static int qla84xx_init_chip(scsi_qla_host_t *); static int qla25xx_init_queues(struct qla_hw_data *); static int qla24xx_post_gpdb_work(struct scsi_qla_host *, fc_port_t *, u8); +static int qla24xx_post_prli_work(struct scsi_qla_host*, fc_port_t *); static void qla24xx_handle_plogi_done_event(struct scsi_qla_host *, struct event_arg *); +static void qla24xx_handle_prli_done_event(struct scsi_qla_host *, + struct event_arg *); /* SRB Extensions ---------------------------------------------------------- */ @@ -191,6 +194,10 @@ qla2x00_async_login(struct scsi_qla_host *vha, fc_port_t *fcport, lio->timeout = qla2x00_async_iocb_timeout; sp->done = qla2x00_async_login_sp_done; lio->u.logio.flags |= SRB_LOGIN_COND_PLOGI; + + if (fcport->fc4f_nvme) + lio->u.logio.flags |= SRB_LOGIN_SKIP_PRLI; + if (data[1] & QLA_LOGIO_LOGIN_RETRIED) lio->u.logio.flags |= SRB_LOGIN_RETRIED; rval = qla2x00_start_sp(sp); @@ -327,7 +334,7 @@ static void qla24xx_handle_gnl_done_event(scsi_qla_host_t *vha, u16 i, n, found = 0, loop_id; port_id_t id; u64 wwn; - u8 opt = 0; + u8 opt = 0, current_login_state; fcport = ea->fcport; @@ -414,7 +421,12 @@ static void qla24xx_handle_gnl_done_event(scsi_qla_host_t *vha, fcport->login_pause = 1; } - switch (e->current_login_state) { + if (fcport->fc4f_nvme) + current_login_state = e->current_login_state >> 4; + else + current_login_state = e->current_login_state & 0xf; + + switch (current_login_state) { case DSC_LS_PRLI_COMP: ql_dbg(ql_dbg_disc, vha, 0x20e4, "%s %d %8phC post gpdb\n", @@ -422,7 +434,6 @@ static void qla24xx_handle_gnl_done_event(scsi_qla_host_t *vha, opt = PDO_FORCE_ADISC; qla24xx_post_gpdb_work(vha, fcport, opt); break; - case DSC_LS_PORT_UNAVAIL: default: if (fcport->loop_id == FC_NO_LOOP_ID) { @@ -665,6 +676,104 @@ void qla24xx_async_gpdb_sp_done(void *s, int res) sp->free(sp); } +static int qla24xx_post_prli_work(struct scsi_qla_host *vha, fc_port_t *fcport) +{ + struct qla_work_evt *e; + + e = qla2x00_alloc_work(vha, QLA_EVT_PRLI); + if (!e) + return QLA_FUNCTION_FAILED; + + e->u.fcport.fcport = fcport; + + return qla2x00_post_work(vha, e); +} + +static void +qla2x00_async_prli_sp_done(void *ptr, int res) +{ + srb_t *sp = ptr; + struct scsi_qla_host *vha = sp->vha; + struct srb_iocb *lio = &sp->u.iocb_cmd; + struct event_arg ea; + + ql_dbg(ql_dbg_disc, vha, 0x2129, + "%s %8phC res %d \n", __func__, + sp->fcport->port_name, res); + + sp->fcport->flags &= ~FCF_ASYNC_SENT; + + if (!test_bit(UNLOADING, &vha->dpc_flags)) { + memset(&ea, 0, sizeof(ea)); + ea.event = FCME_PRLI_DONE; + ea.fcport = sp->fcport; + ea.data[0] = lio->u.logio.data[0]; + ea.data[1] = lio->u.logio.data[1]; + ea.iop[0] = lio->u.logio.iop[0]; + ea.iop[1] = lio->u.logio.iop[1]; + ea.sp = sp; + + qla2x00_fcport_event_handler(vha, &ea); + } + + sp->free(sp); +} + +int +qla24xx_async_prli(struct scsi_qla_host *vha, fc_port_t *fcport) +{ + srb_t *sp; + struct srb_iocb *lio; + int rval = QLA_FUNCTION_FAILED; + + if (!vha->flags.online) + return rval; + + if ((fcport->fw_login_state == DSC_LS_PLOGI_PEND) || + (fcport->fw_login_state == DSC_LS_PLOGI_COMP) || + (fcport->fw_login_state == DSC_LS_PRLI_PEND)) + return rval; + + sp = qla2x00_get_sp(vha, fcport, GFP_KERNEL); + if (!sp) + return rval; + + fcport->flags |= FCF_ASYNC_SENT; + fcport->logout_completed = 0; + + sp->type = SRB_PRLI_CMD; + sp->name = "prli"; + qla2x00_init_timer(sp, qla2x00_get_async_timeout(vha) + 2); + + lio = &sp->u.iocb_cmd; + lio->timeout = qla2x00_async_iocb_timeout; + sp->done = qla2x00_async_prli_sp_done; + lio->u.logio.flags = 0; + + if (fcport->fc4f_nvme) + lio->u.logio.flags |= SRB_LOGIN_NVME_PRLI; + + rval = qla2x00_start_sp(sp); + if (rval != QLA_SUCCESS) { + fcport->flags &= ~FCF_ASYNC_SENT; + fcport->flags |= FCF_LOGIN_NEEDED; + set_bit(RELOGIN_NEEDED, &vha->dpc_flags); + goto done_free_sp; + } + + ql_dbg(ql_dbg_disc, vha, 0x211b, + "Async-prli - %8phC hdl=%x, loopid=%x portid=%06x retries=%d.\n", + fcport->port_name, sp->handle, fcport->loop_id, + fcport->d_id.b24, fcport->login_retry); + + return rval; + +done_free_sp: + sp->free(sp); + fcport->flags &= ~FCF_ASYNC_SENT; + return rval; +} + static int qla24xx_post_gpdb_work(struct scsi_qla_host *vha, fc_port_t *fcport, u8 opt) { @@ -1126,6 +1235,9 @@ void qla2x00_fcport_event_handler(scsi_qla_host_t *vha, struct event_arg *ea) case FCME_PLOGI_DONE: /* Initiator side sent LLIOCB */ qla24xx_handle_plogi_done_event(vha, ea); break; + case FCME_PRLI_DONE: + qla24xx_handle_prli_done_event(vha, ea); + break; case FCME_GPDB_DONE: qla24xx_handle_gpdb_event(vha, ea); break; @@ -1308,6 +1420,27 @@ qla24xx_async_abort_command(srb_t *sp) } static void +qla24xx_handle_prli_done_event(struct scsi_qla_host *vha, struct event_arg *ea) +{ + switch (ea->data[0]) { + case MBS_COMMAND_COMPLETE: + ql_dbg(ql_dbg_disc, vha, 0x2118, + "%s %d %8phC post gpdb\n", + __func__, __LINE__, ea->fcport->port_name); + + ea->fcport->chip_reset = vha->hw->base_qpair->chip_reset; + ea->fcport->logout_on_delete = 1; + qla24xx_post_gpdb_work(vha, ea->fcport, 0); + break; + default: + ql_dbg(ql_dbg_disc, vha, 0x2119, + "%s %d %8phC unhandle event of %x\n", + __func__, __LINE__, ea->fcport->port_name, ea->data[0]); + break; + } +} + +static void qla24xx_handle_plogi_done_event(struct scsi_qla_host *vha, struct event_arg *ea) { port_id_t cid; /* conflict Nport id */ @@ -1319,12 +1452,19 @@ qla24xx_handle_plogi_done_event(struct scsi_qla_host *vha, struct event_arg *ea) * force a relogin attempt via implicit LOGO, PLOGI, and PRLI * requests. */ - ql_dbg(ql_dbg_disc, vha, 0x20ea, - "%s %d %8phC post gpdb\n", - __func__, __LINE__, ea->fcport->port_name); - ea->fcport->chip_reset = vha->hw->base_qpair->chip_reset; - ea->fcport->logout_on_delete = 1; - qla24xx_post_gpdb_work(vha, ea->fcport, 0); + if (ea->fcport->fc4f_nvme) { + ql_dbg(ql_dbg_disc, vha, 0x2117, + "%s %d %8phC post prli\n", + __func__, __LINE__, ea->fcport->port_name); + qla24xx_post_prli_work(vha, ea->fcport); + } else { + ql_dbg(ql_dbg_disc, vha, 0x20ea, + "%s %d %8phC post gpdb\n", + __func__, __LINE__, ea->fcport->port_name); + ea->fcport->chip_reset = vha->hw->base_qpair->chip_reset; + ea->fcport->logout_on_delete = 1; + qla24xx_post_gpdb_work(vha, ea->fcport, 0); + } break; case MBS_COMMAND_ERROR: ql_dbg(ql_dbg_disc, vha, 0x20eb, "%s %d %8phC cmd error %x\n", @@ -4639,6 +4779,16 @@ qla2x00_find_all_fabric_devs(scsi_qla_host_t *vha) new_fcport->fp_speed = swl[swl_idx].fp_speed; new_fcport->fc4_type = swl[swl_idx].fc4_type; + new_fcport->nvme_flag = 0; + if (vha->flags.nvme_enabled && + swl[swl_idx].fc4f_nvme) { + new_fcport->fc4f_nvme = + swl[swl_idx].fc4f_nvme; + ql_log(ql_log_info, vha, 0x2131, + "FOUND: NVME port %8phC as FC Type 28h\n", + new_fcport->port_name); + } + if (swl[swl_idx].d_id.b.rsvd_1 != 0) { last_dev = 1; } diff --git a/drivers/scsi/qla2xxx/qla_iocb.c b/drivers/scsi/qla2xxx/qla_iocb.c index ac49febbac76..daa53235a28a 100644 --- a/drivers/scsi/qla2xxx/qla_iocb.c +++ b/drivers/scsi/qla2xxx/qla_iocb.c @@ -2211,12 +2211,30 @@ qla2x00_alloc_iocbs(struct scsi_qla_host *vha, srb_t *sp) } static void +qla24xx_prli_iocb(srb_t *sp, struct logio_entry_24xx *logio) +{ + struct srb_iocb *lio = &sp->u.iocb_cmd; + + logio->entry_type = LOGINOUT_PORT_IOCB_TYPE; + logio->control_flags = cpu_to_le16(LCF_COMMAND_PRLI); + if (lio->u.logio.flags & SRB_LOGIN_NVME_PRLI) + logio->control_flags |= LCF_NVME_PRLI; + + logio->nport_handle = cpu_to_le16(sp->fcport->loop_id); + logio->port_id[0] = sp->fcport->d_id.b.al_pa; + logio->port_id[1] = sp->fcport->d_id.b.area; + logio->port_id[2] = sp->fcport->d_id.b.domain; + logio->vp_index = sp->vha->vp_idx; +} + +static void qla24xx_login_iocb(srb_t *sp, struct logio_entry_24xx *logio) { struct srb_iocb *lio = &sp->u.iocb_cmd; logio->entry_type = LOGINOUT_PORT_IOCB_TYPE; logio->control_flags = cpu_to_le16(LCF_COMMAND_PLOGI); + if (lio->u.logio.flags & SRB_LOGIN_COND_PLOGI) logio->control_flags |= cpu_to_le16(LCF_COND_PLOGI); if (lio->u.logio.flags & SRB_LOGIN_SKIP_PRLI) @@ -3162,6 +3180,9 @@ qla2x00_start_sp(srb_t *sp) qla24xx_login_iocb(sp, pkt) : qla2x00_login_iocb(sp, pkt); break; + case SRB_PRLI_CMD: + qla24xx_prli_iocb(sp, pkt); + break; case SRB_LOGOUT_CMD: IS_FWI2_CAPABLE(ha) ? qla24xx_logout_iocb(sp, pkt) : diff --git a/drivers/scsi/qla2xxx/qla_mbx.c b/drivers/scsi/qla2xxx/qla_mbx.c index f02a2baffb5b..1eac67e8fdfd 100644 --- a/drivers/scsi/qla2xxx/qla_mbx.c +++ b/drivers/scsi/qla2xxx/qla_mbx.c @@ -5968,14 +5968,22 @@ int __qla24xx_parse_gpdb(struct scsi_qla_host *vha, fc_port_t *fcport, { int rval = QLA_SUCCESS; uint64_t zero = 0; + u8 current_login_state, last_login_state; + + if (fcport->fc4f_nvme) { + current_login_state = pd->current_login_state >> 4; + last_login_state = pd->last_login_state >> 4; + } else { + current_login_state = pd->current_login_state & 0xf; + last_login_state = pd->last_login_state & 0xf; + } /* Check for logged in state. */ - if (pd->current_login_state != PDS_PRLI_COMPLETE && - pd->last_login_state != PDS_PRLI_COMPLETE) { + if (current_login_state != PDS_PRLI_COMPLETE && + last_login_state != PDS_PRLI_COMPLETE) { ql_dbg(ql_dbg_mbx, vha, 0x119a, "Unable to verify login-state (%x/%x) for loop_id %x.\n", - pd->current_login_state, pd->last_login_state, - fcport->loop_id); + current_login_state, last_login_state, fcport->loop_id); rval = QLA_FUNCTION_FAILED; goto gpd_error_out; } @@ -5998,12 +6006,17 @@ int __qla24xx_parse_gpdb(struct scsi_qla_host *vha, fc_port_t *fcport, fcport->d_id.b.al_pa = pd->port_id[2]; fcport->d_id.b.rsvd_1 = 0; - /* If not target must be initiator or unknown type. */ - if ((pd->prli_svc_param_word_3[0] & BIT_4) == 0) - fcport->port_type = FCT_INITIATOR; - else - fcport->port_type = FCT_TARGET; - + if (fcport->fc4f_nvme) { + fcport->nvme_prli_service_param = + pd->prli_nvme_svc_param_word_3; + fcport->port_type = FCT_NVME; + } else { + /* If not target must be initiator or unknown type. */ + if ((pd->prli_svc_param_word_3[0] & BIT_4) == 0) + fcport->port_type = FCT_INITIATOR; + else + fcport->port_type = FCT_TARGET; + } /* Passback COS information. */ fcport->supported_classes = (pd->flags & PDF_CLASS_2) ? FC_COS_CLASS2 : FC_COS_CLASS3; diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c index 88e115fcea60..b2474952f858 100644 --- a/drivers/scsi/qla2xxx/qla_os.c +++ b/drivers/scsi/qla2xxx/qla_os.c @@ -4431,6 +4431,7 @@ struct scsi_qla_host *qla2x00_create_host(struct scsi_host_template *sht, INIT_LIST_HEAD(&vha->plogi_ack_list); INIT_LIST_HEAD(&vha->qp_list); INIT_LIST_HEAD(&vha->gnl.fcports); + INIT_LIST_HEAD(&vha->nvme_rport_list); spin_lock_init(&vha->work_lock); spin_lock_init(&vha->cmd_list_lock); @@ -4720,6 +4721,9 @@ qla2x00_do_work(struct scsi_qla_host *vha) qla24xx_async_gpdb(vha, e->u.fcport.fcport, e->u.fcport.opt); break; + case QLA_EVT_PRLI: + qla24xx_async_prli(vha, e->u.fcport.fcport); + break; case QLA_EVT_GPSC: qla24xx_async_gpsc(vha, e->u.fcport.fcport); break; diff --git a/drivers/scsi/qla2xxx/qla_target.c b/drivers/scsi/qla2xxx/qla_target.c index 8f75d27daae2..a2b310de429b 100644 --- a/drivers/scsi/qla2xxx/qla_target.c +++ b/drivers/scsi/qla2xxx/qla_target.c @@ -963,7 +963,6 @@ static void qlt_free_session_done(struct work_struct *work) sess->logout_on_delete, sess->keep_nport_handle, sess->send_els_logo); - if (!IS_SW_RESV_ADDR(sess->d_id)) { if (sess->send_els_logo) { qlt_port_logo_t logo; @@ -1118,6 +1117,9 @@ void qlt_unreg_sess(struct fc_port *sess) sess->last_rscn_gen = sess->rscn_gen; sess->last_login_gen = sess->login_gen; + if (sess->nvme_flag & NVME_FLAG_REGISTERED) + schedule_work(&sess->nvme_del_work); + INIT_WORK(&sess->free_work, qlt_free_session_done); schedule_work(&sess->free_work); }