From patchwork Tue Dec 6 20:30:41 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Madhani, Himanshu" X-Patchwork-Id: 9463235 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 0F19F60236 for ; Tue, 6 Dec 2016 20:31:36 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 00084284CD for ; Tue, 6 Dec 2016 20:31:35 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id E924F284DE; Tue, 6 Dec 2016 20:31:35 +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 0DD8D284CD for ; Tue, 6 Dec 2016 20:31:35 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752554AbcLFUbc (ORCPT ); Tue, 6 Dec 2016 15:31:32 -0500 Received: from mail-dm3nam03on0054.outbound.protection.outlook.com ([104.47.41.54]:49890 "EHLO NAM03-DM3-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752316AbcLFUbU (ORCPT ); Tue, 6 Dec 2016 15:31:20 -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=Cd1bLvmsFxuqg9CTAKV1n2+ILBptZC2B8qIyH9nN8nw=; b=B61MH0KYgS0Ljfg7b+jkSHrxKzXdDcoyQje4zf/oYSgfS4JczPISvlNX3VBVDC4HgzZZo5qqQu4X/+t/RCcTb0ktD53QWH5gUP1vcksQdG9jR1ZZ5NS96dj+HKGnzsVstkissJb6gKDRuKuOexmMTvqhJqiPO+MH1h+XiHA/3nE= Received: from SN1PR0701CA0039.namprd07.prod.outlook.com (10.162.96.49) by SN1PR0701MB2094.namprd07.prod.outlook.com (10.163.132.29) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.761.9; Tue, 6 Dec 2016 20:31:17 +0000 Received: from BN1BFFO11FD018.protection.gbl (2a01:111:f400:7c10::1:107) by SN1PR0701CA0039.outlook.office365.com (2a01:111:e400:5173::49) 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 20:31:17 +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 BN1BFFO11FD018.mail.protection.outlook.com (10.58.144.81) 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 20:31:16 +0000 X-IncomingTopHeaderMarker: OriginalChecksum:; UpperCasedChecksum:; SizeAsReceived:1147; 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 12:30:54 -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 uB6KUsuX002387; Tue, 6 Dec 2016 12:30:54 -0800 Received: (from root@localhost) by dut1171.mv.qlogic.com (8.14.7/8.14.7/Submit) id uB6KUsp8002386; Tue, 6 Dec 2016 12:30:54 -0800 From: Himanshu Madhani To: , CC: , , Subject: [PATCH 12/22] qla2xxx: Add Dual mode support in the driver Date: Tue, 6 Dec 2016 12:30:41 -0800 Message-ID: <1481056251-2310-13-git-send-email-himanshu.madhani@cavium.com> X-Mailer: git-send-email 1.8.3.1 In-Reply-To: <1481056251-2310-1-git-send-email-himanshu.madhani@cavium.com> References: <1481056251-2310-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)(33646002)(76176999)(4720700003)(575784001)(2950100002)(105586002)(36756003)(42186005)(8676002)(4326007)(86362001)(5660300001)(189998001)(107886002)(101416001)(6666003)(305945005)(626004)(2906002)(106466001)(39850400001)(92566002)(50226002)(80596001)(50466002)(4001430100002)(38730400001)(39450400002)(48376002)(5003940100001)(47776003)(50986999)(39410400001)(8936002)(81166006)(7846002)(39840400001)(5001770100001)(69596002)(356003)(81156014)(87636001); DIR:OUT; SFP:1101; SCL:1; SRVR:SN1PR0701MB2094; 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; BN1BFFO11FD018; 1:zzLaT2h0CjnCiRG78+1DhlFeUO95e0JuASgbbB3d5eBBUSuxwHSpEAaPGx1smSREuIjEWtTQnWDge6tSOCQpIXZC4dYIi2vewpD1oAemG1dG+BuQb0ZbW44QrBgjLMOV4W74bOKKJsYKSvOVRIGNvT4nFbrKzlla3FV/ds7zNBtwzcuZTmy8aWA+JEiBai+OKe/PjnAVdnl9Z4j7sVDkHMA70mwL/bWZ0ATVZou5V1iezztIGMd9ulcnvLMCeDIow78Jj0oU4+VBR7fBI2gLURT8EsIceq33+vvVdSSwGqHk6Lsdux1L6Zq+m/qqvsh9/v3Qyxt0K7qNwQVuzSEiL4qoXiL+AXM0dCjfg3gnR8DrG4VmFtrVV7c6bZgvLTvz0u5c7ztFAOsqMCq9lvYTwq3k8+8Bien70cnRkXTrN+ZU9cVBrcVDaARLO+2mEOcvCIwh0Zz9B+4UdTjOa9/wFTlqoGSqmiBk2ZQdkGYgyi3XH91dd8GgDdRFKbPAnYWAYVXGJnOKa5GuEUleU0JHFA== X-MS-Office365-Filtering-Correlation-Id: 35b196a5-cd88-4d78-1ba1-08d41e16d4b1 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001); SRVR:SN1PR0701MB2094; X-Microsoft-Exchange-Diagnostics: 1; SN1PR0701MB2094; 3:EkHInUn3s0rfpbpt0dApa5LuRwhnihzG+4yOxTeTvh8NfvyEjrEXxGn6llYvDHZ27u4W8uQyjqPZAzZlsW/roOKoB9GilypYMkCW3Fzge97remxW9UW3yOVTdSE8ZQ5RSyqUIxgWL7xUfksU/VDnFiei+1taSMiMpJLPWGxetMj4yA+YN8qER/QgPAvdjtwiEyi1zloI6WgXl1w79tp/MtYgK23nG9CTe3UvYLk+4xt/pUuxB84YP5PwCaAfphuF7mQZuuNMRIMJrW3NrZA7e/fU15LA24INOApDzzsWQFR5T+hBJ8BZC+7Xbgr8iH5YdZ3pLkHPFaKdsdicyQKHsHadPOCBm0xbh+1NZc081II= X-Microsoft-Exchange-Diagnostics: 1; SN1PR0701MB2094; 25:+3OwbP42s4cB9ML37du+hf3y7Xj20yHKHkfBb0mhOnc0N8F+pJhYLNzuUuEa7cuB0Nnyu8r29dBLNCf9QBjT8Eghp+dAvX6Xdwvalpt5nMFdhHwMqhb6fHdulvObbgR0nHSbNM9zcrMm6ywtBkrXVCD/zyJbVVUR8ZiX4jH0Ndn9tigz0uQ0QFUgPDHfs1JRNa7MeKqkXRar48KG1OcsmQm9TtuArhgAlAwfFODruCGR4r0KroIFOefD8ld4U6kp6zHfeag/INlL77jBwpDxC1GiMw2bcZv0v/ZFGyQxlWgUwNOW0EkHJLIgh+XdPZoaO3NFm45IUeRAJL1lEiZi9bn7dhDuf/OmJhtAFTwmNC2i48q0/l9dDiR+0dm5yRvP870Ut2YRfh6BwYyDDu3MbIcWCp2dzJwb8NzsrHtJAyCQX603Y5k+biWR5LhOVf79zr1eEim7k4kovVHM2dLj9rtrQAxTkt/xWrUyFBEHCGUEcOVcyAjiTFVZlCqdNyxNof9PCf8/Dzbg6Yl8svuqVzi9x9o7J02xf6QIvziaJjYRNxMsgwpyP95utfo/f+WceLlVLITnsPKZbWYaNQsmzIpjoDhYG6iJqVqN/xhHbUcRVL8qW/PWmk8Pov8uahrA8/AFtdT+lTiTNy/W8fUqJmGrgN/gNw02EQ1WGLB3sewqGzCubNmqCayssOf74/1L+qs/PIQsDS4bv5Yh2CDrpfCsV8zBroJUeon2csA6s7DjwTrQTyv6Yq6qPTG2ifoKWYZCKmJ+JiX8QZPMT6KLzxDsLBm30qK3EJgy2kUX0Pu2rq+qfrIJ/MQb/0N34Yvk2+2iAo0c3WH3SUqkHtkNqlvt7nf8LY+OYPJqSNfdCcE= X-Microsoft-Exchange-Diagnostics: 1; SN1PR0701MB2094; 31:j4pqxez+Gd4L/LDGQPVfKGuQmrX7Xi08dEH8MF9BFPg88DTAnOLcoOZ1BFFq7aOH30qJzPGpPHEBAuBXgzx/doxcXwoivJns3O79IPDHXefpnxnHaPV0r91WGveT6CYymd68pFf+0ZHemYQ5oDrv2HqQOOCZ22AItzi9Hyv9flTu9Uv/0PAKYZ/wxIh8yzH+ib0lpyW8CLD7jZBW/xe/u/LbAfgVn2p/rnY4DjJTEkWXsd3KCuMiAe0nses495adynI+mf1u7ofQvI9yvSsjxyF3U0sU1FxDdBB2twM/Vio=; 20:wNZFTk2QFlvYMLXxIpGaJ4A6Db1tlg+ddvcrYmWYJ4D+tw/Q9eY2nYm0XYa0md4dXTrnz5zWC6iUU9iCdAfhZTzSvvjbylEChHI3nkgFW9QxHi6mJDFkgl1whPY8MFVSguNFcBn0QgAB8tF1isEdHlhhGFiRxuXAYXdCWmU4ojdy5q9W+DP7eBN8fHqR+QYmajBnzRy3YMb7dgJake82rL1yOHr8nLbBCy1zVQriUFUT3Hxd7v8N92unPZCJl/KpNw02aW95d3jhD4JDzYpfSWt8i0ndto/i00ZzVwQcUdTq1aV7SrPkSvBqweDA0SeZHByiPCJVo2W2oTr7Zj8UMwsW69pPoHjZTxAd2vSf7namSuNenYn0b9TGNxgXGldUdrQzUtFuEgPPwWih04U6D6+OlxZndF7WOGpJ4Dj3M/SluTkup4yRIBij2WOKGW2kNvtA+Z4g8ChLIaHlCJgcQ6mwRsQMTHzpMk0C9utGv/PFuMSpa4E4vdD77H6xoZv2 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)(8121501046)(5005006)(13018025)(13023025)(13015025)(13024025)(10201501046)(3002001)(6041248)(20161123555025)(20161123560025)(20161123564025)(20161123562025)(6072148); SRVR:SN1PR0701MB2094; BCL:0; PCL:0; RULEID:; SRVR:SN1PR0701MB2094; X-Microsoft-Exchange-Diagnostics: 1; SN1PR0701MB2094; 4:kN14mG9DX15d0dQqmng9bOIaWxxsedNkjMkdQ6JTLhS2qdlTtN3EqZncceJ7oZKR1Il46KIUQ9nwNTANOX0fn2IfroV9Kijxz/TXdpROUOZ/e807TTwBgTVhQrRHPCTPxlfTPnglaD+pg/31TpZkFoJS3TzklkRRWN6euXz8z37hz4KAJko3F6dT86o20OfE/dncJwH2Br2MITLS3IXD/kr889v1ya/JF5odsKaHtErSo/aLwefx9mbXMPNYFl2TswieTU6hd79s37qwAIan9H3X4GoOABgmdVKTgtTqQhYW7hp6HR5z7XJt+WT7mPD/QVzDQ9WBpR4KZXBpAQxnnutbCKWl1M4CA74roFkoxuj9z+rxqsRtmvqUDqRpjw8xyrEU+mt3/ppe0GLhEWyL8vfMtUGKfZuzmbvgDDDzGIDJ9Fn3CF08AcXazFZwahnIgXnau2cy/8LYZ7EuF1jXIHufBhOaNg0ysgeoS8ktMO44kDGleCPNU8RDtT0CfmKKQzmAyaorC2/idSkyRK2kfIsYdGWf9gRgcoou/DlSxiKf0ZVWhZsTcdDJhtxFhgc7x6gWV4sKGmb6p9z/SQeTwv9AusbnITqAGIa67p9aK2oikgKhHH2lXw3bLHWa9atA4hlbDNVsZB4xcfw7q0fo0W8752gTUSqWfMgx4Mtuqqo= X-Forefront-PRVS: 01480965DA X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; SN1PR0701MB2094; 23:kM96a0NgBk5TdlPmAOJDuCCtXTDJoYhgYi2KA2s?= =?us-ascii?Q?MIfq5RInIWREunuNLslBjSdw7eY8xtsc0HqYhxo5+e6BiA1YqPTAvx8GkNEQ?= =?us-ascii?Q?7KQaOJxu/cOU5lKhNqwU3KFBVooyNd/BTY0BwF6c7KXBC2UdH/IF2XDgixpo?= =?us-ascii?Q?6gPdRycHtFj0xTUY6EYlfVWr5qwT9eMOogQGGEwu03e14cieXx7ttj3hcEcY?= =?us-ascii?Q?/pKZ0m5iubZcs5gJ9UqlzZrvwls6D8q8EIlzUsTl5tZSB9Zm7WQoLpLoGAQ0?= =?us-ascii?Q?4bHNo/DxgkwdpcnfUJo8eOoJpOFmNUnNK5QTRzMXkOQdcSfe9OdIvkqfjmjP?= =?us-ascii?Q?JrwQpUHM7TcaJkTVNaFXOwhcrhxBzFiM/iu4e8m5GKCkqq6oSX4Iy6qUP91M?= =?us-ascii?Q?GDeQZOo8GiSNhB8rucNBAdb8576dCKE1+flYvce5Y0huYh2IOCy4vu61NdeS?= =?us-ascii?Q?h5ge/KIDhtSE4wrtyHFiqhCr4cVozcd/2trYXaFIFDVcNJGYu2LOVaVHqxTu?= =?us-ascii?Q?2jli0YJ1uyPhxTQrtdZ0N2BVD98anIOC6vQFdH/vrvDlrX9dbBiPvqUk6umg?= =?us-ascii?Q?ENPUkKu2A4XnN1s6fQouGDdGExrGxsghEaVE9WSX+Gwsr6rWRyjHl3OP6MyR?= =?us-ascii?Q?5B21QZ9GnUf56iDu9g7MoE7fI2ubDhnu2+RZXWkg5m9lnys7h9oVBLf4juEf?= =?us-ascii?Q?moYZhF1RrE4ZssKMU1554Lq7i7X+naPdQIi09vYuw8vCgo7OPu0oDoBj1Icr?= =?us-ascii?Q?FALKyzOiK6TZsxAcHYa+fb+K1Nt2u0VSomOk8LoZkv8IodLaHeBPol8m0g1h?= =?us-ascii?Q?WbIp8nBRDNJpjvZ75E4fi8nFgwaPvJZ2xbARmFHtA4DRS4GF35F2RCeVR35o?= =?us-ascii?Q?zMecjEvB+IFtOQvW7drDpCeqmYAhw62LQb0P2vJeb2l1q0G0dtcz4vSK45g+?= =?us-ascii?Q?0uBIoywMFebAN4pQO9LZ3QmsirlwqdkEe1YHMCsq/lz6DpkrnRTvxkhlLubB?= =?us-ascii?Q?mak+EKzyWzAvwzON1LCEI8T1/Rl0/4JYjvBHp5epmbyoz0OXQPVn5un6f3Sq?= =?us-ascii?Q?4VntvFItZXF8j5Ro0L5kVtlzmZ73GCMsw7+CmVS2Ka7y1YL2j+3PdOcG1czJ?= =?us-ascii?Q?DQpn7uJP6r7WUVt/Wp1A5pkU7GHPmqVjLMosTu2wZqtILWWHxeWZXIjFrQHj?= =?us-ascii?Q?zoqOTOXAbLMyzKJkapuMzVpTBxLzP+MPH3To7?= X-Microsoft-Exchange-Diagnostics: 1; SN1PR0701MB2094; 6:B+GTohQXzDG795IQa8FXxKX/+uko5dyf2MzF5s53ZYqhS7edPDFD5qFe1QaDxOO29fh5mmQKG5EdKthBCcd0Hm+xGC3QjLT15sXdl6uPkHF1DOgUcy21FwBmAS4Dxv/k3/HKIdFMQ1LYScUo2cY8+cjyxcvBWAfNDW8BuDBWIRFNX6k+OIHwxk0ykasspSx1VdP4hdbahQHvfhk/EDkGetFgCIfTIIU0uYp5A1z6tW1pRi5Q/eGSEfXnIxIJo5ezt9EfP3OW0uUOINh4YA4k06uFwHOlb+SqeGS8/hcvF0YAMn/CKpflhuhYo+NatJM1gq9oAexxdtz5LrpLXZTJqDKbuYJBb0tgBU99nZRrotaxaJ2BHdZenv9Vm/kICs9vcgYSHFAxCGn6buY5BazSnLvpHP1TV3Puu86RIC5akIT4n+jCO3GNdCD/PO9Kl66t5jT3MzIknWwrkP6kgaYNAA==; 5:zOBIrq5EojFM+MsljhkWo1AJ0qp99Bhl/mWPVAcqNbspe5bhTsc0aWZifuDccycuCURukj3HEQLh2peJdYcOPHMA0+BmsQGhPutPZZ9BMR7VOVvOVvD9jwFBMLldDO/8Qsn7MCSICM/Rl4RYZSRUJw==; 24:HmIlcokPZZ1VLUq4IEOg/VecNuJ2xvrCm4W0xGDXHaJZLLOx7zjlpezjduZkfEHc9cUgkg2xW9itGdheB6LGyFD8dxgAi/hTT25gnqJy2vE= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; SN1PR0701MB2094; 7:2gNjf1bcSYqbSE4BaSQdvGMxGa3PtDewEPEYN4umOuZ4GmxoLG5K7yQhHwaipwVevFEb7Ua5m7aXGpgSC63Bx06v9QyXLgovIFeR7pcjm2XpzSjtpeYYzQkTIlT91pkNWaiEAVssisHiDBkmga4PeOXqeYLC9jveaYZflcOxbayI+buQoVNzMsKRLDa5PF5/tsEbOJYIJlonpKTVUZ4DKHkTsPojARBub3BmpWEioqRq4y3GyllBwvTU1w8BW7eYWhxbb10ujWKYggxFPhBtWKR6XxLgAwTOWFFqJOfjJixLGzi/QKGkuMOn0/jt9/LKm4MWN9Ik1NdiR83TkS9dJyLDPAu+wDpik2gp3us11hr5LAzoE4M78wn1aCMC39kmnVSlWAEcGbdAnW5FolsyyL1BiFcJ72pydl4Yt0DrBIppGg82nLHalRwYxgRKzxa152GILIi8+e92XRifAWeWXQ== X-OriginatorOrg: cavium.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Dec 2016 20:31:16.8985 (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: SN1PR0701MB2094 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. Also remove unwanted/unused ini_mode_force option Signed-off-by: Quinn Tran Signed-off-by: Himanshu Madhani --- drivers/scsi/qla2xxx/qla_def.h | 2 +- drivers/scsi/qla2xxx/qla_init.c | 8 +-- drivers/scsi/qla2xxx/qla_isr.c | 19 +++++- drivers/scsi/qla2xxx/qla_target.c | 129 +++++++++++++++++++++++++++++-------- drivers/scsi/qla2xxx/qla_target.h | 15 ++--- drivers/scsi/qla2xxx/tcm_qla2xxx.c | 2 +- 6 files changed, 131 insertions(+), 44 deletions(-) diff --git a/drivers/scsi/qla2xxx/qla_def.h b/drivers/scsi/qla2xxx/qla_def.h index 6370aca..6bf7ff9 100644 --- a/drivers/scsi/qla2xxx/qla_def.h +++ b/drivers/scsi/qla2xxx/qla_def.h @@ -3175,7 +3175,6 @@ struct qlt_hw_data { /* Protected by hw lock */ uint32_t enable_class_2:1; uint32_t enable_explicit_conf:1; - uint32_t ini_mode_force_reverse:1; uint32_t node_name_set:1; dma_addr_t atio_dma; /* Physical address. */ @@ -3328,6 +3327,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 cfdfb02..df6a51f 100644 --- a/drivers/scsi/qla2xxx/qla_init.c +++ b/drivers/scsi/qla2xxx/qla_init.c @@ -813,9 +813,9 @@ void qla24xx_handle_gpdb_event(scsi_qla_host_t *vha, struct event_arg *ea) fcport->flags &= ~FCF_ASYNC_SENT; ql_dbg(ql_dbg_disc, vha, 0xffff, - "%s %8phC DS %d LS %d \n", + "%s %8phC DS %d LS %d rval %d \n", __func__, fcport->port_name, fcport->disc_state, - fcport->fw_login_state); + fcport->fw_login_state, rval); if (ea->sp->gen2 != fcport->login_gen) { /* target side must have changed it. */ @@ -4020,7 +4020,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); @@ -5739,7 +5740,6 @@ int qla2x00_perform_loop_resync(scsi_qla_host_t *ha) if (!status) { /* Issue a marker after FW becomes ready. */ qla2x00_marker(vha, req, rsp, 0, 0, MK_SYNC_ALL); - set_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags); } diff --git a/drivers/scsi/qla2xxx/qla_isr.c b/drivers/scsi/qla2xxx/qla_isr.c index 7a7a8c6..04899f4 100644 --- a/drivers/scsi/qla2xxx/qla_isr.c +++ b/drivers/scsi/qla2xxx/qla_isr.c @@ -1029,7 +1029,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); @@ -1648,6 +1649,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; @@ -1683,6 +1685,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 cd7494f..8ccbd74 100644 --- a/drivers/scsi/qla2xxx/qla_target.c +++ b/drivers/scsi/qla2xxx/qla_target.c @@ -53,8 +53,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; @@ -1285,7 +1294,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) */ @@ -5981,7 +5991,6 @@ void qlt_async_event(uint16_t code, struct scsi_qla_host *vha, case MBA_LOOP_DOWN: case MBA_LIP_RESET: case MBA_RSCN_UPDATE: - case MBA_REJECTED_FCP_CMD: ql_dbg(ql_dbg_tgt_mgt, vha, 0xf03c, "qla_target(%d): Async event %#x occurred " "(m[0]=%x, m[1]=%x, m[2]=%x, m[3]=%x)", vha->vp_idx, code, @@ -5989,6 +5998,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 " @@ -5998,10 +6036,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; @@ -6542,30 +6581,26 @@ void qlt_lport_deregister(struct scsi_qla_host *vha) /* Must be called under HW lock */ static void qlt_set_mode(struct scsi_qla_host *vha) { - struct qla_hw_data *ha = vha->hw; - switch (ql2x_ini_mode) { case QLA2XXX_INI_MODE_DISABLED: case QLA2XXX_INI_MODE_EXCLUSIVE: 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; } - - if (ha->tgt.ini_mode_force_reverse) - qla_reverse_ini_mode(vha); } /* Must be called under HW lock */ static void qlt_clear_mode(struct scsi_qla_host *vha) { - struct qla_hw_data *ha = vha->hw; - switch (ql2x_ini_mode) { case QLA2XXX_INI_MODE_DISABLED: vha->host->active_mode = MODE_UNKNOWN; @@ -6574,15 +6609,12 @@ 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; } - - if (ha->tgt.ini_mode_force_reverse) - qla_reverse_ini_mode(vha); } /* @@ -6670,9 +6702,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); @@ -6722,7 +6751,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++) { @@ -6798,8 +6827,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; @@ -6812,7 +6844,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); @@ -6899,11 +6947,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; @@ -6916,7 +6966,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); @@ -7030,9 +7097,15 @@ 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; } @@ -7187,6 +7260,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 6d0d738..90b056e 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 @@ -1108,7 +1110,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) @@ -1127,15 +1131,6 @@ static inline bool qla_dual_mode_enabled(struct scsi_qla_host *ha) } - -static inline void qla_reverse_ini_mode(struct scsi_qla_host *ha) -{ - if (ha->host->active_mode & MODE_INITIATOR) - ha->host->active_mode &= ~MODE_INITIATOR; - else - ha->host->active_mode |= MODE_INITIATOR; -} - static inline uint32_t sid_to_key(const uint8_t *s_id) { uint32_t key; diff --git a/drivers/scsi/qla2xxx/tcm_qla2xxx.c b/drivers/scsi/qla2xxx/tcm_qla2xxx.c index c13314a..08033d8 100644 --- a/drivers/scsi/qla2xxx/tcm_qla2xxx.c +++ b/drivers/scsi/qla2xxx/tcm_qla2xxx.c @@ -2102,7 +2102,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; }