From patchwork Tue May 30 17:54:27 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Madhani, Himanshu" X-Patchwork-Id: 9754987 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 98E3C602BF for ; Tue, 30 May 2017 17:55:20 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 8492125D9E for ; Tue, 30 May 2017 17:55:20 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 79499265B9; Tue, 30 May 2017 17:55:20 +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 788D825D9E for ; Tue, 30 May 2017 17:55:19 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751245AbdE3RzS (ORCPT ); Tue, 30 May 2017 13:55:18 -0400 Received: from mail-sn1nam01on0060.outbound.protection.outlook.com ([104.47.32.60]:39418 "EHLO NAM01-SN1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751230AbdE3RzL (ORCPT ); Tue, 30 May 2017 13:55:11 -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=pgM7Y8Dc+vAjN7pJy0cTYzosUl1NdyJEvG5PXvFMa2s=; b=hvhOKhB7nPZoMBa4t9NY5ZaFV8q9MIb0T5AoMT7I9sXpDIFjcN7Asdiz4Bmzx8EGkE07hgMME5tHqv1hdACqq7suXcpHz3vrzzqYp0iduqmSCEQ/WXBE5SB5qecavfSBcB6MQ36wIkTXOh3wNtABo7408UPRhGYPGwLqCunB3I4= Received: from CO2PR07CA0007.namprd07.prod.outlook.com (10.141.194.145) by BLUPR0701MB1010.namprd07.prod.outlook.com (10.160.34.20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1124.9; Tue, 30 May 2017 17:55:09 +0000 Received: from BN1AFFO11FD019.protection.gbl (2a01:111:f400:7c10::105) by CO2PR07CA0007.outlook.office365.com (2a01:111:e400:1414::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256) id 15.1.1124.9 via Frontend Transport; Tue, 30 May 2017 17:55:08 +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 BN1AFFO11FD019.mail.protection.outlook.com (10.58.52.79) with Microsoft SMTP Server (version=TLS1_0, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P384) id 15.1.1075.5 via Frontend Transport; Tue, 30 May 2017 17:55:07 +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; Tue, 30 May 2017 10:54:49 -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 v4UHsYDo027067; Tue, 30 May 2017 10:54:34 -0700 Received: (from root@localhost) by dut1171.mv.qlogic.com (8.14.7/8.14.7/Submit) id v4UHsY2W027066; Tue, 30 May 2017 10:54:34 -0700 From: Himanshu Madhani To: , CC: , Subject: [PATCH v2 12/17] qla2xxx: Add ql2xiniexchg parameter Date: Tue, 30 May 2017 10:54:27 -0700 Message-ID: <20170530175432.26984-13-himanshu.madhani@cavium.com> X-Mailer: git-send-email 2.12.0 In-Reply-To: <20170530175432.26984-1-himanshu.madhani@cavium.com> References: <20170530175432.26984-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)(39850400002)(39400400002)(39410400002)(39450400003)(39840400002)(2980300002)(428002)(40224003)(199003)(189002)(9170700003)(86362001)(575784001)(2906002)(8676002)(106466001)(42186005)(5003940100001)(38730400002)(47776003)(72206003)(478600001)(356003)(4326008)(101416001)(36756003)(6666003)(8936002)(1076002)(54906002)(50986999)(76176999)(2950100002)(105586002)(5660300001)(305945005)(81166006)(189998001)(33646002)(50226002)(48376002); DIR:OUT; SFP:1101; SCL:1; SRVR:BLUPR0701MB1010; H:CAEXCH02.caveonetworks.com; FPR:; SPF:None; MLV:sfv; A:1; MX:1; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BN1AFFO11FD019; 1:CHToTsjif7+lMT2iX3oKozy3670RLhn7J+R2/2o8LI8Kn6YZhDrsvK9SiTFdgz+9Y4nr40+iDAun9N9//CTvbMal49eqWQsFFUQxQJ+cEb/77LRcHKbr/wUdeflFnw8rXk2MCZc/qMNk8S4XSyXRIiON+hKi1r0hdyEDj/XatCrFRqAlFJbQ7NkryzRw8HafkvHkskKYKFQDq9zr9Pp/1jTa3E0IPRdsSBxT9O4gKtX9wnXZUl7QT/lPi0+qXQSBTQ3PWVj5ga3Fr1SuSdzPQebiwvJqOz4QppMRK38ghjPuc4UZYi43Rdjho3XkoY3FV2Y/U59SdCQFi2zdPsdDGJkpr12Tx7aPuStrh+WXlGY5W9qR6vW8ut1L4nuvECsKuj4nTf08uvPczYQ5TdOmEhatdxPG6sHC1hsn1aF3f2+GURzybWNxwBM8sCidm2YvQOzFCD2t0g+ZBPCAlg2CwvbSJ+qf9uJtDsxPEFJqo2W81d62JI91whqboT151sX3 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BLUPR0701MB1010: X-MS-Office365-Filtering-Correlation-Id: ede65518-19f2-4682-b396-08d4a7850292 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(2017030254075)(201703131423075)(201703031133081)(201702281549075); SRVR:BLUPR0701MB1010; X-Microsoft-Exchange-Diagnostics: 1; BLUPR0701MB1010; 3:F66MZNQn7LvwEnezp1xEVGXb2fx2nyBM++iXFshe6IEHdpumvCNFyQPZMfZaa0eyO8qE2yq1nScThDHUXfuH3JAsy0BS53npEOmLdwwdbAtB5FhlZZTIXjGPctvVWW7jfbKwCaM3S/UT4FBiTF8MCQXRqQ9dakofgrSMXnE0FMILOOqoWp3DYkZdK6b/vxEoLm9wM1LvD0Dsz33nJxa+QuVpiadu31vgf++lLJiPq1PQvjeGwL6mJjHpFfJ5noWYdwmv+7s4KvtIBIokw/XQzWaCW9dJOAvZnEUJTl/9oLb910H7SR6nHIX8ZXLzNTfk7hxvc8KKZSaoz4VqKsYaHynnW5BSjVQZ2kris81d8HpCrjNNHk6wc1j++SEdfW3pdDoO5aLPTeAgBOL2vpvc8gdtyFD5dZ2QtFIbgZUmTHTTValJxka8osLKVMrkqWaMeynnZTCvP3ZFSreSVkXnQdtqB4Ri3UMpkU4J0/7IeP1Ghu5sBF9FbdZ2cb8/udhb X-Microsoft-Exchange-Diagnostics: 1; BLUPR0701MB1010; 25:0JZArHpV6yT0ws8jrmgh/mEPdsnzS28VUuHAT2FFxSARTrDIxcktxgLq4fbbJwJG1oma/Avp3KvqRsfLjOoT+XD9Nz0GC++zvUOl7/XdE32RDpe34I5ZHbWBco0684Y39KCG5sM/HyoecHdZjHPzDU4rUDpMU/Donha1qXNNoAW7blVgUp8dj3lhjXvRKI82NXEqEqs1hOlxeWqf1rZN7sGQsMM9C6QYCsGQLp9VcB31xnWMjxd52SgK91FU548pgfjab3ObFn+qfbG3eitfrMgpJbLotfDWymtlZPQqkXbxY2lEqWjJVCSo+0Oq7xWlxhfrob3mCTFJinzGO2QiSlg4GW7rM7Bn/b+TSRoJFtTHL11OQqoD+fEMmpw2VedCV0vZR4XxD/hhWGmOX7unbhZF0JPECt5O8E5+4fMX4sQROqrXm6GjTgGJQdtCQaQqgea/1W95mv80PBrZOrQx+tQW76bu/z6WwtVU5iJJF7s=; 31:2TEcLFdbVzv0TbKA7ddMK7OeheZjRntYu2KMyEu2HobnhRwLJ9XjDHTrFcLogL1BQTk2815EQcRXEeMwFP8EqcOWh781ewY4Bdw8jSSm/XaSfNLUwbr65RTjwuBtzccucq+YE0FrVe41n8enASGbcugtVzCD7Zc0PVUG75zHuwBavva2D1x92aX6OHdN2nYBDQ7Ot0tUwpm/giUSt4lA6zSlSA8mCJkdH7VnwOCrDg6Js4nPmmZU4LuzpFYgaU19l3VohsXQL4HdsFqx8Z3aRQ== X-Microsoft-Exchange-Diagnostics: 1; BLUPR0701MB1010; 20:bR0JGo1NBlD+2W1iJODE3kNV63K4u+Ufv/YidAcqsBhRRBgVITjLTd+kkkfOnnAJCnPcnMJpXp+SjcoRwkJ9sS6aVc1RGIZ8GiEjYoM9Yf4+QNw4m4gLDVZKhv63eB2qYDV4KPvihV0IFW8g5FZJi1kLkHOYq/hlGgyVokIQWj78tvyzyt2SanXNwgnAq1BVAmP3Ro2s+SACDvBi5pphrT2qX8hFH+t+ieJOaJDcRXHAzUuqzB1stZuRv2FDsXpeNk1793BfQ5hxlqojOD6QJ6AVG26BV1ehP4F0Il/jJJ7dpMzkQkL7mvOVFeyRk25ALcZ1c8GDK6X2bGIVDJHQvkBuGA/aFgx/PTTQfd/eD1kGkSdtPB+fnBgvjoVt+BT4BV/7EDIQQYT7Pj47OIeb/w06gg0+tYmYPmpS01SfDVS9ws889XyxKi3c/0AGz6ziS+I/GFK9EUTTr3UL77vgfL4dGYo3vP1w8MJOGuNQl+Qwr+Qb5OXeTsfhM/J2htAd X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(100000700073)(100105000095)(100000701073)(100105300095)(100000702073)(100105100095)(6040450)(601004)(2401047)(13016025)(5005006)(8121501046)(13018025)(3002001)(10201501046)(93006095)(93001095)(100000703073)(100105400095)(6041248)(20161123562025)(20161123564025)(20161123560025)(20161123555025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123558100)(6072148)(100000704073)(100105200095)(100000705073)(100105500095); SRVR:BLUPR0701MB1010; BCL:0; PCL:0; RULEID:(100000800073)(100110000095)(100000801073)(100110300095)(100000802073)(100110100095)(100000803073)(100110400095)(100000804073)(100110200095)(100000805073)(100110500095); SRVR:BLUPR0701MB1010; X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BLUPR0701MB1010; 4:CXoWdPz11QPdpfLoEaN4kPNSY+fJNG316jKfvOxK?= =?us-ascii?Q?D4dxtGr9GN5lcIy+0SptIJGkePNYLOL9mXOCkDwZ/d/yvRfOgvkZ1wds+rpx?= =?us-ascii?Q?s+0yk1+FidrbArBeBISlpHeh8aKcm3479OkQTcdTzzFQalDCAxRvjhxhx07M?= =?us-ascii?Q?i59sPIc2nhe8GiVYQGD53x1UF6JdcbS9aOhCyX3Km5nBWqc+TZfu1iJtk8aF?= =?us-ascii?Q?vBAc/WoolTSG3IBuaU2Ko0SCzpL0Dyu2qV0ry8u/g0b3IO+TiqmOE0eVk8p7?= =?us-ascii?Q?QDHbNzds2WaArt7UqWGebFaK0HwWVGtIqMZwj/JzqAahKyOLU1rp7ri/if0p?= =?us-ascii?Q?iLXbK4c2K4x5siLRhDs3VaL7bMAYm1kvEZv3GV6rbMIjEhBjI2Apg8gwV3Hq?= =?us-ascii?Q?fkFLjdbe3u+DBgPGzFz0Z0RZC+ZYqzhuqVS7+gCBO5sZ1RdrNHhJgW3ZTE4p?= =?us-ascii?Q?ZRabhLmjnPrEgysz8FQ/HDFkfX6ybyxKkuPCSdyc5xRYzbyMboeBDEgyxWJ6?= =?us-ascii?Q?mBc2fKG3rFVdwEDwbnfzn05EWmnaERv/KhtBLSkf7zxkQieCRmvKGRE+raJR?= =?us-ascii?Q?ifIkHmBfzVUSRRZJ7LUf5ivkAbf8l80FfsXuGAyQ+AfE2zoFwSARFPCg2CKm?= =?us-ascii?Q?/zdkt1Wnak8qubuk1QvCjAyHSRtGU3ES0n33+YKesgqpwaK43aHTLgQEsAsF?= =?us-ascii?Q?iPGGwR9Pms2QaAKxdylu0dB66Q5j8TBr7TiT0PvrkdT/CWACUxGGZ2gNM6ZR?= =?us-ascii?Q?+nnXkTFlnxRLj7eI7pONRt5pGTtSgrVEdkbF/n+G1XaivCyxAow3Ol47ZJv8?= =?us-ascii?Q?kNnuE7LDL0n1ig+IzzlD+B/aHeGqVdp6PmeHitUS2MTw37lrFZ9bqov94qtu?= =?us-ascii?Q?PUd7+ysmFpQePyNd16tQ1gVQMGY9aa5naxuv++PjQluWGCaEC/m6a9vXN8vs?= =?us-ascii?Q?WzPJkIIjMY0XwP0G/Norrs501SZYq5EuwV7CeWJsD6xOpCdO8vpxwh0p4tq7?= =?us-ascii?Q?rDp4PBLapBgUkuQN9q3r3zFT5dd+ctVnbkEJA+etVsNDW/NDB1Zm0DW7gEMf?= =?us-ascii?Q?23Sve27mTet0RNZo113c9x6OzkjbRk5pNMQmCC1+zAveCUeGc7Arykon3nfc?= =?us-ascii?Q?2UEVpkXkx5Zs0FQZNkEd6BcU1m+r6Ybq2hrFnDJxwoO3kx4VP5hE/hUCnEpB?= =?us-ascii?Q?/tIV0wr7gfQ1Zts=3D?= X-Forefront-PRVS: 032334F434 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; BLUPR0701MB1010; 23:fM1bcKIElz7AkM45x31juxc+ZR4sqRy/af95Y9v?= =?us-ascii?Q?BPjYTCoCRHkksGqQ9eLb0QUnlH6IL4LwzPSTg4CeE4RNOhtVngBb+t9bN7TO?= =?us-ascii?Q?aPjbKmHWQQrAaPbwLGcFORclcji/D2HXqo6xxBHcqZghjUVeOCgJTjD9Hg9w?= =?us-ascii?Q?XlkB9TQnYT/jFKxWIOYRnejTKiCqeBXun6zFV5qr8GrOQsAbh3+lguakxmHv?= =?us-ascii?Q?p1YeL/kNnDj9bM3i6RcCvF7D5XJBZT/krRY3wrmxuWNm4ZGWhyopjHN6OplQ?= =?us-ascii?Q?dQVPvlF4QzJ4t2SpK53lymulIrfAExBjq90fmfY/0+6o4mGn0AWY02NPF7lI?= =?us-ascii?Q?yesfVG0tKzsIRvPHDsXL7SQpGR2auGz09I/m1+eSN6Yay1ViXq9f8ce+OVKX?= =?us-ascii?Q?+dfcWRQCGKtguyoPqdHGfLphwGKba+FO5Vj3fpNnPQt+sJQa8FLZ07HwOAI1?= =?us-ascii?Q?qVYy/yDWWVVNy4Yp1nSUMwnXhT1hQQm1JBtkN0R3ytVhZV5GMuQEZU4XGet4?= =?us-ascii?Q?Gy5s/Q0VnSzsscSpIg6fW+x1NNH0tVIM4VNMOnbku3Q4vLF4k+0nvhaCrrha?= =?us-ascii?Q?GbZPha1+ZsQ8sAG4SKecPDqrN5+kNKtIiOmwMqTcLm72Dkoln6XKgSLHO6kr?= =?us-ascii?Q?7cKlhjghj73msr436j4T6VLJl/FMym1J8pLcBT0yd57/PyqE+tJeEhO4BtwG?= =?us-ascii?Q?EbGunz9CQ7uT8I92ot3QZhYcsX0Od+w1KdHo7zuFPzy0UCyUs57U1fNwfy3L?= =?us-ascii?Q?qNb/2iimAbNtDfQqccCpHLVsqCT761hFhPUe+x9UiOxzEA9hsJ/heQXTf923?= =?us-ascii?Q?t6vzak1d+oqWVEp8MH8H/ytHOe3P5/PhgR07iO4gR9z+P38T5Bm0/Xy3EbRO?= =?us-ascii?Q?xP29A+qO4j5bdCCsWVmIeChjKicvPiuGaz6FwR9I7EmVU/gp0o6lsCnYGh+K?= =?us-ascii?Q?1S9ea8UU/C4+SHI6yVXdIftqZ0nwf2ZW0apzMsO7NShLyqD2cCaslrwOQKcU?= =?us-ascii?Q?/scyKOXg1U2rYzNiMCOq9x4UXq7FoMDFrpfLVZlj5rRg1Ef2hNh2rz4eRsxD?= =?us-ascii?Q?NpS2uKgcdd+FXn+62PBsDSHIJSykv?= X-Microsoft-Exchange-Diagnostics: 1; BLUPR0701MB1010; 6:MHl8p33kJIOtsxdH1jeBxUH+4zom8e4NpWoSJkdggVWyn3sBWNgZX8uBHBtfSSLpUT746q6XnNfWWC+Repzagi8ifwJMMIKcxKFoMky9AQYhJg1H+OPvOyKJQMlD1AOsuIfFlcn0sqczrQ/shdvMUKBux5lZ2xGesE4edKLpY7nqyUc3/S+5ztSnys4S6EEShUnC9F/4fdBuf3YkPHpH8o47EXIlInlLOgTD1HgEZhq6/wviuuDFR4/rp8WYEBSNchSxUp7pu2E/EU4Yl0fTCNh5WUIjFta47YyMsArInR1wCQ8kGj6N6TxVFq38HkQ0x5Kv1hF2HMwflZoFzXBHXaHTXc0z2+yIBysYbSf6wJUUuyhWIY9r1T9ow6zK9XCnaU5+YuRKrnb7h8UafIsGMgZ7yo55DX57vPW7we7+ioHep7AU5GZHteiU7vnzmwkjELS8u4Os700eqM7OqUSHB5jliXNJrjipO8tekJRAPYdrIknvy2wp92KyOY2HxJvHe8fynxrKk4CglzzZpTX20w== X-Microsoft-Exchange-Diagnostics: 1; BLUPR0701MB1010; 5:55TtZnBVazFmXH2+kKsHas/NWVgkYjP8aaGGzp56o1zCNOD2iywip9OVGBVnR7bNFUPARBHaSMipv79a/xStgu8Y5BZcuc8sWoFhwMDhUDb9PoB027l5Z7zth54vkTJOpZ1g8lKz1gf4lWQgLqwoXYvcnZ/09I/JqwHsC4nF7gLtGDdy63cCDizZCzRLgjL9LY8q/k40pYdA/87kbUTsQKhRGIVQs6SaN/3Zx8w4AaOBU/tAwIs2Ful1fB8zkZOOcyfm3IPA/TcBGXv+P+6KmRmke8mX++KUnjFpt9X8j+oWxHVxDnCWFKzBB6nfr8lnvii6brOg0vc0BqoK81w3Lj8D3Wr+KYOS5qEBL3CKap8W8KDuAF7tHgtTdHSXGD+ME6+doKReHW8aUxtTJ28vbpeLgXiaTs0Xxchzp17Jt+TSJOuRh4Yp5EvF0oqSuwCj87a15TeGnuriSHZmteIMc/EKy0yMCnvUdaeeslIIqdTJF+fjC+xTTuhivABugJit; 24:UOHUd7Fw7yTOS5wury7z5fvRPaU5AWWkSoBsuiCVX93twsmB7qjwukcXRHf7T63at0fIW0gKFgKtCrLbGBS/ZmKm1hQbgphDYJP02FVYgVQ= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; BLUPR0701MB1010; 7:DereKvm86g9acOdP4O9y2TaErmP7Yeo0G3kXWKd8gJT+W1Rr+2MXG+O33ipONSktFo/78IJWUfa9D4f05UfvYADFggBe/HvqzzYL0wAYUNjJOX96Ko3kGqC8B8DWEEBMqWEjDKceJHNPFrgx/nWVgAUgPdHtoXWq7q4PMFgDAHqtG70q0CCgk+pI+2dn1tISR+m7ZS6xSoxvWqQ9gPw12k2TWyo1XTJNjpbMMzczjYUiBr4ydhxcgVpdLufvwk2vVsAFV7Ypm/jf6Sufn0zJek6RZoi5BSQRaCC0Wn4PQEomhTxRuiBW/MJax5H9iUpQzPLk0AAALDTH3CZ3OtDmkA== X-OriginatorOrg: cavium.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 30 May 2017 17:55:07.8151 (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: BLUPR0701MB1010 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 Previously, the ql2xexchoffld module parameter was used to control the max number of exchanges to be offload onto host memory. Module parameter ql_dm_tgt_ex_pct was used to control the percentage of exchanges allocated to the Target side. With this patch, module parameter ql_dm_tgt_ex_pct is no longer used to control exchanges for the driver. New module parameter ql2xiniexchg is added to control exchanges between target mode and initiator mode. With the updated module parameters, users can control the exact number of exchanges for either Initiator or Target. The exchange offload feature will be automatically enabled when the total number of exchanges exceeds 2048 limit. Signed-off-by: Quinn Tran Signed-off-by: Himanshu Madhani --- drivers/scsi/qla2xxx/qla_def.h | 6 +- drivers/scsi/qla2xxx/qla_gbl.h | 3 +- drivers/scsi/qla2xxx/qla_init.c | 2 +- drivers/scsi/qla2xxx/qla_inline.h | 16 +++++ drivers/scsi/qla2xxx/qla_mbx.c | 14 ++-- drivers/scsi/qla2xxx/qla_os.c | 136 +++++++++++++++++++++++++++----------- drivers/scsi/qla2xxx/qla_target.c | 54 ++++----------- 7 files changed, 143 insertions(+), 88 deletions(-) diff --git a/drivers/scsi/qla2xxx/qla_def.h b/drivers/scsi/qla2xxx/qla_def.h index 51b262b236b4..ddf93efe3986 100644 --- a/drivers/scsi/qla2xxx/qla_def.h +++ b/drivers/scsi/qla2xxx/qla_def.h @@ -286,7 +286,7 @@ struct name_list_extended { #define RESPONSE_ENTRY_CNT_MQ 128 /* Number of response entries.*/ #define ATIO_ENTRY_CNT_24XX 4096 /* Number of ATIO entries. */ #define RESPONSE_ENTRY_CNT_FX00 256 /* Number of response entries.*/ -#define EXTENDED_EXCH_ENTRY_CNT 32768 /* Entries for offload case */ +#define FW_DEF_EXCHANGES_CNT 2048 struct req_que; struct qla_tgt_sess; @@ -3593,6 +3593,10 @@ struct qla_hw_data { #define IS_SHADOW_REG_CAPABLE(ha) (IS_QLA27XX(ha)) #define IS_DPORT_CAPABLE(ha) (IS_QLA83XX(ha) || IS_QLA27XX(ha)) #define IS_FAWWN_CAPABLE(ha) (IS_QLA83XX(ha) || IS_QLA27XX(ha)) +#define IS_EXCHG_OFFLD_CAPABLE(ha) \ + (IS_QLA81XX(ha) || IS_QLA83XX(ha) || IS_QLA27XX(ha)) +#define IS_EXLOGIN_OFFLD_CAPABLE(ha) \ + (IS_QLA25XX(ha) || IS_QLA81XX(ha) || IS_QLA83XX(ha) || IS_QLA27XX(ha)) /* HBA serial number */ uint8_t serial0; diff --git a/drivers/scsi/qla2xxx/qla_gbl.h b/drivers/scsi/qla2xxx/qla_gbl.h index 5b2451745e9f..f8540f5c9e5d 100644 --- a/drivers/scsi/qla2xxx/qla_gbl.h +++ b/drivers/scsi/qla2xxx/qla_gbl.h @@ -137,6 +137,7 @@ extern int ql2xmdcapmask; extern int ql2xmdenable; extern int ql2xexlogins; extern int ql2xexchoffld; +extern int ql2xiniexchg; extern int ql2xfwholdabts; extern int ql2xmvasynctoatio; @@ -839,7 +840,7 @@ extern int qla_get_exlogin_status(scsi_qla_host_t *, uint16_t *, uint16_t *); extern int qla_set_exlogin_mem_cfg(scsi_qla_host_t *vha, dma_addr_t phys_addr); extern int qla_get_exchoffld_status(scsi_qla_host_t *, uint16_t *, uint16_t *); -extern int qla_set_exchoffld_mem_cfg(scsi_qla_host_t *, dma_addr_t); +extern int qla_set_exchoffld_mem_cfg(scsi_qla_host_t *); extern void qlt_handle_abts_recv(struct scsi_qla_host *, response_t *); int qla24xx_async_notify_ack(scsi_qla_host_t *, fc_port_t *, diff --git a/drivers/scsi/qla2xxx/qla_init.c b/drivers/scsi/qla2xxx/qla_init.c index c422c14dfb07..0ee9159457e4 100644 --- a/drivers/scsi/qla2xxx/qla_init.c +++ b/drivers/scsi/qla2xxx/qla_init.c @@ -2730,7 +2730,7 @@ qla2x00_setup_chip(scsi_qla_host_t *vha) if (ql2xexlogins) ha->flags.exlogins_enabled = 1; - if (ql2xexchoffld) + if (qla_is_exch_offld_enabled(vha)) ha->flags.exchoffld_enabled = 1; rval = qla2x00_execute_fw(vha, srisc_address); diff --git a/drivers/scsi/qla2xxx/qla_inline.h b/drivers/scsi/qla2xxx/qla_inline.h index c61a6a871c8e..9996ec0daab1 100644 --- a/drivers/scsi/qla2xxx/qla_inline.h +++ b/drivers/scsi/qla2xxx/qla_inline.h @@ -307,3 +307,19 @@ qla2x00_set_retry_delay_timestamp(fc_port_t *fcport, uint16_t retry_delay) fcport->retry_delay_timestamp = jiffies + (retry_delay * HZ / 10); } + +static inline bool +qla_is_exch_offld_enabled(struct scsi_qla_host *vha) +{ + if (qla_ini_mode_enabled(vha) && + (ql2xiniexchg > FW_DEF_EXCHANGES_CNT)) + return true; + else if (qla_tgt_mode_enabled(vha) && + (ql2xexchoffld > FW_DEF_EXCHANGES_CNT)) + return true; + else if (qla_dual_mode_enabled(vha) && + ((ql2xiniexchg + ql2xexchoffld) > FW_DEF_EXCHANGES_CNT)) + return true; + else + return false; +} diff --git a/drivers/scsi/qla2xxx/qla_mbx.c b/drivers/scsi/qla2xxx/qla_mbx.c index 5e74600b99c2..bebac42d9e9e 100644 --- a/drivers/scsi/qla2xxx/qla_mbx.c +++ b/drivers/scsi/qla2xxx/qla_mbx.c @@ -821,7 +821,7 @@ qla_get_exchoffld_status(scsi_qla_host_t *vha, uint16_t *buf_sz, */ #define CONFIG_XCHOFFLD_MEM 0x3 int -qla_set_exchoffld_mem_cfg(scsi_qla_host_t *vha, dma_addr_t phys_addr) +qla_set_exchoffld_mem_cfg(scsi_qla_host_t *vha) { int rval; mbx_cmd_t mc; @@ -834,12 +834,12 @@ qla_set_exchoffld_mem_cfg(scsi_qla_host_t *vha, dma_addr_t phys_addr) memset(mcp->mb, 0 , sizeof(mcp->mb)); mcp->mb[0] = MBC_GET_MEM_OFFLOAD_CNTRL_STAT; mcp->mb[1] = CONFIG_XCHOFFLD_MEM; - mcp->mb[2] = MSW(phys_addr); - mcp->mb[3] = LSW(phys_addr); - mcp->mb[6] = MSW(MSD(phys_addr)); - mcp->mb[7] = LSW(MSD(phys_addr)); - mcp->mb[8] = MSW(ha->exlogin_size); - mcp->mb[9] = LSW(ha->exlogin_size); + mcp->mb[2] = MSW(ha->exchoffld_buf_dma); + mcp->mb[3] = LSW(ha->exchoffld_buf_dma); + mcp->mb[6] = MSW(MSD(ha->exchoffld_buf_dma)); + mcp->mb[7] = LSW(MSD(ha->exchoffld_buf_dma)); + mcp->mb[8] = MSW(ha->exchoffld_size); + mcp->mb[9] = LSW(ha->exchoffld_size); mcp->out_mb = MBX_9|MBX_8|MBX_7|MBX_6|MBX_3|MBX_2|MBX_1|MBX_0; mcp->in_mb = MBX_11|MBX_0; mcp->tov = MBX_TOV_SECONDS; diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c index ffe25a4ad0f3..0383ecb3018d 100644 --- a/drivers/scsi/qla2xxx/qla_os.c +++ b/drivers/scsi/qla2xxx/qla_os.c @@ -224,11 +224,15 @@ MODULE_PARM_DESC(ql2xexlogins, "Number of extended Logins. " "0 (Default)- Disabled."); -int ql2xexchoffld = 0; -module_param(ql2xexchoffld, uint, S_IRUGO|S_IWUSR); +int ql2xexchoffld = 1024; +module_param(ql2xexchoffld, uint, 0644); MODULE_PARM_DESC(ql2xexchoffld, - "Number of exchanges to offload. " - "0 (Default)- Disabled."); + "Number of target exchanges."); + +int ql2xiniexchg = 1024; +module_param(ql2xiniexchg, uint, 0644); +MODULE_PARM_DESC(ql2xiniexchg, + "Number of initiator exchanges."); int ql2xfwholdabts = 0; module_param(ql2xfwholdabts, int, S_IRUGO); @@ -3982,6 +3986,9 @@ qla2x00_set_exlogins_buffer(scsi_qla_host_t *vha) if (!ql2xexlogins) return QLA_SUCCESS; + if (!IS_EXLOGIN_OFFLD_CAPABLE(ha)) + return QLA_SUCCESS; + ql_log(ql_log_info, vha, 0xd021, "EXLOGIN count: %d.\n", ql2xexlogins); max_cnt = 0; rval = qla_get_exlogin_status(vha, &size, &max_cnt); @@ -3992,21 +3999,27 @@ qla2x00_set_exlogins_buffer(scsi_qla_host_t *vha) } temp = (ql2xexlogins > max_cnt) ? max_cnt : ql2xexlogins; - ha->exlogin_size = (size * temp); - ql_log(ql_log_info, vha, 0xd024, - "EXLOGIN: max_logins=%d, portdb=0x%x, total=%d.\n", - max_cnt, size, temp); - - ql_log(ql_log_info, vha, 0xd025, "EXLOGIN: requested size=0x%x\n", - ha->exlogin_size); - - /* Get consistent memory for extended logins */ - ha->exlogin_buf = dma_alloc_coherent(&ha->pdev->dev, - ha->exlogin_size, &ha->exlogin_buf_dma, GFP_KERNEL); - if (!ha->exlogin_buf) { - ql_log_pci(ql_log_fatal, ha->pdev, 0xd02a, + temp *= size; + + if (temp != ha->exlogin_size) { + qla2x00_free_exlogin_buffer(ha); + ha->exlogin_size = temp; + + ql_log(ql_log_info, vha, 0xd024, + "EXLOGIN: max_logins=%d, portdb=0x%x, total=%d.\n", + max_cnt, size, temp); + + ql_log(ql_log_info, vha, 0xd025, + "EXLOGIN: requested size=0x%x\n", ha->exlogin_size); + + /* Get consistent memory for extended logins */ + ha->exlogin_buf = dma_alloc_coherent(&ha->pdev->dev, + ha->exlogin_size, &ha->exlogin_buf_dma, GFP_KERNEL); + if (!ha->exlogin_buf) { + ql_log_pci(ql_log_fatal, ha->pdev, 0xd02a, "Failed to allocate memory for exlogin_buf_dma.\n"); - return -ENOMEM; + return -ENOMEM; + } } /* Now configure the dma buffer */ @@ -4037,15 +4050,49 @@ qla2x00_free_exlogin_buffer(struct qla_hw_data *ha) } } +static void +qla2x00_number_of_exch(scsi_qla_host_t *vha, u32 *ret_cnt, u16 max_cnt) +{ + u32 temp; + *ret_cnt = FW_DEF_EXCHANGES_CNT; + + if (qla_ini_mode_enabled(vha)) { + if (ql2xiniexchg > max_cnt) + ql2xiniexchg = max_cnt; + + if (ql2xiniexchg > FW_DEF_EXCHANGES_CNT) + *ret_cnt = ql2xiniexchg; + } else if (qla_tgt_mode_enabled(vha)) { + if (ql2xexchoffld > max_cnt) + ql2xexchoffld = max_cnt; + + if (ql2xexchoffld > FW_DEF_EXCHANGES_CNT) + *ret_cnt = ql2xexchoffld; + } else if (qla_dual_mode_enabled(vha)) { + temp = ql2xiniexchg + ql2xexchoffld; + if (temp > max_cnt) { + ql2xiniexchg -= (temp - max_cnt)/2; + ql2xexchoffld -= (((temp - max_cnt)/2) + 1); + temp = max_cnt; + } + + if (temp > FW_DEF_EXCHANGES_CNT) + *ret_cnt = temp; + } +} + int qla2x00_set_exchoffld_buffer(scsi_qla_host_t *vha) { int rval; - uint16_t size, max_cnt, temp; + u16 size, max_cnt; + u32 temp; struct qla_hw_data *ha = vha->hw; - /* Return if we don't need to alloacate any extended logins */ - if (!ql2xexchoffld) + if (!ha->flags.exchoffld_enabled) + return QLA_SUCCESS; + + if (!IS_EXCHG_OFFLD_CAPABLE(ha)) return QLA_SUCCESS; max_cnt = 0; @@ -4056,30 +4103,45 @@ qla2x00_set_exchoffld_buffer(scsi_qla_host_t *vha) return rval; } - temp = (ql2xexchoffld > max_cnt) ? max_cnt : ql2xexchoffld; - ha->exchoffld_size = (size * temp); - ql_log(ql_log_info, vha, 0xd016, - "Exchange offload: max_count=%d, buffers=0x%x, total=%d.\n", - max_cnt, size, temp); + qla2x00_number_of_exch(vha, &temp, max_cnt); + temp *= size; - ql_log(ql_log_info, vha, 0xd017, - "Exchange Buffers requested size = 0x%x\n", ha->exchoffld_size); - - /* Get consistent memory for extended logins */ - ha->exchoffld_buf = dma_alloc_coherent(&ha->pdev->dev, - ha->exchoffld_size, &ha->exchoffld_buf_dma, GFP_KERNEL); - if (!ha->exchoffld_buf) { - ql_log_pci(ql_log_fatal, ha->pdev, 0xd013, - "Failed to allocate memory for exchoffld_buf_dma.\n"); - return -ENOMEM; + if (temp != ha->exchoffld_size) { + qla2x00_free_exchoffld_buffer(ha); + ha->exchoffld_size = temp; + + ql_log(ql_log_info, vha, 0xd016, + "Exchange offload: max_count=%d, buffers=0x%x, total=%d.\n", + max_cnt, size, temp); + + ql_log(ql_log_info, vha, 0xd017, + "Exchange Buffers requested size = 0x%x\n", + ha->exchoffld_size); + + /* Get consistent memory for extended logins */ + ha->exchoffld_buf = dma_alloc_coherent(&ha->pdev->dev, + ha->exchoffld_size, &ha->exchoffld_buf_dma, GFP_KERNEL); + if (!ha->exchoffld_buf) { + ql_log_pci(ql_log_fatal, ha->pdev, 0xd013, + "Failed to allocate memory for exchoffld_buf_dma.\n"); + return -ENOMEM; + } } /* Now configure the dma buffer */ - rval = qla_set_exchoffld_mem_cfg(vha, ha->exchoffld_buf_dma); + rval = qla_set_exchoffld_mem_cfg(vha); if (rval) { ql_log(ql_log_fatal, vha, 0xd02e, "Setup exchange offload buffer ****FAILED****.\n"); qla2x00_free_exchoffld_buffer(ha); + } else { + /* re-adjust number of target exchange */ + struct init_cb_81xx *icb = (struct init_cb_81xx *)ha->init_cb; + + if (qla_ini_mode_enabled(vha)) + icb->exchange_count = 0; + else + icb->exchange_count = cpu_to_le16(ql2xexchoffld); } return rval; diff --git a/drivers/scsi/qla2xxx/qla_target.c b/drivers/scsi/qla2xxx/qla_target.c index 3cdffdd90279..765145151fa0 100644 --- a/drivers/scsi/qla2xxx/qla_target.c +++ b/drivers/scsi/qla2xxx/qla_target.c @@ -59,12 +59,12 @@ MODULE_PARM_DESC(qlini_mode, "when ready " "\"enabled\" (default) - initiator mode will always stay enabled."); -static int ql_dm_tgt_ex_pct = 50; +static int ql_dm_tgt_ex_pct = 0; 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."); + "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; @@ -6438,8 +6438,9 @@ void 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()) + return; if (qla_tgt_mode_enabled(vha) || qla_dual_mode_enabled(vha)) { if (!ha->tgt.saved_set) { @@ -6454,24 +6455,10 @@ qlt_24xx_config_nvram_stage1(struct scsi_qla_host *vha, struct nvram_24xx *nv) ha->tgt.saved_set = 1; } - if (qla_tgt_mode_enabled(vha)) { + 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); - } + else /* dual */ + nv->exchange_count = cpu_to_le16(ql2xexchoffld); /* Enable target mode */ nv->firmware_options_1 |= cpu_to_le32(BIT_4); @@ -6556,8 +6543,6 @@ void 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; @@ -6575,23 +6560,10 @@ qlt_81xx_config_nvram_stage1(struct scsi_qla_host *vha, struct nvram_81xx *nv) ha->tgt.saved_set = 1; } - if (qla_tgt_mode_enabled(vha)) { + 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); - } + else /* dual */ + nv->exchange_count = cpu_to_le16(ql2xexchoffld); /* Enable target mode */ nv->firmware_options_1 |= cpu_to_le32(BIT_4);