From patchwork Wed Apr 6 18:57:41 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bart Van Assche X-Patchwork-Id: 8764531 Return-Path: X-Original-To: patchwork-linux-rdma@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork1.web.kernel.org (Postfix) with ESMTP id 2BF769F372 for ; Wed, 6 Apr 2016 18:57:53 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id C9E4F20125 for ; Wed, 6 Apr 2016 18:57:51 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 642992011E for ; Wed, 6 Apr 2016 18:57:50 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752780AbcDFS5t (ORCPT ); Wed, 6 Apr 2016 14:57:49 -0400 Received: from mail-bl2on0079.outbound.protection.outlook.com ([65.55.169.79]:27072 "EHLO na01-bl2-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752447AbcDFS5r (ORCPT ); Wed, 6 Apr 2016 14:57:47 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sandiskcorp.onmicrosoft.com; s=selector1-sandisk-com; h=From:To:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=QMKWmQLngd5vZpE1z0iGEC4hSlJT8hPSWBtCkGcMilc=; b=CBIevUOlf+Xsbad91incaW/6NJyQI4yIyyedPr0C71WkZzjFgtf+ljFLY5XkOAokMEvBKeNPWsTih/EMd49TAoq3lPWVcpAZPF9z4Wv+ZvUUJpU0akNzbpmDKGkSgszdpnBeng7XNY8fbQDHLBxI8VYT4JXDwPoHWxAreuL5HNI= Received: from SN1PR02CA0008.namprd02.prod.outlook.com (10.165.224.146) by CY1PR0201MB1867.namprd02.prod.outlook.com (10.163.56.13) with Microsoft SMTP Server (TLS) id 15.1.447.15; Wed, 6 Apr 2016 18:57:42 +0000 Received: from BL2FFO11OLC011.protection.gbl (2a01:111:f400:7c09::129) by SN1PR02CA0008.outlook.office365.com (2a01:111:e400:7be1::18) with Microsoft SMTP Server (TLS) id 15.1.453.26 via Frontend Transport; Wed, 6 Apr 2016 18:57:43 +0000 Authentication-Results: spf=pass (sender IP is 63.163.107.21) smtp.mailfrom=sandisk.com; vger.kernel.org; dkim=none (message not signed) header.d=none;vger.kernel.org; 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 BL2FFO11OLC011.mail.protection.outlook.com (10.173.160.157) with Microsoft SMTP Server (TLS) id 15.1.453.6 via Frontend Transport; Wed, 6 Apr 2016 18:57:42 +0000 Received: from MILHUBIP04.sdcorp.global.sandisk.com (Unknown_Domain [172.22.12.162]) (using TLS with cipher AES256-SHA (256/256 bits)) (Client did not present a certificate) by (Symantec Messaging Gateway) with SMTP id 65.65.03047.CFB55075; Wed, 6 Apr 2016 11:57:01 -0700 (PDT) Received: from milsmgip12.sandisk.com (10.177.8.100) by MILHUBIP04.sdcorp.global.sandisk.com (10.177.9.97) with Microsoft SMTP Server id 14.3.248.2; Wed, 6 Apr 2016 11:57:41 -0700 X-AuditID: ac160c69-5dfff70000000be7-8e-57055bfc246a Received: from exp-402881.sandisk.com ( [10.177.8.100]) by (Symantec Messaging Gateway) with SMTP id CC.98.03935.52C55075; Wed, 6 Apr 2016 11:57:41 -0700 (PDT) Subject: [PATCH 4/4] IB/srpt: Convert to percpu_ida tag allocation To: Doug Ledford References: <57055BC6.7070402@sandisk.com> CC: "Nicholas A. Bellinger" , Christoph Hellwig , Sagi Grimberg , "linux-rdma@vger.kernel.org" , target-devel From: Bart Van Assche Message-ID: <57055C25.4060304@sandisk.com> Date: Wed, 6 Apr 2016 11:57:41 -0700 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:38.0) Gecko/20100101 Thunderbird/38.7.0 MIME-Version: 1.0 In-Reply-To: <57055BC6.7070402@sandisk.com> X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFvrDLMWRmVeSWpSXmKPExsWyRoxnke7faNZwgwWbuCxenv/AarFy9VEm i2eHelks2lafYbRY9/o9i0Xr0rdMDmwe5+9tZPG4v/0Ik8fumw1sHu/3XWXz+LxJLoA1issm JTUnsyy1SN8ugSvj8Pk5zAWzPSv6J39hbWBcb93FyMkhIWAi8ePgevYuRi4OIYG5TBIv38xm hnC2M0p8ujeRBaZqS8NVRojEUkaJ7TvesoMkhAWcJGa07WUFsUUE1CQ2vVoEFhcS0JKYvK6f BaSBWeA+o8Sb5ROYQRJsAkYS397PBEpwcPACFa3bLAASZhFQkfj/chlYr6hAhETrg6dgNq+A oMTJmU/AjuAU0Jb43fWWCaSVWUBTYv0ufZAws4C8xPa3c8COlhA4yioxc8FKJogb1CVOLpnP NIFReBaSUbMQ2mchaV/AyLyKUSw3M6c4Nz21wNBUrzgxLyWzOFsvOT93EyMkTjJ3MN594n2I UYCDUYmHV8CKJVyINbGsuDL3EKMEB7OSCG9DBGu4EG9KYmVValF+fFFpTmrxIUZpDhYlcV63 e1/ChATSE0tSs1NTC1KLYLJMHJxSDYwcn5JYV0z/wrrCjGMdi7tE4e/5snOqOawsioKeL3N1 PLJfwrZB5UPQRZmp3w6crb72YxNr8Ve2tVKsJ+dWnZHy3HbUdH1H+a0eabekl2v99Vnn7FyX ErZTnpGZuayjpswwPjO581RWggtfuLf5sh1PL4tyi05T2x52myfp06cf59+6BIVHWSqxFGck GmoxFxUnAgBnXSZHjwIAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFvrEJMWRmVeSWpSXmKPExsXCtZEjRVc1hjXcYMdNWYuX5z+wWqxcfZTJ 4tmhXhaLttVnGC3WvX7PYtG69C2TA5vH+XsbWTzubz/C5LH7ZgObx/t9V9k8Pm+SC2CN4rJJ Sc3JLEst0rdL4Mo4fH4Oc8Fsz4r+yV9YGxjXW3cxcnJICJhIbGm4yghiCwksZpT4tzkWxBYW cJKY0baXFcQWEVCT2PRqETtEjZbE5HX9LF2MXBzMAg8ZJT53zWECSbAJGEl8ez8TKMHBwQtU tG6zAEiYRUBF4v/LZWC9ogIREq0PnoLZvAKCEidnPmEBsTkFtCV+d70FG8MsoC7xZ94lZghb XmL72znMExj5ZiFpmYWkbBaSsgWMzKsYxXIzc4pz0zMLDI30ihPzUjKLs/WS83M3MYJDlTNq B+P1ieaHGJk4OKUaGPtLLp9M9Fz47p/5kZzuV6dOzH8vZ/eiPWLyz5+/2yamlS6/8ntR7tJJ 7ltiGCPcj2gIrflyUXu1wfl53fP2uR2YuUw8w5PxaeGvY0ZHrtyJXWHyRCOPxVA+RkV64twn 5S7z5hskbzh87KhKz/8XNe+33eBVFIuYNv3moZ/SMrP60y4mizy2uuSvxFKckWioxVxUnAgA dP9pHgUCAAA= X-EOPAttributedMessage: 0 X-Forefront-Antispam-Report: CIP:63.163.107.21; IPV:NLI; CTRY:US; EFV:NLI; SFV:NSPM; SFS:(10009020)(6009001)(2980300002)(438002)(189002)(199003)(4001350100001)(586003)(4326007)(33656002)(83506001)(189998001)(87936001)(99136001)(6806005)(106466001)(59896002)(1220700001)(2906002)(36756003)(110136002)(50466002)(229853001)(92566002)(230700001)(53416004)(86362001)(23676002)(5008740100001)(5003600100002)(64126003)(81166005)(2270400002)(65816999)(2950100001)(77096005)(87266999)(19580405001)(76176999)(54356999)(50986999)(1096002)(19580395003)(80316001); DIR:OUT; SFP:1101; SCL:1; SRVR:CY1PR0201MB1867; H:milsmgep15.sandisk.com; FPR:; SPF:Pass; MLV:sfv; MX:1; A:1; LANG:en; X-Microsoft-Exchange-Diagnostics: 1; BL2FFO11OLC011; 1:RE5DuQyfok9l0v15EIgf60RVWSBWPUs7XBdRXNq2yd+UVyOoQXOaTBBxzUN97yYCFdEEV9BkLTwy1w9yfNv5xOH7DKfOTCO3DCY9GiUoNrOxHABd/Oui3E2xUU8nfMQXqoLveo4K0HtJTbzjia9sy3RfbWf223L/VDWY7KrZcOc6sCMNZXNA2ijH8DEBqDqa76ctGRdmfBKtmkQgHJwoFONy8o33h3frMxR4zpK1/ohOVyPtnfuQ/7ndpMlLJCZ0cj9HOIrSCG+ejLE7OltoO5xh2/0E19yBLQGh2aulIs4GCilrqR6USzUnrXtsx0VYLKv/luWrVt0/IWbSMvLBVe5SGk0eQ8ZvUbfqF0LKSxWdX9jB/7rc8T+L7GklySt1CP+3/tDqRM9HnToGW7kQZOjId6vygzbEnfXDt+Q0MDkP2+9yEtVHGooOgyKrISSJ5wgHF/GzgfA16pAdMV5aqC48cZGsUe5o0utuvvkDSEk= X-MS-Office365-Filtering-Correlation-Id: fc4e5b90-2583-44d1-8496-08d35e4d5580 X-Microsoft-Exchange-Diagnostics: 1; CY1PR0201MB1867; 2:M3Pmjha/vnISSwbySGI2tG2GWpeTki6LIcOZGU3jV8dlOPztNodAhAWliBQooTJbMvCA6uDK9NmKI9xReJfjihxIjP0U3+mRqnSm9hiqYt3KpHFjKxojZgJ9uTxn5bGQTAYrosWsSZRXXCK6Mh8hYPNfOpn0Gm8wfpow0v9EJUdZtEve8erk+hZd4VHUztPS; 3:L82g6SdduHCrJyRKvjjnkVr2w9/uArwLyUNlOPZTH04ed8Q3qW/qDXe+TWFiMjalWRVbEH4lu2dd/bWZkw3XKFj4HjSHcb9s3oUczir4cf80enoIevo5/aY479Jg0o5Hv0XS/WaGGdxXrpdAByxNc+Z12udrZLIP6xvwS8zp5VNq13wlJLgTWIwAuzUn4goke3xPtrIJf6aML1RVJ9/1G/3PXn+NkeDvVZRYVpp7HtLJDtnRjdbXpfG6PUAC6DL3/WQnKNFY5S6IBkI0jsKVzA== X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(8251501002); SRVR:CY1PR0201MB1867; X-Microsoft-Exchange-Diagnostics: 1; CY1PR0201MB1867; 25:uZgXjvs9vWwaFR6LDQu48lD0Tae7stVptLhNCqCbxaSAam4wHvU+8wg+ZYpeuosT0jHkyl5TJsUwYORVVufW4XHncg97QZvQwe7S1tnJrmjG/KCf5va4ENja1MJSjCleYIEKCY9bNeZopi94E3Zfjrg6hooAFPMwB/6FNDRlhp2PR2GQnhq7QJwt3zyP6WBmLxlMPoi5y/gSYgvDg27XxSV92O4oqHUCBTjTvxovVB+Rr4+kzlDtoAucivMWCdvGxBW9++4U7PYtCQlKDk+ZuUDN7KhM549IGIV1VXyArzxxCSsh1eBw/jwqFPSxeLoITIC8p8v92pyj126WKk3OGvVHf0O56Pqdh5IjYLNwjeN+p96+Rz1bMIsSL4RTCTuGYEpYj4VkqHBRo6kFZ++5K4BHDSXfaOayZYXyVtk2x+3o+gNJbADQtLcODgZfyzN+iIMfGONe+zqK9KezzAcS4c7sOGRIC3/AGw+Kxek2Q+xYIrzhCWBNnJgQp0IMJoR4WwsWpl4dDAU+BgUlYNbrvHOt9PnKVic5DwF986drrBnogFiqJCbYqi8Mzj0vkU5hH9ON8LsAgx1QACUS7zTVfJsdydIrVihILkWU72GQeZPqqx7Mh5z55ZfmKaU77KB703gbc5ntT/PB/TvLTd3DLoqq5BO3cm+g9J+6I41z6sc= X-Microsoft-Exchange-Diagnostics: 1; CY1PR0201MB1867; 20:0yGGxrSCTNr/IPL4yQ3GkI4co4uaEc1w9YEr2baPerSDcNZHo/8MaxsH5NsOitIkaqSDZAlFYoJXvP1/IV/+QHXePW4WJb8kOqCGYjGeZ35IV1QUUVJIqu0teI5EJskoadoKKv8CGUrtKytSn5iZ3IjMPnYAh7/2JZAnBcvTHxacBhkiEESw8BNFvNiq83ZFmDVRrcPHvwnaP/a04xjk8ceoYRERrtzUKjVUb78hKrQwflt881qoAuFPe0uviq4jFF7KSyFSs7W/5Sf5eh5FPaLYXVQ3n2c34/zZVRoiZhA6wOOQqUyE0wdWY0fCpckXm8KRY+M8aluXa03aMhfP/LibIWwE1SWMkR6UXJqh4OFh9g7HYS64p5L9fAHMZNKkXi3OCgoDuCZzveZr/aW0VOATX4CQkjMq3nkEMys2K+UyyaYXs3/XIBmfQnjVTy4gocxVk7Br1pQ2jJK1iPRXb0M3mCHlmdgozICRFHZCf1dm79IXss40pAjXOwW/7jWl; 4:OyrRfLTJoAh33EdAsClniGPaWv2Hleko3FQa1SLJkI6kcsZtniDBuyf0it1UKgANmLHobPaCk9G+RB7BRXQhr4lcEeUOqbK75tF8yh3EXVONgz6dw9VJLXmYEfOYOC0CV3mN2uyLQTk/1X9XWOVjSRvPyoK+YBcl9U09m062uQ+k7DzEPsgEkvRgt5pEDCfEKdCB1cW1xfKFlNY/p8NLxVyvZ/Wku7DQy1VnRXIQpqDauu+NpiZY40FoMWVmKY89SxQUzbQ2EnOgjqh+djvq5BcU5VfCzFwiU4RWXF3ObwqQsQl85RNZfAYLVS3xOJ/82JeqAOn2iIP2pHM8NPRDEGhEbTWSBOfxcSPNpT/EotVcgYDdmq5eA+JbvXCLSudwuUXqBjFXXqumZSqzTKQe7WZ3okMA3nNG8Vlv ymMKRHg= X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(601004)(2401047)(13018025)(5005006)(8121501046)(13016025)(3002001)(10201501046); SRVR:CY1PR0201MB1867; BCL:0; PCL:0; RULEID:; SRVR:CY1PR0201MB1867; X-Forefront-PRVS: 0904004ECB X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtDWTFQUjAyMDFNQjE4Njc7MjM6Rk0xWDVBTkxiM2RLbWZLaEs4Z0hXcWxS?= =?utf-8?B?UHI2UGhVcHdJNVNjdUoweDNUR0tUVkQvS2NDWXk1K3MxUmRFUGNQeFZOYUVN?= =?utf-8?B?N0J4aExRTStWcFBmajRoblRZNVJTVzBOR1NOV2VManBqaDFxbTd4bEtPT2Y1?= =?utf-8?B?ZW1sUjZzVmZLenZLbk9DRFkzU3A4MWZQNXZFVjl4WDJ5czJSQVBiVVpnbGRu?= =?utf-8?B?SVdZMGF1QTE5N2FzMU5vbjlYSDZPL2w2T2MvN1pOaE1HS2RlL1pVSGhMY0h3?= =?utf-8?B?VCtlcUl4dStSeDlBR3hxaS90eEg2cjdka3orU2ZpQ1BiUjlJa2tURS9ES2R4?= =?utf-8?B?blZQY2JVb2JYdno4R1ZMZTRNQ1ZGRitzcWlZWnN3enNXVFJmNlM4Q1JEc01s?= =?utf-8?B?R21TL3FuN3ZJV2tjQXZvL1c2ZG9JaGt1ZWdtL3dvT1JXUFRoeWwvYkI3RlFH?= =?utf-8?B?bmRBQ0gzcEF1UWJUWm9KdWVtcFhhaWtqRXQ0TkNtYUgwUkIzdjZZSmxjUnA1?= =?utf-8?B?VldlaUZCTS9xUllwUk9UUTNEQVl6YUlCMTJBQzZzRVZlRkNaWllXUHgvazhm?= =?utf-8?B?UTZvb3ZaK0YrWmk3WlBKZ2xIZFV6TjE3RzVJcFc0SHdFSHpKN1Qxb3ZaU1hL?= =?utf-8?B?ZXdWT1hhTWMyUENjNmVDN0tZUDdVM0hicXdSbWtBSU0vR1NhU1lBamt1UEZP?= =?utf-8?B?dnJEa1ladDVFd3ZPTzJHRlh1YkhsZERpblYrVmRmSXZIb3drNjN4T05wZG9l?= =?utf-8?B?MS9CWkNTWUZsZzN6bzRwa1JYblNwdFlvcmZlZGZ0TWxBWE4wV1I5WFZjTmFJ?= =?utf-8?B?QWFOSnBVZDRXdHR0bnV5c3pjUmJjNURwNmcrUHIrekQ5VzlOakFFM21wUE85?= =?utf-8?B?SjJUY2lyQjdwclpYZkszdGVZa2dCSEtoaXg1Y3VqQmF6MkQzZFpyazBOSDZi?= =?utf-8?B?cWFuWFN6elBqemhMUHdUWkg4bzBrQVQvV1ZJbGJaOFZmNDh2czMxeEdlc3Q1?= =?utf-8?B?aUdwQnFlbFRKQkcvdjVZdko5RStzWUtFeDM0U05NWEl4bk5TbWxtZTZ3bVJp?= =?utf-8?B?U1FDRTA1ZXJuTGRuN2JRK1NkTXNGUXFpWC9PenFxanJ1TzJtWDc3amFISXdq?= =?utf-8?B?SWpGRUVWUzB2T3kxS2VhN2FhbHlsdXRNTStjRHBIQzA3TTBuWFZwWXhxZndy?= =?utf-8?B?eityRW9MMitOTEpyRjVwcm5nVllJWFEwR2Zqbkt6NFg5NTBwVnArTDNUTVRS?= =?utf-8?B?dHd2RERIVHR4WFdIV0wzalJwMjV0SXpsTWlia0FQa3o3eXNPRGFtNGRNTk56?= =?utf-8?B?YkJYSWVhd2UxOW5pY0VpQUZ6dWRkYm9zRXJYK2xGaERwUGlBVGp6MWNIQ256?= =?utf-8?B?clM3Q2ZXRHZCdXkzZkdkSUFRWU9wUGErek9KSUNjZEYvZmNqUnpSZFBucitX?= =?utf-8?B?c0VFalRmbkNSb1BqdTAyeCs0UDl6Yjc5VElkT2NlblBUWVV0eG4wMllYc0Vo?= =?utf-8?Q?LCWGo7EYv3XhEpzVBGwaB4IBWc8=3D?= X-Microsoft-Exchange-Diagnostics: 1; CY1PR0201MB1867; 5:YvtjVMUSbAUB0cINs25pfL3GgP4saiU2uLV+US+3yLDaoR+S8BMHR3bTtl5HfbE7a878bwyLbovgPGZKRzHw2GpNxNiV1bCDRxFuswYJPGWdi2XlV5hLYqpm78LPT4VqMBGauLAyEkpFU3WbU2jKOg==; 24:Xg5CW9l5ynI1AVHaVLHMGhV4AAlCVZTKL/n2nxHiGOxCuGh4s1X+HSA1vQ3zjSwFP3mZCAgX5YXTKzGBQjB3D4254SDsC/QwjZaNxDQ1DtQ=; 20:pFP5GxlUFtUD8FNY1VeoJ/rI/727ELA9i/eex/jdCmXHtGgpIA9w7KJQGdl0CiHBV/jJG+w2nw4xfmqprT+V6GEvFeSFT707Frvsp690fwlXs9Q15x3ObX3YfzmOgfONzX4R7O9d5gf3Q35MEroJs1tM9rb5++T/1pH7fI3zH/3A3NF4olcHmvitic0Q9f1MOL19q3LWGf04d3/MuORdLuxlnyFei8b+gy7Pp7Fi8u73mNyf719CePfiQqMmRkGS SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: sandisk.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Apr 2016 18:57:42.3110 (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: CY1PR0201MB1867 Sender: linux-rdma-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-rdma@vger.kernel.org X-Spam-Status: No, score=-7.8 required=5.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_HI,RP_MATCHES_RCVD,T_DKIM_INVALID,UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Just like other target drivers, use percpu_ida_alloc() and percpu_ida_free() for I/O context management. Signed-off-by: Bart Van Assche Cc: Nicholas Bellinger Cc: Christoph Hellwig Cc: Sagi Grimberg Reviewed-by: Christoph Hellwig --- drivers/infiniband/ulp/srpt/ib_srpt.c | 135 ++++++++++++++++++---------------- drivers/infiniband/ulp/srpt/ib_srpt.h | 6 +- 2 files changed, 73 insertions(+), 68 deletions(-) diff --git a/drivers/infiniband/ulp/srpt/ib_srpt.c b/drivers/infiniband/ulp/srpt/ib_srpt.c index cce6c46..ae56287 100644 --- a/drivers/infiniband/ulp/srpt/ib_srpt.c +++ b/drivers/infiniband/ulp/srpt/ib_srpt.c @@ -1293,28 +1293,31 @@ free_mem: return -ENOMEM; } +static struct srpt_send_ioctx *srpt_tag_to_ioctx(struct srpt_rdma_ch *ch, + int tag) +{ + return &((struct srpt_send_ioctx *)ch->sess->sess_cmd_map)[tag]; +} + +static int srpt_ioctx_to_tag(struct srpt_rdma_ch *ch, + struct srpt_send_ioctx *ioctx) +{ + return ioctx - (struct srpt_send_ioctx *)ch->sess->sess_cmd_map; +} + /** * srpt_get_send_ioctx() - Obtain an I/O context for sending to the initiator. */ static struct srpt_send_ioctx *srpt_get_send_ioctx(struct srpt_rdma_ch *ch) { + struct se_session *sess = ch->sess; struct srpt_send_ioctx *ioctx; - unsigned long flags; - - BUG_ON(!ch); - - ioctx = NULL; - spin_lock_irqsave(&ch->spinlock, flags); - if (!list_empty(&ch->free_list)) { - ioctx = list_first_entry(&ch->free_list, - struct srpt_send_ioctx, free_list); - list_del(&ioctx->free_list); - } - spin_unlock_irqrestore(&ch->spinlock, flags); - - if (!ioctx) - return ioctx; + int tag; + tag = percpu_ida_alloc(&sess->sess_tag_pool, TASK_RUNNING); + if (tag < 0) + return NULL; + ioctx = srpt_tag_to_ioctx(ch, tag); BUG_ON(ioctx->ch != ch); spin_lock_init(&ioctx->spinlock); ioctx->state = SRPT_STATE_NEW; @@ -2006,6 +2009,7 @@ static void srpt_release_channel_work(struct work_struct *w) struct srpt_rdma_ch *ch; struct srpt_device *sdev; struct se_session *se_sess; + int i; ch = container_of(w, struct srpt_rdma_ch, release_work); pr_debug("%s: %s-%d; release_done = %p\n", __func__, ch->sess_name, @@ -2020,6 +2024,14 @@ static void srpt_release_channel_work(struct work_struct *w) target_sess_cmd_list_set_waiting(se_sess); target_wait_for_sess_cmds(se_sess); + for (i = 0; i < ch->rq_size; i++) { + struct srpt_send_ioctx *ioctx = srpt_tag_to_ioctx(ch, i); + + srpt_cleanup_ioctx(sdev, &ioctx->ioctx, + ch->rsp_size, + DMA_TO_DEVICE); + } + transport_deregister_session_configfs(se_sess); transport_deregister_session(se_sess); ch->sess = NULL; @@ -2028,10 +2040,6 @@ static void srpt_release_channel_work(struct work_struct *w) srpt_destroy_ch_ib(ch); - srpt_free_ioctx_ring((struct srpt_ioctx **)ch->ioctx_ring, - ch->sport->sdev, ch->rq_size, - ch->rsp_size, DMA_TO_DEVICE); - mutex_lock(&sdev->mutex); list_del_init(&ch->list); if (ch->release_done) @@ -2175,36 +2183,6 @@ static int srpt_cm_req_recv(struct ib_cm_id *cm_id, INIT_LIST_HEAD(&ch->cmd_wait_list); ch->rsp_size = ch->sport->port_attrib.srp_max_rsp_size; - ch->ioctx_ring = (struct srpt_send_ioctx **) - srpt_alloc_ioctx_ring(ch->sport->sdev, ch->rq_size, - sizeof(*ch->ioctx_ring[0]), - ch->rsp_size, DMA_TO_DEVICE); - if (!ch->ioctx_ring) - goto free_ch; - - INIT_LIST_HEAD(&ch->free_list); - for (i = 0; i < ch->rq_size; i++) { - ch->ioctx_ring[i]->ch = ch; - list_add_tail(&ch->ioctx_ring[i]->free_list, &ch->free_list); - } - - ret = srpt_create_ch_ib(ch); - if (ret) { - rej->reason = cpu_to_be32( - SRP_LOGIN_REJ_INSUFFICIENT_RESOURCES); - pr_err("rejected SRP_LOGIN_REQ because creating" - " a new RDMA channel failed.\n"); - goto free_ring; - } - - ret = srpt_ch_qp_rtr(ch, ch->qp); - if (ret) { - rej->reason = cpu_to_be32(SRP_LOGIN_REJ_INSUFFICIENT_RESOURCES); - pr_err("rejected SRP_LOGIN_REQ because enabling" - " RTR failed (error code = %d)\n", ret); - goto destroy_ib; - } - /* * Use the initator port identifier as the session name, when * checking against se_node_acl->initiatorname[] this can be @@ -2216,12 +2194,14 @@ static int srpt_cm_req_recv(struct ib_cm_id *cm_id, pr_debug("registering session %s\n", ch->sess_name); - ch->sess = target_alloc_session(&sport->port_tpg_1, 0, 0, + ch->sess = target_alloc_session(&sport->port_tpg_1, ch->rq_size, + sizeof(struct srpt_send_ioctx), TARGET_PROT_NORMAL, ch->sess_name, ch, NULL); /* Retry without leading "0x" */ if (IS_ERR(ch->sess)) - ch->sess = target_alloc_session(&sport->port_tpg_1, 0, 0, + ch->sess = target_alloc_session(&sport->port_tpg_1, ch->rq_size, + sizeof(struct srpt_send_ioctx), TARGET_PROT_NORMAL, ch->sess_name + 2, ch, NULL); if (IS_ERR(ch->sess)) { @@ -2230,7 +2210,35 @@ static int srpt_cm_req_recv(struct ib_cm_id *cm_id, rej->reason = cpu_to_be32((PTR_ERR(ch->sess) == -ENOMEM) ? SRP_LOGIN_REJ_INSUFFICIENT_RESOURCES : SRP_LOGIN_REJ_CHANNEL_LIMIT_REACHED); - goto destroy_ib; + goto free_ch; + } + + for (i = 0; i < ch->rq_size; i++) { + struct srpt_send_ioctx *ioctx = srpt_tag_to_ioctx(ch, i); + + if (srpt_init_ioctx(sdev, &ioctx->ioctx, ch->rsp_size, + DMA_TO_DEVICE) < 0) { + pr_err("Initialization of I/O context %d/%d failed\n", + i, ch->rq_size); + goto deregister_session; + } + ioctx->ch = ch; + } + + ret = srpt_create_ch_ib(ch); + if (ret) { + rej->reason = cpu_to_be32( + SRP_LOGIN_REJ_INSUFFICIENT_RESOURCES); + pr_err("rejected SRP_LOGIN_REQ because creating a new RDMA channel failed.\n"); + goto deregister_session; + } + + ret = srpt_ch_qp_rtr(ch, ch->qp); + if (ret) { + rej->reason = cpu_to_be32(SRP_LOGIN_REJ_INSUFFICIENT_RESOURCES); + pr_err("rejected SRP_LOGIN_REQ because enabling RTR failed (error code = %d)\n", + ret); + goto release_channel; } pr_debug("Establish connection sess=%p name=%s cm_id=%p\n", ch->sess, @@ -2274,17 +2282,21 @@ static int srpt_cm_req_recv(struct ib_cm_id *cm_id, release_channel: srpt_disconnect_ch(ch); + srpt_destroy_ch_ib(ch); + +deregister_session: + for (i = 0; i < ch->rq_size; i++) { + struct srpt_send_ioctx *ioctx = srpt_tag_to_ioctx(ch, i); + + srpt_cleanup_ioctx(sdev, &ioctx->ioctx, + ch->rsp_size, + DMA_TO_DEVICE); + } + transport_deregister_session_configfs(ch->sess); transport_deregister_session(ch->sess); ch->sess = NULL; -destroy_ib: - srpt_destroy_ch_ib(ch); - -free_ring: - srpt_free_ioctx_ring((struct srpt_ioctx **)ch->ioctx_ring, - ch->sport->sdev, ch->rq_size, - ch->rsp_size, DMA_TO_DEVICE); free_ch: kfree(ch); @@ -2922,7 +2934,6 @@ static void srpt_release_cmd(struct se_cmd *se_cmd) struct srpt_send_ioctx *ioctx = container_of(se_cmd, struct srpt_send_ioctx, cmd); struct srpt_rdma_ch *ch = ioctx->ch; - unsigned long flags; WARN_ON(ioctx->state != SRPT_STATE_DONE); WARN_ON(ioctx->mapped_sg_count != 0); @@ -2933,9 +2944,7 @@ static void srpt_release_cmd(struct se_cmd *se_cmd) ioctx->n_rbuf = 0; } - spin_lock_irqsave(&ch->spinlock, flags); - list_add(&ioctx->free_list, &ch->free_list); - spin_unlock_irqrestore(&ch->spinlock, flags); + percpu_ida_free(&ch->sess->sess_tag_pool, srpt_ioctx_to_tag(ch, ioctx)); } /** diff --git a/drivers/infiniband/ulp/srpt/ib_srpt.h b/drivers/infiniband/ulp/srpt/ib_srpt.h index af9b8b5..7018981 100644 --- a/drivers/infiniband/ulp/srpt/ib_srpt.h +++ b/drivers/infiniband/ulp/srpt/ib_srpt.h @@ -179,7 +179,6 @@ struct srpt_recv_ioctx { * struct srpt_send_ioctx - SRPT send I/O context. * @ioctx: See above. * @ch: Channel pointer. - * @free_list: Node in srpt_rdma_ch.free_list. * @n_rbuf: Number of data buffers in the received SRP command. * @rbufs: Pointer to SRP data buffer array. * @single_rbuf: SRP data buffer if the command has only a single buffer. @@ -202,7 +201,6 @@ struct srpt_send_ioctx { struct srp_direct_buf *rbufs; struct srp_direct_buf single_rbuf; struct scatterlist *sg; - struct list_head free_list; spinlock_t spinlock; enum srpt_command_state state; struct se_cmd cmd; @@ -250,8 +248,7 @@ enum rdma_ch_state { * @req_lim: request limit: maximum number of requests that may be sent * by the initiator without having received a response. * @req_lim_delta: Number of credits not yet sent back to the initiator. - * @spinlock: Protects free_list and state. - * @free_list: Head of list with free send I/O contexts. + * @spinlock: Protects modifications of @state. * @state: channel state. See also enum rdma_ch_state. * @ioctx_ring: Send ring. * @list: Node for insertion in the srpt_device.rch_list list. @@ -279,7 +276,6 @@ struct srpt_rdma_ch { atomic_t req_lim; atomic_t req_lim_delta; spinlock_t spinlock; - struct list_head free_list; enum rdma_ch_state state; struct srpt_send_ioctx **ioctx_ring; struct list_head list;