From patchwork Thu Jan 12 19:07:02 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bart Van Assche X-Patchwork-Id: 9514091 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 0D719601E7 for ; Thu, 12 Jan 2017 19:15:27 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id F1421284C3 for ; Thu, 12 Jan 2017 19:15:26 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id E5A5B286D9; Thu, 12 Jan 2017 19:15:26 +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=unavailable 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 5E207284C3 for ; Thu, 12 Jan 2017 19:15:25 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751035AbdALTOM (ORCPT ); Thu, 12 Jan 2017 14:14:12 -0500 Received: from mail-cys01nam02on0075.outbound.protection.outlook.com ([104.47.37.75]:30299 "EHLO NAM02-CY1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1750781AbdALTII (ORCPT ); Thu, 12 Jan 2017 14:08:08 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sandiskcorp.onmicrosoft.com; s=selector1-sandisk-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=Cy8lHp5gyG0UVw2/SVlOckuZnomkpW14UesD2eI7uqU=; b=PI0lU/vm0Df3b5K4hs+XED5mrjS45Qw+Z9juq6z+b2CB1Z+tcHv3s2QTgm0rW0Evtwa9nN/V4ajU7FpLX+kPJmc13LRO6MEU5j2Ndswrtl8NXmsR5r7y6hvu92cNG4746Uitww91uknxAQO5sKmZ6GcBF7lSQhm9OyGmei3rECc= Received: from MWHPR02CA0010.namprd02.prod.outlook.com (10.168.209.148) by CO1PR02MB046.namprd02.prod.outlook.com (10.242.163.22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.829.7; Thu, 12 Jan 2017 19:08:04 +0000 Received: from BY2FFO11OLC013.protection.gbl (2a01:111:f400:7c0c::144) by MWHPR02CA0010.outlook.office365.com (2603:10b6:300:4b::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.845.12 via Frontend Transport; Thu, 12 Jan 2017 19:08:05 +0000 Authentication-Results: spf=pass (sender IP is 63.163.107.21) smtp.mailfrom=sandisk.com; redhat.com; dkim=none (message not signed) header.d=none;redhat.com; dmarc=bestguesspass action=none header.from=sandisk.com; Received-SPF: Pass (protection.outlook.com: domain of sandisk.com designates 63.163.107.21 as permitted sender) receiver=protection.outlook.com; client-ip=63.163.107.21; helo=milsmgep15.sandisk.com; Received: from milsmgep15.sandisk.com (63.163.107.21) by BY2FFO11OLC013.mail.protection.outlook.com (10.1.15.25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384) id 15.1.803.8 via Frontend Transport; Thu, 12 Jan 2017 19:08:04 +0000 Received: from MILHUBIP04.sdcorp.global.sandisk.com (Unknown_Domain [10.201.67.162]) (using TLS with cipher DHE-RSA-AES256-SHA (256/256 bits)) (Client did not present a certificate) by (Symantec Messaging Gateway) with SMTP id A0.A0.65426.961D7785; Thu, 12 Jan 2017 10:56:41 -0800 (PST) Received: from milsmgip12.sandisk.com (10.177.9.6) by MILHUBIP04.sdcorp.global.sandisk.com (10.177.9.97) with Microsoft SMTP Server id 14.3.319.2; Thu, 12 Jan 2017 11:07:58 -0800 X-AuditID: 0ac94369-b62949800001ff92-e8-5877d169353c Received: from exp-402881.sdcorp.global.sandisk.com ( [10.177.9.6]) by (Symantec Messaging Gateway) with SMTP id 9A.DF.09762.E04D7785; Thu, 12 Jan 2017 11:07:58 -0800 (PST) From: Bart Van Assche To: Doug Ledford CC: , , "Greg Kroah-Hartman" , Bart Van Assche , Christoph Hellwig , Andrew Boyer , Dennis Dalessandro , Jonathan Toppins , Alex Estrin Subject: [PATCH v2 10/26] IB: Use dma_virt_ops instead of duplicating it Date: Thu, 12 Jan 2017 11:07:02 -0800 Message-ID: <20170112190718.6728-11-bart.vanassche@sandisk.com> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20170112190718.6728-1-bart.vanassche@sandisk.com> References: <20170112190718.6728-1-bart.vanassche@sandisk.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFvrDLMWRmVeSWpSXmKPExsXCddJ5kW7mxfIIg81vRSwuPP3OZHGtfR+r xfO9r9ksXp7/wGrRvHg9m8XK1UeZLJo2vWS2uLxrDpvFs0O9LA6cHpNmzmD2WLznJZPH/rlr 2D1232xg83i/7yqbx+dNcgFsUVw2Kak5mWWpRfp2CVwZ9++8YSx4/oyxYuehDSwNjAd3MnYx cnJICJhIXLn/lbmLkYtDSGApk8SUZ7cZIZxtjBI9XafhqlrXzWCFSGxklPizexMLSIJNwEji 2/uZYLaIgJrEpleL2EGKmAXeMkm8at0KlhAW8JD4N2cV0A4ODhYBVYmHe7xBwrwC9hIbpm9m glggL7Gr7SIriM0JFP/2/xLYYiEBO4ldB/6zgMyUENjLKtE2axkbRLOgxMmZT8DmMwtISBx8 8YIZokFd4uSS+UwTGIVmISmbhaRsASPTKkax3Myc4tz01AJDU73ixLyUzOJsveT83E2MkDjJ 3MF494n3IUYBDkYlHt4dNmURQqyJZcWVuYcYJTiYlUR4Z50vjxDiTUmsrEotyo8vKs1JLT7E KM3BoiTO63bvS5iQQHpiSWp2ampBahFMlomDU6qBUXGx6n3/x/Vtq35oTtGy58udnbwskflt 6LRN9UVau3UzXd7+3rJmR2TReRXeAzNmPPJ0+MkUqna+/arYvj9WIWnz+jiDGw4m3eNaOvth 2fGj372vdl9iXV/CEjpzypkj2dla5muDXs3YfmevdFvw/AUue58xz4qedrTqY3rB4YKzu+be V7pspKTEUpyRaKjFXFScCABdARQRjwIAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFjrFJMWRmVeSWpSXmKPExsXCtZGTTZfvSnmEwdkP6hYXnn5nsrjWvo/V 4uDPNkaL53tfs1m8PP+B1aJ58Xo2i5WrjzJZNG16yWxxedccNotnh3pZHLg8Js2cweyxeM9L Jo/9c9ewe+y+2cDm8X7fVTaPaWvOM3l83iQXwB7FZZOSmpNZllqkb5fAlXH/zhvGgufPGCt2 HtrA0sB4cCdjFyMnh4SAiUTruhmsILaQwHpGid4lhSA2m4CRxLf3M1lAbBEBNYlNrxaxdzFy cTALfGSS2LHiCDNIQljAQ+LfnFVANgcHi4CqxMM93iBhXgF7if9TtjJBzJeX2NV2EWw+J1D8 2/9LjBC77CR2HfjPMoGRewEjwypGsdzMnOLc9MwCQyO94sS8lMzibL3k/NxNjJDQitrBeH2i +SFGJg5OqQbG9tsKvzPlr7V9/iXz3X6SpHViVhKD9IVzHj/LC6x+C/pxFW+oETNqvb5VaVPi o4kBjuXiq179VVrNvefm8yorxsnuxdlRj5VPnL/munFf67ZNuhYJf3qeF5x3FjhW9GhBqPHu zk/sxWd2TdlXdfDH6TPtbRZVuqWZbM4lGbeSNrorLBTz2durxFKckWioxVxUnAgAoqawEd0B AAA= MIME-Version: 1.0 X-EOPAttributedMessage: 0 X-MS-Office365-Filtering-HT: Tenant X-Forefront-Antispam-Report: CIP:63.163.107.21; IPV:NLI; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10009020)(6009001)(7916002)(39860400002)(39840400002)(39450400003)(39850400002)(39410400002)(2980300002)(438002)(189002)(199003)(33646002)(81166006)(6666003)(106466001)(92566002)(47776003)(8676002)(50986999)(76176999)(5660300001)(626004)(50466002)(356003)(81156014)(48376002)(36756003)(575784001)(97736004)(2950100002)(110136003)(8666007)(5003940100001)(6916009)(69596002)(68736007)(54906002)(8936002)(4326007)(2906002)(1076002)(189998001)(50226002)(86362001)(38730400001)(305945005)(77096006)(2270400002)(2004002); DIR:OUT; SFP:1101; SCL:1; SRVR:CO1PR02MB046; H:milsmgep15.sandisk.com; FPR:; SPF:Pass; PTR:InfoDomainNonexistent; MX:1; A:1; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BY2FFO11OLC013; 1:7pT1xlmqXPJ30/D1ygLw4GEe8qt9nhteZCRe7Uzcwqvo2/hB2L93AZu3iz7qZ5kT2QxPirBxdFd+y/DNrri2xJZU+dKgoDoe9GaDGSbNWlGysXK9jNpFyhLwj+ZQ8SClVA7/e/HRXJFj4t2o/TABzKRchpwYD2t8MWTqWEuOruFKp5bzuevVAd2vU8NqQwXc6YqkK4jNCy8kGmfuuAf7ZNFXkIykH4z8sg9H134BpfG6Ggtts9FuFhR/pC7XcFhvkV123/NsWWDlbD1SfMY863TxP72CJ6eDTGTBfNJ+bh97ZwO9CDHgoNjD9FSwqAFPoamwF6SzsOMejWva9MkguAryTcGpLzafnADxAcUTdH2J/bRuupU2RQ0DtnEVhQbY01dmp3mW05mDo5z9+oRh9aFQhbNTEG0S2Fd0jGqrmVQxSaq1jfpYHVi7RxRcuIgsjJ7axIpAw+2ztDp3NORNstDg1E4pHNpHT2UjGpRyBZNOgCzhJLwcRWHMXYLKCbpT X-MS-Office365-Filtering-Correlation-Id: 6b151990-c935-46a7-c522-08d43b1e5629 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(8251501002); SRVR:CO1PR02MB046; X-Microsoft-Exchange-Diagnostics: 1; CO1PR02MB046; 3:fTIM22pVp8ysvfGT21TpbRJGe7fhLueV4zhdBKpAGuD+VwkFnNyCxlCaUNZmgRAht4Z8yZCBpn75Al/gmv3SAEk/+xidARI5MiE9RYc+I9SY9HQDNxatt5U9JbaBlr6N0sLSl2NGi5TuLYx1DodBUz1RDjYd+cOOyqa1fbuxK3I1YmNu2uHTt70G6hEc5/N7xKW4vmaqh8VQJtKrjivf14tPrSYm2reJ8uEDUvZ9ND27/vusPtNee4PpiRd26s9jCg7kLkwKv9dUy1VG6lz26HZFwhiCo+ibBH/7MV24bn8KUqzcVDcWje+IxpUts6FnaJUyxbn7zv7e9VmCL/FqblfWQB1h56YVWfNfnN442MjKFey7r9iGfhLZCACG/KiIAqDu3tVjHnwD7NvLizC/0Q== X-Microsoft-Exchange-Diagnostics: 1; CO1PR02MB046; 25:xmlILOcX54HaR9KftAmgv/InVNjEOuXJEVDc8SsAqdfEtTQFS1GvTgGfP0g28zIefxusJwB5hxpFnKnHIjCk7z8ogpgazvOauMAl8Op2V5cDSE3vS7MhQeWyRpFq9LFx0FuhT2VvgNmM3dfTd/WdsccSEkwrZ/KQbHvpsYlS/mixFFOG+2Hf0eadlPjSOBnq5Vgr7ayppsfWM8UFgfbfXbKrjTDINEq2EDw1Lg02aoVZX+TaQjZ+yjdMejL6UnYBQ0g2YbFBPIwyc1cEvGEWBOI8XRGHViJo65EXQ2FTQUN0XqpBDGjIgHFVNpkwrNo+FVSuiT/OyP+me7JTvJjeQUIpBFAJVcSvZgs2RrTQup2thkIjxwPRD6ZDSLmR/3gbUS/Kf9BlsVvHXi3HnhT2AEDDi2aGG4EHyB2dDWDKL6f/M5jf+Xpsh/sAvrPMZPGpKE0Yb13Olq2yLamh7sj6XamCfWXQUpapS5RW/RCzvq24w/x4vE3irXeqw2IGRLALzERy5JSnlRjVET9P/zbM7Y2gE1SFEa30Kfx6puXudIe14h/symzXqlkPjlpX4V3oMMakr5TZo0aWDQDCrbLulD+OF5Nq+Zas3IG9p+ah/J79tWflnr/SF1LJKZ/7nwZjKFQalmoajc8mu4KDUqQI+k21OOm2A2Au4dKaHXkLFdqe/1ieSWpUdrxiCOFLMg6Uii5nlngIIMLCpbj//OE+gi1a8dvBAlsdVSmPGBj1rNeGy8GZiSxgqCkedI+1pVCQS0EI1+8NjS2Pd2Fdns20naq0r+nqEJqfTXIfJJLTPA58PHnNqy/RR3sgZvjXrqk6 X-Microsoft-Exchange-Diagnostics: 1; CO1PR02MB046; 31:KaKDmgYY89okIuQCfTUCLwdKXu2IMVyIvdK3ZVzI8eGdkQQxIdWXjnZRHxfxiNVtKvw4y+xPiKd/MDcZJYlWQC0f20dJnZpYHsEQbTLFrcklPCEzPeaTv6/D4C1Yhh5caYgY1s5VoTHURxMEO5u4YxiefOqIICd+3JbYp63jecd2KzGUjPOuG5DAOI0qXpiR1mrSX7HeZpYeelbpv7OcywRjWONsCiC8+g1WGbpcpxbtYGY0V1ihO4f5LQhhurTHShn3q+tmF4+35tPVKY09bQ==; 20:KTuhEvBPKGIf3Oq8L8mKMuxt1Y1PIsy/cXaeGJs6UiEABovBPEZDajLpOOvYwq9FpR5fGMJwTK+y9RQpFLj86tYXH02LPB+VzkNEJVcyjJ8G7Co0rmq0yKYMh/hw7pLBPS7zWv7RYZyoYyK0koS625hEGbtPIB4FNX5LAIOY9U6E8We0GcKyl8EpudMVTXQzLQFEnkLLK/GwVNHNnhMyeSdvMmsFo/WZ9LX9HHNkgG91aWXBnV3MKcabXFeN9rmjfBONG5LCI9P4M9SQkJt9iHo4g266BMM3IGsxZuXuoLwF335t8ArstQVAqwaV/zxYdlhiqmjr+I+CWG3Y82iRaqh+avI4ViMiYENVPo4sEFmY38v2+v471z3BFF+HtqDVbx/u/SEsP+lxBIrnNiGphx9qlPmLoaYeACTDs15VYpnfXNLsROdSpXg9jEA1aLh5JG8ZlY7Ht79G81bQ/zXoEyG/DzzrzCuNl9r1qPEZb+mXwSjuvXjNiMAt+hgSaRge X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(56004941905204)(42932892334569)(228905959029699); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(6040375)(601004)(2401047)(5005006)(8121501046)(13016025)(13018025)(10201501046)(3002001)(6055026)(6041248)(20161123560025)(20161123562025)(20161123555025)(20161123564025)(6072148); SRVR:CO1PR02MB046; BCL:0; PCL:0; RULEID:; SRVR:CO1PR02MB046; X-Microsoft-Exchange-Diagnostics: 1; CO1PR02MB046; 4:hdHvoari5KPUQJOnqz+dZI6m7LHkKF7jm9IW4BfnOvv/keZJFZ1o2D4TIGTWN+R9QfPDPljTVbCn3s7KK1MxlQlhfgOxG4buD5zmAj+JoJF5+/Kc0oeZUykyhdwiYuZfDzVQsucgclNmjn+i8izww2criMF2q0/CRpo9ifELsblWxHGbisUKz+rZlpjnzVBbUUZszld7joZxvOS8xjDs6nb7uvzo4/QXvjA3tI58zYFnJTZCTX8PJgIZXLDfcM1Z8fM6yk8qnpXceQvYewS1amQh1+DiKRvc4c/nnPv0Xynyd9jddhtjwLEMuHYrdJrj4Du4dcNLN3IC6L1r5U8b1szIse7qI0gGkmjXHbf5GuhGa6iIzLxV70zVFf7ufCY6eXHroTXebryscoXmVJzHorbBrL39HX0TCp6BMuSJjNEQrUuyqDhqWXDSSiTRzkipm/FJ1z27kdr+qR0rcYa0tHs2n228rVhIpH+CsU39CIj1NklNBSzUFNY94wMbR8CxNKRRkEujMwRoR4Zhn57mzCHF2L7j/pkJxJ8McK8c9pVUl86oqtX+PUz0YDI7JM5KyAz1+oA2upYALXLOfWZBKZK+95PXMMhnZCvjae0Tj+v88j6/t82gpG3RjA5zJg1rss+T/WnTf+pJeimKrcNGQ4a/ho6b+HbXlapGWPyyUna0XsxR9/jKUIl7agnw9i6/VkysOIxj3wO4u9vPitodxbk0b0uMqyhl7GSl2F/w8d4= X-Forefront-PRVS: 018577E36E X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; CO1PR02MB046; 23:uUutu8e1TpT5ks7KS9FIq+U9SJ8LJ+KrysRbO1Cetv?= =?us-ascii?Q?7B/uRCxyzbtVJFZ6CcOCjWj7nZaidIxdEI2h61vqtWEuRp0s8mH6oRYeK0YH?= =?us-ascii?Q?JGjzOlaW+70gVog6uk9ZDj0RsvUu1L6HhuruRg0dDxn89cmogork7fBUJtnp?= =?us-ascii?Q?jYGLdQheYe3uXW3/Z4hnh6N3VLsmhwwesfvjpKHSBeOP0pEqiNGnE+1P3etN?= =?us-ascii?Q?H4zxA7ZnvRjDIG94PdqovEoIZV8OfsW+DEsqbHnKEiCKgJq/PCrK5Q0uRJGp?= =?us-ascii?Q?eBeo10w3kKsNmXVDuAe+oELxH1KZmp7jNDO40DG2RpfepGPGM2cWdTBx0+ni?= =?us-ascii?Q?cAJ4lvoDjQpO7mqpbePwhovrzJ5HAH8Rko+aqxBr7L1lK1/oUx7shZT1DGJQ?= =?us-ascii?Q?+IBJGAKkcifFYRxJNiVaxjq8PNDLZ327PxGi+oGiKJeuARjqm5hBKX5XBXyn?= =?us-ascii?Q?5nPEockYiBx8XJkfQLCvgenErK01D/tDqaBejWaUm2RMYR0FMLfgJUerIjGK?= =?us-ascii?Q?GBtgvTF/ot9diaAROUP1NzzvmD5CYJwEnPO2IsghBE4kEXLsMvLRyHMv+BMB?= =?us-ascii?Q?oMY2kGau98CLwjRzgVbdLkYQtJ7Eq+e7ReD1YeNUiQhW5hud+FmeXzZLaVuJ?= =?us-ascii?Q?16/l1NpFxmVnscyk/7XZc9nvgZi8qrb6vELVD0xawUljTNBVektWiaq8ZWat?= =?us-ascii?Q?ReZD4rFrh5efFKbOsdWC7yrvJnmswwchLJpdo8Dl4mmF36MxCjyVZKGEdEqC?= =?us-ascii?Q?KFwUIjbwXS/zmouuImcCHVJIg/KrsOFunE1MorMLIdgJyGU0U0UaSkEiocCJ?= =?us-ascii?Q?+PideSWC940vHMrtrDgAAb542UHMShnk5eyoi6C76Ai1Efq2PA3HZ6RcZwxO?= =?us-ascii?Q?5nYjUHyaHnl0YcxYZwrscHI+U+pi9YdXujDJdkWfNvGhOI9fpfgRV7vflqmc?= =?us-ascii?Q?45qETgjQdnfDcn1d65toQXWLk/d41aaqhtPa8b2Qrp/JZsbsdsNFu5xd4gRP?= =?us-ascii?Q?XXDE66wUFqCCTAP2kUz8PBSBs3328fBQ2ozG6q2sPQ4dz0qwXXLrrMujqKD/?= =?us-ascii?Q?qwWGv+Uls68A/zCDPNqbwDGeiMgiMBcTkw9CmPkEb/+Uzu59EmY4yBQs02fM?= =?us-ascii?Q?tWqJgrXzg5pPgNK2jDEVjFbrFvYLw0j5ShOnCBV4bVO7cudYo1PcpQxBThlo?= =?us-ascii?Q?jBtY4yNjEgl260L/qVtUPp3n7Q2EMr9nQh?= X-Microsoft-Exchange-Diagnostics: 1; CO1PR02MB046; 6:juy/SvAra780+/zQSNyllUBbr7NzCs9+QgeZp6b7K4qaumQM6/XDm1YW8wDaJ5BZ55ADv2n6xDWZiAC7xmL5VVPLpVpF/giOJZsq65exc0SR7qejmLW+b+jWn5yngYVBad1rVK5kkyeoPtgpIEz5a5mk0E40Oah/Ix8TuauCIp2mCCg/0NhvCyUAnInzYYr71m5kxq6BifcYMxEEFmUHA84sQyNaMBZfFSiIJ9YEwQNKVCjCjmND45WYpw4hZQMAvU6m/uhMBCng13qTT6GDCQgqNtaD3MhirA6IG+nqiEXS2uR2+riNxC6Axc2RgX7VAdNHw5Jvjms9Z8k/s3g21XzAskUlSuR7IO5VLp7gUhw1fYaTNdRR72h1f4s9hnbNrIr+9tlWrsLTOA29ngqeSd6C9gmkHDO03fhQ5a4hazvKdSSxOUlKONw2PdXPIolgKg3YmfB9vx7q3jiV4Wh2kg==; 5:YcvQuRjO2+4yW41i1j4BE555+/eb3fovHZpD/AS2d5TZ/zap7G5Ki/J9I+BfHzEDL3+Ug8nWO/+4XPhFSlrGHF9mGzonyimh2Zh2jZ3yNkXurRWAvlFAQNLp5Rcot9YS/hk6M/bZjeRyj3duenmANw==; 24:p00T4io4oxyJ6TFaua+MhT58Okpl2IHlZHXAuiBZL62zAqlh+TCfz5EN9/qh/Wnd/iEwbYK57AUFvZ1hdDtiWP1veHyhm/7S6ZSKfANmAWQ= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; CO1PR02MB046; 7:hiMnT2i4LX1lkp4Hy/iB1Jp1sUJeVR7CqiFzc+4RldGFPerk7tLRFJb06Ua+gW1NoxrejjpxVTLeC2fMsNFrupYWiHGlAPD073PGv+3vMAFbX9Dnc0NlmO2WifzVWeNT/eXETx8COl6QuRgGKE9UbViiy5bpEE5NjBrZHKA82gHKzxY39RPCV7ypRHjdUqxJDjhPoaYGCJKLuSMqv+3OPQcuCG2IecrA/8uot49Bn4MATVf5WwEpChNzuDP2kKRnE/nnhKEATQiqNlzEf4jmZWJq1KxaC1ucSxDqXCdLHLjp5wXJjOm7pT+bN7AgaixCLlDzzrY1cg1Da5EsLcsbCgPGKgQkE+S+kfnqhJNBJAiUxoN8HVPZw8yKiv8GRk63YUSbr2r49yXfADF/R5eZygp4SpQXEPXhxRVHRDyxJ1C//9iEQ2nhUsIk9yl1a/OXw9hoozAL3BH2Y2bmIcDEuQ== X-OriginatorOrg: sandisk.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Jan 2017 19:08:04.5158 (UTC) X-MS-Exchange-CrossTenant-Id: fcd9ea9c-ae8c-460c-ab3c-3db42d7ac64d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=fcd9ea9c-ae8c-460c-ab3c-3db42d7ac64d; Ip=[63.163.107.21]; Helo=[milsmgep15.sandisk.com] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CO1PR02MB046 Sender: linux-rdma-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-rdma@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Additionally, switch from struct ib_dma_mapping_ops to struct dma_mapping_ops. Update the comments that refer to the source files removed by this patch. This patch eliminates one branch from every ib_dma_map_*() call. Signed-off-by: Bart Van Assche Reviewed-by: Leon Romanovsky Cc: Christoph Hellwig Cc: Andrew Boyer Cc: Dennis Dalessandro Cc: Jonathan Toppins Cc: Alex Estrin --- drivers/infiniband/sw/rdmavt/Kconfig | 1 + drivers/infiniband/sw/rdmavt/Makefile | 2 +- drivers/infiniband/sw/rdmavt/dma.c | 198 ---------------------------------- drivers/infiniband/sw/rdmavt/dma.h | 53 --------- drivers/infiniband/sw/rdmavt/mr.c | 8 +- drivers/infiniband/sw/rdmavt/vt.c | 5 +- drivers/infiniband/sw/rdmavt/vt.h | 1 - drivers/infiniband/sw/rxe/Kconfig | 1 + drivers/infiniband/sw/rxe/Makefile | 1 - drivers/infiniband/sw/rxe/rxe_dma.c | 183 ------------------------------- drivers/infiniband/sw/rxe/rxe_loc.h | 2 - drivers/infiniband/sw/rxe/rxe_verbs.c | 3 +- include/rdma/ib_verbs.h | 117 +++----------------- 13 files changed, 27 insertions(+), 548 deletions(-) delete mode 100644 drivers/infiniband/sw/rdmavt/dma.c delete mode 100644 drivers/infiniband/sw/rdmavt/dma.h delete mode 100644 drivers/infiniband/sw/rxe/rxe_dma.c diff --git a/drivers/infiniband/sw/rdmavt/Kconfig b/drivers/infiniband/sw/rdmavt/Kconfig index 1da8d01a6855..fdd001ce13d8 100644 --- a/drivers/infiniband/sw/rdmavt/Kconfig +++ b/drivers/infiniband/sw/rdmavt/Kconfig @@ -1,5 +1,6 @@ config INFINIBAND_RDMAVT tristate "RDMA verbs transport library" depends on 64BIT + select DMA_VIRT_OPS ---help--- This is a common software verbs provider for RDMA networks. diff --git a/drivers/infiniband/sw/rdmavt/Makefile b/drivers/infiniband/sw/rdmavt/Makefile index ccaa7992ac97..2a821d2fb569 100644 --- a/drivers/infiniband/sw/rdmavt/Makefile +++ b/drivers/infiniband/sw/rdmavt/Makefile @@ -7,7 +7,7 @@ # obj-$(CONFIG_INFINIBAND_RDMAVT) += rdmavt.o -rdmavt-y := vt.o ah.o cq.o dma.o mad.o mcast.o mmap.o mr.o pd.o qp.o srq.o \ +rdmavt-y := vt.o ah.o cq.o mad.o mcast.o mmap.o mr.o pd.o qp.o srq.o \ trace.o CFLAGS_trace.o = -I$(src) diff --git a/drivers/infiniband/sw/rdmavt/dma.c b/drivers/infiniband/sw/rdmavt/dma.c deleted file mode 100644 index f2cefb0d9180..000000000000 --- a/drivers/infiniband/sw/rdmavt/dma.c +++ /dev/null @@ -1,198 +0,0 @@ -/* - * Copyright(c) 2016 Intel Corporation. - * - * This file is provided under a dual BSD/GPLv2 license. When using or - * redistributing this file, you may do so under either license. - * - * GPL LICENSE SUMMARY - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * BSD LICENSE - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * - Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - Neither the name of Intel Corporation nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ -#include -#include -#include - -#include "dma.h" - -#define BAD_DMA_ADDRESS ((u64)0) - -/* - * The following functions implement driver specific replacements - * for the ib_dma_*() functions. - * - * These functions return kernel virtual addresses instead of - * device bus addresses since the driver uses the CPU to copy - * data instead of using hardware DMA. - */ - -static int rvt_mapping_error(struct ib_device *dev, u64 dma_addr) -{ - return dma_addr == BAD_DMA_ADDRESS; -} - -static u64 rvt_dma_map_single(struct ib_device *dev, void *cpu_addr, - size_t size, enum dma_data_direction direction) -{ - if (WARN_ON(!valid_dma_direction(direction))) - return BAD_DMA_ADDRESS; - - return (u64)cpu_addr; -} - -static void rvt_dma_unmap_single(struct ib_device *dev, u64 addr, size_t size, - enum dma_data_direction direction) -{ - /* This is a stub, nothing to be done here */ -} - -static u64 rvt_dma_map_page(struct ib_device *dev, struct page *page, - unsigned long offset, size_t size, - enum dma_data_direction direction) -{ - u64 addr; - - if (WARN_ON(!valid_dma_direction(direction))) - return BAD_DMA_ADDRESS; - - addr = (u64)page_address(page); - if (addr) - addr += offset; - - return addr; -} - -static void rvt_dma_unmap_page(struct ib_device *dev, u64 addr, size_t size, - enum dma_data_direction direction) -{ - /* This is a stub, nothing to be done here */ -} - -static int rvt_map_sg(struct ib_device *dev, struct scatterlist *sgl, - int nents, enum dma_data_direction direction) -{ - struct scatterlist *sg; - u64 addr; - int i; - int ret = nents; - - if (WARN_ON(!valid_dma_direction(direction))) - return 0; - - for_each_sg(sgl, sg, nents, i) { - addr = (u64)page_address(sg_page(sg)); - if (!addr) { - ret = 0; - break; - } - sg->dma_address = addr + sg->offset; -#ifdef CONFIG_NEED_SG_DMA_LENGTH - sg->dma_length = sg->length; -#endif - } - return ret; -} - -static void rvt_unmap_sg(struct ib_device *dev, - struct scatterlist *sg, int nents, - enum dma_data_direction direction) -{ - /* This is a stub, nothing to be done here */ -} - -static int rvt_map_sg_attrs(struct ib_device *dev, struct scatterlist *sgl, - int nents, enum dma_data_direction direction, - unsigned long attrs) -{ - return rvt_map_sg(dev, sgl, nents, direction); -} - -static void rvt_unmap_sg_attrs(struct ib_device *dev, - struct scatterlist *sg, int nents, - enum dma_data_direction direction, - unsigned long attrs) -{ - return rvt_unmap_sg(dev, sg, nents, direction); -} - -static void rvt_sync_single_for_cpu(struct ib_device *dev, u64 addr, - size_t size, enum dma_data_direction dir) -{ -} - -static void rvt_sync_single_for_device(struct ib_device *dev, u64 addr, - size_t size, - enum dma_data_direction dir) -{ -} - -static void *rvt_dma_alloc_coherent(struct ib_device *dev, size_t size, - u64 *dma_handle, gfp_t flag) -{ - struct page *p; - void *addr = NULL; - - p = alloc_pages(flag, get_order(size)); - if (p) - addr = page_address(p); - if (dma_handle) - *dma_handle = (u64)addr; - return addr; -} - -static void rvt_dma_free_coherent(struct ib_device *dev, size_t size, - void *cpu_addr, u64 dma_handle) -{ - free_pages((unsigned long)cpu_addr, get_order(size)); -} - -struct ib_dma_mapping_ops rvt_default_dma_mapping_ops = { - .mapping_error = rvt_mapping_error, - .map_single = rvt_dma_map_single, - .unmap_single = rvt_dma_unmap_single, - .map_page = rvt_dma_map_page, - .unmap_page = rvt_dma_unmap_page, - .map_sg = rvt_map_sg, - .unmap_sg = rvt_unmap_sg, - .map_sg_attrs = rvt_map_sg_attrs, - .unmap_sg_attrs = rvt_unmap_sg_attrs, - .sync_single_for_cpu = rvt_sync_single_for_cpu, - .sync_single_for_device = rvt_sync_single_for_device, - .alloc_coherent = rvt_dma_alloc_coherent, - .free_coherent = rvt_dma_free_coherent -}; diff --git a/drivers/infiniband/sw/rdmavt/dma.h b/drivers/infiniband/sw/rdmavt/dma.h deleted file mode 100644 index 979f07e09195..000000000000 --- a/drivers/infiniband/sw/rdmavt/dma.h +++ /dev/null @@ -1,53 +0,0 @@ -#ifndef DEF_RDMAVTDMA_H -#define DEF_RDMAVTDMA_H - -/* - * Copyright(c) 2016 Intel Corporation. - * - * This file is provided under a dual BSD/GPLv2 license. When using or - * redistributing this file, you may do so under either license. - * - * GPL LICENSE SUMMARY - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of version 2 of the GNU General Public License as - * published by the Free Software Foundation. - * - * This program is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * General Public License for more details. - * - * BSD LICENSE - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * - Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * - Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * - Neither the name of Intel Corporation nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ - -extern struct ib_dma_mapping_ops rvt_default_dma_mapping_ops; - -#endif /* DEF_RDMAVTDMA_H */ diff --git a/drivers/infiniband/sw/rdmavt/mr.c b/drivers/infiniband/sw/rdmavt/mr.c index 52fd15276ee6..14d0ac6efd08 100644 --- a/drivers/infiniband/sw/rdmavt/mr.c +++ b/drivers/infiniband/sw/rdmavt/mr.c @@ -305,8 +305,8 @@ static void __rvt_free_mr(struct rvt_mr *mr) * @acc: access flags * * Return: the memory region on success, otherwise returns an errno. - * Note that all DMA addresses should be created via the - * struct ib_dma_mapping_ops functions (see dma.c). + * Note that all DMA addresses should be created via the functions in + * struct dma_virt_ops. */ struct ib_mr *rvt_get_dma_mr(struct ib_pd *pd, int acc) { @@ -782,7 +782,7 @@ int rvt_lkey_ok(struct rvt_lkey_table *rkt, struct rvt_pd *pd, /* * We use LKEY == zero for kernel virtual addresses - * (see rvt_get_dma_mr and dma.c). + * (see rvt_get_dma_mr() and dma_virt_ops). */ rcu_read_lock(); if (sge->lkey == 0) { @@ -880,7 +880,7 @@ int rvt_rkey_ok(struct rvt_qp *qp, struct rvt_sge *sge, /* * We use RKEY == zero for kernel virtual addresses - * (see rvt_get_dma_mr and dma.c). + * (see rvt_get_dma_mr() and dma_virt_ops). */ rcu_read_lock(); if (rkey == 0) { diff --git a/drivers/infiniband/sw/rdmavt/vt.c b/drivers/infiniband/sw/rdmavt/vt.c index d430c2f7cec4..6a81b179f631 100644 --- a/drivers/infiniband/sw/rdmavt/vt.c +++ b/drivers/infiniband/sw/rdmavt/vt.c @@ -47,6 +47,7 @@ #include #include +#include #include "vt.h" #include "trace.h" @@ -777,8 +778,8 @@ int rvt_register_device(struct rvt_dev_info *rdi) } /* DMA Operations */ - rdi->ibdev.dma_ops = - rdi->ibdev.dma_ops ? : &rvt_default_dma_mapping_ops; + if (rdi->ibdev.dma_device->dma_ops == NULL) + set_dma_ops(rdi->ibdev.dma_device, &dma_virt_ops); /* Protection Domain */ spin_lock_init(&rdi->n_pds_lock); diff --git a/drivers/infiniband/sw/rdmavt/vt.h b/drivers/infiniband/sw/rdmavt/vt.h index 6b01eaa4461b..f363505312be 100644 --- a/drivers/infiniband/sw/rdmavt/vt.h +++ b/drivers/infiniband/sw/rdmavt/vt.h @@ -50,7 +50,6 @@ #include #include -#include "dma.h" #include "pd.h" #include "qp.h" #include "ah.h" diff --git a/drivers/infiniband/sw/rxe/Kconfig b/drivers/infiniband/sw/rxe/Kconfig index 1e4e628fe7b0..7d1ac27ed251 100644 --- a/drivers/infiniband/sw/rxe/Kconfig +++ b/drivers/infiniband/sw/rxe/Kconfig @@ -2,6 +2,7 @@ config RDMA_RXE tristate "Software RDMA over Ethernet (RoCE) driver" depends on INET && PCI && INFINIBAND depends on NET_UDP_TUNNEL + select DMA_VIRT_OPS ---help--- This driver implements the InfiniBand RDMA transport over the Linux network stack. It enables a system with a diff --git a/drivers/infiniband/sw/rxe/Makefile b/drivers/infiniband/sw/rxe/Makefile index 3b3fb9d1c470..ec35ff022a42 100644 --- a/drivers/infiniband/sw/rxe/Makefile +++ b/drivers/infiniband/sw/rxe/Makefile @@ -14,7 +14,6 @@ rdma_rxe-y := \ rxe_qp.o \ rxe_cq.o \ rxe_mr.o \ - rxe_dma.o \ rxe_opcode.o \ rxe_mmap.o \ rxe_icrc.o \ diff --git a/drivers/infiniband/sw/rxe/rxe_dma.c b/drivers/infiniband/sw/rxe/rxe_dma.c deleted file mode 100644 index a0f8af5851ae..000000000000 --- a/drivers/infiniband/sw/rxe/rxe_dma.c +++ /dev/null @@ -1,183 +0,0 @@ -/* - * Copyright (c) 2016 Mellanox Technologies Ltd. All rights reserved. - * Copyright (c) 2015 System Fabric Works, Inc. All rights reserved. - * - * This software is available to you under a choice of one of two - * licenses. You may choose to be licensed under the terms of the GNU - * General Public License (GPL) Version 2, available from the file - * COPYING in the main directory of this source tree, or the - * OpenIB.org BSD license below: - * - * Redistribution and use in source and binary forms, with or - * without modification, are permitted provided that the following - * conditions are met: - * - * - Redistributions of source code must retain the above - * copyright notice, this list of conditions and the following - * disclaimer. - * - * - Redistributions in binary form must reproduce the above - * copyright notice, this list of conditions and the following - * disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS - * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -#include "rxe.h" -#include "rxe_loc.h" - -#define DMA_BAD_ADDER ((u64)0) - -static int rxe_mapping_error(struct ib_device *dev, u64 dma_addr) -{ - return dma_addr == DMA_BAD_ADDER; -} - -static u64 rxe_dma_map_single(struct ib_device *dev, - void *cpu_addr, size_t size, - enum dma_data_direction direction) -{ - WARN_ON(!valid_dma_direction(direction)); - return (uintptr_t)cpu_addr; -} - -static void rxe_dma_unmap_single(struct ib_device *dev, - u64 addr, size_t size, - enum dma_data_direction direction) -{ - WARN_ON(!valid_dma_direction(direction)); -} - -static u64 rxe_dma_map_page(struct ib_device *dev, - struct page *page, - unsigned long offset, - size_t size, enum dma_data_direction direction) -{ - u64 addr; - - WARN_ON(!valid_dma_direction(direction)); - - if (offset + size > PAGE_SIZE) { - addr = DMA_BAD_ADDER; - goto done; - } - - addr = (uintptr_t)page_address(page); - if (addr) - addr += offset; - -done: - return addr; -} - -static void rxe_dma_unmap_page(struct ib_device *dev, - u64 addr, size_t size, - enum dma_data_direction direction) -{ - WARN_ON(!valid_dma_direction(direction)); -} - -static int rxe_map_sg(struct ib_device *dev, struct scatterlist *sgl, - int nents, enum dma_data_direction direction) -{ - struct scatterlist *sg; - u64 addr; - int i; - int ret = nents; - - WARN_ON(!valid_dma_direction(direction)); - - for_each_sg(sgl, sg, nents, i) { - addr = (uintptr_t)page_address(sg_page(sg)); - if (!addr) { - ret = 0; - break; - } - sg->dma_address = addr + sg->offset; -#ifdef CONFIG_NEED_SG_DMA_LENGTH - sg->dma_length = sg->length; -#endif - } - - return ret; -} - -static void rxe_unmap_sg(struct ib_device *dev, - struct scatterlist *sg, int nents, - enum dma_data_direction direction) -{ - WARN_ON(!valid_dma_direction(direction)); -} - -static int rxe_map_sg_attrs(struct ib_device *dev, struct scatterlist *sgl, - int nents, enum dma_data_direction direction, - unsigned long attrs) -{ - return rxe_map_sg(dev, sgl, nents, direction); -} - -static void rxe_unmap_sg_attrs(struct ib_device *dev, - struct scatterlist *sg, int nents, - enum dma_data_direction direction, - unsigned long attrs) -{ - rxe_unmap_sg(dev, sg, nents, direction); -} - -static void rxe_sync_single_for_cpu(struct ib_device *dev, - u64 addr, - size_t size, enum dma_data_direction dir) -{ -} - -static void rxe_sync_single_for_device(struct ib_device *dev, - u64 addr, - size_t size, enum dma_data_direction dir) -{ -} - -static void *rxe_dma_alloc_coherent(struct ib_device *dev, size_t size, - u64 *dma_handle, gfp_t flag) -{ - struct page *p; - void *addr = NULL; - - p = alloc_pages(flag, get_order(size)); - if (p) - addr = page_address(p); - - if (dma_handle) - *dma_handle = (uintptr_t)addr; - - return addr; -} - -static void rxe_dma_free_coherent(struct ib_device *dev, size_t size, - void *cpu_addr, u64 dma_handle) -{ - free_pages((unsigned long)cpu_addr, get_order(size)); -} - -struct ib_dma_mapping_ops rxe_dma_mapping_ops = { - .mapping_error = rxe_mapping_error, - .map_single = rxe_dma_map_single, - .unmap_single = rxe_dma_unmap_single, - .map_page = rxe_dma_map_page, - .unmap_page = rxe_dma_unmap_page, - .map_sg = rxe_map_sg, - .unmap_sg = rxe_unmap_sg, - .map_sg_attrs = rxe_map_sg_attrs, - .unmap_sg_attrs = rxe_unmap_sg_attrs, - .sync_single_for_cpu = rxe_sync_single_for_cpu, - .sync_single_for_device = rxe_sync_single_for_device, - .alloc_coherent = rxe_dma_alloc_coherent, - .free_coherent = rxe_dma_free_coherent -}; diff --git a/drivers/infiniband/sw/rxe/rxe_loc.h b/drivers/infiniband/sw/rxe/rxe_loc.h index efe4c6a35442..267f89d91da7 100644 --- a/drivers/infiniband/sw/rxe/rxe_loc.h +++ b/drivers/infiniband/sw/rxe/rxe_loc.h @@ -221,8 +221,6 @@ int rxe_srq_from_attr(struct rxe_dev *rxe, struct rxe_srq *srq, struct ib_srq_attr *attr, enum ib_srq_attr_mask mask, struct ib_udata *udata); -extern struct ib_dma_mapping_ops rxe_dma_mapping_ops; - void rxe_release(struct kref *kref); int rxe_completer(void *arg); diff --git a/drivers/infiniband/sw/rxe/rxe_verbs.c b/drivers/infiniband/sw/rxe/rxe_verbs.c index beb7021ff18a..b75c19bfcb6b 100644 --- a/drivers/infiniband/sw/rxe/rxe_verbs.c +++ b/drivers/infiniband/sw/rxe/rxe_verbs.c @@ -31,6 +31,7 @@ * SOFTWARE. */ +#include #include "rxe.h" #include "rxe_loc.h" #include "rxe_queue.h" @@ -1237,7 +1238,7 @@ int rxe_register_device(struct rxe_dev *rxe) dev->dma_device = rxe->ifc_ops->dma_device(rxe); dev->local_dma_lkey = 0; dev->node_guid = rxe->ifc_ops->node_guid(rxe); - dev->dma_ops = &rxe_dma_mapping_ops; + set_dma_ops(dev->dma_device, &dma_virt_ops); dev->uverbs_abi_ver = RXE_UVERBS_ABI_VERSION; dev->uverbs_cmd_mask = BIT_ULL(IB_USER_VERBS_CMD_GET_CONTEXT) diff --git a/include/rdma/ib_verbs.h b/include/rdma/ib_verbs.h index 958a24d8fae7..89e80eb77e06 100644 --- a/include/rdma/ib_verbs.h +++ b/include/rdma/ib_verbs.h @@ -1783,53 +1783,6 @@ struct ib_cache { u8 *lmc_cache; }; -struct ib_dma_mapping_ops { - int (*mapping_error)(struct ib_device *dev, - u64 dma_addr); - u64 (*map_single)(struct ib_device *dev, - void *ptr, size_t size, - enum dma_data_direction direction); - void (*unmap_single)(struct ib_device *dev, - u64 addr, size_t size, - enum dma_data_direction direction); - u64 (*map_page)(struct ib_device *dev, - struct page *page, unsigned long offset, - size_t size, - enum dma_data_direction direction); - void (*unmap_page)(struct ib_device *dev, - u64 addr, size_t size, - enum dma_data_direction direction); - int (*map_sg)(struct ib_device *dev, - struct scatterlist *sg, int nents, - enum dma_data_direction direction); - void (*unmap_sg)(struct ib_device *dev, - struct scatterlist *sg, int nents, - enum dma_data_direction direction); - int (*map_sg_attrs)(struct ib_device *dev, - struct scatterlist *sg, int nents, - enum dma_data_direction direction, - unsigned long attrs); - void (*unmap_sg_attrs)(struct ib_device *dev, - struct scatterlist *sg, int nents, - enum dma_data_direction direction, - unsigned long attrs); - void (*sync_single_for_cpu)(struct ib_device *dev, - u64 dma_handle, - size_t size, - enum dma_data_direction dir); - void (*sync_single_for_device)(struct ib_device *dev, - u64 dma_handle, - size_t size, - enum dma_data_direction dir); - void *(*alloc_coherent)(struct ib_device *dev, - size_t size, - u64 *dma_handle, - gfp_t flag); - void (*free_coherent)(struct ib_device *dev, - size_t size, void *cpu_addr, - u64 dma_handle); -}; - struct iw_cm_verbs; struct ib_port_immutable { @@ -2091,7 +2044,6 @@ struct ib_device { struct ib_rwq_ind_table_init_attr *init_attr, struct ib_udata *udata); int (*destroy_rwq_ind_table)(struct ib_rwq_ind_table *wq_ind_table); - struct ib_dma_mapping_ops *dma_ops; struct module *owner; struct device dev; @@ -2966,8 +2918,6 @@ static inline int ib_req_ncomp_notif(struct ib_cq *cq, int wc_cnt) */ static inline int ib_dma_mapping_error(struct ib_device *dev, u64 dma_addr) { - if (dev->dma_ops) - return dev->dma_ops->mapping_error(dev, dma_addr); return dma_mapping_error(dev->dma_device, dma_addr); } @@ -2982,8 +2932,6 @@ static inline u64 ib_dma_map_single(struct ib_device *dev, void *cpu_addr, size_t size, enum dma_data_direction direction) { - if (dev->dma_ops) - return dev->dma_ops->map_single(dev, cpu_addr, size, direction); return dma_map_single(dev->dma_device, cpu_addr, size, direction); } @@ -2998,10 +2946,7 @@ static inline void ib_dma_unmap_single(struct ib_device *dev, u64 addr, size_t size, enum dma_data_direction direction) { - if (dev->dma_ops) - dev->dma_ops->unmap_single(dev, addr, size, direction); - else - dma_unmap_single(dev->dma_device, addr, size, direction); + dma_unmap_single(dev->dma_device, addr, size, direction); } static inline u64 ib_dma_map_single_attrs(struct ib_device *dev, @@ -3036,8 +2981,6 @@ static inline u64 ib_dma_map_page(struct ib_device *dev, size_t size, enum dma_data_direction direction) { - if (dev->dma_ops) - return dev->dma_ops->map_page(dev, page, offset, size, direction); return dma_map_page(dev->dma_device, page, offset, size, direction); } @@ -3052,10 +2995,7 @@ static inline void ib_dma_unmap_page(struct ib_device *dev, u64 addr, size_t size, enum dma_data_direction direction) { - if (dev->dma_ops) - dev->dma_ops->unmap_page(dev, addr, size, direction); - else - dma_unmap_page(dev->dma_device, addr, size, direction); + dma_unmap_page(dev->dma_device, addr, size, direction); } /** @@ -3069,8 +3009,6 @@ static inline int ib_dma_map_sg(struct ib_device *dev, struct scatterlist *sg, int nents, enum dma_data_direction direction) { - if (dev->dma_ops) - return dev->dma_ops->map_sg(dev, sg, nents, direction); return dma_map_sg(dev->dma_device, sg, nents, direction); } @@ -3085,10 +3023,7 @@ static inline void ib_dma_unmap_sg(struct ib_device *dev, struct scatterlist *sg, int nents, enum dma_data_direction direction) { - if (dev->dma_ops) - dev->dma_ops->unmap_sg(dev, sg, nents, direction); - else - dma_unmap_sg(dev->dma_device, sg, nents, direction); + dma_unmap_sg(dev->dma_device, sg, nents, direction); } static inline int ib_dma_map_sg_attrs(struct ib_device *dev, @@ -3096,12 +3031,8 @@ static inline int ib_dma_map_sg_attrs(struct ib_device *dev, enum dma_data_direction direction, unsigned long dma_attrs) { - if (dev->dma_ops) - return dev->dma_ops->map_sg_attrs(dev, sg, nents, direction, - dma_attrs); - else - return dma_map_sg_attrs(dev->dma_device, sg, nents, direction, - dma_attrs); + return dma_map_sg_attrs(dev->dma_device, sg, nents, direction, + dma_attrs); } static inline void ib_dma_unmap_sg_attrs(struct ib_device *dev, @@ -3109,12 +3040,7 @@ static inline void ib_dma_unmap_sg_attrs(struct ib_device *dev, enum dma_data_direction direction, unsigned long dma_attrs) { - if (dev->dma_ops) - return dev->dma_ops->unmap_sg_attrs(dev, sg, nents, direction, - dma_attrs); - else - dma_unmap_sg_attrs(dev->dma_device, sg, nents, direction, - dma_attrs); + dma_unmap_sg_attrs(dev->dma_device, sg, nents, direction, dma_attrs); } /** * ib_sg_dma_address - Return the DMA address from a scatter/gather entry @@ -3156,10 +3082,7 @@ static inline void ib_dma_sync_single_for_cpu(struct ib_device *dev, size_t size, enum dma_data_direction dir) { - if (dev->dma_ops) - dev->dma_ops->sync_single_for_cpu(dev, addr, size, dir); - else - dma_sync_single_for_cpu(dev->dma_device, addr, size, dir); + dma_sync_single_for_cpu(dev->dma_device, addr, size, dir); } /** @@ -3174,10 +3097,7 @@ static inline void ib_dma_sync_single_for_device(struct ib_device *dev, size_t size, enum dma_data_direction dir) { - if (dev->dma_ops) - dev->dma_ops->sync_single_for_device(dev, addr, size, dir); - else - dma_sync_single_for_device(dev->dma_device, addr, size, dir); + dma_sync_single_for_device(dev->dma_device, addr, size, dir); } /** @@ -3192,16 +3112,12 @@ static inline void *ib_dma_alloc_coherent(struct ib_device *dev, u64 *dma_handle, gfp_t flag) { - if (dev->dma_ops) - return dev->dma_ops->alloc_coherent(dev, size, dma_handle, flag); - else { - dma_addr_t handle; - void *ret; - - ret = dma_alloc_coherent(dev->dma_device, size, &handle, flag); - *dma_handle = handle; - return ret; - } + dma_addr_t handle; + void *ret; + + ret = dma_alloc_coherent(dev->dma_device, size, &handle, flag); + *dma_handle = handle; + return ret; } /** @@ -3215,10 +3131,7 @@ static inline void ib_dma_free_coherent(struct ib_device *dev, size_t size, void *cpu_addr, u64 dma_handle) { - if (dev->dma_ops) - dev->dma_ops->free_coherent(dev, size, cpu_addr, dma_handle); - else - dma_free_coherent(dev->dma_device, size, cpu_addr, dma_handle); + dma_free_coherent(dev->dma_device, size, cpu_addr, dma_handle); } /**