4f99a5e040c3262d8ad58bfd920dde2274b03a59
[linux-2.6-block.git] / drivers / infiniband / ulp / srpt / ib_srpt.c
1 /*
2  * Copyright (c) 2006 - 2009 Mellanox Technology Inc.  All rights reserved.
3  * Copyright (C) 2008 - 2011 Bart Van Assche <bvanassche@acm.org>.
4  *
5  * This software is available to you under a choice of one of two
6  * licenses.  You may choose to be licensed under the terms of the GNU
7  * General Public License (GPL) Version 2, available from the file
8  * COPYING in the main directory of this source tree, or the
9  * OpenIB.org BSD license below:
10  *
11  *     Redistribution and use in source and binary forms, with or
12  *     without modification, are permitted provided that the following
13  *     conditions are met:
14  *
15  *      - Redistributions of source code must retain the above
16  *        copyright notice, this list of conditions and the following
17  *        disclaimer.
18  *
19  *      - Redistributions in binary form must reproduce the above
20  *        copyright notice, this list of conditions and the following
21  *        disclaimer in the documentation and/or other materials
22  *        provided with the distribution.
23  *
24  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
25  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
26  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
27  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
28  * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
29  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
30  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
31  * SOFTWARE.
32  *
33  */
34
35 #include <linux/module.h>
36 #include <linux/init.h>
37 #include <linux/slab.h>
38 #include <linux/err.h>
39 #include <linux/ctype.h>
40 #include <linux/kthread.h>
41 #include <linux/string.h>
42 #include <linux/delay.h>
43 #include <linux/atomic.h>
44 #include <linux/inet.h>
45 #include <rdma/ib_cache.h>
46 #include <scsi/scsi_proto.h>
47 #include <scsi/scsi_tcq.h>
48 #include <target/target_core_base.h>
49 #include <target/target_core_fabric.h>
50 #include "ib_srpt.h"
51
52 /* Name of this kernel module. */
53 #define DRV_NAME                "ib_srpt"
54
55 #define SRPT_ID_STRING  "Linux SRP target"
56
57 #undef pr_fmt
58 #define pr_fmt(fmt) DRV_NAME " " fmt
59
60 MODULE_AUTHOR("Vu Pham and Bart Van Assche");
61 MODULE_DESCRIPTION("SCSI RDMA Protocol target driver");
62 MODULE_LICENSE("Dual BSD/GPL");
63
64 /*
65  * Global Variables
66  */
67
68 static u64 srpt_service_guid;
69 static DEFINE_SPINLOCK(srpt_dev_lock);  /* Protects srpt_dev_list. */
70 static LIST_HEAD(srpt_dev_list);        /* List of srpt_device structures. */
71
72 static unsigned srp_max_req_size = DEFAULT_MAX_REQ_SIZE;
73 module_param(srp_max_req_size, int, 0444);
74 MODULE_PARM_DESC(srp_max_req_size,
75                  "Maximum size of SRP request messages in bytes.");
76
77 static int srpt_srq_size = DEFAULT_SRPT_SRQ_SIZE;
78 module_param(srpt_srq_size, int, 0444);
79 MODULE_PARM_DESC(srpt_srq_size,
80                  "Shared receive queue (SRQ) size.");
81
82 static int srpt_get_u64_x(char *buffer, const struct kernel_param *kp)
83 {
84         return sprintf(buffer, "0x%016llx", *(u64 *)kp->arg);
85 }
86 module_param_call(srpt_service_guid, NULL, srpt_get_u64_x, &srpt_service_guid,
87                   0444);
88 MODULE_PARM_DESC(srpt_service_guid,
89                  "Using this value for ioc_guid, id_ext, and cm_listen_id instead of using the node_guid of the first HCA.");
90
91 static struct ib_client srpt_client;
92 /* Protects both rdma_cm_port and rdma_cm_id. */
93 static DEFINE_MUTEX(rdma_cm_mutex);
94 /* Port number RDMA/CM will bind to. */
95 static u16 rdma_cm_port;
96 static struct rdma_cm_id *rdma_cm_id;
97 static void srpt_release_cmd(struct se_cmd *se_cmd);
98 static void srpt_free_ch(struct kref *kref);
99 static int srpt_queue_status(struct se_cmd *cmd);
100 static void srpt_recv_done(struct ib_cq *cq, struct ib_wc *wc);
101 static void srpt_send_done(struct ib_cq *cq, struct ib_wc *wc);
102 static void srpt_process_wait_list(struct srpt_rdma_ch *ch);
103
104 /*
105  * The only allowed channel state changes are those that change the channel
106  * state into a state with a higher numerical value. Hence the new > prev test.
107  */
108 static bool srpt_set_ch_state(struct srpt_rdma_ch *ch, enum rdma_ch_state new)
109 {
110         unsigned long flags;
111         enum rdma_ch_state prev;
112         bool changed = false;
113
114         spin_lock_irqsave(&ch->spinlock, flags);
115         prev = ch->state;
116         if (new > prev) {
117                 ch->state = new;
118                 changed = true;
119         }
120         spin_unlock_irqrestore(&ch->spinlock, flags);
121
122         return changed;
123 }
124
125 /**
126  * srpt_event_handler - asynchronous IB event callback function
127  * @handler: IB event handler registered by ib_register_event_handler().
128  * @event: Description of the event that occurred.
129  *
130  * Callback function called by the InfiniBand core when an asynchronous IB
131  * event occurs. This callback may occur in interrupt context. See also
132  * section 11.5.2, Set Asynchronous Event Handler in the InfiniBand
133  * Architecture Specification.
134  */
135 static void srpt_event_handler(struct ib_event_handler *handler,
136                                struct ib_event *event)
137 {
138         struct srpt_device *sdev;
139         struct srpt_port *sport;
140         u8 port_num;
141
142         sdev = ib_get_client_data(event->device, &srpt_client);
143         if (!sdev || sdev->device != event->device)
144                 return;
145
146         pr_debug("ASYNC event= %d on device= %s\n", event->event,
147                  dev_name(&sdev->device->dev));
148
149         switch (event->event) {
150         case IB_EVENT_PORT_ERR:
151                 port_num = event->element.port_num - 1;
152                 if (port_num < sdev->device->phys_port_cnt) {
153                         sport = &sdev->port[port_num];
154                         sport->lid = 0;
155                         sport->sm_lid = 0;
156                 } else {
157                         WARN(true, "event %d: port_num %d out of range 1..%d\n",
158                              event->event, port_num + 1,
159                              sdev->device->phys_port_cnt);
160                 }
161                 break;
162         case IB_EVENT_PORT_ACTIVE:
163         case IB_EVENT_LID_CHANGE:
164         case IB_EVENT_PKEY_CHANGE:
165         case IB_EVENT_SM_CHANGE:
166         case IB_EVENT_CLIENT_REREGISTER:
167         case IB_EVENT_GID_CHANGE:
168                 /* Refresh port data asynchronously. */
169                 port_num = event->element.port_num - 1;
170                 if (port_num < sdev->device->phys_port_cnt) {
171                         sport = &sdev->port[port_num];
172                         if (!sport->lid && !sport->sm_lid)
173                                 schedule_work(&sport->work);
174                 } else {
175                         WARN(true, "event %d: port_num %d out of range 1..%d\n",
176                              event->event, port_num + 1,
177                              sdev->device->phys_port_cnt);
178                 }
179                 break;
180         default:
181                 pr_err("received unrecognized IB event %d\n", event->event);
182                 break;
183         }
184 }
185
186 /**
187  * srpt_srq_event - SRQ event callback function
188  * @event: Description of the event that occurred.
189  * @ctx: Context pointer specified at SRQ creation time.
190  */
191 static void srpt_srq_event(struct ib_event *event, void *ctx)
192 {
193         pr_debug("SRQ event %d\n", event->event);
194 }
195
196 static const char *get_ch_state_name(enum rdma_ch_state s)
197 {
198         switch (s) {
199         case CH_CONNECTING:
200                 return "connecting";
201         case CH_LIVE:
202                 return "live";
203         case CH_DISCONNECTING:
204                 return "disconnecting";
205         case CH_DRAINING:
206                 return "draining";
207         case CH_DISCONNECTED:
208                 return "disconnected";
209         }
210         return "???";
211 }
212
213 /**
214  * srpt_qp_event - QP event callback function
215  * @event: Description of the event that occurred.
216  * @ch: SRPT RDMA channel.
217  */
218 static void srpt_qp_event(struct ib_event *event, struct srpt_rdma_ch *ch)
219 {
220         pr_debug("QP event %d on ch=%p sess_name=%s state=%d\n",
221                  event->event, ch, ch->sess_name, ch->state);
222
223         switch (event->event) {
224         case IB_EVENT_COMM_EST:
225                 if (ch->using_rdma_cm)
226                         rdma_notify(ch->rdma_cm.cm_id, event->event);
227                 else
228                         ib_cm_notify(ch->ib_cm.cm_id, event->event);
229                 break;
230         case IB_EVENT_QP_LAST_WQE_REACHED:
231                 pr_debug("%s-%d, state %s: received Last WQE event.\n",
232                          ch->sess_name, ch->qp->qp_num,
233                          get_ch_state_name(ch->state));
234                 break;
235         default:
236                 pr_err("received unrecognized IB QP event %d\n", event->event);
237                 break;
238         }
239 }
240
241 /**
242  * srpt_set_ioc - initialize a IOUnitInfo structure
243  * @c_list: controller list.
244  * @slot: one-based slot number.
245  * @value: four-bit value.
246  *
247  * Copies the lowest four bits of value in element slot of the array of four
248  * bit elements called c_list (controller list). The index slot is one-based.
249  */
250 static void srpt_set_ioc(u8 *c_list, u32 slot, u8 value)
251 {
252         u16 id;
253         u8 tmp;
254
255         id = (slot - 1) / 2;
256         if (slot & 0x1) {
257                 tmp = c_list[id] & 0xf;
258                 c_list[id] = (value << 4) | tmp;
259         } else {
260                 tmp = c_list[id] & 0xf0;
261                 c_list[id] = (value & 0xf) | tmp;
262         }
263 }
264
265 /**
266  * srpt_get_class_port_info - copy ClassPortInfo to a management datagram
267  * @mad: Datagram that will be sent as response to DM_ATTR_CLASS_PORT_INFO.
268  *
269  * See also section 16.3.3.1 ClassPortInfo in the InfiniBand Architecture
270  * Specification.
271  */
272 static void srpt_get_class_port_info(struct ib_dm_mad *mad)
273 {
274         struct ib_class_port_info *cif;
275
276         cif = (struct ib_class_port_info *)mad->data;
277         memset(cif, 0, sizeof(*cif));
278         cif->base_version = 1;
279         cif->class_version = 1;
280
281         ib_set_cpi_resp_time(cif, 20);
282         mad->mad_hdr.status = 0;
283 }
284
285 /**
286  * srpt_get_iou - write IOUnitInfo to a management datagram
287  * @mad: Datagram that will be sent as response to DM_ATTR_IOU_INFO.
288  *
289  * See also section 16.3.3.3 IOUnitInfo in the InfiniBand Architecture
290  * Specification. See also section B.7, table B.6 in the SRP r16a document.
291  */
292 static void srpt_get_iou(struct ib_dm_mad *mad)
293 {
294         struct ib_dm_iou_info *ioui;
295         u8 slot;
296         int i;
297
298         ioui = (struct ib_dm_iou_info *)mad->data;
299         ioui->change_id = cpu_to_be16(1);
300         ioui->max_controllers = 16;
301
302         /* set present for slot 1 and empty for the rest */
303         srpt_set_ioc(ioui->controller_list, 1, 1);
304         for (i = 1, slot = 2; i < 16; i++, slot++)
305                 srpt_set_ioc(ioui->controller_list, slot, 0);
306
307         mad->mad_hdr.status = 0;
308 }
309
310 /**
311  * srpt_get_ioc - write IOControllerprofile to a management datagram
312  * @sport: HCA port through which the MAD has been received.
313  * @slot: Slot number specified in DM_ATTR_IOC_PROFILE query.
314  * @mad: Datagram that will be sent as response to DM_ATTR_IOC_PROFILE.
315  *
316  * See also section 16.3.3.4 IOControllerProfile in the InfiniBand
317  * Architecture Specification. See also section B.7, table B.7 in the SRP
318  * r16a document.
319  */
320 static void srpt_get_ioc(struct srpt_port *sport, u32 slot,
321                          struct ib_dm_mad *mad)
322 {
323         struct srpt_device *sdev = sport->sdev;
324         struct ib_dm_ioc_profile *iocp;
325         int send_queue_depth;
326
327         iocp = (struct ib_dm_ioc_profile *)mad->data;
328
329         if (!slot || slot > 16) {
330                 mad->mad_hdr.status
331                         = cpu_to_be16(DM_MAD_STATUS_INVALID_FIELD);
332                 return;
333         }
334
335         if (slot > 2) {
336                 mad->mad_hdr.status
337                         = cpu_to_be16(DM_MAD_STATUS_NO_IOC);
338                 return;
339         }
340
341         if (sdev->use_srq)
342                 send_queue_depth = sdev->srq_size;
343         else
344                 send_queue_depth = min(MAX_SRPT_RQ_SIZE,
345                                        sdev->device->attrs.max_qp_wr);
346
347         memset(iocp, 0, sizeof(*iocp));
348         strcpy(iocp->id_string, SRPT_ID_STRING);
349         iocp->guid = cpu_to_be64(srpt_service_guid);
350         iocp->vendor_id = cpu_to_be32(sdev->device->attrs.vendor_id);
351         iocp->device_id = cpu_to_be32(sdev->device->attrs.vendor_part_id);
352         iocp->device_version = cpu_to_be16(sdev->device->attrs.hw_ver);
353         iocp->subsys_vendor_id = cpu_to_be32(sdev->device->attrs.vendor_id);
354         iocp->subsys_device_id = 0x0;
355         iocp->io_class = cpu_to_be16(SRP_REV16A_IB_IO_CLASS);
356         iocp->io_subclass = cpu_to_be16(SRP_IO_SUBCLASS);
357         iocp->protocol = cpu_to_be16(SRP_PROTOCOL);
358         iocp->protocol_version = cpu_to_be16(SRP_PROTOCOL_VERSION);
359         iocp->send_queue_depth = cpu_to_be16(send_queue_depth);
360         iocp->rdma_read_depth = 4;
361         iocp->send_size = cpu_to_be32(srp_max_req_size);
362         iocp->rdma_size = cpu_to_be32(min(sport->port_attrib.srp_max_rdma_size,
363                                           1U << 24));
364         iocp->num_svc_entries = 1;
365         iocp->op_cap_mask = SRP_SEND_TO_IOC | SRP_SEND_FROM_IOC |
366                 SRP_RDMA_READ_FROM_IOC | SRP_RDMA_WRITE_FROM_IOC;
367
368         mad->mad_hdr.status = 0;
369 }
370
371 /**
372  * srpt_get_svc_entries - write ServiceEntries to a management datagram
373  * @ioc_guid: I/O controller GUID to use in reply.
374  * @slot: I/O controller number.
375  * @hi: End of the range of service entries to be specified in the reply.
376  * @lo: Start of the range of service entries to be specified in the reply..
377  * @mad: Datagram that will be sent as response to DM_ATTR_SVC_ENTRIES.
378  *
379  * See also section 16.3.3.5 ServiceEntries in the InfiniBand Architecture
380  * Specification. See also section B.7, table B.8 in the SRP r16a document.
381  */
382 static void srpt_get_svc_entries(u64 ioc_guid,
383                                  u16 slot, u8 hi, u8 lo, struct ib_dm_mad *mad)
384 {
385         struct ib_dm_svc_entries *svc_entries;
386
387         WARN_ON(!ioc_guid);
388
389         if (!slot || slot > 16) {
390                 mad->mad_hdr.status
391                         = cpu_to_be16(DM_MAD_STATUS_INVALID_FIELD);
392                 return;
393         }
394
395         if (slot > 2 || lo > hi || hi > 1) {
396                 mad->mad_hdr.status
397                         = cpu_to_be16(DM_MAD_STATUS_NO_IOC);
398                 return;
399         }
400
401         svc_entries = (struct ib_dm_svc_entries *)mad->data;
402         memset(svc_entries, 0, sizeof(*svc_entries));
403         svc_entries->service_entries[0].id = cpu_to_be64(ioc_guid);
404         snprintf(svc_entries->service_entries[0].name,
405                  sizeof(svc_entries->service_entries[0].name),
406                  "%s%016llx",
407                  SRP_SERVICE_NAME_PREFIX,
408                  ioc_guid);
409
410         mad->mad_hdr.status = 0;
411 }
412
413 /**
414  * srpt_mgmt_method_get - process a received management datagram
415  * @sp:      HCA port through which the MAD has been received.
416  * @rq_mad:  received MAD.
417  * @rsp_mad: response MAD.
418  */
419 static void srpt_mgmt_method_get(struct srpt_port *sp, struct ib_mad *rq_mad,
420                                  struct ib_dm_mad *rsp_mad)
421 {
422         u16 attr_id;
423         u32 slot;
424         u8 hi, lo;
425
426         attr_id = be16_to_cpu(rq_mad->mad_hdr.attr_id);
427         switch (attr_id) {
428         case DM_ATTR_CLASS_PORT_INFO:
429                 srpt_get_class_port_info(rsp_mad);
430                 break;
431         case DM_ATTR_IOU_INFO:
432                 srpt_get_iou(rsp_mad);
433                 break;
434         case DM_ATTR_IOC_PROFILE:
435                 slot = be32_to_cpu(rq_mad->mad_hdr.attr_mod);
436                 srpt_get_ioc(sp, slot, rsp_mad);
437                 break;
438         case DM_ATTR_SVC_ENTRIES:
439                 slot = be32_to_cpu(rq_mad->mad_hdr.attr_mod);
440                 hi = (u8) ((slot >> 8) & 0xff);
441                 lo = (u8) (slot & 0xff);
442                 slot = (u16) ((slot >> 16) & 0xffff);
443                 srpt_get_svc_entries(srpt_service_guid,
444                                      slot, hi, lo, rsp_mad);
445                 break;
446         default:
447                 rsp_mad->mad_hdr.status =
448                     cpu_to_be16(DM_MAD_STATUS_UNSUP_METHOD_ATTR);
449                 break;
450         }
451 }
452
453 /**
454  * srpt_mad_send_handler - MAD send completion callback
455  * @mad_agent: Return value of ib_register_mad_agent().
456  * @mad_wc: Work completion reporting that the MAD has been sent.
457  */
458 static void srpt_mad_send_handler(struct ib_mad_agent *mad_agent,
459                                   struct ib_mad_send_wc *mad_wc)
460 {
461         rdma_destroy_ah(mad_wc->send_buf->ah, RDMA_DESTROY_AH_SLEEPABLE);
462         ib_free_send_mad(mad_wc->send_buf);
463 }
464
465 /**
466  * srpt_mad_recv_handler - MAD reception callback function
467  * @mad_agent: Return value of ib_register_mad_agent().
468  * @send_buf: Not used.
469  * @mad_wc: Work completion reporting that a MAD has been received.
470  */
471 static void srpt_mad_recv_handler(struct ib_mad_agent *mad_agent,
472                                   struct ib_mad_send_buf *send_buf,
473                                   struct ib_mad_recv_wc *mad_wc)
474 {
475         struct srpt_port *sport = (struct srpt_port *)mad_agent->context;
476         struct ib_ah *ah;
477         struct ib_mad_send_buf *rsp;
478         struct ib_dm_mad *dm_mad;
479
480         if (!mad_wc || !mad_wc->recv_buf.mad)
481                 return;
482
483         ah = ib_create_ah_from_wc(mad_agent->qp->pd, mad_wc->wc,
484                                   mad_wc->recv_buf.grh, mad_agent->port_num);
485         if (IS_ERR(ah))
486                 goto err;
487
488         BUILD_BUG_ON(offsetof(struct ib_dm_mad, data) != IB_MGMT_DEVICE_HDR);
489
490         rsp = ib_create_send_mad(mad_agent, mad_wc->wc->src_qp,
491                                  mad_wc->wc->pkey_index, 0,
492                                  IB_MGMT_DEVICE_HDR, IB_MGMT_DEVICE_DATA,
493                                  GFP_KERNEL,
494                                  IB_MGMT_BASE_VERSION);
495         if (IS_ERR(rsp))
496                 goto err_rsp;
497
498         rsp->ah = ah;
499
500         dm_mad = rsp->mad;
501         memcpy(dm_mad, mad_wc->recv_buf.mad, sizeof(*dm_mad));
502         dm_mad->mad_hdr.method = IB_MGMT_METHOD_GET_RESP;
503         dm_mad->mad_hdr.status = 0;
504
505         switch (mad_wc->recv_buf.mad->mad_hdr.method) {
506         case IB_MGMT_METHOD_GET:
507                 srpt_mgmt_method_get(sport, mad_wc->recv_buf.mad, dm_mad);
508                 break;
509         case IB_MGMT_METHOD_SET:
510                 dm_mad->mad_hdr.status =
511                     cpu_to_be16(DM_MAD_STATUS_UNSUP_METHOD_ATTR);
512                 break;
513         default:
514                 dm_mad->mad_hdr.status =
515                     cpu_to_be16(DM_MAD_STATUS_UNSUP_METHOD);
516                 break;
517         }
518
519         if (!ib_post_send_mad(rsp, NULL)) {
520                 ib_free_recv_mad(mad_wc);
521                 /* will destroy_ah & free_send_mad in send completion */
522                 return;
523         }
524
525         ib_free_send_mad(rsp);
526
527 err_rsp:
528         rdma_destroy_ah(ah, RDMA_DESTROY_AH_SLEEPABLE);
529 err:
530         ib_free_recv_mad(mad_wc);
531 }
532
533 static int srpt_format_guid(char *buf, unsigned int size, const __be64 *guid)
534 {
535         const __be16 *g = (const __be16 *)guid;
536
537         return snprintf(buf, size, "%04x:%04x:%04x:%04x",
538                         be16_to_cpu(g[0]), be16_to_cpu(g[1]),
539                         be16_to_cpu(g[2]), be16_to_cpu(g[3]));
540 }
541
542 /**
543  * srpt_refresh_port - configure a HCA port
544  * @sport: SRPT HCA port.
545  *
546  * Enable InfiniBand management datagram processing, update the cached sm_lid,
547  * lid and gid values, and register a callback function for processing MADs
548  * on the specified port.
549  *
550  * Note: It is safe to call this function more than once for the same port.
551  */
552 static int srpt_refresh_port(struct srpt_port *sport)
553 {
554         struct ib_mad_reg_req reg_req;
555         struct ib_port_modify port_modify;
556         struct ib_port_attr port_attr;
557         int ret;
558
559         ret = ib_query_port(sport->sdev->device, sport->port, &port_attr);
560         if (ret)
561                 return ret;
562
563         sport->sm_lid = port_attr.sm_lid;
564         sport->lid = port_attr.lid;
565
566         ret = rdma_query_gid(sport->sdev->device, sport->port, 0, &sport->gid);
567         if (ret)
568                 return ret;
569
570         sport->port_guid_wwn.priv = sport;
571         srpt_format_guid(sport->port_guid, sizeof(sport->port_guid),
572                          &sport->gid.global.interface_id);
573         sport->port_gid_wwn.priv = sport;
574         snprintf(sport->port_gid, sizeof(sport->port_gid),
575                  "0x%016llx%016llx",
576                  be64_to_cpu(sport->gid.global.subnet_prefix),
577                  be64_to_cpu(sport->gid.global.interface_id));
578
579         if (rdma_protocol_iwarp(sport->sdev->device, sport->port))
580                 return 0;
581
582         memset(&port_modify, 0, sizeof(port_modify));
583         port_modify.set_port_cap_mask = IB_PORT_DEVICE_MGMT_SUP;
584         port_modify.clr_port_cap_mask = 0;
585
586         ret = ib_modify_port(sport->sdev->device, sport->port, 0, &port_modify);
587         if (ret) {
588                 pr_warn("%s-%d: enabling device management failed (%d). Note: this is expected if SR-IOV is enabled.\n",
589                         dev_name(&sport->sdev->device->dev), sport->port, ret);
590                 return 0;
591         }
592
593         if (!sport->mad_agent) {
594                 memset(&reg_req, 0, sizeof(reg_req));
595                 reg_req.mgmt_class = IB_MGMT_CLASS_DEVICE_MGMT;
596                 reg_req.mgmt_class_version = IB_MGMT_BASE_VERSION;
597                 set_bit(IB_MGMT_METHOD_GET, reg_req.method_mask);
598                 set_bit(IB_MGMT_METHOD_SET, reg_req.method_mask);
599
600                 sport->mad_agent = ib_register_mad_agent(sport->sdev->device,
601                                                          sport->port,
602                                                          IB_QPT_GSI,
603                                                          &reg_req, 0,
604                                                          srpt_mad_send_handler,
605                                                          srpt_mad_recv_handler,
606                                                          sport, 0);
607                 if (IS_ERR(sport->mad_agent)) {
608                         pr_err("%s-%d: MAD agent registration failed (%ld). Note: this is expected if SR-IOV is enabled.\n",
609                                dev_name(&sport->sdev->device->dev), sport->port,
610                                PTR_ERR(sport->mad_agent));
611                         sport->mad_agent = NULL;
612                 }
613         }
614
615         return 0;
616 }
617
618 /**
619  * srpt_unregister_mad_agent - unregister MAD callback functions
620  * @sdev: SRPT HCA pointer.
621  *
622  * Note: It is safe to call this function more than once for the same device.
623  */
624 static void srpt_unregister_mad_agent(struct srpt_device *sdev)
625 {
626         struct ib_port_modify port_modify = {
627                 .clr_port_cap_mask = IB_PORT_DEVICE_MGMT_SUP,
628         };
629         struct srpt_port *sport;
630         int i;
631
632         for (i = 1; i <= sdev->device->phys_port_cnt; i++) {
633                 sport = &sdev->port[i - 1];
634                 WARN_ON(sport->port != i);
635                 if (ib_modify_port(sdev->device, i, 0, &port_modify) < 0)
636                         pr_err("disabling MAD processing failed.\n");
637                 if (sport->mad_agent) {
638                         ib_unregister_mad_agent(sport->mad_agent);
639                         sport->mad_agent = NULL;
640                 }
641         }
642 }
643
644 /**
645  * srpt_alloc_ioctx - allocate a SRPT I/O context structure
646  * @sdev: SRPT HCA pointer.
647  * @ioctx_size: I/O context size.
648  * @buf_cache: I/O buffer cache.
649  * @dir: DMA data direction.
650  */
651 static struct srpt_ioctx *srpt_alloc_ioctx(struct srpt_device *sdev,
652                                            int ioctx_size,
653                                            struct kmem_cache *buf_cache,
654                                            enum dma_data_direction dir)
655 {
656         struct srpt_ioctx *ioctx;
657
658         ioctx = kzalloc(ioctx_size, GFP_KERNEL);
659         if (!ioctx)
660                 goto err;
661
662         ioctx->buf = kmem_cache_alloc(buf_cache, GFP_KERNEL);
663         if (!ioctx->buf)
664                 goto err_free_ioctx;
665
666         ioctx->dma = ib_dma_map_single(sdev->device, ioctx->buf,
667                                        kmem_cache_size(buf_cache), dir);
668         if (ib_dma_mapping_error(sdev->device, ioctx->dma))
669                 goto err_free_buf;
670
671         return ioctx;
672
673 err_free_buf:
674         kmem_cache_free(buf_cache, ioctx->buf);
675 err_free_ioctx:
676         kfree(ioctx);
677 err:
678         return NULL;
679 }
680
681 /**
682  * srpt_free_ioctx - free a SRPT I/O context structure
683  * @sdev: SRPT HCA pointer.
684  * @ioctx: I/O context pointer.
685  * @buf_cache: I/O buffer cache.
686  * @dir: DMA data direction.
687  */
688 static void srpt_free_ioctx(struct srpt_device *sdev, struct srpt_ioctx *ioctx,
689                             struct kmem_cache *buf_cache,
690                             enum dma_data_direction dir)
691 {
692         if (!ioctx)
693                 return;
694
695         ib_dma_unmap_single(sdev->device, ioctx->dma,
696                             kmem_cache_size(buf_cache), dir);
697         kmem_cache_free(buf_cache, ioctx->buf);
698         kfree(ioctx);
699 }
700
701 /**
702  * srpt_alloc_ioctx_ring - allocate a ring of SRPT I/O context structures
703  * @sdev:       Device to allocate the I/O context ring for.
704  * @ring_size:  Number of elements in the I/O context ring.
705  * @ioctx_size: I/O context size.
706  * @buf_cache:  I/O buffer cache.
707  * @alignment_offset: Offset in each ring buffer at which the SRP information
708  *              unit starts.
709  * @dir:        DMA data direction.
710  */
711 static struct srpt_ioctx **srpt_alloc_ioctx_ring(struct srpt_device *sdev,
712                                 int ring_size, int ioctx_size,
713                                 struct kmem_cache *buf_cache,
714                                 int alignment_offset,
715                                 enum dma_data_direction dir)
716 {
717         struct srpt_ioctx **ring;
718         int i;
719
720         WARN_ON(ioctx_size != sizeof(struct srpt_recv_ioctx) &&
721                 ioctx_size != sizeof(struct srpt_send_ioctx));
722
723         ring = kvmalloc_array(ring_size, sizeof(ring[0]), GFP_KERNEL);
724         if (!ring)
725                 goto out;
726         for (i = 0; i < ring_size; ++i) {
727                 ring[i] = srpt_alloc_ioctx(sdev, ioctx_size, buf_cache, dir);
728                 if (!ring[i])
729                         goto err;
730                 ring[i]->index = i;
731                 ring[i]->offset = alignment_offset;
732         }
733         goto out;
734
735 err:
736         while (--i >= 0)
737                 srpt_free_ioctx(sdev, ring[i], buf_cache, dir);
738         kvfree(ring);
739         ring = NULL;
740 out:
741         return ring;
742 }
743
744 /**
745  * srpt_free_ioctx_ring - free the ring of SRPT I/O context structures
746  * @ioctx_ring: I/O context ring to be freed.
747  * @sdev: SRPT HCA pointer.
748  * @ring_size: Number of ring elements.
749  * @buf_cache: I/O buffer cache.
750  * @dir: DMA data direction.
751  */
752 static void srpt_free_ioctx_ring(struct srpt_ioctx **ioctx_ring,
753                                  struct srpt_device *sdev, int ring_size,
754                                  struct kmem_cache *buf_cache,
755                                  enum dma_data_direction dir)
756 {
757         int i;
758
759         if (!ioctx_ring)
760                 return;
761
762         for (i = 0; i < ring_size; ++i)
763                 srpt_free_ioctx(sdev, ioctx_ring[i], buf_cache, dir);
764         kvfree(ioctx_ring);
765 }
766
767 /**
768  * srpt_set_cmd_state - set the state of a SCSI command
769  * @ioctx: Send I/O context.
770  * @new: New I/O context state.
771  *
772  * Does not modify the state of aborted commands. Returns the previous command
773  * state.
774  */
775 static enum srpt_command_state srpt_set_cmd_state(struct srpt_send_ioctx *ioctx,
776                                                   enum srpt_command_state new)
777 {
778         enum srpt_command_state previous;
779
780         previous = ioctx->state;
781         if (previous != SRPT_STATE_DONE)
782                 ioctx->state = new;
783
784         return previous;
785 }
786
787 /**
788  * srpt_test_and_set_cmd_state - test and set the state of a command
789  * @ioctx: Send I/O context.
790  * @old: Current I/O context state.
791  * @new: New I/O context state.
792  *
793  * Returns true if and only if the previous command state was equal to 'old'.
794  */
795 static bool srpt_test_and_set_cmd_state(struct srpt_send_ioctx *ioctx,
796                                         enum srpt_command_state old,
797                                         enum srpt_command_state new)
798 {
799         enum srpt_command_state previous;
800
801         WARN_ON(!ioctx);
802         WARN_ON(old == SRPT_STATE_DONE);
803         WARN_ON(new == SRPT_STATE_NEW);
804
805         previous = ioctx->state;
806         if (previous == old)
807                 ioctx->state = new;
808
809         return previous == old;
810 }
811
812 /**
813  * srpt_post_recv - post an IB receive request
814  * @sdev: SRPT HCA pointer.
815  * @ch: SRPT RDMA channel.
816  * @ioctx: Receive I/O context pointer.
817  */
818 static int srpt_post_recv(struct srpt_device *sdev, struct srpt_rdma_ch *ch,
819                           struct srpt_recv_ioctx *ioctx)
820 {
821         struct ib_sge list;
822         struct ib_recv_wr wr;
823
824         BUG_ON(!sdev);
825         list.addr = ioctx->ioctx.dma + ioctx->ioctx.offset;
826         list.length = srp_max_req_size;
827         list.lkey = sdev->lkey;
828
829         ioctx->ioctx.cqe.done = srpt_recv_done;
830         wr.wr_cqe = &ioctx->ioctx.cqe;
831         wr.next = NULL;
832         wr.sg_list = &list;
833         wr.num_sge = 1;
834
835         if (sdev->use_srq)
836                 return ib_post_srq_recv(sdev->srq, &wr, NULL);
837         else
838                 return ib_post_recv(ch->qp, &wr, NULL);
839 }
840
841 /**
842  * srpt_zerolength_write - perform a zero-length RDMA write
843  * @ch: SRPT RDMA channel.
844  *
845  * A quote from the InfiniBand specification: C9-88: For an HCA responder
846  * using Reliable Connection service, for each zero-length RDMA READ or WRITE
847  * request, the R_Key shall not be validated, even if the request includes
848  * Immediate data.
849  */
850 static int srpt_zerolength_write(struct srpt_rdma_ch *ch)
851 {
852         struct ib_rdma_wr wr = {
853                 .wr = {
854                         .next           = NULL,
855                         { .wr_cqe       = &ch->zw_cqe, },
856                         .opcode         = IB_WR_RDMA_WRITE,
857                         .send_flags     = IB_SEND_SIGNALED,
858                 }
859         };
860
861         pr_debug("%s-%d: queued zerolength write\n", ch->sess_name,
862                  ch->qp->qp_num);
863
864         return ib_post_send(ch->qp, &wr.wr, NULL);
865 }
866
867 static void srpt_zerolength_write_done(struct ib_cq *cq, struct ib_wc *wc)
868 {
869         struct srpt_rdma_ch *ch = cq->cq_context;
870
871         pr_debug("%s-%d wc->status %d\n", ch->sess_name, ch->qp->qp_num,
872                  wc->status);
873
874         if (wc->status == IB_WC_SUCCESS) {
875                 srpt_process_wait_list(ch);
876         } else {
877                 if (srpt_set_ch_state(ch, CH_DISCONNECTED))
878                         schedule_work(&ch->release_work);
879                 else
880                         pr_debug("%s-%d: already disconnected.\n",
881                                  ch->sess_name, ch->qp->qp_num);
882         }
883 }
884
885 static int srpt_alloc_rw_ctxs(struct srpt_send_ioctx *ioctx,
886                 struct srp_direct_buf *db, int nbufs, struct scatterlist **sg,
887                 unsigned *sg_cnt)
888 {
889         enum dma_data_direction dir = target_reverse_dma_direction(&ioctx->cmd);
890         struct srpt_rdma_ch *ch = ioctx->ch;
891         struct scatterlist *prev = NULL;
892         unsigned prev_nents;
893         int ret, i;
894
895         if (nbufs == 1) {
896                 ioctx->rw_ctxs = &ioctx->s_rw_ctx;
897         } else {
898                 ioctx->rw_ctxs = kmalloc_array(nbufs, sizeof(*ioctx->rw_ctxs),
899                         GFP_KERNEL);
900                 if (!ioctx->rw_ctxs)
901                         return -ENOMEM;
902         }
903
904         for (i = ioctx->n_rw_ctx; i < nbufs; i++, db++) {
905                 struct srpt_rw_ctx *ctx = &ioctx->rw_ctxs[i];
906                 u64 remote_addr = be64_to_cpu(db->va);
907                 u32 size = be32_to_cpu(db->len);
908                 u32 rkey = be32_to_cpu(db->key);
909
910                 ret = target_alloc_sgl(&ctx->sg, &ctx->nents, size, false,
911                                 i < nbufs - 1);
912                 if (ret)
913                         goto unwind;
914
915                 ret = rdma_rw_ctx_init(&ctx->rw, ch->qp, ch->sport->port,
916                                 ctx->sg, ctx->nents, 0, remote_addr, rkey, dir);
917                 if (ret < 0) {
918                         target_free_sgl(ctx->sg, ctx->nents);
919                         goto unwind;
920                 }
921
922                 ioctx->n_rdma += ret;
923                 ioctx->n_rw_ctx++;
924
925                 if (prev) {
926                         sg_unmark_end(&prev[prev_nents - 1]);
927                         sg_chain(prev, prev_nents + 1, ctx->sg);
928                 } else {
929                         *sg = ctx->sg;
930                 }
931
932                 prev = ctx->sg;
933                 prev_nents = ctx->nents;
934
935                 *sg_cnt += ctx->nents;
936         }
937
938         return 0;
939
940 unwind:
941         while (--i >= 0) {
942                 struct srpt_rw_ctx *ctx = &ioctx->rw_ctxs[i];
943
944                 rdma_rw_ctx_destroy(&ctx->rw, ch->qp, ch->sport->port,
945                                 ctx->sg, ctx->nents, dir);
946                 target_free_sgl(ctx->sg, ctx->nents);
947         }
948         if (ioctx->rw_ctxs != &ioctx->s_rw_ctx)
949                 kfree(ioctx->rw_ctxs);
950         return ret;
951 }
952
953 static void srpt_free_rw_ctxs(struct srpt_rdma_ch *ch,
954                                     struct srpt_send_ioctx *ioctx)
955 {
956         enum dma_data_direction dir = target_reverse_dma_direction(&ioctx->cmd);
957         int i;
958
959         for (i = 0; i < ioctx->n_rw_ctx; i++) {
960                 struct srpt_rw_ctx *ctx = &ioctx->rw_ctxs[i];
961
962                 rdma_rw_ctx_destroy(&ctx->rw, ch->qp, ch->sport->port,
963                                 ctx->sg, ctx->nents, dir);
964                 target_free_sgl(ctx->sg, ctx->nents);
965         }
966
967         if (ioctx->rw_ctxs != &ioctx->s_rw_ctx)
968                 kfree(ioctx->rw_ctxs);
969 }
970
971 static inline void *srpt_get_desc_buf(struct srp_cmd *srp_cmd)
972 {
973         /*
974          * The pointer computations below will only be compiled correctly
975          * if srp_cmd::add_data is declared as s8*, u8*, s8[] or u8[], so check
976          * whether srp_cmd::add_data has been declared as a byte pointer.
977          */
978         BUILD_BUG_ON(!__same_type(srp_cmd->add_data[0], (s8)0) &&
979                      !__same_type(srp_cmd->add_data[0], (u8)0));
980
981         /*
982          * According to the SRP spec, the lower two bits of the 'ADDITIONAL
983          * CDB LENGTH' field are reserved and the size in bytes of this field
984          * is four times the value specified in bits 3..7. Hence the "& ~3".
985          */
986         return srp_cmd->add_data + (srp_cmd->add_cdb_len & ~3);
987 }
988
989 /**
990  * srpt_get_desc_tbl - parse the data descriptors of a SRP_CMD request
991  * @recv_ioctx: I/O context associated with the received command @srp_cmd.
992  * @ioctx: I/O context that will be used for responding to the initiator.
993  * @srp_cmd: Pointer to the SRP_CMD request data.
994  * @dir: Pointer to the variable to which the transfer direction will be
995  *   written.
996  * @sg: [out] scatterlist for the parsed SRP_CMD.
997  * @sg_cnt: [out] length of @sg.
998  * @data_len: Pointer to the variable to which the total data length of all
999  *   descriptors in the SRP_CMD request will be written.
1000  * @imm_data_offset: [in] Offset in SRP_CMD requests at which immediate data
1001  *   starts.
1002  *
1003  * This function initializes ioctx->nrbuf and ioctx->r_bufs.
1004  *
1005  * Returns -EINVAL when the SRP_CMD request contains inconsistent descriptors;
1006  * -ENOMEM when memory allocation fails and zero upon success.
1007  */
1008 static int srpt_get_desc_tbl(struct srpt_recv_ioctx *recv_ioctx,
1009                 struct srpt_send_ioctx *ioctx,
1010                 struct srp_cmd *srp_cmd, enum dma_data_direction *dir,
1011                 struct scatterlist **sg, unsigned int *sg_cnt, u64 *data_len,
1012                 u16 imm_data_offset)
1013 {
1014         BUG_ON(!dir);
1015         BUG_ON(!data_len);
1016
1017         /*
1018          * The lower four bits of the buffer format field contain the DATA-IN
1019          * buffer descriptor format, and the highest four bits contain the
1020          * DATA-OUT buffer descriptor format.
1021          */
1022         if (srp_cmd->buf_fmt & 0xf)
1023                 /* DATA-IN: transfer data from target to initiator (read). */
1024                 *dir = DMA_FROM_DEVICE;
1025         else if (srp_cmd->buf_fmt >> 4)
1026                 /* DATA-OUT: transfer data from initiator to target (write). */
1027                 *dir = DMA_TO_DEVICE;
1028         else
1029                 *dir = DMA_NONE;
1030
1031         /* initialize data_direction early as srpt_alloc_rw_ctxs needs it */
1032         ioctx->cmd.data_direction = *dir;
1033
1034         if (((srp_cmd->buf_fmt & 0xf) == SRP_DATA_DESC_DIRECT) ||
1035             ((srp_cmd->buf_fmt >> 4) == SRP_DATA_DESC_DIRECT)) {
1036                 struct srp_direct_buf *db = srpt_get_desc_buf(srp_cmd);
1037
1038                 *data_len = be32_to_cpu(db->len);
1039                 return srpt_alloc_rw_ctxs(ioctx, db, 1, sg, sg_cnt);
1040         } else if (((srp_cmd->buf_fmt & 0xf) == SRP_DATA_DESC_INDIRECT) ||
1041                    ((srp_cmd->buf_fmt >> 4) == SRP_DATA_DESC_INDIRECT)) {
1042                 struct srp_indirect_buf *idb = srpt_get_desc_buf(srp_cmd);
1043                 int nbufs = be32_to_cpu(idb->table_desc.len) /
1044                                 sizeof(struct srp_direct_buf);
1045
1046                 if (nbufs >
1047                     (srp_cmd->data_out_desc_cnt + srp_cmd->data_in_desc_cnt)) {
1048                         pr_err("received unsupported SRP_CMD request type (%u out + %u in != %u / %zu)\n",
1049                                srp_cmd->data_out_desc_cnt,
1050                                srp_cmd->data_in_desc_cnt,
1051                                be32_to_cpu(idb->table_desc.len),
1052                                sizeof(struct srp_direct_buf));
1053                         return -EINVAL;
1054                 }
1055
1056                 *data_len = be32_to_cpu(idb->len);
1057                 return srpt_alloc_rw_ctxs(ioctx, idb->desc_list, nbufs,
1058                                 sg, sg_cnt);
1059         } else if ((srp_cmd->buf_fmt >> 4) == SRP_DATA_DESC_IMM) {
1060                 struct srp_imm_buf *imm_buf = srpt_get_desc_buf(srp_cmd);
1061                 void *data = (void *)srp_cmd + imm_data_offset;
1062                 uint32_t len = be32_to_cpu(imm_buf->len);
1063                 uint32_t req_size = imm_data_offset + len;
1064
1065                 if (req_size > srp_max_req_size) {
1066                         pr_err("Immediate data (length %d + %d) exceeds request size %d\n",
1067                                imm_data_offset, len, srp_max_req_size);
1068                         return -EINVAL;
1069                 }
1070                 if (recv_ioctx->byte_len < req_size) {
1071                         pr_err("Received too few data - %d < %d\n",
1072                                recv_ioctx->byte_len, req_size);
1073                         return -EIO;
1074                 }
1075                 /*
1076                  * The immediate data buffer descriptor must occur before the
1077                  * immediate data itself.
1078                  */
1079                 if ((void *)(imm_buf + 1) > (void *)data) {
1080                         pr_err("Received invalid write request\n");
1081                         return -EINVAL;
1082                 }
1083                 *data_len = len;
1084                 ioctx->recv_ioctx = recv_ioctx;
1085                 if ((uintptr_t)data & 511) {
1086                         pr_warn_once("Internal error - the receive buffers are not aligned properly.\n");
1087                         return -EINVAL;
1088                 }
1089                 sg_init_one(&ioctx->imm_sg, data, len);
1090                 *sg = &ioctx->imm_sg;
1091                 *sg_cnt = 1;
1092                 return 0;
1093         } else {
1094                 *data_len = 0;
1095                 return 0;
1096         }
1097 }
1098
1099 /**
1100  * srpt_init_ch_qp - initialize queue pair attributes
1101  * @ch: SRPT RDMA channel.
1102  * @qp: Queue pair pointer.
1103  *
1104  * Initialized the attributes of queue pair 'qp' by allowing local write,
1105  * remote read and remote write. Also transitions 'qp' to state IB_QPS_INIT.
1106  */
1107 static int srpt_init_ch_qp(struct srpt_rdma_ch *ch, struct ib_qp *qp)
1108 {
1109         struct ib_qp_attr *attr;
1110         int ret;
1111
1112         WARN_ON_ONCE(ch->using_rdma_cm);
1113
1114         attr = kzalloc(sizeof(*attr), GFP_KERNEL);
1115         if (!attr)
1116                 return -ENOMEM;
1117
1118         attr->qp_state = IB_QPS_INIT;
1119         attr->qp_access_flags = IB_ACCESS_LOCAL_WRITE;
1120         attr->port_num = ch->sport->port;
1121
1122         ret = ib_find_cached_pkey(ch->sport->sdev->device, ch->sport->port,
1123                                   ch->pkey, &attr->pkey_index);
1124         if (ret < 0)
1125                 pr_err("Translating pkey %#x failed (%d) - using index 0\n",
1126                        ch->pkey, ret);
1127
1128         ret = ib_modify_qp(qp, attr,
1129                            IB_QP_STATE | IB_QP_ACCESS_FLAGS | IB_QP_PORT |
1130                            IB_QP_PKEY_INDEX);
1131
1132         kfree(attr);
1133         return ret;
1134 }
1135
1136 /**
1137  * srpt_ch_qp_rtr - change the state of a channel to 'ready to receive' (RTR)
1138  * @ch: channel of the queue pair.
1139  * @qp: queue pair to change the state of.
1140  *
1141  * Returns zero upon success and a negative value upon failure.
1142  *
1143  * Note: currently a struct ib_qp_attr takes 136 bytes on a 64-bit system.
1144  * If this structure ever becomes larger, it might be necessary to allocate
1145  * it dynamically instead of on the stack.
1146  */
1147 static int srpt_ch_qp_rtr(struct srpt_rdma_ch *ch, struct ib_qp *qp)
1148 {
1149         struct ib_qp_attr qp_attr;
1150         int attr_mask;
1151         int ret;
1152
1153         WARN_ON_ONCE(ch->using_rdma_cm);
1154
1155         qp_attr.qp_state = IB_QPS_RTR;
1156         ret = ib_cm_init_qp_attr(ch->ib_cm.cm_id, &qp_attr, &attr_mask);
1157         if (ret)
1158                 goto out;
1159
1160         qp_attr.max_dest_rd_atomic = 4;
1161
1162         ret = ib_modify_qp(qp, &qp_attr, attr_mask);
1163
1164 out:
1165         return ret;
1166 }
1167
1168 /**
1169  * srpt_ch_qp_rts - change the state of a channel to 'ready to send' (RTS)
1170  * @ch: channel of the queue pair.
1171  * @qp: queue pair to change the state of.
1172  *
1173  * Returns zero upon success and a negative value upon failure.
1174  *
1175  * Note: currently a struct ib_qp_attr takes 136 bytes on a 64-bit system.
1176  * If this structure ever becomes larger, it might be necessary to allocate
1177  * it dynamically instead of on the stack.
1178  */
1179 static int srpt_ch_qp_rts(struct srpt_rdma_ch *ch, struct ib_qp *qp)
1180 {
1181         struct ib_qp_attr qp_attr;
1182         int attr_mask;
1183         int ret;
1184
1185         qp_attr.qp_state = IB_QPS_RTS;
1186         ret = ib_cm_init_qp_attr(ch->ib_cm.cm_id, &qp_attr, &attr_mask);
1187         if (ret)
1188                 goto out;
1189
1190         qp_attr.max_rd_atomic = 4;
1191
1192         ret = ib_modify_qp(qp, &qp_attr, attr_mask);
1193
1194 out:
1195         return ret;
1196 }
1197
1198 /**
1199  * srpt_ch_qp_err - set the channel queue pair state to 'error'
1200  * @ch: SRPT RDMA channel.
1201  */
1202 static int srpt_ch_qp_err(struct srpt_rdma_ch *ch)
1203 {
1204         struct ib_qp_attr qp_attr;
1205
1206         qp_attr.qp_state = IB_QPS_ERR;
1207         return ib_modify_qp(ch->qp, &qp_attr, IB_QP_STATE);
1208 }
1209
1210 /**
1211  * srpt_get_send_ioctx - obtain an I/O context for sending to the initiator
1212  * @ch: SRPT RDMA channel.
1213  */
1214 static struct srpt_send_ioctx *srpt_get_send_ioctx(struct srpt_rdma_ch *ch)
1215 {
1216         struct srpt_send_ioctx *ioctx;
1217         int tag, cpu;
1218
1219         BUG_ON(!ch);
1220
1221         tag = sbitmap_queue_get(&ch->sess->sess_tag_pool, &cpu);
1222         if (tag < 0)
1223                 return NULL;
1224
1225         ioctx = ch->ioctx_ring[tag];
1226         BUG_ON(ioctx->ch != ch);
1227         ioctx->state = SRPT_STATE_NEW;
1228         WARN_ON_ONCE(ioctx->recv_ioctx);
1229         ioctx->n_rdma = 0;
1230         ioctx->n_rw_ctx = 0;
1231         ioctx->queue_status_only = false;
1232         /*
1233          * transport_init_se_cmd() does not initialize all fields, so do it
1234          * here.
1235          */
1236         memset(&ioctx->cmd, 0, sizeof(ioctx->cmd));
1237         memset(&ioctx->sense_data, 0, sizeof(ioctx->sense_data));
1238         ioctx->cmd.map_tag = tag;
1239         ioctx->cmd.map_cpu = cpu;
1240
1241         return ioctx;
1242 }
1243
1244 /**
1245  * srpt_abort_cmd - abort a SCSI command
1246  * @ioctx:   I/O context associated with the SCSI command.
1247  */
1248 static int srpt_abort_cmd(struct srpt_send_ioctx *ioctx)
1249 {
1250         enum srpt_command_state state;
1251
1252         BUG_ON(!ioctx);
1253
1254         /*
1255          * If the command is in a state where the target core is waiting for
1256          * the ib_srpt driver, change the state to the next state.
1257          */
1258
1259         state = ioctx->state;
1260         switch (state) {
1261         case SRPT_STATE_NEED_DATA:
1262                 ioctx->state = SRPT_STATE_DATA_IN;
1263                 break;
1264         case SRPT_STATE_CMD_RSP_SENT:
1265         case SRPT_STATE_MGMT_RSP_SENT:
1266                 ioctx->state = SRPT_STATE_DONE;
1267                 break;
1268         default:
1269                 WARN_ONCE(true, "%s: unexpected I/O context state %d\n",
1270                           __func__, state);
1271                 break;
1272         }
1273
1274         pr_debug("Aborting cmd with state %d -> %d and tag %lld\n", state,
1275                  ioctx->state, ioctx->cmd.tag);
1276
1277         switch (state) {
1278         case SRPT_STATE_NEW:
1279         case SRPT_STATE_DATA_IN:
1280         case SRPT_STATE_MGMT:
1281         case SRPT_STATE_DONE:
1282                 /*
1283                  * Do nothing - defer abort processing until
1284                  * srpt_queue_response() is invoked.
1285                  */
1286                 break;
1287         case SRPT_STATE_NEED_DATA:
1288                 pr_debug("tag %#llx: RDMA read error\n", ioctx->cmd.tag);
1289                 transport_generic_request_failure(&ioctx->cmd,
1290                                         TCM_CHECK_CONDITION_ABORT_CMD);
1291                 break;
1292         case SRPT_STATE_CMD_RSP_SENT:
1293                 /*
1294                  * SRP_RSP sending failed or the SRP_RSP send completion has
1295                  * not been received in time.
1296                  */
1297                 transport_generic_free_cmd(&ioctx->cmd, 0);
1298                 break;
1299         case SRPT_STATE_MGMT_RSP_SENT:
1300                 transport_generic_free_cmd(&ioctx->cmd, 0);
1301                 break;
1302         default:
1303                 WARN(1, "Unexpected command state (%d)", state);
1304                 break;
1305         }
1306
1307         return state;
1308 }
1309
1310 /**
1311  * srpt_rdma_read_done - RDMA read completion callback
1312  * @cq: Completion queue.
1313  * @wc: Work completion.
1314  *
1315  * XXX: what is now target_execute_cmd used to be asynchronous, and unmapping
1316  * the data that has been transferred via IB RDMA had to be postponed until the
1317  * check_stop_free() callback.  None of this is necessary anymore and needs to
1318  * be cleaned up.
1319  */
1320 static void srpt_rdma_read_done(struct ib_cq *cq, struct ib_wc *wc)
1321 {
1322         struct srpt_rdma_ch *ch = cq->cq_context;
1323         struct srpt_send_ioctx *ioctx =
1324                 container_of(wc->wr_cqe, struct srpt_send_ioctx, rdma_cqe);
1325
1326         WARN_ON(ioctx->n_rdma <= 0);
1327         atomic_add(ioctx->n_rdma, &ch->sq_wr_avail);
1328         ioctx->n_rdma = 0;
1329
1330         if (unlikely(wc->status != IB_WC_SUCCESS)) {
1331                 pr_info("RDMA_READ for ioctx 0x%p failed with status %d\n",
1332                         ioctx, wc->status);
1333                 srpt_abort_cmd(ioctx);
1334                 return;
1335         }
1336
1337         if (srpt_test_and_set_cmd_state(ioctx, SRPT_STATE_NEED_DATA,
1338                                         SRPT_STATE_DATA_IN))
1339                 target_execute_cmd(&ioctx->cmd);
1340         else
1341                 pr_err("%s[%d]: wrong state = %d\n", __func__,
1342                        __LINE__, ioctx->state);
1343 }
1344
1345 /**
1346  * srpt_build_cmd_rsp - build a SRP_RSP response
1347  * @ch: RDMA channel through which the request has been received.
1348  * @ioctx: I/O context associated with the SRP_CMD request. The response will
1349  *   be built in the buffer ioctx->buf points at and hence this function will
1350  *   overwrite the request data.
1351  * @tag: tag of the request for which this response is being generated.
1352  * @status: value for the STATUS field of the SRP_RSP information unit.
1353  *
1354  * Returns the size in bytes of the SRP_RSP response.
1355  *
1356  * An SRP_RSP response contains a SCSI status or service response. See also
1357  * section 6.9 in the SRP r16a document for the format of an SRP_RSP
1358  * response. See also SPC-2 for more information about sense data.
1359  */
1360 static int srpt_build_cmd_rsp(struct srpt_rdma_ch *ch,
1361                               struct srpt_send_ioctx *ioctx, u64 tag,
1362                               int status)
1363 {
1364         struct srp_rsp *srp_rsp;
1365         const u8 *sense_data;
1366         int sense_data_len, max_sense_len;
1367
1368         /*
1369          * The lowest bit of all SAM-3 status codes is zero (see also
1370          * paragraph 5.3 in SAM-3).
1371          */
1372         WARN_ON(status & 1);
1373
1374         srp_rsp = ioctx->ioctx.buf;
1375         BUG_ON(!srp_rsp);
1376
1377         sense_data = ioctx->sense_data;
1378         sense_data_len = ioctx->cmd.scsi_sense_length;
1379         WARN_ON(sense_data_len > sizeof(ioctx->sense_data));
1380
1381         memset(srp_rsp, 0, sizeof(*srp_rsp));
1382         srp_rsp->opcode = SRP_RSP;
1383         srp_rsp->req_lim_delta =
1384                 cpu_to_be32(1 + atomic_xchg(&ch->req_lim_delta, 0));
1385         srp_rsp->tag = tag;
1386         srp_rsp->status = status;
1387
1388         if (sense_data_len) {
1389                 BUILD_BUG_ON(MIN_MAX_RSP_SIZE <= sizeof(*srp_rsp));
1390                 max_sense_len = ch->max_ti_iu_len - sizeof(*srp_rsp);
1391                 if (sense_data_len > max_sense_len) {
1392                         pr_warn("truncated sense data from %d to %d bytes\n",
1393                                 sense_data_len, max_sense_len);
1394                         sense_data_len = max_sense_len;
1395                 }
1396
1397                 srp_rsp->flags |= SRP_RSP_FLAG_SNSVALID;
1398                 srp_rsp->sense_data_len = cpu_to_be32(sense_data_len);
1399                 memcpy(srp_rsp + 1, sense_data, sense_data_len);
1400         }
1401
1402         return sizeof(*srp_rsp) + sense_data_len;
1403 }
1404
1405 /**
1406  * srpt_build_tskmgmt_rsp - build a task management response
1407  * @ch:       RDMA channel through which the request has been received.
1408  * @ioctx:    I/O context in which the SRP_RSP response will be built.
1409  * @rsp_code: RSP_CODE that will be stored in the response.
1410  * @tag:      Tag of the request for which this response is being generated.
1411  *
1412  * Returns the size in bytes of the SRP_RSP response.
1413  *
1414  * An SRP_RSP response contains a SCSI status or service response. See also
1415  * section 6.9 in the SRP r16a document for the format of an SRP_RSP
1416  * response.
1417  */
1418 static int srpt_build_tskmgmt_rsp(struct srpt_rdma_ch *ch,
1419                                   struct srpt_send_ioctx *ioctx,
1420                                   u8 rsp_code, u64 tag)
1421 {
1422         struct srp_rsp *srp_rsp;
1423         int resp_data_len;
1424         int resp_len;
1425
1426         resp_data_len = 4;
1427         resp_len = sizeof(*srp_rsp) + resp_data_len;
1428
1429         srp_rsp = ioctx->ioctx.buf;
1430         BUG_ON(!srp_rsp);
1431         memset(srp_rsp, 0, sizeof(*srp_rsp));
1432
1433         srp_rsp->opcode = SRP_RSP;
1434         srp_rsp->req_lim_delta =
1435                 cpu_to_be32(1 + atomic_xchg(&ch->req_lim_delta, 0));
1436         srp_rsp->tag = tag;
1437
1438         srp_rsp->flags |= SRP_RSP_FLAG_RSPVALID;
1439         srp_rsp->resp_data_len = cpu_to_be32(resp_data_len);
1440         srp_rsp->data[3] = rsp_code;
1441
1442         return resp_len;
1443 }
1444
1445 static int srpt_check_stop_free(struct se_cmd *cmd)
1446 {
1447         struct srpt_send_ioctx *ioctx = container_of(cmd,
1448                                 struct srpt_send_ioctx, cmd);
1449
1450         return target_put_sess_cmd(&ioctx->cmd);
1451 }
1452
1453 /**
1454  * srpt_handle_cmd - process a SRP_CMD information unit
1455  * @ch: SRPT RDMA channel.
1456  * @recv_ioctx: Receive I/O context.
1457  * @send_ioctx: Send I/O context.
1458  */
1459 static void srpt_handle_cmd(struct srpt_rdma_ch *ch,
1460                             struct srpt_recv_ioctx *recv_ioctx,
1461                             struct srpt_send_ioctx *send_ioctx)
1462 {
1463         struct se_cmd *cmd;
1464         struct srp_cmd *srp_cmd;
1465         struct scatterlist *sg = NULL;
1466         unsigned sg_cnt = 0;
1467         u64 data_len;
1468         enum dma_data_direction dir;
1469         int rc;
1470
1471         BUG_ON(!send_ioctx);
1472
1473         srp_cmd = recv_ioctx->ioctx.buf + recv_ioctx->ioctx.offset;
1474         cmd = &send_ioctx->cmd;
1475         cmd->tag = srp_cmd->tag;
1476
1477         switch (srp_cmd->task_attr) {
1478         case SRP_CMD_SIMPLE_Q:
1479                 cmd->sam_task_attr = TCM_SIMPLE_TAG;
1480                 break;
1481         case SRP_CMD_ORDERED_Q:
1482         default:
1483                 cmd->sam_task_attr = TCM_ORDERED_TAG;
1484                 break;
1485         case SRP_CMD_HEAD_OF_Q:
1486                 cmd->sam_task_attr = TCM_HEAD_TAG;
1487                 break;
1488         case SRP_CMD_ACA:
1489                 cmd->sam_task_attr = TCM_ACA_TAG;
1490                 break;
1491         }
1492
1493         rc = srpt_get_desc_tbl(recv_ioctx, send_ioctx, srp_cmd, &dir,
1494                                &sg, &sg_cnt, &data_len, ch->imm_data_offset);
1495         if (rc) {
1496                 if (rc != -EAGAIN) {
1497                         pr_err("0x%llx: parsing SRP descriptor table failed.\n",
1498                                srp_cmd->tag);
1499                 }
1500                 goto busy;
1501         }
1502
1503         rc = target_submit_cmd_map_sgls(cmd, ch->sess, srp_cmd->cdb,
1504                                &send_ioctx->sense_data[0],
1505                                scsilun_to_int(&srp_cmd->lun), data_len,
1506                                TCM_SIMPLE_TAG, dir, TARGET_SCF_ACK_KREF,
1507                                sg, sg_cnt, NULL, 0, NULL, 0);
1508         if (rc != 0) {
1509                 pr_debug("target_submit_cmd() returned %d for tag %#llx\n", rc,
1510                          srp_cmd->tag);
1511                 goto busy;
1512         }
1513         return;
1514
1515 busy:
1516         target_send_busy(cmd);
1517 }
1518
1519 static int srp_tmr_to_tcm(int fn)
1520 {
1521         switch (fn) {
1522         case SRP_TSK_ABORT_TASK:
1523                 return TMR_ABORT_TASK;
1524         case SRP_TSK_ABORT_TASK_SET:
1525                 return TMR_ABORT_TASK_SET;
1526         case SRP_TSK_CLEAR_TASK_SET:
1527                 return TMR_CLEAR_TASK_SET;
1528         case SRP_TSK_LUN_RESET:
1529                 return TMR_LUN_RESET;
1530         case SRP_TSK_CLEAR_ACA:
1531                 return TMR_CLEAR_ACA;
1532         default:
1533                 return -1;
1534         }
1535 }
1536
1537 /**
1538  * srpt_handle_tsk_mgmt - process a SRP_TSK_MGMT information unit
1539  * @ch: SRPT RDMA channel.
1540  * @recv_ioctx: Receive I/O context.
1541  * @send_ioctx: Send I/O context.
1542  *
1543  * Returns 0 if and only if the request will be processed by the target core.
1544  *
1545  * For more information about SRP_TSK_MGMT information units, see also section
1546  * 6.7 in the SRP r16a document.
1547  */
1548 static void srpt_handle_tsk_mgmt(struct srpt_rdma_ch *ch,
1549                                  struct srpt_recv_ioctx *recv_ioctx,
1550                                  struct srpt_send_ioctx *send_ioctx)
1551 {
1552         struct srp_tsk_mgmt *srp_tsk;
1553         struct se_cmd *cmd;
1554         struct se_session *sess = ch->sess;
1555         int tcm_tmr;
1556         int rc;
1557
1558         BUG_ON(!send_ioctx);
1559
1560         srp_tsk = recv_ioctx->ioctx.buf + recv_ioctx->ioctx.offset;
1561         cmd = &send_ioctx->cmd;
1562
1563         pr_debug("recv tsk_mgmt fn %d for task_tag %lld and cmd tag %lld ch %p sess %p\n",
1564                  srp_tsk->tsk_mgmt_func, srp_tsk->task_tag, srp_tsk->tag, ch,
1565                  ch->sess);
1566
1567         srpt_set_cmd_state(send_ioctx, SRPT_STATE_MGMT);
1568         send_ioctx->cmd.tag = srp_tsk->tag;
1569         tcm_tmr = srp_tmr_to_tcm(srp_tsk->tsk_mgmt_func);
1570         rc = target_submit_tmr(&send_ioctx->cmd, sess, NULL,
1571                                scsilun_to_int(&srp_tsk->lun), srp_tsk, tcm_tmr,
1572                                GFP_KERNEL, srp_tsk->task_tag,
1573                                TARGET_SCF_ACK_KREF);
1574         if (rc != 0) {
1575                 send_ioctx->cmd.se_tmr_req->response = TMR_FUNCTION_REJECTED;
1576                 cmd->se_tfo->queue_tm_rsp(cmd);
1577         }
1578         return;
1579 }
1580
1581 /**
1582  * srpt_handle_new_iu - process a newly received information unit
1583  * @ch:    RDMA channel through which the information unit has been received.
1584  * @recv_ioctx: Receive I/O context associated with the information unit.
1585  */
1586 static bool
1587 srpt_handle_new_iu(struct srpt_rdma_ch *ch, struct srpt_recv_ioctx *recv_ioctx)
1588 {
1589         struct srpt_send_ioctx *send_ioctx = NULL;
1590         struct srp_cmd *srp_cmd;
1591         bool res = false;
1592         u8 opcode;
1593
1594         BUG_ON(!ch);
1595         BUG_ON(!recv_ioctx);
1596
1597         if (unlikely(ch->state == CH_CONNECTING))
1598                 goto push;
1599
1600         ib_dma_sync_single_for_cpu(ch->sport->sdev->device,
1601                                    recv_ioctx->ioctx.dma,
1602                                    recv_ioctx->ioctx.offset + srp_max_req_size,
1603                                    DMA_FROM_DEVICE);
1604
1605         srp_cmd = recv_ioctx->ioctx.buf + recv_ioctx->ioctx.offset;
1606         opcode = srp_cmd->opcode;
1607         if (opcode == SRP_CMD || opcode == SRP_TSK_MGMT) {
1608                 send_ioctx = srpt_get_send_ioctx(ch);
1609                 if (unlikely(!send_ioctx))
1610                         goto push;
1611         }
1612
1613         if (!list_empty(&recv_ioctx->wait_list)) {
1614                 WARN_ON_ONCE(!ch->processing_wait_list);
1615                 list_del_init(&recv_ioctx->wait_list);
1616         }
1617
1618         switch (opcode) {
1619         case SRP_CMD:
1620                 srpt_handle_cmd(ch, recv_ioctx, send_ioctx);
1621                 break;
1622         case SRP_TSK_MGMT:
1623                 srpt_handle_tsk_mgmt(ch, recv_ioctx, send_ioctx);
1624                 break;
1625         case SRP_I_LOGOUT:
1626                 pr_err("Not yet implemented: SRP_I_LOGOUT\n");
1627                 break;
1628         case SRP_CRED_RSP:
1629                 pr_debug("received SRP_CRED_RSP\n");
1630                 break;
1631         case SRP_AER_RSP:
1632                 pr_debug("received SRP_AER_RSP\n");
1633                 break;
1634         case SRP_RSP:
1635                 pr_err("Received SRP_RSP\n");
1636                 break;
1637         default:
1638                 pr_err("received IU with unknown opcode 0x%x\n", opcode);
1639                 break;
1640         }
1641
1642         if (!send_ioctx || !send_ioctx->recv_ioctx)
1643                 srpt_post_recv(ch->sport->sdev, ch, recv_ioctx);
1644         res = true;
1645
1646 out:
1647         return res;
1648
1649 push:
1650         if (list_empty(&recv_ioctx->wait_list)) {
1651                 WARN_ON_ONCE(ch->processing_wait_list);
1652                 list_add_tail(&recv_ioctx->wait_list, &ch->cmd_wait_list);
1653         }
1654         goto out;
1655 }
1656
1657 static void srpt_recv_done(struct ib_cq *cq, struct ib_wc *wc)
1658 {
1659         struct srpt_rdma_ch *ch = cq->cq_context;
1660         struct srpt_recv_ioctx *ioctx =
1661                 container_of(wc->wr_cqe, struct srpt_recv_ioctx, ioctx.cqe);
1662
1663         if (wc->status == IB_WC_SUCCESS) {
1664                 int req_lim;
1665
1666                 req_lim = atomic_dec_return(&ch->req_lim);
1667                 if (unlikely(req_lim < 0))
1668                         pr_err("req_lim = %d < 0\n", req_lim);
1669                 ioctx->byte_len = wc->byte_len;
1670                 srpt_handle_new_iu(ch, ioctx);
1671         } else {
1672                 pr_info_ratelimited("receiving failed for ioctx %p with status %d\n",
1673                                     ioctx, wc->status);
1674         }
1675 }
1676
1677 /*
1678  * This function must be called from the context in which RDMA completions are
1679  * processed because it accesses the wait list without protection against
1680  * access from other threads.
1681  */
1682 static void srpt_process_wait_list(struct srpt_rdma_ch *ch)
1683 {
1684         struct srpt_recv_ioctx *recv_ioctx, *tmp;
1685
1686         WARN_ON_ONCE(ch->state == CH_CONNECTING);
1687
1688         if (list_empty(&ch->cmd_wait_list))
1689                 return;
1690
1691         WARN_ON_ONCE(ch->processing_wait_list);
1692         ch->processing_wait_list = true;
1693         list_for_each_entry_safe(recv_ioctx, tmp, &ch->cmd_wait_list,
1694                                  wait_list) {
1695                 if (!srpt_handle_new_iu(ch, recv_ioctx))
1696                         break;
1697         }
1698         ch->processing_wait_list = false;
1699 }
1700
1701 /**
1702  * srpt_send_done - send completion callback
1703  * @cq: Completion queue.
1704  * @wc: Work completion.
1705  *
1706  * Note: Although this has not yet been observed during tests, at least in
1707  * theory it is possible that the srpt_get_send_ioctx() call invoked by
1708  * srpt_handle_new_iu() fails. This is possible because the req_lim_delta
1709  * value in each response is set to one, and it is possible that this response
1710  * makes the initiator send a new request before the send completion for that
1711  * response has been processed. This could e.g. happen if the call to
1712  * srpt_put_send_iotcx() is delayed because of a higher priority interrupt or
1713  * if IB retransmission causes generation of the send completion to be
1714  * delayed. Incoming information units for which srpt_get_send_ioctx() fails
1715  * are queued on cmd_wait_list. The code below processes these delayed
1716  * requests one at a time.
1717  */
1718 static void srpt_send_done(struct ib_cq *cq, struct ib_wc *wc)
1719 {
1720         struct srpt_rdma_ch *ch = cq->cq_context;
1721         struct srpt_send_ioctx *ioctx =
1722                 container_of(wc->wr_cqe, struct srpt_send_ioctx, ioctx.cqe);
1723         enum srpt_command_state state;
1724
1725         state = srpt_set_cmd_state(ioctx, SRPT_STATE_DONE);
1726
1727         WARN_ON(state != SRPT_STATE_CMD_RSP_SENT &&
1728                 state != SRPT_STATE_MGMT_RSP_SENT);
1729
1730         atomic_add(1 + ioctx->n_rdma, &ch->sq_wr_avail);
1731
1732         if (wc->status != IB_WC_SUCCESS)
1733                 pr_info("sending response for ioctx 0x%p failed with status %d\n",
1734                         ioctx, wc->status);
1735
1736         if (state != SRPT_STATE_DONE) {
1737                 transport_generic_free_cmd(&ioctx->cmd, 0);
1738         } else {
1739                 pr_err("IB completion has been received too late for wr_id = %u.\n",
1740                        ioctx->ioctx.index);
1741         }
1742
1743         srpt_process_wait_list(ch);
1744 }
1745
1746 /**
1747  * srpt_create_ch_ib - create receive and send completion queues
1748  * @ch: SRPT RDMA channel.
1749  */
1750 static int srpt_create_ch_ib(struct srpt_rdma_ch *ch)
1751 {
1752         struct ib_qp_init_attr *qp_init;
1753         struct srpt_port *sport = ch->sport;
1754         struct srpt_device *sdev = sport->sdev;
1755         const struct ib_device_attr *attrs = &sdev->device->attrs;
1756         int sq_size = sport->port_attrib.srp_sq_size;
1757         int i, ret;
1758
1759         WARN_ON(ch->rq_size < 1);
1760
1761         ret = -ENOMEM;
1762         qp_init = kzalloc(sizeof(*qp_init), GFP_KERNEL);
1763         if (!qp_init)
1764                 goto out;
1765
1766 retry:
1767         ch->cq = ib_alloc_cq_any(sdev->device, ch, ch->rq_size + sq_size,
1768                                  IB_POLL_WORKQUEUE);
1769         if (IS_ERR(ch->cq)) {
1770                 ret = PTR_ERR(ch->cq);
1771                 pr_err("failed to create CQ cqe= %d ret= %d\n",
1772                        ch->rq_size + sq_size, ret);
1773                 goto out;
1774         }
1775
1776         qp_init->qp_context = (void *)ch;
1777         qp_init->event_handler
1778                 = (void(*)(struct ib_event *, void*))srpt_qp_event;
1779         qp_init->send_cq = ch->cq;
1780         qp_init->recv_cq = ch->cq;
1781         qp_init->sq_sig_type = IB_SIGNAL_REQ_WR;
1782         qp_init->qp_type = IB_QPT_RC;
1783         /*
1784          * We divide up our send queue size into half SEND WRs to send the
1785          * completions, and half R/W contexts to actually do the RDMA
1786          * READ/WRITE transfers.  Note that we need to allocate CQ slots for
1787          * both both, as RDMA contexts will also post completions for the
1788          * RDMA READ case.
1789          */
1790         qp_init->cap.max_send_wr = min(sq_size / 2, attrs->max_qp_wr);
1791         qp_init->cap.max_rdma_ctxs = sq_size / 2;
1792         qp_init->cap.max_send_sge = min(attrs->max_send_sge,
1793                                         SRPT_MAX_SG_PER_WQE);
1794         qp_init->cap.max_recv_sge = min(attrs->max_recv_sge,
1795                                         SRPT_MAX_SG_PER_WQE);
1796         qp_init->port_num = ch->sport->port;
1797         if (sdev->use_srq) {
1798                 qp_init->srq = sdev->srq;
1799         } else {
1800                 qp_init->cap.max_recv_wr = ch->rq_size;
1801                 qp_init->cap.max_recv_sge = min(attrs->max_recv_sge,
1802                                                 SRPT_MAX_SG_PER_WQE);
1803         }
1804
1805         if (ch->using_rdma_cm) {
1806                 ret = rdma_create_qp(ch->rdma_cm.cm_id, sdev->pd, qp_init);
1807                 ch->qp = ch->rdma_cm.cm_id->qp;
1808         } else {
1809                 ch->qp = ib_create_qp(sdev->pd, qp_init);
1810                 if (!IS_ERR(ch->qp)) {
1811                         ret = srpt_init_ch_qp(ch, ch->qp);
1812                         if (ret)
1813                                 ib_destroy_qp(ch->qp);
1814                 } else {
1815                         ret = PTR_ERR(ch->qp);
1816                 }
1817         }
1818         if (ret) {
1819                 bool retry = sq_size > MIN_SRPT_SQ_SIZE;
1820
1821                 if (retry) {
1822                         pr_debug("failed to create queue pair with sq_size = %d (%d) - retrying\n",
1823                                  sq_size, ret);
1824                         ib_free_cq(ch->cq);
1825                         sq_size = max(sq_size / 2, MIN_SRPT_SQ_SIZE);
1826                         goto retry;
1827                 } else {
1828                         pr_err("failed to create queue pair with sq_size = %d (%d)\n",
1829                                sq_size, ret);
1830                         goto err_destroy_cq;
1831                 }
1832         }
1833
1834         atomic_set(&ch->sq_wr_avail, qp_init->cap.max_send_wr);
1835
1836         pr_debug("%s: max_cqe= %d max_sge= %d sq_size = %d ch= %p\n",
1837                  __func__, ch->cq->cqe, qp_init->cap.max_send_sge,
1838                  qp_init->cap.max_send_wr, ch);
1839
1840         if (!sdev->use_srq)
1841                 for (i = 0; i < ch->rq_size; i++)
1842                         srpt_post_recv(sdev, ch, ch->ioctx_recv_ring[i]);
1843
1844 out:
1845         kfree(qp_init);
1846         return ret;
1847
1848 err_destroy_cq:
1849         ch->qp = NULL;
1850         ib_free_cq(ch->cq);
1851         goto out;
1852 }
1853
1854 static void srpt_destroy_ch_ib(struct srpt_rdma_ch *ch)
1855 {
1856         ib_destroy_qp(ch->qp);
1857         ib_free_cq(ch->cq);
1858 }
1859
1860 /**
1861  * srpt_close_ch - close a RDMA channel
1862  * @ch: SRPT RDMA channel.
1863  *
1864  * Make sure all resources associated with the channel will be deallocated at
1865  * an appropriate time.
1866  *
1867  * Returns true if and only if the channel state has been modified into
1868  * CH_DRAINING.
1869  */
1870 static bool srpt_close_ch(struct srpt_rdma_ch *ch)
1871 {
1872         int ret;
1873
1874         if (!srpt_set_ch_state(ch, CH_DRAINING)) {
1875                 pr_debug("%s: already closed\n", ch->sess_name);
1876                 return false;
1877         }
1878
1879         kref_get(&ch->kref);
1880
1881         ret = srpt_ch_qp_err(ch);
1882         if (ret < 0)
1883                 pr_err("%s-%d: changing queue pair into error state failed: %d\n",
1884                        ch->sess_name, ch->qp->qp_num, ret);
1885
1886         ret = srpt_zerolength_write(ch);
1887         if (ret < 0) {
1888                 pr_err("%s-%d: queuing zero-length write failed: %d\n",
1889                        ch->sess_name, ch->qp->qp_num, ret);
1890                 if (srpt_set_ch_state(ch, CH_DISCONNECTED))
1891                         schedule_work(&ch->release_work);
1892                 else
1893                         WARN_ON_ONCE(true);
1894         }
1895
1896         kref_put(&ch->kref, srpt_free_ch);
1897
1898         return true;
1899 }
1900
1901 /*
1902  * Change the channel state into CH_DISCONNECTING. If a channel has not yet
1903  * reached the connected state, close it. If a channel is in the connected
1904  * state, send a DREQ. If a DREQ has been received, send a DREP. Note: it is
1905  * the responsibility of the caller to ensure that this function is not
1906  * invoked concurrently with the code that accepts a connection. This means
1907  * that this function must either be invoked from inside a CM callback
1908  * function or that it must be invoked with the srpt_port.mutex held.
1909  */
1910 static int srpt_disconnect_ch(struct srpt_rdma_ch *ch)
1911 {
1912         int ret;
1913
1914         if (!srpt_set_ch_state(ch, CH_DISCONNECTING))
1915                 return -ENOTCONN;
1916
1917         if (ch->using_rdma_cm) {
1918                 ret = rdma_disconnect(ch->rdma_cm.cm_id);
1919         } else {
1920                 ret = ib_send_cm_dreq(ch->ib_cm.cm_id, NULL, 0);
1921                 if (ret < 0)
1922                         ret = ib_send_cm_drep(ch->ib_cm.cm_id, NULL, 0);
1923         }
1924
1925         if (ret < 0 && srpt_close_ch(ch))
1926                 ret = 0;
1927
1928         return ret;
1929 }
1930
1931 static bool srpt_ch_closed(struct srpt_port *sport, struct srpt_rdma_ch *ch)
1932 {
1933         struct srpt_nexus *nexus;
1934         struct srpt_rdma_ch *ch2;
1935         bool res = true;
1936
1937         rcu_read_lock();
1938         list_for_each_entry(nexus, &sport->nexus_list, entry) {
1939                 list_for_each_entry(ch2, &nexus->ch_list, list) {
1940                         if (ch2 == ch) {
1941                                 res = false;
1942                                 goto done;
1943                         }
1944                 }
1945         }
1946 done:
1947         rcu_read_unlock();
1948
1949         return res;
1950 }
1951
1952 /* Send DREQ and wait for DREP. */
1953 static void srpt_disconnect_ch_sync(struct srpt_rdma_ch *ch)
1954 {
1955         struct srpt_port *sport = ch->sport;
1956
1957         pr_debug("ch %s-%d state %d\n", ch->sess_name, ch->qp->qp_num,
1958                  ch->state);
1959
1960         mutex_lock(&sport->mutex);
1961         srpt_disconnect_ch(ch);
1962         mutex_unlock(&sport->mutex);
1963
1964         while (wait_event_timeout(sport->ch_releaseQ, srpt_ch_closed(sport, ch),
1965                                   5 * HZ) == 0)
1966                 pr_info("%s(%s-%d state %d): still waiting ...\n", __func__,
1967                         ch->sess_name, ch->qp->qp_num, ch->state);
1968
1969 }
1970
1971 static void __srpt_close_all_ch(struct srpt_port *sport)
1972 {
1973         struct srpt_nexus *nexus;
1974         struct srpt_rdma_ch *ch;
1975
1976         lockdep_assert_held(&sport->mutex);
1977
1978         list_for_each_entry(nexus, &sport->nexus_list, entry) {
1979                 list_for_each_entry(ch, &nexus->ch_list, list) {
1980                         if (srpt_disconnect_ch(ch) >= 0)
1981                                 pr_info("Closing channel %s because target %s_%d has been disabled\n",
1982                                         ch->sess_name,
1983                                         dev_name(&sport->sdev->device->dev),
1984                                         sport->port);
1985                         srpt_close_ch(ch);
1986                 }
1987         }
1988 }
1989
1990 /*
1991  * Look up (i_port_id, t_port_id) in sport->nexus_list. Create an entry if
1992  * it does not yet exist.
1993  */
1994 static struct srpt_nexus *srpt_get_nexus(struct srpt_port *sport,
1995                                          const u8 i_port_id[16],
1996                                          const u8 t_port_id[16])
1997 {
1998         struct srpt_nexus *nexus = NULL, *tmp_nexus = NULL, *n;
1999
2000         for (;;) {
2001                 mutex_lock(&sport->mutex);
2002                 list_for_each_entry(n, &sport->nexus_list, entry) {
2003                         if (memcmp(n->i_port_id, i_port_id, 16) == 0 &&
2004                             memcmp(n->t_port_id, t_port_id, 16) == 0) {
2005                                 nexus = n;
2006                                 break;
2007                         }
2008                 }
2009                 if (!nexus && tmp_nexus) {
2010                         list_add_tail_rcu(&tmp_nexus->entry,
2011                                           &sport->nexus_list);
2012                         swap(nexus, tmp_nexus);
2013                 }
2014                 mutex_unlock(&sport->mutex);
2015
2016                 if (nexus)
2017                         break;
2018                 tmp_nexus = kzalloc(sizeof(*nexus), GFP_KERNEL);
2019                 if (!tmp_nexus) {
2020                         nexus = ERR_PTR(-ENOMEM);
2021                         break;
2022                 }
2023                 INIT_LIST_HEAD(&tmp_nexus->ch_list);
2024                 memcpy(tmp_nexus->i_port_id, i_port_id, 16);
2025                 memcpy(tmp_nexus->t_port_id, t_port_id, 16);
2026         }
2027
2028         kfree(tmp_nexus);
2029
2030         return nexus;
2031 }
2032
2033 static void srpt_set_enabled(struct srpt_port *sport, bool enabled)
2034         __must_hold(&sport->mutex)
2035 {
2036         lockdep_assert_held(&sport->mutex);
2037
2038         if (sport->enabled == enabled)
2039                 return;
2040         sport->enabled = enabled;
2041         if (!enabled)
2042                 __srpt_close_all_ch(sport);
2043 }
2044
2045 static void srpt_free_ch(struct kref *kref)
2046 {
2047         struct srpt_rdma_ch *ch = container_of(kref, struct srpt_rdma_ch, kref);
2048
2049         kfree_rcu(ch, rcu);
2050 }
2051
2052 /*
2053  * Shut down the SCSI target session, tell the connection manager to
2054  * disconnect the associated RDMA channel, transition the QP to the error
2055  * state and remove the channel from the channel list. This function is
2056  * typically called from inside srpt_zerolength_write_done(). Concurrent
2057  * srpt_zerolength_write() calls from inside srpt_close_ch() are possible
2058  * as long as the channel is on sport->nexus_list.
2059  */
2060 static void srpt_release_channel_work(struct work_struct *w)
2061 {
2062         struct srpt_rdma_ch *ch;
2063         struct srpt_device *sdev;
2064         struct srpt_port *sport;
2065         struct se_session *se_sess;
2066
2067         ch = container_of(w, struct srpt_rdma_ch, release_work);
2068         pr_debug("%s-%d\n", ch->sess_name, ch->qp->qp_num);
2069
2070         sdev = ch->sport->sdev;
2071         BUG_ON(!sdev);
2072
2073         se_sess = ch->sess;
2074         BUG_ON(!se_sess);
2075
2076         target_sess_cmd_list_set_waiting(se_sess);
2077         target_wait_for_sess_cmds(se_sess);
2078
2079         target_remove_session(se_sess);
2080         ch->sess = NULL;
2081
2082         if (ch->using_rdma_cm)
2083                 rdma_destroy_id(ch->rdma_cm.cm_id);
2084         else
2085                 ib_destroy_cm_id(ch->ib_cm.cm_id);
2086
2087         sport = ch->sport;
2088         mutex_lock(&sport->mutex);
2089         list_del_rcu(&ch->list);
2090         mutex_unlock(&sport->mutex);
2091
2092         srpt_destroy_ch_ib(ch);
2093
2094         srpt_free_ioctx_ring((struct srpt_ioctx **)ch->ioctx_ring,
2095                              ch->sport->sdev, ch->rq_size,
2096                              ch->rsp_buf_cache, DMA_TO_DEVICE);
2097
2098         kmem_cache_destroy(ch->rsp_buf_cache);
2099
2100         srpt_free_ioctx_ring((struct srpt_ioctx **)ch->ioctx_recv_ring,
2101                              sdev, ch->rq_size,
2102                              ch->req_buf_cache, DMA_FROM_DEVICE);
2103
2104         kmem_cache_destroy(ch->req_buf_cache);
2105
2106         wake_up(&sport->ch_releaseQ);
2107
2108         kref_put(&ch->kref, srpt_free_ch);
2109 }
2110
2111 /**
2112  * srpt_cm_req_recv - process the event IB_CM_REQ_RECEIVED
2113  * @sdev: HCA through which the login request was received.
2114  * @ib_cm_id: IB/CM connection identifier in case of IB/CM.
2115  * @rdma_cm_id: RDMA/CM connection identifier in case of RDMA/CM.
2116  * @port_num: Port through which the REQ message was received.
2117  * @pkey: P_Key of the incoming connection.
2118  * @req: SRP login request.
2119  * @src_addr: GID (IB/CM) or IP address (RDMA/CM) of the port that submitted
2120  * the login request.
2121  *
2122  * Ownership of the cm_id is transferred to the target session if this
2123  * function returns zero. Otherwise the caller remains the owner of cm_id.
2124  */
2125 static int srpt_cm_req_recv(struct srpt_device *const sdev,
2126                             struct ib_cm_id *ib_cm_id,
2127                             struct rdma_cm_id *rdma_cm_id,
2128                             u8 port_num, __be16 pkey,
2129                             const struct srp_login_req *req,
2130                             const char *src_addr)
2131 {
2132         struct srpt_port *sport = &sdev->port[port_num - 1];
2133         struct srpt_nexus *nexus;
2134         struct srp_login_rsp *rsp = NULL;
2135         struct srp_login_rej *rej = NULL;
2136         union {
2137                 struct rdma_conn_param rdma_cm;
2138                 struct ib_cm_rep_param ib_cm;
2139         } *rep_param = NULL;
2140         struct srpt_rdma_ch *ch = NULL;
2141         char i_port_id[36];
2142         u32 it_iu_len;
2143         int i, tag_num, tag_size, ret;
2144
2145         WARN_ON_ONCE(irqs_disabled());
2146
2147         if (WARN_ON(!sdev || !req))
2148                 return -EINVAL;
2149
2150         it_iu_len = be32_to_cpu(req->req_it_iu_len);
2151
2152         pr_info("Received SRP_LOGIN_REQ with i_port_id %pI6, t_port_id %pI6 and it_iu_len %d on port %d (guid=%pI6); pkey %#04x\n",
2153                 req->initiator_port_id, req->target_port_id, it_iu_len,
2154                 port_num, &sport->gid, be16_to_cpu(pkey));
2155
2156         nexus = srpt_get_nexus(sport, req->initiator_port_id,
2157                                req->target_port_id);
2158         if (IS_ERR(nexus)) {
2159                 ret = PTR_ERR(nexus);
2160                 goto out;
2161         }
2162
2163         ret = -ENOMEM;
2164         rsp = kzalloc(sizeof(*rsp), GFP_KERNEL);
2165         rej = kzalloc(sizeof(*rej), GFP_KERNEL);
2166         rep_param = kzalloc(sizeof(*rep_param), GFP_KERNEL);
2167         if (!rsp || !rej || !rep_param)
2168                 goto out;
2169
2170         ret = -EINVAL;
2171         if (it_iu_len > srp_max_req_size || it_iu_len < 64) {
2172                 rej->reason = cpu_to_be32(
2173                                 SRP_LOGIN_REJ_REQ_IT_IU_LENGTH_TOO_LARGE);
2174                 pr_err("rejected SRP_LOGIN_REQ because its length (%d bytes) is out of range (%d .. %d)\n",
2175                        it_iu_len, 64, srp_max_req_size);
2176                 goto reject;
2177         }
2178
2179         if (!sport->enabled) {
2180                 rej->reason = cpu_to_be32(SRP_LOGIN_REJ_INSUFFICIENT_RESOURCES);
2181                 pr_info("rejected SRP_LOGIN_REQ because target port %s_%d has not yet been enabled\n",
2182                         dev_name(&sport->sdev->device->dev), port_num);
2183                 goto reject;
2184         }
2185
2186         if (*(__be64 *)req->target_port_id != cpu_to_be64(srpt_service_guid)
2187             || *(__be64 *)(req->target_port_id + 8) !=
2188                cpu_to_be64(srpt_service_guid)) {
2189                 rej->reason = cpu_to_be32(
2190                                 SRP_LOGIN_REJ_UNABLE_ASSOCIATE_CHANNEL);
2191                 pr_err("rejected SRP_LOGIN_REQ because it has an invalid target port identifier.\n");
2192                 goto reject;
2193         }
2194
2195         ret = -ENOMEM;
2196         ch = kzalloc(sizeof(*ch), GFP_KERNEL);
2197         if (!ch) {
2198                 rej->reason = cpu_to_be32(SRP_LOGIN_REJ_INSUFFICIENT_RESOURCES);
2199                 pr_err("rejected SRP_LOGIN_REQ because out of memory.\n");
2200                 goto reject;
2201         }
2202
2203         kref_init(&ch->kref);
2204         ch->pkey = be16_to_cpu(pkey);
2205         ch->nexus = nexus;
2206         ch->zw_cqe.done = srpt_zerolength_write_done;
2207         INIT_WORK(&ch->release_work, srpt_release_channel_work);
2208         ch->sport = sport;
2209         if (ib_cm_id) {
2210                 ch->ib_cm.cm_id = ib_cm_id;
2211                 ib_cm_id->context = ch;
2212         } else {
2213                 ch->using_rdma_cm = true;
2214                 ch->rdma_cm.cm_id = rdma_cm_id;
2215                 rdma_cm_id->context = ch;
2216         }
2217         /*
2218          * ch->rq_size should be at least as large as the initiator queue
2219          * depth to avoid that the initiator driver has to report QUEUE_FULL
2220          * to the SCSI mid-layer.
2221          */
2222         ch->rq_size = min(MAX_SRPT_RQ_SIZE, sdev->device->attrs.max_qp_wr);
2223         spin_lock_init(&ch->spinlock);
2224         ch->state = CH_CONNECTING;
2225         INIT_LIST_HEAD(&ch->cmd_wait_list);
2226         ch->max_rsp_size = ch->sport->port_attrib.srp_max_rsp_size;
2227
2228         ch->rsp_buf_cache = kmem_cache_create("srpt-rsp-buf", ch->max_rsp_size,
2229                                               512, 0, NULL);
2230         if (!ch->rsp_buf_cache)
2231                 goto free_ch;
2232
2233         ch->ioctx_ring = (struct srpt_send_ioctx **)
2234                 srpt_alloc_ioctx_ring(ch->sport->sdev, ch->rq_size,
2235                                       sizeof(*ch->ioctx_ring[0]),
2236                                       ch->rsp_buf_cache, 0, DMA_TO_DEVICE);
2237         if (!ch->ioctx_ring) {
2238                 pr_err("rejected SRP_LOGIN_REQ because creating a new QP SQ ring failed.\n");
2239                 rej->reason = cpu_to_be32(SRP_LOGIN_REJ_INSUFFICIENT_RESOURCES);
2240                 goto free_rsp_cache;
2241         }
2242
2243         for (i = 0; i < ch->rq_size; i++)
2244                 ch->ioctx_ring[i]->ch = ch;
2245         if (!sdev->use_srq) {
2246                 u16 imm_data_offset = req->req_flags & SRP_IMMED_REQUESTED ?
2247                         be16_to_cpu(req->imm_data_offset) : 0;
2248                 u16 alignment_offset;
2249                 u32 req_sz;
2250
2251                 if (req->req_flags & SRP_IMMED_REQUESTED)
2252                         pr_debug("imm_data_offset = %d\n",
2253                                  be16_to_cpu(req->imm_data_offset));
2254                 if (imm_data_offset >= sizeof(struct srp_cmd)) {
2255                         ch->imm_data_offset = imm_data_offset;
2256                         rsp->rsp_flags |= SRP_LOGIN_RSP_IMMED_SUPP;
2257                 } else {
2258                         ch->imm_data_offset = 0;
2259                 }
2260                 alignment_offset = round_up(imm_data_offset, 512) -
2261                         imm_data_offset;
2262                 req_sz = alignment_offset + imm_data_offset + srp_max_req_size;
2263                 ch->req_buf_cache = kmem_cache_create("srpt-req-buf", req_sz,
2264                                                       512, 0, NULL);
2265                 if (!ch->req_buf_cache)
2266                         goto free_rsp_ring;
2267
2268                 ch->ioctx_recv_ring = (struct srpt_recv_ioctx **)
2269                         srpt_alloc_ioctx_ring(ch->sport->sdev, ch->rq_size,
2270                                               sizeof(*ch->ioctx_recv_ring[0]),
2271                                               ch->req_buf_cache,
2272                                               alignment_offset,
2273                                               DMA_FROM_DEVICE);
2274                 if (!ch->ioctx_recv_ring) {
2275                         pr_err("rejected SRP_LOGIN_REQ because creating a new QP RQ ring failed.\n");
2276                         rej->reason =
2277                             cpu_to_be32(SRP_LOGIN_REJ_INSUFFICIENT_RESOURCES);
2278                         goto free_recv_cache;
2279                 }
2280                 for (i = 0; i < ch->rq_size; i++)
2281                         INIT_LIST_HEAD(&ch->ioctx_recv_ring[i]->wait_list);
2282         }
2283
2284         ret = srpt_create_ch_ib(ch);
2285         if (ret) {
2286                 rej->reason = cpu_to_be32(SRP_LOGIN_REJ_INSUFFICIENT_RESOURCES);
2287                 pr_err("rejected SRP_LOGIN_REQ because creating a new RDMA channel failed.\n");
2288                 goto free_recv_ring;
2289         }
2290
2291         strlcpy(ch->sess_name, src_addr, sizeof(ch->sess_name));
2292         snprintf(i_port_id, sizeof(i_port_id), "0x%016llx%016llx",
2293                         be64_to_cpu(*(__be64 *)nexus->i_port_id),
2294                         be64_to_cpu(*(__be64 *)(nexus->i_port_id + 8)));
2295
2296         pr_debug("registering session %s\n", ch->sess_name);
2297
2298         tag_num = ch->rq_size;
2299         tag_size = 1; /* ib_srpt does not use se_sess->sess_cmd_map */
2300         if (sport->port_guid_tpg.se_tpg_wwn)
2301                 ch->sess = target_setup_session(&sport->port_guid_tpg, tag_num,
2302                                                 tag_size, TARGET_PROT_NORMAL,
2303                                                 ch->sess_name, ch, NULL);
2304         if (sport->port_gid_tpg.se_tpg_wwn && IS_ERR_OR_NULL(ch->sess))
2305                 ch->sess = target_setup_session(&sport->port_gid_tpg, tag_num,
2306                                         tag_size, TARGET_PROT_NORMAL, i_port_id,
2307                                         ch, NULL);
2308         /* Retry without leading "0x" */
2309         if (sport->port_gid_tpg.se_tpg_wwn && IS_ERR_OR_NULL(ch->sess))
2310                 ch->sess = target_setup_session(&sport->port_gid_tpg, tag_num,
2311                                                 tag_size, TARGET_PROT_NORMAL,
2312                                                 i_port_id + 2, ch, NULL);
2313         if (IS_ERR_OR_NULL(ch->sess)) {
2314                 WARN_ON_ONCE(ch->sess == NULL);
2315                 ret = PTR_ERR(ch->sess);
2316                 ch->sess = NULL;
2317                 pr_info("Rejected login for initiator %s: ret = %d.\n",
2318                         ch->sess_name, ret);
2319                 rej->reason = cpu_to_be32(ret == -ENOMEM ?
2320                                 SRP_LOGIN_REJ_INSUFFICIENT_RESOURCES :
2321                                 SRP_LOGIN_REJ_CHANNEL_LIMIT_REACHED);
2322                 goto destroy_ib;
2323         }
2324
2325         mutex_lock(&sport->mutex);
2326
2327         if ((req->req_flags & SRP_MTCH_ACTION) == SRP_MULTICHAN_SINGLE) {
2328                 struct srpt_rdma_ch *ch2;
2329
2330                 list_for_each_entry(ch2, &nexus->ch_list, list) {
2331                         if (srpt_disconnect_ch(ch2) < 0)
2332                                 continue;
2333                         pr_info("Relogin - closed existing channel %s\n",
2334                                 ch2->sess_name);
2335                         rsp->rsp_flags |= SRP_LOGIN_RSP_MULTICHAN_TERMINATED;
2336                 }
2337         } else {
2338                 rsp->rsp_flags |= SRP_LOGIN_RSP_MULTICHAN_MAINTAINED;
2339         }
2340
2341         list_add_tail_rcu(&ch->list, &nexus->ch_list);
2342
2343         if (!sport->enabled) {
2344                 rej->reason = cpu_to_be32(
2345                                 SRP_LOGIN_REJ_INSUFFICIENT_RESOURCES);
2346                 pr_info("rejected SRP_LOGIN_REQ because target %s_%d is not enabled\n",
2347                         dev_name(&sdev->device->dev), port_num);
2348                 mutex_unlock(&sport->mutex);
2349                 goto reject;
2350         }
2351
2352         mutex_unlock(&sport->mutex);
2353
2354         ret = ch->using_rdma_cm ? 0 : srpt_ch_qp_rtr(ch, ch->qp);
2355         if (ret) {
2356                 rej->reason = cpu_to_be32(SRP_LOGIN_REJ_INSUFFICIENT_RESOURCES);
2357                 pr_err("rejected SRP_LOGIN_REQ because enabling RTR failed (error code = %d)\n",
2358                        ret);
2359                 goto reject;
2360         }
2361
2362         pr_debug("Establish connection sess=%p name=%s ch=%p\n", ch->sess,
2363                  ch->sess_name, ch);
2364
2365         /* create srp_login_response */
2366         rsp->opcode = SRP_LOGIN_RSP;
2367         rsp->tag = req->tag;
2368         rsp->max_it_iu_len = cpu_to_be32(srp_max_req_size);
2369         rsp->max_ti_iu_len = req->req_it_iu_len;
2370         ch->max_ti_iu_len = it_iu_len;
2371         rsp->buf_fmt = cpu_to_be16(SRP_BUF_FORMAT_DIRECT |
2372                                    SRP_BUF_FORMAT_INDIRECT);
2373         rsp->req_lim_delta = cpu_to_be32(ch->rq_size);
2374         atomic_set(&ch->req_lim, ch->rq_size);
2375         atomic_set(&ch->req_lim_delta, 0);
2376
2377         /* create cm reply */
2378         if (ch->using_rdma_cm) {
2379                 rep_param->rdma_cm.private_data = (void *)rsp;
2380                 rep_param->rdma_cm.private_data_len = sizeof(*rsp);
2381                 rep_param->rdma_cm.rnr_retry_count = 7;
2382                 rep_param->rdma_cm.flow_control = 1;
2383                 rep_param->rdma_cm.responder_resources = 4;
2384                 rep_param->rdma_cm.initiator_depth = 4;
2385         } else {
2386                 rep_param->ib_cm.qp_num = ch->qp->qp_num;
2387                 rep_param->ib_cm.private_data = (void *)rsp;
2388                 rep_param->ib_cm.private_data_len = sizeof(*rsp);
2389                 rep_param->ib_cm.rnr_retry_count = 7;
2390                 rep_param->ib_cm.flow_control = 1;
2391                 rep_param->ib_cm.failover_accepted = 0;
2392                 rep_param->ib_cm.srq = 1;
2393                 rep_param->ib_cm.responder_resources = 4;
2394                 rep_param->ib_cm.initiator_depth = 4;
2395         }
2396
2397         /*
2398          * Hold the sport mutex while accepting a connection to avoid that
2399          * srpt_disconnect_ch() is invoked concurrently with this code.
2400          */
2401         mutex_lock(&sport->mutex);
2402         if (sport->enabled && ch->state == CH_CONNECTING) {
2403                 if (ch->using_rdma_cm)
2404                         ret = rdma_accept(rdma_cm_id, &rep_param->rdma_cm);
2405                 else
2406                         ret = ib_send_cm_rep(ib_cm_id, &rep_param->ib_cm);
2407         } else {
2408                 ret = -EINVAL;
2409         }
2410         mutex_unlock(&sport->mutex);
2411
2412         switch (ret) {
2413         case 0:
2414                 break;
2415         case -EINVAL:
2416                 goto reject;
2417         default:
2418                 rej->reason = cpu_to_be32(SRP_LOGIN_REJ_INSUFFICIENT_RESOURCES);
2419                 pr_err("sending SRP_LOGIN_REQ response failed (error code = %d)\n",
2420                        ret);
2421                 goto reject;
2422         }
2423
2424         goto out;
2425
2426 destroy_ib:
2427         srpt_destroy_ch_ib(ch);
2428
2429 free_recv_ring:
2430         srpt_free_ioctx_ring((struct srpt_ioctx **)ch->ioctx_recv_ring,
2431                              ch->sport->sdev, ch->rq_size,
2432                              ch->req_buf_cache, DMA_FROM_DEVICE);
2433
2434 free_recv_cache:
2435         kmem_cache_destroy(ch->req_buf_cache);
2436
2437 free_rsp_ring:
2438         srpt_free_ioctx_ring((struct srpt_ioctx **)ch->ioctx_ring,
2439                              ch->sport->sdev, ch->rq_size,
2440                              ch->rsp_buf_cache, DMA_TO_DEVICE);
2441
2442 free_rsp_cache:
2443         kmem_cache_destroy(ch->rsp_buf_cache);
2444
2445 free_ch:
2446         if (rdma_cm_id)
2447                 rdma_cm_id->context = NULL;
2448         else
2449                 ib_cm_id->context = NULL;
2450         kfree(ch);
2451         ch = NULL;
2452
2453         WARN_ON_ONCE(ret == 0);
2454
2455 reject:
2456         pr_info("Rejecting login with reason %#x\n", be32_to_cpu(rej->reason));
2457         rej->opcode = SRP_LOGIN_REJ;
2458         rej->tag = req->tag;
2459         rej->buf_fmt = cpu_to_be16(SRP_BUF_FORMAT_DIRECT |
2460                                    SRP_BUF_FORMAT_INDIRECT);
2461
2462         if (rdma_cm_id)
2463                 rdma_reject(rdma_cm_id, rej, sizeof(*rej));
2464         else
2465                 ib_send_cm_rej(ib_cm_id, IB_CM_REJ_CONSUMER_DEFINED, NULL, 0,
2466                                rej, sizeof(*rej));
2467
2468         if (ch && ch->sess) {
2469                 srpt_close_ch(ch);
2470                 /*
2471                  * Tell the caller not to free cm_id since
2472                  * srpt_release_channel_work() will do that.
2473                  */
2474                 ret = 0;
2475         }
2476
2477 out:
2478         kfree(rep_param);
2479         kfree(rsp);
2480         kfree(rej);
2481
2482         return ret;
2483 }
2484
2485 static int srpt_ib_cm_req_recv(struct ib_cm_id *cm_id,
2486                                const struct ib_cm_req_event_param *param,
2487                                void *private_data)
2488 {
2489         char sguid[40];
2490
2491         srpt_format_guid(sguid, sizeof(sguid),
2492                          &param->primary_path->dgid.global.interface_id);
2493
2494         return srpt_cm_req_recv(cm_id->context, cm_id, NULL, param->port,
2495                                 param->primary_path->pkey,
2496                                 private_data, sguid);
2497 }
2498
2499 static int srpt_rdma_cm_req_recv(struct rdma_cm_id *cm_id,
2500                                  struct rdma_cm_event *event)
2501 {
2502         struct srpt_device *sdev;
2503         struct srp_login_req req;
2504         const struct srp_login_req_rdma *req_rdma;
2505         char src_addr[40];
2506
2507         sdev = ib_get_client_data(cm_id->device, &srpt_client);
2508         if (!sdev)
2509                 return -ECONNREFUSED;
2510
2511         if (event->param.conn.private_data_len < sizeof(*req_rdma))
2512                 return -EINVAL;
2513
2514         /* Transform srp_login_req_rdma into srp_login_req. */
2515         req_rdma = event->param.conn.private_data;
2516         memset(&req, 0, sizeof(req));
2517         req.opcode              = req_rdma->opcode;
2518         req.tag                 = req_rdma->tag;
2519         req.req_it_iu_len       = req_rdma->req_it_iu_len;
2520         req.req_buf_fmt         = req_rdma->req_buf_fmt;
2521         req.req_flags           = req_rdma->req_flags;
2522         memcpy(req.initiator_port_id, req_rdma->initiator_port_id, 16);
2523         memcpy(req.target_port_id, req_rdma->target_port_id, 16);
2524         req.imm_data_offset     = req_rdma->imm_data_offset;
2525
2526         snprintf(src_addr, sizeof(src_addr), "%pIS",
2527                  &cm_id->route.addr.src_addr);
2528
2529         return srpt_cm_req_recv(sdev, NULL, cm_id, cm_id->port_num,
2530                                 cm_id->route.path_rec->pkey, &req, src_addr);
2531 }
2532
2533 static void srpt_cm_rej_recv(struct srpt_rdma_ch *ch,
2534                              enum ib_cm_rej_reason reason,
2535                              const u8 *private_data,
2536                              u8 private_data_len)
2537 {
2538         char *priv = NULL;
2539         int i;
2540
2541         if (private_data_len && (priv = kmalloc(private_data_len * 3 + 1,
2542                                                 GFP_KERNEL))) {
2543                 for (i = 0; i < private_data_len; i++)
2544                         sprintf(priv + 3 * i, " %02x", private_data[i]);
2545         }
2546         pr_info("Received CM REJ for ch %s-%d; reason %d%s%s.\n",
2547                 ch->sess_name, ch->qp->qp_num, reason, private_data_len ?
2548                 "; private data" : "", priv ? priv : " (?)");
2549         kfree(priv);
2550 }
2551
2552 /**
2553  * srpt_cm_rtu_recv - process an IB_CM_RTU_RECEIVED or USER_ESTABLISHED event
2554  * @ch: SRPT RDMA channel.
2555  *
2556  * An RTU (ready to use) message indicates that the connection has been
2557  * established and that the recipient may begin transmitting.
2558  */
2559 static void srpt_cm_rtu_recv(struct srpt_rdma_ch *ch)
2560 {
2561         int ret;
2562
2563         ret = ch->using_rdma_cm ? 0 : srpt_ch_qp_rts(ch, ch->qp);
2564         if (ret < 0) {
2565                 pr_err("%s-%d: QP transition to RTS failed\n", ch->sess_name,
2566                        ch->qp->qp_num);
2567                 srpt_close_ch(ch);
2568                 return;
2569         }
2570
2571         /*
2572          * Note: calling srpt_close_ch() if the transition to the LIVE state
2573          * fails is not necessary since that means that that function has
2574          * already been invoked from another thread.
2575          */
2576         if (!srpt_set_ch_state(ch, CH_LIVE)) {
2577                 pr_err("%s-%d: channel transition to LIVE state failed\n",
2578                        ch->sess_name, ch->qp->qp_num);
2579                 return;
2580         }
2581
2582         /* Trigger wait list processing. */
2583         ret = srpt_zerolength_write(ch);
2584         WARN_ONCE(ret < 0, "%d\n", ret);
2585 }
2586
2587 /**
2588  * srpt_cm_handler - IB connection manager callback function
2589  * @cm_id: IB/CM connection identifier.
2590  * @event: IB/CM event.
2591  *
2592  * A non-zero return value will cause the caller destroy the CM ID.
2593  *
2594  * Note: srpt_cm_handler() must only return a non-zero value when transferring
2595  * ownership of the cm_id to a channel by srpt_cm_req_recv() failed. Returning
2596  * a non-zero value in any other case will trigger a race with the
2597  * ib_destroy_cm_id() call in srpt_release_channel().
2598  */
2599 static int srpt_cm_handler(struct ib_cm_id *cm_id,
2600                            const struct ib_cm_event *event)
2601 {
2602         struct srpt_rdma_ch *ch = cm_id->context;
2603         int ret;
2604
2605         ret = 0;
2606         switch (event->event) {
2607         case IB_CM_REQ_RECEIVED:
2608                 ret = srpt_ib_cm_req_recv(cm_id, &event->param.req_rcvd,
2609                                           event->private_data);
2610                 break;
2611         case IB_CM_REJ_RECEIVED:
2612                 srpt_cm_rej_recv(ch, event->param.rej_rcvd.reason,
2613                                  event->private_data,
2614                                  IB_CM_REJ_PRIVATE_DATA_SIZE);
2615                 break;
2616         case IB_CM_RTU_RECEIVED:
2617         case IB_CM_USER_ESTABLISHED:
2618                 srpt_cm_rtu_recv(ch);
2619                 break;
2620         case IB_CM_DREQ_RECEIVED:
2621                 srpt_disconnect_ch(ch);
2622                 break;
2623         case IB_CM_DREP_RECEIVED:
2624                 pr_info("Received CM DREP message for ch %s-%d.\n",
2625                         ch->sess_name, ch->qp->qp_num);
2626                 srpt_close_ch(ch);
2627                 break;
2628         case IB_CM_TIMEWAIT_EXIT:
2629                 pr_info("Received CM TimeWait exit for ch %s-%d.\n",
2630                         ch->sess_name, ch->qp->qp_num);
2631                 srpt_close_ch(ch);
2632                 break;
2633         case IB_CM_REP_ERROR:
2634                 pr_info("Received CM REP error for ch %s-%d.\n", ch->sess_name,
2635                         ch->qp->qp_num);
2636                 break;
2637         case IB_CM_DREQ_ERROR:
2638                 pr_info("Received CM DREQ ERROR event.\n");
2639                 break;
2640         case IB_CM_MRA_RECEIVED:
2641                 pr_info("Received CM MRA event\n");
2642                 break;
2643         default:
2644                 pr_err("received unrecognized CM event %d\n", event->event);
2645                 break;
2646         }
2647
2648         return ret;
2649 }
2650
2651 static int srpt_rdma_cm_handler(struct rdma_cm_id *cm_id,
2652                                 struct rdma_cm_event *event)
2653 {
2654         struct srpt_rdma_ch *ch = cm_id->context;
2655         int ret = 0;
2656
2657         switch (event->event) {
2658         case RDMA_CM_EVENT_CONNECT_REQUEST:
2659                 ret = srpt_rdma_cm_req_recv(cm_id, event);
2660                 break;
2661         case RDMA_CM_EVENT_REJECTED:
2662                 srpt_cm_rej_recv(ch, event->status,
2663                                  event->param.conn.private_data,
2664                                  event->param.conn.private_data_len);
2665                 break;
2666         case RDMA_CM_EVENT_ESTABLISHED:
2667                 srpt_cm_rtu_recv(ch);
2668                 break;
2669         case RDMA_CM_EVENT_DISCONNECTED:
2670                 if (ch->state < CH_DISCONNECTING)
2671                         srpt_disconnect_ch(ch);
2672                 else
2673                         srpt_close_ch(ch);
2674                 break;
2675         case RDMA_CM_EVENT_TIMEWAIT_EXIT:
2676                 srpt_close_ch(ch);
2677                 break;
2678         case RDMA_CM_EVENT_UNREACHABLE:
2679                 pr_info("Received CM REP error for ch %s-%d.\n", ch->sess_name,
2680                         ch->qp->qp_num);
2681                 break;
2682         case RDMA_CM_EVENT_DEVICE_REMOVAL:
2683         case RDMA_CM_EVENT_ADDR_CHANGE:
2684                 break;
2685         default:
2686                 pr_err("received unrecognized RDMA CM event %d\n",
2687                        event->event);
2688                 break;
2689         }
2690
2691         return ret;
2692 }
2693
2694 /*
2695  * srpt_write_pending - Start data transfer from initiator to target (write).
2696  */
2697 static int srpt_write_pending(struct se_cmd *se_cmd)
2698 {
2699         struct srpt_send_ioctx *ioctx =
2700                 container_of(se_cmd, struct srpt_send_ioctx, cmd);
2701         struct srpt_rdma_ch *ch = ioctx->ch;
2702         struct ib_send_wr *first_wr = NULL;
2703         struct ib_cqe *cqe = &ioctx->rdma_cqe;
2704         enum srpt_command_state new_state;
2705         int ret, i;
2706
2707         if (ioctx->recv_ioctx) {
2708                 srpt_set_cmd_state(ioctx, SRPT_STATE_DATA_IN);
2709                 target_execute_cmd(&ioctx->cmd);
2710                 return 0;
2711         }
2712
2713         new_state = srpt_set_cmd_state(ioctx, SRPT_STATE_NEED_DATA);
2714         WARN_ON(new_state == SRPT_STATE_DONE);
2715
2716         if (atomic_sub_return(ioctx->n_rdma, &ch->sq_wr_avail) < 0) {
2717                 pr_warn("%s: IB send queue full (needed %d)\n",
2718                                 __func__, ioctx->n_rdma);
2719                 ret = -ENOMEM;
2720                 goto out_undo;
2721         }
2722
2723         cqe->done = srpt_rdma_read_done;
2724         for (i = ioctx->n_rw_ctx - 1; i >= 0; i--) {
2725                 struct srpt_rw_ctx *ctx = &ioctx->rw_ctxs[i];
2726
2727                 first_wr = rdma_rw_ctx_wrs(&ctx->rw, ch->qp, ch->sport->port,
2728                                 cqe, first_wr);
2729                 cqe = NULL;
2730         }
2731
2732         ret = ib_post_send(ch->qp, first_wr, NULL);
2733         if (ret) {
2734                 pr_err("%s: ib_post_send() returned %d for %d (avail: %d)\n",
2735                          __func__, ret, ioctx->n_rdma,
2736                          atomic_read(&ch->sq_wr_avail));
2737                 goto out_undo;
2738         }
2739
2740         return 0;
2741 out_undo:
2742         atomic_add(ioctx->n_rdma, &ch->sq_wr_avail);
2743         return ret;
2744 }
2745
2746 static u8 tcm_to_srp_tsk_mgmt_status(const int tcm_mgmt_status)
2747 {
2748         switch (tcm_mgmt_status) {
2749         case TMR_FUNCTION_COMPLETE:
2750                 return SRP_TSK_MGMT_SUCCESS;
2751         case TMR_FUNCTION_REJECTED:
2752                 return SRP_TSK_MGMT_FUNC_NOT_SUPP;
2753         }
2754         return SRP_TSK_MGMT_FAILED;
2755 }
2756
2757 /**
2758  * srpt_queue_response - transmit the response to a SCSI command
2759  * @cmd: SCSI target command.
2760  *
2761  * Callback function called by the TCM core. Must not block since it can be
2762  * invoked on the context of the IB completion handler.
2763  */
2764 static void srpt_queue_response(struct se_cmd *cmd)
2765 {
2766         struct srpt_send_ioctx *ioctx =
2767                 container_of(cmd, struct srpt_send_ioctx, cmd);
2768         struct srpt_rdma_ch *ch = ioctx->ch;
2769         struct srpt_device *sdev = ch->sport->sdev;
2770         struct ib_send_wr send_wr, *first_wr = &send_wr;
2771         struct ib_sge sge;
2772         enum srpt_command_state state;
2773         int resp_len, ret, i;
2774         u8 srp_tm_status;
2775
2776         BUG_ON(!ch);
2777
2778         state = ioctx->state;
2779         switch (state) {
2780         case SRPT_STATE_NEW:
2781         case SRPT_STATE_DATA_IN:
2782                 ioctx->state = SRPT_STATE_CMD_RSP_SENT;
2783                 break;
2784         case SRPT_STATE_MGMT:
2785                 ioctx->state = SRPT_STATE_MGMT_RSP_SENT;
2786                 break;
2787         default:
2788                 WARN(true, "ch %p; cmd %d: unexpected command state %d\n",
2789                         ch, ioctx->ioctx.index, ioctx->state);
2790                 break;
2791         }
2792
2793         if (WARN_ON_ONCE(state == SRPT_STATE_CMD_RSP_SENT))
2794                 return;
2795
2796         /* For read commands, transfer the data to the initiator. */
2797         if (ioctx->cmd.data_direction == DMA_FROM_DEVICE &&
2798             ioctx->cmd.data_length &&
2799             !ioctx->queue_status_only) {
2800                 for (i = ioctx->n_rw_ctx - 1; i >= 0; i--) {
2801                         struct srpt_rw_ctx *ctx = &ioctx->rw_ctxs[i];
2802
2803                         first_wr = rdma_rw_ctx_wrs(&ctx->rw, ch->qp,
2804                                         ch->sport->port, NULL, first_wr);
2805                 }
2806         }
2807
2808         if (state != SRPT_STATE_MGMT)
2809                 resp_len = srpt_build_cmd_rsp(ch, ioctx, ioctx->cmd.tag,
2810                                               cmd->scsi_status);
2811         else {
2812                 srp_tm_status
2813                         = tcm_to_srp_tsk_mgmt_status(cmd->se_tmr_req->response);
2814                 resp_len = srpt_build_tskmgmt_rsp(ch, ioctx, srp_tm_status,
2815                                                  ioctx->cmd.tag);
2816         }
2817
2818         atomic_inc(&ch->req_lim);
2819
2820         if (unlikely(atomic_sub_return(1 + ioctx->n_rdma,
2821                         &ch->sq_wr_avail) < 0)) {
2822                 pr_warn("%s: IB send queue full (needed %d)\n",
2823                                 __func__, ioctx->n_rdma);
2824                 ret = -ENOMEM;
2825                 goto out;
2826         }
2827
2828         ib_dma_sync_single_for_device(sdev->device, ioctx->ioctx.dma, resp_len,
2829                                       DMA_TO_DEVICE);
2830
2831         sge.addr = ioctx->ioctx.dma;
2832         sge.length = resp_len;
2833         sge.lkey = sdev->lkey;
2834
2835         ioctx->ioctx.cqe.done = srpt_send_done;
2836         send_wr.next = NULL;
2837         send_wr.wr_cqe = &ioctx->ioctx.cqe;
2838         send_wr.sg_list = &sge;
2839         send_wr.num_sge = 1;
2840         send_wr.opcode = IB_WR_SEND;
2841         send_wr.send_flags = IB_SEND_SIGNALED;
2842
2843         ret = ib_post_send(ch->qp, first_wr, NULL);
2844         if (ret < 0) {
2845                 pr_err("%s: sending cmd response failed for tag %llu (%d)\n",
2846                         __func__, ioctx->cmd.tag, ret);
2847                 goto out;
2848         }
2849
2850         return;
2851
2852 out:
2853         atomic_add(1 + ioctx->n_rdma, &ch->sq_wr_avail);
2854         atomic_dec(&ch->req_lim);
2855         srpt_set_cmd_state(ioctx, SRPT_STATE_DONE);
2856         target_put_sess_cmd(&ioctx->cmd);
2857 }
2858
2859 static int srpt_queue_data_in(struct se_cmd *cmd)
2860 {
2861         srpt_queue_response(cmd);
2862         return 0;
2863 }
2864
2865 static void srpt_queue_tm_rsp(struct se_cmd *cmd)
2866 {
2867         srpt_queue_response(cmd);
2868 }
2869
2870 /*
2871  * This function is called for aborted commands if no response is sent to the
2872  * initiator. Make sure that the credits freed by aborting a command are
2873  * returned to the initiator the next time a response is sent by incrementing
2874  * ch->req_lim_delta.
2875  */
2876 static void srpt_aborted_task(struct se_cmd *cmd)
2877 {
2878         struct srpt_send_ioctx *ioctx = container_of(cmd,
2879                                 struct srpt_send_ioctx, cmd);
2880         struct srpt_rdma_ch *ch = ioctx->ch;
2881
2882         atomic_inc(&ch->req_lim_delta);
2883 }
2884
2885 static int srpt_queue_status(struct se_cmd *cmd)
2886 {
2887         struct srpt_send_ioctx *ioctx;
2888
2889         ioctx = container_of(cmd, struct srpt_send_ioctx, cmd);
2890         BUG_ON(ioctx->sense_data != cmd->sense_buffer);
2891         if (cmd->se_cmd_flags &
2892             (SCF_TRANSPORT_TASK_SENSE | SCF_EMULATED_TASK_SENSE))
2893                 WARN_ON(cmd->scsi_status != SAM_STAT_CHECK_CONDITION);
2894         ioctx->queue_status_only = true;
2895         srpt_queue_response(cmd);
2896         return 0;
2897 }
2898
2899 static void srpt_refresh_port_work(struct work_struct *work)
2900 {
2901         struct srpt_port *sport = container_of(work, struct srpt_port, work);
2902
2903         srpt_refresh_port(sport);
2904 }
2905
2906 static bool srpt_ch_list_empty(struct srpt_port *sport)
2907 {
2908         struct srpt_nexus *nexus;
2909         bool res = true;
2910
2911         rcu_read_lock();
2912         list_for_each_entry(nexus, &sport->nexus_list, entry)
2913                 if (!list_empty(&nexus->ch_list))
2914                         res = false;
2915         rcu_read_unlock();
2916
2917         return res;
2918 }
2919
2920 /**
2921  * srpt_release_sport - disable login and wait for associated channels
2922  * @sport: SRPT HCA port.
2923  */
2924 static int srpt_release_sport(struct srpt_port *sport)
2925 {
2926         struct srpt_nexus *nexus, *next_n;
2927         struct srpt_rdma_ch *ch;
2928
2929         WARN_ON_ONCE(irqs_disabled());
2930
2931         mutex_lock(&sport->mutex);
2932         srpt_set_enabled(sport, false);
2933         mutex_unlock(&sport->mutex);
2934
2935         while (wait_event_timeout(sport->ch_releaseQ,
2936                                   srpt_ch_list_empty(sport), 5 * HZ) <= 0) {
2937                 pr_info("%s_%d: waiting for session unregistration ...\n",
2938                         dev_name(&sport->sdev->device->dev), sport->port);
2939                 rcu_read_lock();
2940                 list_for_each_entry(nexus, &sport->nexus_list, entry) {
2941                         list_for_each_entry(ch, &nexus->ch_list, list) {
2942                                 pr_info("%s-%d: state %s\n",
2943                                         ch->sess_name, ch->qp->qp_num,
2944                                         get_ch_state_name(ch->state));
2945                         }
2946                 }
2947                 rcu_read_unlock();
2948         }
2949
2950         mutex_lock(&sport->mutex);
2951         list_for_each_entry_safe(nexus, next_n, &sport->nexus_list, entry) {
2952                 list_del(&nexus->entry);
2953                 kfree_rcu(nexus, rcu);
2954         }
2955         mutex_unlock(&sport->mutex);
2956
2957         return 0;
2958 }
2959
2960 static struct se_wwn *__srpt_lookup_wwn(const char *name)
2961 {
2962         struct ib_device *dev;
2963         struct srpt_device *sdev;
2964         struct srpt_port *sport;
2965         int i;
2966
2967         list_for_each_entry(sdev, &srpt_dev_list, list) {
2968                 dev = sdev->device;
2969                 if (!dev)
2970                         continue;
2971
2972                 for (i = 0; i < dev->phys_port_cnt; i++) {
2973                         sport = &sdev->port[i];
2974
2975                         if (strcmp(sport->port_guid, name) == 0)
2976                                 return &sport->port_guid_wwn;
2977                         if (strcmp(sport->port_gid, name) == 0)
2978                                 return &sport->port_gid_wwn;
2979                 }
2980         }
2981
2982         return NULL;
2983 }
2984
2985 static struct se_wwn *srpt_lookup_wwn(const char *name)
2986 {
2987         struct se_wwn *wwn;
2988
2989         spin_lock(&srpt_dev_lock);
2990         wwn = __srpt_lookup_wwn(name);
2991         spin_unlock(&srpt_dev_lock);
2992
2993         return wwn;
2994 }
2995
2996 static void srpt_free_srq(struct srpt_device *sdev)
2997 {
2998         if (!sdev->srq)
2999                 return;
3000
3001         ib_destroy_srq(sdev->srq);
3002         srpt_free_ioctx_ring((struct srpt_ioctx **)sdev->ioctx_ring, sdev,
3003                              sdev->srq_size, sdev->req_buf_cache,
3004                              DMA_FROM_DEVICE);
3005         kmem_cache_destroy(sdev->req_buf_cache);
3006         sdev->srq = NULL;
3007 }
3008
3009 static int srpt_alloc_srq(struct srpt_device *sdev)
3010 {
3011         struct ib_srq_init_attr srq_attr = {
3012                 .event_handler = srpt_srq_event,
3013                 .srq_context = (void *)sdev,
3014                 .attr.max_wr = sdev->srq_size,
3015                 .attr.max_sge = 1,
3016                 .srq_type = IB_SRQT_BASIC,
3017         };
3018         struct ib_device *device = sdev->device;
3019         struct ib_srq *srq;
3020         int i;
3021
3022         WARN_ON_ONCE(sdev->srq);
3023         srq = ib_create_srq(sdev->pd, &srq_attr);
3024         if (IS_ERR(srq)) {
3025                 pr_debug("ib_create_srq() failed: %ld\n", PTR_ERR(srq));
3026                 return PTR_ERR(srq);
3027         }
3028
3029         pr_debug("create SRQ #wr= %d max_allow=%d dev= %s\n", sdev->srq_size,
3030                  sdev->device->attrs.max_srq_wr, dev_name(&device->dev));
3031
3032         sdev->req_buf_cache = kmem_cache_create("srpt-srq-req-buf",
3033                                                 srp_max_req_size, 0, 0, NULL);
3034         if (!sdev->req_buf_cache)
3035                 goto free_srq;
3036
3037         sdev->ioctx_ring = (struct srpt_recv_ioctx **)
3038                 srpt_alloc_ioctx_ring(sdev, sdev->srq_size,
3039                                       sizeof(*sdev->ioctx_ring[0]),
3040                                       sdev->req_buf_cache, 0, DMA_FROM_DEVICE);
3041         if (!sdev->ioctx_ring)
3042                 goto free_cache;
3043
3044         sdev->use_srq = true;
3045         sdev->srq = srq;
3046
3047         for (i = 0; i < sdev->srq_size; ++i) {
3048                 INIT_LIST_HEAD(&sdev->ioctx_ring[i]->wait_list);
3049                 srpt_post_recv(sdev, NULL, sdev->ioctx_ring[i]);
3050         }
3051
3052         return 0;
3053
3054 free_cache:
3055         kmem_cache_destroy(sdev->req_buf_cache);
3056
3057 free_srq:
3058         ib_destroy_srq(srq);
3059         return -ENOMEM;
3060 }
3061
3062 static int srpt_use_srq(struct srpt_device *sdev, bool use_srq)
3063 {
3064         struct ib_device *device = sdev->device;
3065         int ret = 0;
3066
3067         if (!use_srq) {
3068                 srpt_free_srq(sdev);
3069                 sdev->use_srq = false;
3070         } else if (use_srq && !sdev->srq) {
3071                 ret = srpt_alloc_srq(sdev);
3072         }
3073         pr_debug("%s(%s): use_srq = %d; ret = %d\n", __func__,
3074                  dev_name(&device->dev), sdev->use_srq, ret);
3075         return ret;
3076 }
3077
3078 /**
3079  * srpt_add_one - InfiniBand device addition callback function
3080  * @device: Describes a HCA.
3081  */
3082 static void srpt_add_one(struct ib_device *device)
3083 {
3084         struct srpt_device *sdev;
3085         struct srpt_port *sport;
3086         int i, ret;
3087
3088         pr_debug("device = %p\n", device);
3089
3090         sdev = kzalloc(struct_size(sdev, port, device->phys_port_cnt),
3091                        GFP_KERNEL);
3092         if (!sdev)
3093                 goto err;
3094
3095         sdev->device = device;
3096         mutex_init(&sdev->sdev_mutex);
3097
3098         sdev->pd = ib_alloc_pd(device, 0);
3099         if (IS_ERR(sdev->pd))
3100                 goto free_dev;
3101
3102         sdev->lkey = sdev->pd->local_dma_lkey;
3103
3104         sdev->srq_size = min(srpt_srq_size, sdev->device->attrs.max_srq_wr);
3105
3106         srpt_use_srq(sdev, sdev->port[0].port_attrib.use_srq);
3107
3108         if (!srpt_service_guid)
3109                 srpt_service_guid = be64_to_cpu(device->node_guid);
3110
3111         if (rdma_port_get_link_layer(device, 1) == IB_LINK_LAYER_INFINIBAND)
3112                 sdev->cm_id = ib_create_cm_id(device, srpt_cm_handler, sdev);
3113         if (IS_ERR(sdev->cm_id)) {
3114                 pr_info("ib_create_cm_id() failed: %ld\n",
3115                         PTR_ERR(sdev->cm_id));
3116                 sdev->cm_id = NULL;
3117                 if (!rdma_cm_id)
3118                         goto err_ring;
3119         }
3120
3121         /* print out target login information */
3122         pr_debug("Target login info: id_ext=%016llx,ioc_guid=%016llx,pkey=ffff,service_id=%016llx\n",
3123                  srpt_service_guid, srpt_service_guid, srpt_service_guid);
3124
3125         /*
3126          * We do not have a consistent service_id (ie. also id_ext of target_id)
3127          * to identify this target. We currently use the guid of the first HCA
3128          * in the system as service_id; therefore, the target_id will change
3129          * if this HCA is gone bad and replaced by different HCA
3130          */
3131         ret = sdev->cm_id ?
3132                 ib_cm_listen(sdev->cm_id, cpu_to_be64(srpt_service_guid), 0) :
3133                 0;
3134         if (ret < 0) {
3135                 pr_err("ib_cm_listen() failed: %d (cm_id state = %d)\n", ret,
3136                        sdev->cm_id->state);
3137                 goto err_cm;
3138         }
3139
3140         INIT_IB_EVENT_HANDLER(&sdev->event_handler, sdev->device,
3141                               srpt_event_handler);
3142         ib_register_event_handler(&sdev->event_handler);
3143
3144         for (i = 1; i <= sdev->device->phys_port_cnt; i++) {
3145                 sport = &sdev->port[i - 1];
3146                 INIT_LIST_HEAD(&sport->nexus_list);
3147                 init_waitqueue_head(&sport->ch_releaseQ);
3148                 mutex_init(&sport->mutex);
3149                 sport->sdev = sdev;
3150                 sport->port = i;
3151                 sport->port_attrib.srp_max_rdma_size = DEFAULT_MAX_RDMA_SIZE;
3152                 sport->port_attrib.srp_max_rsp_size = DEFAULT_MAX_RSP_SIZE;
3153                 sport->port_attrib.srp_sq_size = DEF_SRPT_SQ_SIZE;
3154                 sport->port_attrib.use_srq = false;
3155                 INIT_WORK(&sport->work, srpt_refresh_port_work);
3156
3157                 if (srpt_refresh_port(sport)) {
3158                         pr_err("MAD registration failed for %s-%d.\n",
3159                                dev_name(&sdev->device->dev), i);
3160                         goto err_event;
3161                 }
3162         }
3163
3164         spin_lock(&srpt_dev_lock);
3165         list_add_tail(&sdev->list, &srpt_dev_list);
3166         spin_unlock(&srpt_dev_lock);
3167
3168 out:
3169         ib_set_client_data(device, &srpt_client, sdev);
3170         pr_debug("added %s.\n", dev_name(&device->dev));
3171         return;
3172
3173 err_event:
3174         ib_unregister_event_handler(&sdev->event_handler);
3175 err_cm:
3176         if (sdev->cm_id)
3177                 ib_destroy_cm_id(sdev->cm_id);
3178 err_ring:
3179         srpt_free_srq(sdev);
3180         ib_dealloc_pd(sdev->pd);
3181 free_dev:
3182         kfree(sdev);
3183 err:
3184         sdev = NULL;
3185         pr_info("%s(%s) failed.\n", __func__, dev_name(&device->dev));
3186         goto out;
3187 }
3188
3189 /**
3190  * srpt_remove_one - InfiniBand device removal callback function
3191  * @device: Describes a HCA.
3192  * @client_data: The value passed as the third argument to ib_set_client_data().
3193  */
3194 static void srpt_remove_one(struct ib_device *device, void *client_data)
3195 {
3196         struct srpt_device *sdev = client_data;
3197         int i;
3198
3199         if (!sdev) {
3200                 pr_info("%s(%s): nothing to do.\n", __func__,
3201                         dev_name(&device->dev));
3202                 return;
3203         }
3204
3205         srpt_unregister_mad_agent(sdev);
3206
3207         ib_unregister_event_handler(&sdev->event_handler);
3208
3209         /* Cancel any work queued by the just unregistered IB event handler. */
3210         for (i = 0; i < sdev->device->phys_port_cnt; i++)
3211                 cancel_work_sync(&sdev->port[i].work);
3212
3213         if (sdev->cm_id)
3214                 ib_destroy_cm_id(sdev->cm_id);
3215
3216         ib_set_client_data(device, &srpt_client, NULL);
3217
3218         /*
3219          * Unregistering a target must happen after destroying sdev->cm_id
3220          * such that no new SRP_LOGIN_REQ information units can arrive while
3221          * destroying the target.
3222          */
3223         spin_lock(&srpt_dev_lock);
3224         list_del(&sdev->list);
3225         spin_unlock(&srpt_dev_lock);
3226
3227         for (i = 0; i < sdev->device->phys_port_cnt; i++)
3228                 srpt_release_sport(&sdev->port[i]);
3229
3230         srpt_free_srq(sdev);
3231
3232         ib_dealloc_pd(sdev->pd);
3233
3234         kfree(sdev);
3235 }
3236
3237 static struct ib_client srpt_client = {
3238         .name = DRV_NAME,
3239         .add = srpt_add_one,
3240         .remove = srpt_remove_one
3241 };
3242
3243 static int srpt_check_true(struct se_portal_group *se_tpg)
3244 {
3245         return 1;
3246 }
3247
3248 static int srpt_check_false(struct se_portal_group *se_tpg)
3249 {
3250         return 0;
3251 }
3252
3253 static struct srpt_port *srpt_tpg_to_sport(struct se_portal_group *tpg)
3254 {
3255         return tpg->se_tpg_wwn->priv;
3256 }
3257
3258 static char *srpt_get_fabric_wwn(struct se_portal_group *tpg)
3259 {
3260         struct srpt_port *sport = srpt_tpg_to_sport(tpg);
3261
3262         WARN_ON_ONCE(tpg != &sport->port_guid_tpg &&
3263                      tpg != &sport->port_gid_tpg);
3264         return tpg == &sport->port_guid_tpg ? sport->port_guid :
3265                 sport->port_gid;
3266 }
3267
3268 static u16 srpt_get_tag(struct se_portal_group *tpg)
3269 {
3270         return 1;
3271 }
3272
3273 static u32 srpt_tpg_get_inst_index(struct se_portal_group *se_tpg)
3274 {
3275         return 1;
3276 }
3277
3278 static void srpt_release_cmd(struct se_cmd *se_cmd)
3279 {
3280         struct srpt_send_ioctx *ioctx = container_of(se_cmd,
3281                                 struct srpt_send_ioctx, cmd);
3282         struct srpt_rdma_ch *ch = ioctx->ch;
3283         struct srpt_recv_ioctx *recv_ioctx = ioctx->recv_ioctx;
3284
3285         WARN_ON_ONCE(ioctx->state != SRPT_STATE_DONE &&
3286                      !(ioctx->cmd.transport_state & CMD_T_ABORTED));
3287
3288         if (recv_ioctx) {
3289                 WARN_ON_ONCE(!list_empty(&recv_ioctx->wait_list));
3290                 ioctx->recv_ioctx = NULL;
3291                 srpt_post_recv(ch->sport->sdev, ch, recv_ioctx);
3292         }
3293
3294         if (ioctx->n_rw_ctx) {
3295                 srpt_free_rw_ctxs(ch, ioctx);
3296                 ioctx->n_rw_ctx = 0;
3297         }
3298
3299         target_free_tag(se_cmd->se_sess, se_cmd);
3300 }
3301
3302 /**
3303  * srpt_close_session - forcibly close a session
3304  * @se_sess: SCSI target session.
3305  *
3306  * Callback function invoked by the TCM core to clean up sessions associated
3307  * with a node ACL when the user invokes
3308  * rmdir /sys/kernel/config/target/$driver/$port/$tpg/acls/$i_port_id
3309  */
3310 static void srpt_close_session(struct se_session *se_sess)
3311 {
3312         struct srpt_rdma_ch *ch = se_sess->fabric_sess_ptr;
3313
3314         srpt_disconnect_ch_sync(ch);
3315 }
3316
3317 /**
3318  * srpt_sess_get_index - return the value of scsiAttIntrPortIndex (SCSI-MIB)
3319  * @se_sess: SCSI target session.
3320  *
3321  * A quote from RFC 4455 (SCSI-MIB) about this MIB object:
3322  * This object represents an arbitrary integer used to uniquely identify a
3323  * particular attached remote initiator port to a particular SCSI target port
3324  * within a particular SCSI target device within a particular SCSI instance.
3325  */
3326 static u32 srpt_sess_get_index(struct se_session *se_sess)
3327 {
3328         return 0;
3329 }
3330
3331 static void srpt_set_default_node_attrs(struct se_node_acl *nacl)
3332 {
3333 }
3334
3335 /* Note: only used from inside debug printk's by the TCM core. */
3336 static int srpt_get_tcm_cmd_state(struct se_cmd *se_cmd)
3337 {
3338         struct srpt_send_ioctx *ioctx;
3339
3340         ioctx = container_of(se_cmd, struct srpt_send_ioctx, cmd);
3341         return ioctx->state;
3342 }
3343
3344 static int srpt_parse_guid(u64 *guid, const char *name)
3345 {
3346         u16 w[4];
3347         int ret = -EINVAL;
3348
3349         if (sscanf(name, "%hx:%hx:%hx:%hx", &w[0], &w[1], &w[2], &w[3]) != 4)
3350                 goto out;
3351         *guid = get_unaligned_be64(w);
3352         ret = 0;
3353 out:
3354         return ret;
3355 }
3356
3357 /**
3358  * srpt_parse_i_port_id - parse an initiator port ID
3359  * @name: ASCII representation of a 128-bit initiator port ID.
3360  * @i_port_id: Binary 128-bit port ID.
3361  */
3362 static int srpt_parse_i_port_id(u8 i_port_id[16], const char *name)
3363 {
3364         const char *p;
3365         unsigned len, count, leading_zero_bytes;
3366         int ret;
3367
3368         p = name;
3369         if (strncasecmp(p, "0x", 2) == 0)
3370                 p += 2;
3371         ret = -EINVAL;
3372         len = strlen(p);
3373         if (len % 2)
3374                 goto out;
3375         count = min(len / 2, 16U);
3376         leading_zero_bytes = 16 - count;
3377         memset(i_port_id, 0, leading_zero_bytes);
3378         ret = hex2bin(i_port_id + leading_zero_bytes, p, count);
3379
3380 out:
3381         return ret;
3382 }
3383
3384 /*
3385  * configfs callback function invoked for mkdir
3386  * /sys/kernel/config/target/$driver/$port/$tpg/acls/$i_port_id
3387  *
3388  * i_port_id must be an initiator port GUID, GID or IP address. See also the
3389  * target_alloc_session() calls in this driver. Examples of valid initiator
3390  * port IDs:
3391  * 0x0000000000000000505400fffe4a0b7b
3392  * 0000000000000000505400fffe4a0b7b
3393  * 5054:00ff:fe4a:0b7b
3394  * 192.168.122.76
3395  */
3396 static int srpt_init_nodeacl(struct se_node_acl *se_nacl, const char *name)
3397 {
3398         struct sockaddr_storage sa;
3399         u64 guid;
3400         u8 i_port_id[16];
3401         int ret;
3402
3403         ret = srpt_parse_guid(&guid, name);
3404         if (ret < 0)
3405                 ret = srpt_parse_i_port_id(i_port_id, name);
3406         if (ret < 0)
3407                 ret = inet_pton_with_scope(&init_net, AF_UNSPEC, name, NULL,
3408                                            &sa);
3409         if (ret < 0)
3410                 pr_err("invalid initiator port ID %s\n", name);
3411         return ret;
3412 }
3413
3414 static ssize_t srpt_tpg_attrib_srp_max_rdma_size_show(struct config_item *item,
3415                 char *page)
3416 {
3417         struct se_portal_group *se_tpg = attrib_to_tpg(item);
3418         struct srpt_port *sport = srpt_tpg_to_sport(se_tpg);
3419
3420         return sprintf(page, "%u\n", sport->port_attrib.srp_max_rdma_size);
3421 }
3422
3423 static ssize_t srpt_tpg_attrib_srp_max_rdma_size_store(struct config_item *item,
3424                 const char *page, size_t count)
3425 {
3426         struct se_portal_group *se_tpg = attrib_to_tpg(item);
3427         struct srpt_port *sport = srpt_tpg_to_sport(se_tpg);
3428         unsigned long val;
3429         int ret;
3430
3431         ret = kstrtoul(page, 0, &val);
3432         if (ret < 0) {
3433                 pr_err("kstrtoul() failed with ret: %d\n", ret);
3434                 return -EINVAL;
3435         }
3436         if (val > MAX_SRPT_RDMA_SIZE) {
3437                 pr_err("val: %lu exceeds MAX_SRPT_RDMA_SIZE: %d\n", val,
3438                         MAX_SRPT_RDMA_SIZE);
3439                 return -EINVAL;
3440         }
3441         if (val < DEFAULT_MAX_RDMA_SIZE) {
3442                 pr_err("val: %lu smaller than DEFAULT_MAX_RDMA_SIZE: %d\n",
3443                         val, DEFAULT_MAX_RDMA_SIZE);
3444                 return -EINVAL;
3445         }
3446         sport->port_attrib.srp_max_rdma_size = val;
3447
3448         return count;
3449 }
3450
3451 static ssize_t srpt_tpg_attrib_srp_max_rsp_size_show(struct config_item *item,
3452                 char *page)
3453 {
3454         struct se_portal_group *se_tpg = attrib_to_tpg(item);
3455         struct srpt_port *sport = srpt_tpg_to_sport(se_tpg);
3456
3457         return sprintf(page, "%u\n", sport->port_attrib.srp_max_rsp_size);
3458 }
3459
3460 static ssize_t srpt_tpg_attrib_srp_max_rsp_size_store(struct config_item *item,
3461                 const char *page, size_t count)
3462 {
3463         struct se_portal_group *se_tpg = attrib_to_tpg(item);
3464         struct srpt_port *sport = srpt_tpg_to_sport(se_tpg);
3465         unsigned long val;
3466         int ret;
3467
3468         ret = kstrtoul(page, 0, &val);
3469         if (ret < 0) {
3470                 pr_err("kstrtoul() failed with ret: %d\n", ret);
3471                 return -EINVAL;
3472         }
3473         if (val > MAX_SRPT_RSP_SIZE) {
3474                 pr_err("val: %lu exceeds MAX_SRPT_RSP_SIZE: %d\n", val,
3475                         MAX_SRPT_RSP_SIZE);
3476                 return -EINVAL;
3477         }
3478         if (val < MIN_MAX_RSP_SIZE) {
3479                 pr_err("val: %lu smaller than MIN_MAX_RSP_SIZE: %d\n", val,
3480                         MIN_MAX_RSP_SIZE);
3481                 return -EINVAL;
3482         }
3483         sport->port_attrib.srp_max_rsp_size = val;
3484
3485         return count;
3486 }
3487
3488 static ssize_t srpt_tpg_attrib_srp_sq_size_show(struct config_item *item,
3489                 char *page)
3490 {
3491         struct se_portal_group *se_tpg = attrib_to_tpg(item);
3492         struct srpt_port *sport = srpt_tpg_to_sport(se_tpg);
3493
3494         return sprintf(page, "%u\n", sport->port_attrib.srp_sq_size);
3495 }
3496
3497 static ssize_t srpt_tpg_attrib_srp_sq_size_store(struct config_item *item,
3498                 const char *page, size_t count)
3499 {
3500         struct se_portal_group *se_tpg = attrib_to_tpg(item);
3501         struct srpt_port *sport = srpt_tpg_to_sport(se_tpg);
3502         unsigned long val;
3503         int ret;
3504
3505         ret = kstrtoul(page, 0, &val);
3506         if (ret < 0) {
3507                 pr_err("kstrtoul() failed with ret: %d\n", ret);
3508                 return -EINVAL;
3509         }
3510         if (val > MAX_SRPT_SRQ_SIZE) {
3511                 pr_err("val: %lu exceeds MAX_SRPT_SRQ_SIZE: %d\n", val,
3512                         MAX_SRPT_SRQ_SIZE);
3513                 return -EINVAL;
3514         }
3515         if (val < MIN_SRPT_SRQ_SIZE) {
3516                 pr_err("val: %lu smaller than MIN_SRPT_SRQ_SIZE: %d\n", val,
3517                         MIN_SRPT_SRQ_SIZE);
3518                 return -EINVAL;
3519         }
3520         sport->port_attrib.srp_sq_size = val;
3521
3522         return count;
3523 }
3524
3525 static ssize_t srpt_tpg_attrib_use_srq_show(struct config_item *item,
3526                                             char *page)
3527 {
3528         struct se_portal_group *se_tpg = attrib_to_tpg(item);
3529         struct srpt_port *sport = srpt_tpg_to_sport(se_tpg);
3530
3531         return sprintf(page, "%d\n", sport->port_attrib.use_srq);
3532 }
3533
3534 static ssize_t srpt_tpg_attrib_use_srq_store(struct config_item *item,
3535                                              const char *page, size_t count)
3536 {
3537         struct se_portal_group *se_tpg = attrib_to_tpg(item);
3538         struct srpt_port *sport = srpt_tpg_to_sport(se_tpg);
3539         struct srpt_device *sdev = sport->sdev;
3540         unsigned long val;
3541         bool enabled;
3542         int ret;
3543
3544         ret = kstrtoul(page, 0, &val);
3545         if (ret < 0)
3546                 return ret;
3547         if (val != !!val)
3548                 return -EINVAL;
3549
3550         ret = mutex_lock_interruptible(&sdev->sdev_mutex);
3551         if (ret < 0)
3552                 return ret;
3553         ret = mutex_lock_interruptible(&sport->mutex);
3554         if (ret < 0)
3555                 goto unlock_sdev;
3556         enabled = sport->enabled;
3557         /* Log out all initiator systems before changing 'use_srq'. */
3558         srpt_set_enabled(sport, false);
3559         sport->port_attrib.use_srq = val;
3560         srpt_use_srq(sdev, sport->port_attrib.use_srq);
3561         srpt_set_enabled(sport, enabled);
3562         ret = count;
3563         mutex_unlock(&sport->mutex);
3564 unlock_sdev:
3565         mutex_unlock(&sdev->sdev_mutex);
3566
3567         return ret;
3568 }
3569
3570 CONFIGFS_ATTR(srpt_tpg_attrib_,  srp_max_rdma_size);
3571 CONFIGFS_ATTR(srpt_tpg_attrib_,  srp_max_rsp_size);
3572 CONFIGFS_ATTR(srpt_tpg_attrib_,  srp_sq_size);
3573 CONFIGFS_ATTR(srpt_tpg_attrib_,  use_srq);
3574
3575 static struct configfs_attribute *srpt_tpg_attrib_attrs[] = {
3576         &srpt_tpg_attrib_attr_srp_max_rdma_size,
3577         &srpt_tpg_attrib_attr_srp_max_rsp_size,
3578         &srpt_tpg_attrib_attr_srp_sq_size,
3579         &srpt_tpg_attrib_attr_use_srq,
3580         NULL,
3581 };
3582
3583 static struct rdma_cm_id *srpt_create_rdma_id(struct sockaddr *listen_addr)
3584 {
3585         struct rdma_cm_id *rdma_cm_id;
3586         int ret;
3587
3588         rdma_cm_id = rdma_create_id(&init_net, srpt_rdma_cm_handler,
3589                                     NULL, RDMA_PS_TCP, IB_QPT_RC);
3590         if (IS_ERR(rdma_cm_id)) {
3591                 pr_err("RDMA/CM ID creation failed: %ld\n",
3592                        PTR_ERR(rdma_cm_id));
3593                 goto out;
3594         }
3595
3596         ret = rdma_bind_addr(rdma_cm_id, listen_addr);
3597         if (ret) {
3598                 char addr_str[64];
3599
3600                 snprintf(addr_str, sizeof(addr_str), "%pISp", listen_addr);
3601                 pr_err("Binding RDMA/CM ID to address %s failed: %d\n",
3602                        addr_str, ret);
3603                 rdma_destroy_id(rdma_cm_id);
3604                 rdma_cm_id = ERR_PTR(ret);
3605                 goto out;
3606         }
3607
3608         ret = rdma_listen(rdma_cm_id, 128);
3609         if (ret) {
3610                 pr_err("rdma_listen() failed: %d\n", ret);
3611                 rdma_destroy_id(rdma_cm_id);
3612                 rdma_cm_id = ERR_PTR(ret);
3613         }
3614
3615 out:
3616         return rdma_cm_id;
3617 }
3618
3619 static ssize_t srpt_rdma_cm_port_show(struct config_item *item, char *page)
3620 {
3621         return sprintf(page, "%d\n", rdma_cm_port);
3622 }
3623
3624 static ssize_t srpt_rdma_cm_port_store(struct config_item *item,
3625                                        const char *page, size_t count)
3626 {
3627         struct sockaddr_in  addr4 = { .sin_family  = AF_INET  };
3628         struct sockaddr_in6 addr6 = { .sin6_family = AF_INET6 };
3629         struct rdma_cm_id *new_id = NULL;
3630         u16 val;
3631         int ret;
3632
3633         ret = kstrtou16(page, 0, &val);
3634         if (ret < 0)
3635                 return ret;
3636         ret = count;
3637         if (rdma_cm_port == val)
3638                 goto out;
3639
3640         if (val) {
3641                 addr6.sin6_port = cpu_to_be16(val);
3642                 new_id = srpt_create_rdma_id((struct sockaddr *)&addr6);
3643                 if (IS_ERR(new_id)) {
3644                         addr4.sin_port = cpu_to_be16(val);
3645                         new_id = srpt_create_rdma_id((struct sockaddr *)&addr4);
3646                         if (IS_ERR(new_id)) {
3647                                 ret = PTR_ERR(new_id);
3648                                 goto out;
3649                         }
3650                 }
3651         }
3652
3653         mutex_lock(&rdma_cm_mutex);
3654         rdma_cm_port = val;
3655         swap(rdma_cm_id, new_id);
3656         mutex_unlock(&rdma_cm_mutex);
3657
3658         if (new_id)
3659                 rdma_destroy_id(new_id);
3660         ret = count;
3661 out:
3662         return ret;
3663 }
3664
3665 CONFIGFS_ATTR(srpt_, rdma_cm_port);
3666
3667 static struct configfs_attribute *srpt_da_attrs[] = {
3668         &srpt_attr_rdma_cm_port,
3669         NULL,
3670 };
3671
3672 static ssize_t srpt_tpg_enable_show(struct config_item *item, char *page)
3673 {
3674         struct se_portal_group *se_tpg = to_tpg(item);
3675         struct srpt_port *sport = srpt_tpg_to_sport(se_tpg);
3676
3677         return snprintf(page, PAGE_SIZE, "%d\n", sport->enabled);
3678 }
3679
3680 static ssize_t srpt_tpg_enable_store(struct config_item *item,
3681                 const char *page, size_t count)
3682 {
3683         struct se_portal_group *se_tpg = to_tpg(item);
3684         struct srpt_port *sport = srpt_tpg_to_sport(se_tpg);
3685         unsigned long tmp;
3686         int ret;
3687
3688         ret = kstrtoul(page, 0, &tmp);
3689         if (ret < 0) {
3690                 pr_err("Unable to extract srpt_tpg_store_enable\n");
3691                 return -EINVAL;
3692         }
3693
3694         if ((tmp != 0) && (tmp != 1)) {
3695                 pr_err("Illegal value for srpt_tpg_store_enable: %lu\n", tmp);
3696                 return -EINVAL;
3697         }
3698
3699         mutex_lock(&sport->mutex);
3700         srpt_set_enabled(sport, tmp);
3701         mutex_unlock(&sport->mutex);
3702
3703         return count;
3704 }
3705
3706 CONFIGFS_ATTR(srpt_tpg_, enable);
3707
3708 static struct configfs_attribute *srpt_tpg_attrs[] = {
3709         &srpt_tpg_attr_enable,
3710         NULL,
3711 };
3712
3713 /**
3714  * srpt_make_tpg - configfs callback invoked for mkdir /sys/kernel/config/target/$driver/$port/$tpg
3715  * @wwn: Corresponds to $driver/$port.
3716  * @name: $tpg.
3717  */
3718 static struct se_portal_group *srpt_make_tpg(struct se_wwn *wwn,
3719                                              const char *name)
3720 {
3721         struct srpt_port *sport = wwn->priv;
3722         struct se_portal_group *tpg;
3723         int res;
3724
3725         WARN_ON_ONCE(wwn != &sport->port_guid_wwn &&
3726                      wwn != &sport->port_gid_wwn);
3727         tpg = wwn == &sport->port_guid_wwn ? &sport->port_guid_tpg :
3728                 &sport->port_gid_tpg;
3729         res = core_tpg_register(wwn, tpg, SCSI_PROTOCOL_SRP);
3730         if (res)
3731                 return ERR_PTR(res);
3732
3733         return tpg;
3734 }
3735
3736 /**
3737  * srpt_drop_tpg - configfs callback invoked for rmdir /sys/kernel/config/target/$driver/$port/$tpg
3738  * @tpg: Target portal group to deregister.
3739  */
3740 static void srpt_drop_tpg(struct se_portal_group *tpg)
3741 {
3742         struct srpt_port *sport = srpt_tpg_to_sport(tpg);
3743
3744         sport->enabled = false;
3745         core_tpg_deregister(tpg);
3746 }
3747
3748 /**
3749  * srpt_make_tport - configfs callback invoked for mkdir /sys/kernel/config/target/$driver/$port
3750  * @tf: Not used.
3751  * @group: Not used.
3752  * @name: $port.
3753  */
3754 static struct se_wwn *srpt_make_tport(struct target_fabric_configfs *tf,
3755                                       struct config_group *group,
3756                                       const char *name)
3757 {
3758         return srpt_lookup_wwn(name) ? : ERR_PTR(-EINVAL);
3759 }
3760
3761 /**
3762  * srpt_drop_tport - configfs callback invoked for rmdir /sys/kernel/config/target/$driver/$port
3763  * @wwn: $port.
3764  */
3765 static void srpt_drop_tport(struct se_wwn *wwn)
3766 {
3767 }
3768
3769 static ssize_t srpt_wwn_version_show(struct config_item *item, char *buf)
3770 {
3771         return scnprintf(buf, PAGE_SIZE, "\n");
3772 }
3773
3774 CONFIGFS_ATTR_RO(srpt_wwn_, version);
3775
3776 static struct configfs_attribute *srpt_wwn_attrs[] = {
3777         &srpt_wwn_attr_version,
3778         NULL,
3779 };
3780
3781 static const struct target_core_fabric_ops srpt_template = {
3782         .module                         = THIS_MODULE,
3783         .fabric_name                    = "srpt",
3784         .tpg_get_wwn                    = srpt_get_fabric_wwn,
3785         .tpg_get_tag                    = srpt_get_tag,
3786         .tpg_check_demo_mode            = srpt_check_false,
3787         .tpg_check_demo_mode_cache      = srpt_check_true,
3788         .tpg_check_demo_mode_write_protect = srpt_check_true,
3789         .tpg_check_prod_mode_write_protect = srpt_check_false,
3790         .tpg_get_inst_index             = srpt_tpg_get_inst_index,
3791         .release_cmd                    = srpt_release_cmd,
3792         .check_stop_free                = srpt_check_stop_free,
3793         .close_session                  = srpt_close_session,
3794         .sess_get_index                 = srpt_sess_get_index,
3795         .sess_get_initiator_sid         = NULL,
3796         .write_pending                  = srpt_write_pending,
3797         .set_default_node_attributes    = srpt_set_default_node_attrs,
3798         .get_cmd_state                  = srpt_get_tcm_cmd_state,
3799         .queue_data_in                  = srpt_queue_data_in,
3800         .queue_status                   = srpt_queue_status,
3801         .queue_tm_rsp                   = srpt_queue_tm_rsp,
3802         .aborted_task                   = srpt_aborted_task,
3803         /*
3804          * Setup function pointers for generic logic in
3805          * target_core_fabric_configfs.c
3806          */
3807         .fabric_make_wwn                = srpt_make_tport,
3808         .fabric_drop_wwn                = srpt_drop_tport,
3809         .fabric_make_tpg                = srpt_make_tpg,
3810         .fabric_drop_tpg                = srpt_drop_tpg,
3811         .fabric_init_nodeacl            = srpt_init_nodeacl,
3812
3813         .tfc_discovery_attrs            = srpt_da_attrs,
3814         .tfc_wwn_attrs                  = srpt_wwn_attrs,
3815         .tfc_tpg_base_attrs             = srpt_tpg_attrs,
3816         .tfc_tpg_attrib_attrs           = srpt_tpg_attrib_attrs,
3817 };
3818
3819 /**
3820  * srpt_init_module - kernel module initialization
3821  *
3822  * Note: Since ib_register_client() registers callback functions, and since at
3823  * least one of these callback functions (srpt_add_one()) calls target core
3824  * functions, this driver must be registered with the target core before
3825  * ib_register_client() is called.
3826  */
3827 static int __init srpt_init_module(void)
3828 {
3829         int ret;
3830
3831         ret = -EINVAL;
3832         if (srp_max_req_size < MIN_MAX_REQ_SIZE) {
3833                 pr_err("invalid value %d for kernel module parameter srp_max_req_size -- must be at least %d.\n",
3834                        srp_max_req_size, MIN_MAX_REQ_SIZE);
3835                 goto out;
3836         }
3837
3838         if (srpt_srq_size < MIN_SRPT_SRQ_SIZE
3839             || srpt_srq_size > MAX_SRPT_SRQ_SIZE) {
3840                 pr_err("invalid value %d for kernel module parameter srpt_srq_size -- must be in the range [%d..%d].\n",
3841                        srpt_srq_size, MIN_SRPT_SRQ_SIZE, MAX_SRPT_SRQ_SIZE);
3842                 goto out;
3843         }
3844
3845         ret = target_register_template(&srpt_template);
3846         if (ret)
3847                 goto out;
3848
3849         ret = ib_register_client(&srpt_client);
3850         if (ret) {
3851                 pr_err("couldn't register IB client\n");
3852                 goto out_unregister_target;
3853         }
3854
3855         return 0;
3856
3857 out_unregister_target:
3858         target_unregister_template(&srpt_template);
3859 out:
3860         return ret;
3861 }
3862
3863 static void __exit srpt_cleanup_module(void)
3864 {
3865         if (rdma_cm_id)
3866                 rdma_destroy_id(rdma_cm_id);
3867         ib_unregister_client(&srpt_client);
3868         target_unregister_template(&srpt_template);
3869 }
3870
3871 module_init(srpt_init_module);
3872 module_exit(srpt_cleanup_module);