From patchwork Sat Dec 24 04:23:37 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Madhani, Himanshu" X-Patchwork-Id: 9487883 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 1E7F0604DE for ; Sat, 24 Dec 2016 04:24:35 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 0CB9C2711E for ; Sat, 24 Dec 2016 04:24:35 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 01B38279E0; Sat, 24 Dec 2016 04:24:34 +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 B1DA527829 for ; Sat, 24 Dec 2016 04:24:33 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S941336AbcLXEYb (ORCPT ); Fri, 23 Dec 2016 23:24:31 -0500 Received: from mail-bl2nam02on0061.outbound.protection.outlook.com ([104.47.38.61]:28832 "EHLO NAM02-BL2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S932841AbcLXEYJ (ORCPT ); Fri, 23 Dec 2016 23:24:09 -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=+TicE9pm/yfq4yPmbe0eSt48hcrf4B4YHhRZPT/eDJ8=; b=SDpGJ8yu129uCKDvcMD3S5aUgFVSfS1lXZ8o5TA5hPhhwsBqsYarT3IZoM2VdxW1YEgolOdya5GfT0voQBtRB2tRtomzt5mpfstESKRjhMADRNR0E2LC6fBqt0X89SmWtUDB5YQMp6hPXtozjxZ/YdaKJyh/eZ50vxLasG1F1K0= Received: from BN6PR07CA0033.namprd07.prod.outlook.com (10.172.104.19) by CO1PR07MB207.namprd07.prod.outlook.com (10.242.167.148) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.789.14; Sat, 24 Dec 2016 04:24:01 +0000 Received: from BL2FFO11FD012.protection.gbl (2a01:111:f400:7c09::189) by BN6PR07CA0033.outlook.office365.com (2603:10b6:404:a3::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.803.11 via Frontend Transport; Sat, 24 Dec 2016 04:24:00 +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 BL2FFO11FD012.mail.protection.outlook.com (10.173.161.18) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P384) id 15.1.789.10 via Frontend Transport; Sat, 24 Dec 2016 04:24:00 +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; Fri, 23 Dec 2016 20:23:41 -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 uBO4NfCt004182; Fri, 23 Dec 2016 20:23:41 -0800 Received: (from root@localhost) by dut1171.mv.qlogic.com (8.14.7/8.14.7/Submit) id uBO4Nfow004181; Fri, 23 Dec 2016 20:23:41 -0800 From: Himanshu Madhani To: , , , CC: , , Subject: [PATCH 09/11] qla2xxx: Add Dual mode support in the driver Date: Fri, 23 Dec 2016 20:23:37 -0800 Message-ID: <1482553419-4117-10-git-send-email-himanshu.madhani@cavium.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1482553419-4117-1-git-send-email-himanshu.madhani@cavium.com> References: <1482553419-4117-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)(199003)(189002)(356003)(5001770100001)(107886002)(189998001)(5003940100001)(81166006)(305945005)(81156014)(36756003)(626004)(101416001)(8676002)(8936002)(47776003)(33646002)(4720700003)(50986999)(76176999)(105586002)(39060400001)(4001430100002)(50466002)(5660300001)(106466001)(2950100002)(80596001)(69596002)(50226002)(4326007)(6666003)(2201001)(92566002)(42186005)(38730400001)(2906002)(48376002)(575784001)(86362001)(87636001); DIR:OUT; SFP:1101; SCL:1; SRVR:CO1PR07MB207; 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; BL2FFO11FD012; 1:TI0uorvF5BUaSPSM6lbqej8qmjmKm3v36IIelJl4UkDYVa4cyXslrhVBPfCMlBVDWzDftv+nXD75GWkjo75L2/2vMqK0OyyX69NRXhc2Z7QgXwM6oYDaiGuWRB8xPASC8zazjqvewcECh5IHMFAsO34nNkdibFzXGTCBp2OmN1HYdpluaAIG4vNCoLY6FHA/fVVmrmtwrfwI/CGO7CkOEFLvuXb3HVhSfx3RdjJICppSYRrqgNeNoltOaL+ECnaIBmji/NxPlgrk8wnXN3OROgjEhDcLkx0L3AS9DseJUEcVRFRN6n33AV9SvTbFFJnvYPQcbfs1Q2sujl9J1TihjYSjcM2boLMLJVmmZrN9sQ+3owZtlJaa2LypcERe1T2gcwQI/fpTRHe5/Zl/+NVYJlrUMuQSvXTWPD3nOQF4C0LZUd5ZH6GTfseclnDWt+Xy2a+tQAdOVuXg1Ese4wVpPSZIxKr0YluXfacHTkk2BpAH6ItvrpYOuBI5TbMw2E0kMKtWeqULF72lEiRyna/RXq1/EU1shCrOdy5K35XZHGTWi2YNa4Csa7M3aMvUpk9Q X-MS-Office365-Filtering-Correlation-Id: c089811b-1579-4167-1518-08d42bb4af81 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001); SRVR:CO1PR07MB207; X-Microsoft-Exchange-Diagnostics: 1; CO1PR07MB207; 3:hdN8HhZM2i+oI/IA1G4CJtO7a4TkflIRdAEGawdrSzgsEYaYz5nYjg0t2cV/6WpxWhyaRiFey+kvMiSBK8gWBFc0LxrsFeuHajBtTsRFobYAwAn31liQyKmJFP1IvpOjBOWyBEa23IITOSKkDpQaLOtv5JEL+mRFBC6ZyRglDahDBTiB9JVpK2vsxrItRmhlri6NuFGhxrBq4SdcDw7kjH3ZXZgLcQJdPWZKFS/ZuIhK3gIx5PnSWSUtDKmgPQgEtwfulaK0pzifwmthDJOgPseiZb7ybuua1UlMuE0g9L4YxmRrlg18R1BSks2oTQP5LtXnGTynrwAJT4d2OcGmkh0hjHTf+T+PrGzF6IyqXq4= X-Microsoft-Exchange-Diagnostics: 1; CO1PR07MB207; 25:+TJ7DmIZdKu5Cm9uyxrGu3QHgIVCXqe/c84+hHPiKjXqS7JZeRON8QjfibWZFTEt4X4uY1XWXd2i2oBwaqrN8BYzkT1jOWdyNqzhJWSWP2tYOmiWbXKgf9Qd3t6e5Bk91B581DIFmnLA29t7P2o8X2lTrpaTDcPb1HA9jkqy9CcyODH2MujutRoN5xau4Io6rj8uuemET68LkllDaTRAnGujdyNpnR2nLIS6xuDh3kPkrVJ1Q3iS1hHvfLWt5KTHAxkNTenSeRz8bnxc5nTymHk7A50mSMBvhfn3gh9q6tk+v8HF8jetZ3navmfHoykFvfxgm7nZTlrdUXCrCGhOR395wI8KeDQBTtnHegG402hXnFZePm3qc4Y3Cjmf7481OHe8VaE8LfhYdCpWSYzWDphmQoaYCxo8eg3qjIT3/GMCwUXltTw3alhJK2z8O7CdeoY589RRXan+J5HGMEGJL0CqzNGvR7z6oJPDQW9/RWldvQ4msQ0PC4X4cIU0AdOoPceVkdd5NgOkWiUGn+tckXGzia3nl28c6+FPh5C4ZObgNuqVdu1h65wvF3XHZVDcIiASua/JAeqYOzpl/04qcBz1WDwY1fwODZxbNG2HTQ3yX5CEU0H9pieh1qvd+81eGRzSLq7bN0J4F9mEn1uigmolxjkOqP4GZxC9qrkFQIt2zA2WgbcpVJ2JXuyODjJ8zHPOAGpazM26NGpC4wdHFD95s/NdRbsj8BzsIU0s2G5ElPsR3sy0O76kdsXuT75Y1iP86C5wbwyv133CaKeXZ2UWVWk+ApSj9VCoscyQpF0rfEzfmWELcvtbkJYahrqSTEdb8omvM2HOEEUuLhy1SKwS36PEYI4H6vPoO9eUi64= X-Microsoft-Exchange-Diagnostics: 1; CO1PR07MB207; 31:ZxD+aVV+3xW8VzwIK5lsep9FJub1EcKZAvwL+VsA3qdXGv5zmpSGCLPPxzNnC6EnM0CSSIhLPh0nWxI4CWv5eLJ0tHh5aODdOMLG3JLSzaDa3VTzhgAWpNESvhZ/jUoA+PieqlrRU1OJaohYEQ10Y42CYDOQet8fZNQGgAdW007HXpCJf7KsD3phr7N/ZoW+qM/OaDHovYtm5FJcD2vptHH9xOVXi9bOLAzi8PXP/OqVejZzvxUqQPXdypAUGzej8tLUSFoiCVfxljkAwkIPaQ==; 20:2fiZQuc1i5cLaeJuLWGa4A6SJ/zY6/Yj8iBkQM0fFi4v22GmXqek0UTU6PnpJIV3Wf2P9wa9WMMHIBxUbTKGPEJuQDKs3CQ2b7KR1M4T7RZMRAjyS16t4K+DYPdWcg7sEorKwz2hjBz35wLYL4YUmnuRkoQ2CZNrgvTkXbSvWiw5XH+8XCX72aPIvVnwx2NnRyTfMLTLq0uNwDJsKrnm90bWteKqYXAk4VwkIH+d112zv9zIJQtG5VvllUm9ljQokAP3qLpuY6yQLaI/AR6k+KqIJzg6UKwJAyA8FmfVpnndZmn+Og/Cdb8t+KmZg9bawneupvWzHlSPggXR+nm9rc/dWgCHD0CEfQXd3JnVRR9aQU+D9C7cROV0tu3ZCkhfYOx0yH2xX2BROFk47NQWhhjAv7okWKnqgzG2dsUITHK3fn87kjIDTtPpoFZwB3z9+zIMEm9aoBIjvD5tb10mwUFGSJNE3WzYPW2dmNFrZgM5+FVBoS7n/q5JiBbtSgSh 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)(13015025)(13018025)(13023025)(13024025)(8121501046)(5005006)(3002001)(10201501046)(6041248)(20161123562025)(20161123560025)(20161123564025)(20161123555025)(6072148); SRVR:CO1PR07MB207; BCL:0; PCL:0; RULEID:; SRVR:CO1PR07MB207; X-Microsoft-Exchange-Diagnostics: 1; CO1PR07MB207; 4:Rl4UyjT7A67lTKr8UoxThiISbFvyHRZHE557f5u27LrtrhyttWqsyiAbBLfsXhZcFCpNiZZK7UQXPdvdnPBZl9FpYwy3cz5vGoZXmUWLuf3Ns77awj1VvGMaiKw8ujHaObiGrv0jJ+iOBwECfxSaTUfag6MFpOgXT3BXfXtZZnIZds/eWL8Wg6jK7OER8IuhAKYuFTprF0oRzt8J2+B2hF2rJHEBKCvk5RANoncDomBi6W12jnopVrID7CB1vRX+hBx0mmezLw9taKCT+1dOYYA3raxXqQwPkKhlV/FTXwe+9xKY4e/qMN0nNmbR03ciI1bvEshmfwKSwpG9JqbJFmhkKTb9R4IU46WZ5Lh1EMrO99qL7yiQXYqAxvVBWifa1TTcTY0nPEjUbeldWFZXHgcjzp1WRc4RvVCdJVIeZduMyBi5ozqNuB3hqFOO8kWsYbcy+NREeOrxw3imVbqKFouv0ft27Z6mAyrVVcWmEOpyejQrw2hIrBTyz3QfVnilQebukmR5q0WQi/P+kStxPf3gZzZgAy1Lng5o8//iu17rw3+DuOi5ae0OrIZz+Fils1IfAsV3IO/GhLwIa9E2d7OlqeXu2IYxWHAdWgtKbElKlxKJ8hLQ2+cOubMQNivVWGn5ewjETl4BWMYk6VPZ82kPAN6OWo1Fey/shb2WShs= X-Forefront-PRVS: 0166B75B74 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; CO1PR07MB207; 23:jcjTxY+22FQtdxvLi+trmLrjZLgm71xUEhY3ZOsPTc?= =?us-ascii?Q?e/W4uyfBKKrksQaUQRzhhglwbbKXTDcvqp0vM0kN8zro//CR43KZjn5gJEMq?= =?us-ascii?Q?/1rBpswoYkkPjM3QREOGucgb6DGc9/l0rw9hMX3bI2uGwEkPvhYcHMgnNuV/?= =?us-ascii?Q?Pn8u9g6ymCQnOl3MWH6GW6aEZBK5Ifwg/UlxM3jHzbppqdiTFezzjRpb8wGm?= =?us-ascii?Q?Mes0XBhgD5xaf2xSKcu+X+LXf2cWKYjiSyB3XR8nEGAdZXSssCWaz9+cqQTD?= =?us-ascii?Q?T55/iESvFKUGrfQEl3SJZTh8Xzj044QoOYXZ9p/UJULCdXHRZlXr4ybb4lao?= =?us-ascii?Q?yf95WwvQDXbHCKGJbOA2c8C0A/Zs40FgbOoNOJJyaL70Kn2ZtkIUeTiyvF30?= =?us-ascii?Q?QdSMD8dsTwjSWNo01DTxbLLDvia8vTaRI1wDSw+XrH6fjBV8ODODZ3JpQzWK?= =?us-ascii?Q?UeUDCVpEVHzYzU2m/CWOyhWQvEKsRW5Dr/PWi4G7q5jee2c9GO+Lqz/+YYMe?= =?us-ascii?Q?pgwUAg89KxNT98SmdPG6djHG9wYWzkr90Tx6CIqZEGkh1LSeB092gYYaM7UM?= =?us-ascii?Q?vvaOhcMobhwUeBtDHjzYW1arAcKjQXntHvRMRtVnRfO5D/yXiM0u0fDkCPJM?= =?us-ascii?Q?+zfBRV1DQAax7cGdm92pfseu2L/Clqwz8uL0Tpda6LAAYOH1ri8SsetceVNh?= =?us-ascii?Q?G59isIUzoqvebJc5J25Zpt1qIfbEHwRKBe6uorn3psa7Uvr1APltF6I1T41c?= =?us-ascii?Q?7kP2zVeyjF+zdboBVqYQLyt/QpczeFLHkT17iTYVWlOwW1eWKtXmIqhyat/g?= =?us-ascii?Q?NIsbh9mmJufUdpzFS9jHwC1bV54xaJr9q/knETQFYNPQt9y1b92jCxxCprko?= =?us-ascii?Q?ZYIAipfbbfaaaKJViCBP6OETTzc6KpIUgCROGYAbxoElWoNH56YZi8Uq0p+T?= =?us-ascii?Q?QTh/1TqsbrXF9S8FSFnblPYOhQiU9csw1xQswu+Yjan2JlQKzy61v25hkPiV?= =?us-ascii?Q?RjQrBwJqbHvZnLDZqizSXEQPqfhEwyTexdWjGijnpFotbZXdrn+Y1T7byYwV?= =?us-ascii?Q?ApTlwDG8/k4Guqh9njqYBpLCRBCXndXUwCgEtRk928aU5YgrLOWoQEq8O9xL?= =?us-ascii?Q?Wjfcjyt1rmlvWbyJwAzaIxbE2ouKqd?= X-Microsoft-Exchange-Diagnostics: 1; CO1PR07MB207; 6:ROLugg7yaEHTRG1UdWCjK50yMnMuDywPIZlcMTDjrhbdaTefjYD8c5iENcEb+MK3fXWq8igsaPmKK93945N+iSGi65tHdzc82FgWuVFy/qM4cLFpDbPCk++T2ANMYCI9Bv/oB+JaRmdbXUpRF6u41KRP/L0BBlo7nZU8oShdPuQUAkCE3xbfpYiHqRUtwxelwDJU1i7zkS9caBDGZx7mu/kIhsUO+vhWRuyrPRq95iLgB7OloRHLrWY6gkqVQt09jFtDOQhdJmIF/uggrnjFoPPdC5atyR2wgJUJxpwwnR2GpcEZe+7qjOyuQiIP+XPqckYW2GJiO9bCUFp3h+DMSa6ajCERXYV0UjE9ow5X9HwyYkzbKTH8NHwMPAwMWfWQ3SFvMXrBsXXw0XAbab6DcUhmZ81QmRoHNwZIBjt7TxQ=; 5:RFisRRVIWVK1R+Cv22/0nYEObYlwGt3NDl+dkrFcntnc4eJCj6PB8Ws6zEPyN9BMY44Lz6iZZhjSZIYWkGBCMQDs/XKQUyiteKvoCF3K2T7sXfl24QQkN5RDn7+4Yk3aYy17KLGIaKKguvC8hPQHUA==; 24:TiUvdtYZzUaDRUuU101IzWwnnmx3Q6cOHOIwx2aPXgDpN+pzURtZHecjjxnJ/zZTxDBCGyzbzEgR4dWZQem6bv16zxu6eBzDLrdRA19DBQg= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; CO1PR07MB207; 7:kMIv//TJXaWjgTPgk13+Y/SO20X7xMT5sb8A5qqyzcrn/sjOEnELt31KaujJNR/0+2vAjTxvv4eLJw6wZ+O0anHPdjO6dShm8jsxm/jltpx1HZzLYJgeaAHlG3qENrXRTW1P+ZwFIPmyDtGiQkLOjd2FgldCcOLX4m0jRfbSaC41jow0jrTHuhOxPRCvmN9jEMXlr5H4uE0T4ZJqIsYuDGhrqV4wYBEk9K3apW3Rxy/fErD1hK4HakyS8eQrXhBtbdZegNhtQW6tJymQkXikRgKV9fkSc9xk9SJSSAFPl+ZIe3IjfPVo9p946gdBsnB6sWDgRpvOl5qriso22DdF+RGbNJXNfU949WMzQ/RqKmhgbkygy+wHO/3zHWwMo9B7iFDPxvjGwZdHsxfgkpwUzVoyJjlpJva9ttIcDZci77ujgCBB3FiHqq6h9buB4nb0EtmY5tsQ4U8ARPfsfohB1Q== X-OriginatorOrg: cavium.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Dec 2016 04:24:00.1074 (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: CO1PR07MB207 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: Quinn Tran Add switch to allow both Initiator Mode & Target mode to operate at the same time. Signed-off-by: Quinn Tran Signed-off-by: Himanshu Madhani --- drivers/scsi/qla2xxx/qla_def.h | 1 + drivers/scsi/qla2xxx/qla_init.c | 3 +- drivers/scsi/qla2xxx/qla_isr.c | 19 ++++++- drivers/scsi/qla2xxx/qla_target.c | 113 +++++++++++++++++++++++++++++++------ drivers/scsi/qla2xxx/qla_target.h | 6 +- drivers/scsi/qla2xxx/tcm_qla2xxx.c | 2 +- 6 files changed, 124 insertions(+), 20 deletions(-) diff --git a/drivers/scsi/qla2xxx/qla_def.h b/drivers/scsi/qla2xxx/qla_def.h index 2d3bc22..ce3b946 100644 --- a/drivers/scsi/qla2xxx/qla_def.h +++ b/drivers/scsi/qla2xxx/qla_def.h @@ -3312,6 +3312,7 @@ struct qla_hw_data { #define FLOGI_SP_SUPPORT BIT_13 uint8_t port_no; /* Physical port of adapter */ + uint8_t exch_starvation; /* Timeout timers. */ uint8_t loop_down_abort_time; /* port down timer */ diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c index e0ca193..9da537c 100644 --- a/drivers/scsi/qla2xxx/qla_init.c +++ b/drivers/scsi/qla2xxx/qla_init.c @@ -3997,7 +3997,8 @@ static void qla2xxx_nvram_wwn_from_ofw(scsi_qla_host_t *vha, nvram_t *nv) * Process any ATIO queue entries that came in * while we weren't online. */ - if (qla_tgt_mode_enabled(vha)) { + if (qla_tgt_mode_enabled(vha) || + qla_dual_mode_enabled(vha)) { if (IS_QLA27XX(ha) || IS_QLA83XX(ha)) { spin_lock_irqsave(&ha->tgt.atio_lock, flags); diff --git a/drivers/scsi/qla2xxx/qla_isr.c b/drivers/scsi/qla2xxx/qla_isr.c index 36cc19f..2d47728 100644 --- a/drivers/scsi/qla2xxx/qla_isr.c +++ b/drivers/scsi/qla2xxx/qla_isr.c @@ -1028,7 +1028,8 @@ static void qla_irq_affinity_notify(struct irq_affinity_notify *, qla2x00_mark_all_devices_lost(vha, 1); - if (vha->vp_idx == 0 && !qla_ini_mode_enabled(vha)) + if (vha->vp_idx == 0 && + (qla_tgt_mode_enabled(vha) || qla_dual_mode_enabled(vha))) set_bit(SCR_PENDING, &vha->dpc_flags); set_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags); @@ -1643,6 +1644,7 @@ static void qla_irq_affinity_notify(struct irq_affinity_notify *, fcport->d_id.b.area, fcport->d_id.b.al_pa, le32_to_cpu(logio->io_parameter[0])); + vha->hw->exch_starvation = 0; data[0] = MBS_COMMAND_COMPLETE; if (sp->type != SRB_LOGIN_CMD) goto logio_done; @@ -1678,6 +1680,21 @@ static void qla_irq_affinity_notify(struct irq_affinity_notify *, case LSC_SCODE_NPORT_USED: data[0] = MBS_LOOP_ID_USED; break; + case LSC_SCODE_NOXCB: + vha->hw->exch_starvation++; + if (vha->hw->exch_starvation > 5) { + ql_log(ql_log_warn, vha, 0xffff, + "Exchange starvation. Reseting RISC\n"); + + vha->hw->exch_starvation = 0; + + if (IS_P3P_TYPE(vha->hw)) + set_bit(FCOE_CTX_RESET_NEEDED, &vha->dpc_flags); + else + set_bit(ISP_ABORT_NEEDED, &vha->dpc_flags); + qla2xxx_wake_dpc(vha); + } + /* drop through */ default: data[0] = MBS_COMMAND_ERROR; break; diff --git a/drivers/scsi/qla2xxx/qla_target.c b/drivers/scsi/qla2xxx/qla_target.c index b697ba5..0fc6da5 100644 --- a/drivers/scsi/qla2xxx/qla_target.c +++ b/drivers/scsi/qla2xxx/qla_target.c @@ -55,8 +55,17 @@ "disabled on enabling target mode and then on disabling target mode " "enabled back; " "\"disabled\" - initiator mode will never be enabled; " + "\"dual\" - Initiator Modes will be enabled. Target Mode can be activated " + "when ready " "\"enabled\" (default) - initiator mode will always stay enabled."); +static int ql_dm_tgt_ex_pct = 50; +module_param(ql_dm_tgt_ex_pct, int, S_IRUGO|S_IWUSR); +MODULE_PARM_DESC(ql_dm_tgt_ex_pct, + "For Dual Mode (qlini_mode=dual), this parameter determines " + "the percentage of exchanges/cmds FW will allocate resources " + "for Target mode."); + int ql2x_ini_mode = QLA2XXX_INI_MODE_EXCLUSIVE; static int temp_sam_status = SAM_STAT_BUSY; @@ -1302,7 +1311,8 @@ int qlt_stop_phase1(struct qla_tgt *tgt) wait_event(tgt->waitQ, test_tgt_sess_count(tgt)); /* Big hammer */ - if (!ha->flags.host_shutting_down && qla_tgt_mode_enabled(vha)) + if (!ha->flags.host_shutting_down && + (qla_tgt_mode_enabled(vha) || qla_dual_mode_enabled(vha))) qlt_disable_vha(vha); /* Wait for sessions to clear out (just in case) */ @@ -5270,6 +5280,35 @@ void qlt_async_event(uint16_t code, struct scsi_qla_host *vha, le16_to_cpu(mailbox[2]), le16_to_cpu(mailbox[3])); break; + case MBA_REJECTED_FCP_CMD: + ql_dbg(ql_dbg_tgt_mgt, vha, 0xffff, + "qla_target(%d): Async event LS_REJECT occurred " + "(m[0]=%x, m[1]=%x, m[2]=%x, m[3]=%x)", vha->vp_idx, + le16_to_cpu(mailbox[0]), le16_to_cpu(mailbox[1]), + le16_to_cpu(mailbox[2]), le16_to_cpu(mailbox[3])); + + if (le16_to_cpu(mailbox[3]) == 1) { + /* exchange starvation. */ + vha->hw->exch_starvation++; + if (vha->hw->exch_starvation > 5) { + ql_log(ql_log_warn, vha, 0xffff, + "Exchange starvation-. Reseting RISC\n"); + + vha->hw->exch_starvation = 0; + + if (IS_P3P_TYPE(vha->hw)) + set_bit(FCOE_CTX_RESET_NEEDED, + &vha->dpc_flags); + else + set_bit(ISP_ABORT_NEEDED, + &vha->dpc_flags); + + qla2xxx_wake_dpc(vha); + } + } + + break; + case MBA_PORT_UPDATE: ql_dbg(ql_dbg_tgt_mgt, vha, 0xf03d, "qla_target(%d): Port update async event %#x " @@ -5279,10 +5318,11 @@ void qlt_async_event(uint16_t code, struct scsi_qla_host *vha, le16_to_cpu(mailbox[2]), le16_to_cpu(mailbox[3])); login_code = le16_to_cpu(mailbox[2]); - if (login_code == 0x4) + if (login_code == 0x4) { ql_dbg(ql_dbg_tgt_mgt, vha, 0xf03e, "Async MB 2: Got PLOGI Complete\n"); - else if (login_code == 0x7) + vha->hw->exch_starvation = 0; + } else if (login_code == 0x7) ql_dbg(ql_dbg_tgt_mgt, vha, 0xf03f, "Async MB 2: Port Logged Out\n"); break; @@ -5833,7 +5873,10 @@ static void qlt_set_mode(struct scsi_qla_host *vha) vha->host->active_mode = MODE_TARGET; break; case QLA2XXX_INI_MODE_ENABLED: - vha->host->active_mode |= MODE_TARGET; + vha->host->active_mode = MODE_UNKNOWN; + break; + case QLA2XXX_INI_MODE_DUAL: + vha->host->active_mode = MODE_DUAL; break; default: break; @@ -5856,8 +5899,8 @@ static void qlt_clear_mode(struct scsi_qla_host *vha) vha->host->active_mode = MODE_INITIATOR; break; case QLA2XXX_INI_MODE_ENABLED: - vha->host->active_mode &= ~MODE_TARGET; - vha->host->active_mode |= MODE_INITIATOR; + case QLA2XXX_INI_MODE_DUAL: + vha->host->active_mode = MODE_INITIATOR; break; default: break; @@ -5952,9 +5995,6 @@ static void qlt_disable_vha(struct scsi_qla_host *vha) void qlt_vport_create(struct scsi_qla_host *vha, struct qla_hw_data *ha) { - if (!qla_tgt_mode_enabled(vha)) - return; - vha->vha_tgt.qla_tgt = NULL; mutex_init(&vha->vha_tgt.tgt_mutex); @@ -6004,7 +6044,7 @@ static void qlt_disable_vha(struct scsi_qla_host *vha) uint16_t cnt; struct atio_from_isp *pkt = (struct atio_from_isp *)ha->tgt.atio_ring; - if (!qla_tgt_mode_enabled(vha)) + if (qla_ini_mode_enabled(vha)) return; for (cnt = 0; cnt < ha->tgt.atio_q_length; cnt++) { @@ -6097,8 +6137,11 @@ static void qlt_disable_vha(struct scsi_qla_host *vha) qlt_24xx_config_nvram_stage1(struct scsi_qla_host *vha, struct nvram_24xx *nv) { struct qla_hw_data *ha = vha->hw; + u32 tmp; + u16 t; - if (qla_tgt_mode_enabled(vha)) { + if (qla_tgt_mode_enabled(vha) || + qla_dual_mode_enabled(vha)) { if (!ha->tgt.saved_set) { /* We save only once */ ha->tgt.saved_exchange_count = nv->exchange_count; @@ -6111,7 +6154,24 @@ static void qlt_disable_vha(struct scsi_qla_host *vha) ha->tgt.saved_set = 1; } - nv->exchange_count = cpu_to_le16(0xFFFF); + if (qla_tgt_mode_enabled(vha)) { + nv->exchange_count = cpu_to_le16(0xFFFF); + } else { /* dual */ + if (ql_dm_tgt_ex_pct > 100) { + ql_dm_tgt_ex_pct = 50; + } else if (ql_dm_tgt_ex_pct == 100) { + /* leave some for FW */ + ql_dm_tgt_ex_pct = 95; + } + + tmp = ha->orig_fw_xcb_count * ql_dm_tgt_ex_pct; + tmp = tmp/100; + if (tmp > 0xffff) + tmp = 0xffff; + + t = tmp & 0xffff; + nv->exchange_count = cpu_to_le16(t); + } /* Enable target mode */ nv->firmware_options_1 |= cpu_to_le32(BIT_4); @@ -6196,11 +6256,13 @@ static void qlt_disable_vha(struct scsi_qla_host *vha) qlt_81xx_config_nvram_stage1(struct scsi_qla_host *vha, struct nvram_81xx *nv) { struct qla_hw_data *ha = vha->hw; + u32 tmp; + u16 t; if (!QLA_TGT_MODE_ENABLED()) return; - if (qla_tgt_mode_enabled(vha)) { + if (qla_tgt_mode_enabled(vha) || qla_dual_mode_enabled(vha)) { if (!ha->tgt.saved_set) { /* We save only once */ ha->tgt.saved_exchange_count = nv->exchange_count; @@ -6213,7 +6275,23 @@ static void qlt_disable_vha(struct scsi_qla_host *vha) ha->tgt.saved_set = 1; } - nv->exchange_count = cpu_to_le16(0xFFFF); + if (qla_tgt_mode_enabled(vha)) { + nv->exchange_count = cpu_to_le16(0xFFFF); + } else { /* dual */ + if (ql_dm_tgt_ex_pct > 100) { + ql_dm_tgt_ex_pct = 50; + } else if (ql_dm_tgt_ex_pct == 100) { + /* leave some for FW */ + ql_dm_tgt_ex_pct = 95; + } + + tmp = ha->orig_fw_xcb_count * ql_dm_tgt_ex_pct; + tmp = tmp/100; + if (tmp > 0xffff) + tmp = 0xffff; + t = tmp & 0xffff; + nv->exchange_count = cpu_to_le16(t); + } /* Enable target mode */ nv->firmware_options_1 |= cpu_to_le32(BIT_4); @@ -6323,10 +6401,11 @@ static void qlt_disable_vha(struct scsi_qla_host *vha) qlt_modify_vp_config(struct scsi_qla_host *vha, struct vp_config_entry_24xx *vpmod) { - if (qla_tgt_mode_enabled(vha)) + /* enable target mode. Bit5 = 1 => disable */ + if (qla_tgt_mode_enabled(vha) || qla_dual_mode_enabled(vha)) vpmod->options_idx1 &= ~BIT_5; - /* Disable ini mode, if requested. */ + /* Disable ini mode, if requested. bit4 = 1 => disable */ if (qla_tgt_mode_enabled(vha)) vpmod->options_idx1 &= ~BIT_4; } @@ -6481,6 +6560,8 @@ static int __init qlt_parse_ini_mode(void) ql2x_ini_mode = QLA2XXX_INI_MODE_DISABLED; else if (strcasecmp(qlini_mode, QLA2XXX_INI_MODE_STR_ENABLED) == 0) ql2x_ini_mode = QLA2XXX_INI_MODE_ENABLED; + else if (strcasecmp(qlini_mode, QLA2XXX_INI_MODE_STR_DUAL) == 0) + ql2x_ini_mode = QLA2XXX_INI_MODE_DUAL; else return false; diff --git a/drivers/scsi/qla2xxx/qla_target.h b/drivers/scsi/qla2xxx/qla_target.h index 42719ca..5ebd7fb 100644 --- a/drivers/scsi/qla2xxx/qla_target.h +++ b/drivers/scsi/qla2xxx/qla_target.h @@ -45,10 +45,12 @@ #define QLA2XXX_INI_MODE_STR_EXCLUSIVE "exclusive" #define QLA2XXX_INI_MODE_STR_DISABLED "disabled" #define QLA2XXX_INI_MODE_STR_ENABLED "enabled" +#define QLA2XXX_INI_MODE_STR_DUAL "dual" #define QLA2XXX_INI_MODE_EXCLUSIVE 0 #define QLA2XXX_INI_MODE_DISABLED 1 #define QLA2XXX_INI_MODE_ENABLED 2 +#define QLA2XXX_INI_MODE_DUAL 3 #define QLA2XXX_COMMAND_COUNT_INIT 250 #define QLA2XXX_IMMED_NOTIFY_COUNT_INIT 250 @@ -1051,7 +1053,9 @@ extern int qlt_lport_register(void *, u64, u64, u64, * This macro is used during early initializations when host->active_mode * is not set. Right now, ha value is ignored. */ -#define QLA_TGT_MODE_ENABLED() (ql2x_ini_mode != QLA2XXX_INI_MODE_ENABLED) +#define QLA_TGT_MODE_ENABLED() \ + ((ql2x_ini_mode != QLA2XXX_INI_MODE_ENABLED) || \ + (ql2x_ini_mode == QLA2XXX_INI_MODE_DUAL)) extern int ql2x_ini_mode; static inline bool qla_tgt_mode_enabled(struct scsi_qla_host *ha) diff --git a/drivers/scsi/qla2xxx/tcm_qla2xxx.c b/drivers/scsi/qla2xxx/tcm_qla2xxx.c index d40f418..8880f13 100644 --- a/drivers/scsi/qla2xxx/tcm_qla2xxx.c +++ b/drivers/scsi/qla2xxx/tcm_qla2xxx.c @@ -1744,7 +1744,7 @@ static int tcm_qla2xxx_lport_register_npiv_cb(struct scsi_qla_host *base_vha, (struct tcm_qla2xxx_lport *)base_vha->vha_tgt.target_lport_ptr; struct fc_vport_identifiers vport_id; - if (!qla_tgt_mode_enabled(base_vha)) { + if (qla_ini_mode_enabled(base_vha)) { pr_err("qla2xxx base_vha not enabled for target mode\n"); return -EPERM; }