ASoC: fix ABE_TWL6040 dependency
[deliverable/linux.git] / drivers / infiniband / ulp / srp / ib_srp.c
1 /*
2 * Copyright (c) 2005 Cisco Systems. All rights reserved.
3 *
4 * This software is available to you under a choice of one of two
5 * licenses. You may choose to be licensed under the terms of the GNU
6 * General Public License (GPL) Version 2, available from the file
7 * COPYING in the main directory of this source tree, or the
8 * OpenIB.org BSD license below:
9 *
10 * Redistribution and use in source and binary forms, with or
11 * without modification, are permitted provided that the following
12 * conditions are met:
13 *
14 * - Redistributions of source code must retain the above
15 * copyright notice, this list of conditions and the following
16 * disclaimer.
17 *
18 * - Redistributions in binary form must reproduce the above
19 * copyright notice, this list of conditions and the following
20 * disclaimer in the documentation and/or other materials
21 * provided with the distribution.
22 *
23 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
24 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
25 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
26 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
27 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
28 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
29 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
30 * SOFTWARE.
31 */
32
33 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
34
35 #include <linux/module.h>
36 #include <linux/init.h>
37 #include <linux/slab.h>
38 #include <linux/err.h>
39 #include <linux/string.h>
40 #include <linux/parser.h>
41 #include <linux/random.h>
42 #include <linux/jiffies.h>
43 #include <rdma/ib_cache.h>
44
45 #include <linux/atomic.h>
46
47 #include <scsi/scsi.h>
48 #include <scsi/scsi_device.h>
49 #include <scsi/scsi_dbg.h>
50 #include <scsi/scsi_tcq.h>
51 #include <scsi/srp.h>
52 #include <scsi/scsi_transport_srp.h>
53
54 #include "ib_srp.h"
55
56 #define DRV_NAME "ib_srp"
57 #define PFX DRV_NAME ": "
58 #define DRV_VERSION "2.0"
59 #define DRV_RELDATE "July 26, 2015"
60
61 MODULE_AUTHOR("Roland Dreier");
62 MODULE_DESCRIPTION("InfiniBand SCSI RDMA Protocol initiator");
63 MODULE_LICENSE("Dual BSD/GPL");
64 MODULE_VERSION(DRV_VERSION);
65 MODULE_INFO(release_date, DRV_RELDATE);
66
67 static unsigned int srp_sg_tablesize;
68 static unsigned int cmd_sg_entries;
69 static unsigned int indirect_sg_entries;
70 static bool allow_ext_sg;
71 static bool prefer_fr = true;
72 static bool register_always = true;
73 static bool never_register;
74 static int topspin_workarounds = 1;
75
76 module_param(srp_sg_tablesize, uint, 0444);
77 MODULE_PARM_DESC(srp_sg_tablesize, "Deprecated name for cmd_sg_entries");
78
79 module_param(cmd_sg_entries, uint, 0444);
80 MODULE_PARM_DESC(cmd_sg_entries,
81 "Default number of gather/scatter entries in the SRP command (default is 12, max 255)");
82
83 module_param(indirect_sg_entries, uint, 0444);
84 MODULE_PARM_DESC(indirect_sg_entries,
85 "Default max number of gather/scatter entries (default is 12, max is " __stringify(SG_MAX_SEGMENTS) ")");
86
87 module_param(allow_ext_sg, bool, 0444);
88 MODULE_PARM_DESC(allow_ext_sg,
89 "Default behavior when there are more than cmd_sg_entries S/G entries after mapping; fails the request when false (default false)");
90
91 module_param(topspin_workarounds, int, 0444);
92 MODULE_PARM_DESC(topspin_workarounds,
93 "Enable workarounds for Topspin/Cisco SRP target bugs if != 0");
94
95 module_param(prefer_fr, bool, 0444);
96 MODULE_PARM_DESC(prefer_fr,
97 "Whether to use fast registration if both FMR and fast registration are supported");
98
99 module_param(register_always, bool, 0444);
100 MODULE_PARM_DESC(register_always,
101 "Use memory registration even for contiguous memory regions");
102
103 module_param(never_register, bool, 0444);
104 MODULE_PARM_DESC(never_register, "Never register memory");
105
106 static const struct kernel_param_ops srp_tmo_ops;
107
108 static int srp_reconnect_delay = 10;
109 module_param_cb(reconnect_delay, &srp_tmo_ops, &srp_reconnect_delay,
110 S_IRUGO | S_IWUSR);
111 MODULE_PARM_DESC(reconnect_delay, "Time between successive reconnect attempts");
112
113 static int srp_fast_io_fail_tmo = 15;
114 module_param_cb(fast_io_fail_tmo, &srp_tmo_ops, &srp_fast_io_fail_tmo,
115 S_IRUGO | S_IWUSR);
116 MODULE_PARM_DESC(fast_io_fail_tmo,
117 "Number of seconds between the observation of a transport"
118 " layer error and failing all I/O. \"off\" means that this"
119 " functionality is disabled.");
120
121 static int srp_dev_loss_tmo = 600;
122 module_param_cb(dev_loss_tmo, &srp_tmo_ops, &srp_dev_loss_tmo,
123 S_IRUGO | S_IWUSR);
124 MODULE_PARM_DESC(dev_loss_tmo,
125 "Maximum number of seconds that the SRP transport should"
126 " insulate transport layer errors. After this time has been"
127 " exceeded the SCSI host is removed. Should be"
128 " between 1 and " __stringify(SCSI_DEVICE_BLOCK_MAX_TIMEOUT)
129 " if fast_io_fail_tmo has not been set. \"off\" means that"
130 " this functionality is disabled.");
131
132 static unsigned ch_count;
133 module_param(ch_count, uint, 0444);
134 MODULE_PARM_DESC(ch_count,
135 "Number of RDMA channels to use for communication with an SRP target. Using more than one channel improves performance if the HCA supports multiple completion vectors. The default value is the minimum of four times the number of online CPU sockets and the number of completion vectors supported by the HCA.");
136
137 static void srp_add_one(struct ib_device *device);
138 static void srp_remove_one(struct ib_device *device, void *client_data);
139 static void srp_recv_done(struct ib_cq *cq, struct ib_wc *wc);
140 static void srp_handle_qp_err(struct ib_cq *cq, struct ib_wc *wc,
141 const char *opname);
142 static int srp_cm_handler(struct ib_cm_id *cm_id, struct ib_cm_event *event);
143
144 static struct scsi_transport_template *ib_srp_transport_template;
145 static struct workqueue_struct *srp_remove_wq;
146
147 static struct ib_client srp_client = {
148 .name = "srp",
149 .add = srp_add_one,
150 .remove = srp_remove_one
151 };
152
153 static struct ib_sa_client srp_sa_client;
154
155 static int srp_tmo_get(char *buffer, const struct kernel_param *kp)
156 {
157 int tmo = *(int *)kp->arg;
158
159 if (tmo >= 0)
160 return sprintf(buffer, "%d", tmo);
161 else
162 return sprintf(buffer, "off");
163 }
164
165 static int srp_tmo_set(const char *val, const struct kernel_param *kp)
166 {
167 int tmo, res;
168
169 res = srp_parse_tmo(&tmo, val);
170 if (res)
171 goto out;
172
173 if (kp->arg == &srp_reconnect_delay)
174 res = srp_tmo_valid(tmo, srp_fast_io_fail_tmo,
175 srp_dev_loss_tmo);
176 else if (kp->arg == &srp_fast_io_fail_tmo)
177 res = srp_tmo_valid(srp_reconnect_delay, tmo, srp_dev_loss_tmo);
178 else
179 res = srp_tmo_valid(srp_reconnect_delay, srp_fast_io_fail_tmo,
180 tmo);
181 if (res)
182 goto out;
183 *(int *)kp->arg = tmo;
184
185 out:
186 return res;
187 }
188
189 static const struct kernel_param_ops srp_tmo_ops = {
190 .get = srp_tmo_get,
191 .set = srp_tmo_set,
192 };
193
194 static inline struct srp_target_port *host_to_target(struct Scsi_Host *host)
195 {
196 return (struct srp_target_port *) host->hostdata;
197 }
198
199 static const char *srp_target_info(struct Scsi_Host *host)
200 {
201 return host_to_target(host)->target_name;
202 }
203
204 static int srp_target_is_topspin(struct srp_target_port *target)
205 {
206 static const u8 topspin_oui[3] = { 0x00, 0x05, 0xad };
207 static const u8 cisco_oui[3] = { 0x00, 0x1b, 0x0d };
208
209 return topspin_workarounds &&
210 (!memcmp(&target->ioc_guid, topspin_oui, sizeof topspin_oui) ||
211 !memcmp(&target->ioc_guid, cisco_oui, sizeof cisco_oui));
212 }
213
214 static struct srp_iu *srp_alloc_iu(struct srp_host *host, size_t size,
215 gfp_t gfp_mask,
216 enum dma_data_direction direction)
217 {
218 struct srp_iu *iu;
219
220 iu = kmalloc(sizeof *iu, gfp_mask);
221 if (!iu)
222 goto out;
223
224 iu->buf = kzalloc(size, gfp_mask);
225 if (!iu->buf)
226 goto out_free_iu;
227
228 iu->dma = ib_dma_map_single(host->srp_dev->dev, iu->buf, size,
229 direction);
230 if (ib_dma_mapping_error(host->srp_dev->dev, iu->dma))
231 goto out_free_buf;
232
233 iu->size = size;
234 iu->direction = direction;
235
236 return iu;
237
238 out_free_buf:
239 kfree(iu->buf);
240 out_free_iu:
241 kfree(iu);
242 out:
243 return NULL;
244 }
245
246 static void srp_free_iu(struct srp_host *host, struct srp_iu *iu)
247 {
248 if (!iu)
249 return;
250
251 ib_dma_unmap_single(host->srp_dev->dev, iu->dma, iu->size,
252 iu->direction);
253 kfree(iu->buf);
254 kfree(iu);
255 }
256
257 static void srp_qp_event(struct ib_event *event, void *context)
258 {
259 pr_debug("QP event %s (%d)\n",
260 ib_event_msg(event->event), event->event);
261 }
262
263 static int srp_init_qp(struct srp_target_port *target,
264 struct ib_qp *qp)
265 {
266 struct ib_qp_attr *attr;
267 int ret;
268
269 attr = kmalloc(sizeof *attr, GFP_KERNEL);
270 if (!attr)
271 return -ENOMEM;
272
273 ret = ib_find_cached_pkey(target->srp_host->srp_dev->dev,
274 target->srp_host->port,
275 be16_to_cpu(target->pkey),
276 &attr->pkey_index);
277 if (ret)
278 goto out;
279
280 attr->qp_state = IB_QPS_INIT;
281 attr->qp_access_flags = (IB_ACCESS_REMOTE_READ |
282 IB_ACCESS_REMOTE_WRITE);
283 attr->port_num = target->srp_host->port;
284
285 ret = ib_modify_qp(qp, attr,
286 IB_QP_STATE |
287 IB_QP_PKEY_INDEX |
288 IB_QP_ACCESS_FLAGS |
289 IB_QP_PORT);
290
291 out:
292 kfree(attr);
293 return ret;
294 }
295
296 static int srp_new_cm_id(struct srp_rdma_ch *ch)
297 {
298 struct srp_target_port *target = ch->target;
299 struct ib_cm_id *new_cm_id;
300
301 new_cm_id = ib_create_cm_id(target->srp_host->srp_dev->dev,
302 srp_cm_handler, ch);
303 if (IS_ERR(new_cm_id))
304 return PTR_ERR(new_cm_id);
305
306 if (ch->cm_id)
307 ib_destroy_cm_id(ch->cm_id);
308 ch->cm_id = new_cm_id;
309 ch->path.sgid = target->sgid;
310 ch->path.dgid = target->orig_dgid;
311 ch->path.pkey = target->pkey;
312 ch->path.service_id = target->service_id;
313
314 return 0;
315 }
316
317 static struct ib_fmr_pool *srp_alloc_fmr_pool(struct srp_target_port *target)
318 {
319 struct srp_device *dev = target->srp_host->srp_dev;
320 struct ib_fmr_pool_param fmr_param;
321
322 memset(&fmr_param, 0, sizeof(fmr_param));
323 fmr_param.pool_size = target->mr_pool_size;
324 fmr_param.dirty_watermark = fmr_param.pool_size / 4;
325 fmr_param.cache = 1;
326 fmr_param.max_pages_per_fmr = dev->max_pages_per_mr;
327 fmr_param.page_shift = ilog2(dev->mr_page_size);
328 fmr_param.access = (IB_ACCESS_LOCAL_WRITE |
329 IB_ACCESS_REMOTE_WRITE |
330 IB_ACCESS_REMOTE_READ);
331
332 return ib_create_fmr_pool(dev->pd, &fmr_param);
333 }
334
335 /**
336 * srp_destroy_fr_pool() - free the resources owned by a pool
337 * @pool: Fast registration pool to be destroyed.
338 */
339 static void srp_destroy_fr_pool(struct srp_fr_pool *pool)
340 {
341 int i;
342 struct srp_fr_desc *d;
343
344 if (!pool)
345 return;
346
347 for (i = 0, d = &pool->desc[0]; i < pool->size; i++, d++) {
348 if (d->mr)
349 ib_dereg_mr(d->mr);
350 }
351 kfree(pool);
352 }
353
354 /**
355 * srp_create_fr_pool() - allocate and initialize a pool for fast registration
356 * @device: IB device to allocate fast registration descriptors for.
357 * @pd: Protection domain associated with the FR descriptors.
358 * @pool_size: Number of descriptors to allocate.
359 * @max_page_list_len: Maximum fast registration work request page list length.
360 */
361 static struct srp_fr_pool *srp_create_fr_pool(struct ib_device *device,
362 struct ib_pd *pd, int pool_size,
363 int max_page_list_len)
364 {
365 struct srp_fr_pool *pool;
366 struct srp_fr_desc *d;
367 struct ib_mr *mr;
368 int i, ret = -EINVAL;
369
370 if (pool_size <= 0)
371 goto err;
372 ret = -ENOMEM;
373 pool = kzalloc(sizeof(struct srp_fr_pool) +
374 pool_size * sizeof(struct srp_fr_desc), GFP_KERNEL);
375 if (!pool)
376 goto err;
377 pool->size = pool_size;
378 pool->max_page_list_len = max_page_list_len;
379 spin_lock_init(&pool->lock);
380 INIT_LIST_HEAD(&pool->free_list);
381
382 for (i = 0, d = &pool->desc[0]; i < pool->size; i++, d++) {
383 mr = ib_alloc_mr(pd, IB_MR_TYPE_MEM_REG,
384 max_page_list_len);
385 if (IS_ERR(mr)) {
386 ret = PTR_ERR(mr);
387 goto destroy_pool;
388 }
389 d->mr = mr;
390 list_add_tail(&d->entry, &pool->free_list);
391 }
392
393 out:
394 return pool;
395
396 destroy_pool:
397 srp_destroy_fr_pool(pool);
398
399 err:
400 pool = ERR_PTR(ret);
401 goto out;
402 }
403
404 /**
405 * srp_fr_pool_get() - obtain a descriptor suitable for fast registration
406 * @pool: Pool to obtain descriptor from.
407 */
408 static struct srp_fr_desc *srp_fr_pool_get(struct srp_fr_pool *pool)
409 {
410 struct srp_fr_desc *d = NULL;
411 unsigned long flags;
412
413 spin_lock_irqsave(&pool->lock, flags);
414 if (!list_empty(&pool->free_list)) {
415 d = list_first_entry(&pool->free_list, typeof(*d), entry);
416 list_del(&d->entry);
417 }
418 spin_unlock_irqrestore(&pool->lock, flags);
419
420 return d;
421 }
422
423 /**
424 * srp_fr_pool_put() - put an FR descriptor back in the free list
425 * @pool: Pool the descriptor was allocated from.
426 * @desc: Pointer to an array of fast registration descriptor pointers.
427 * @n: Number of descriptors to put back.
428 *
429 * Note: The caller must already have queued an invalidation request for
430 * desc->mr->rkey before calling this function.
431 */
432 static void srp_fr_pool_put(struct srp_fr_pool *pool, struct srp_fr_desc **desc,
433 int n)
434 {
435 unsigned long flags;
436 int i;
437
438 spin_lock_irqsave(&pool->lock, flags);
439 for (i = 0; i < n; i++)
440 list_add(&desc[i]->entry, &pool->free_list);
441 spin_unlock_irqrestore(&pool->lock, flags);
442 }
443
444 static struct srp_fr_pool *srp_alloc_fr_pool(struct srp_target_port *target)
445 {
446 struct srp_device *dev = target->srp_host->srp_dev;
447
448 return srp_create_fr_pool(dev->dev, dev->pd, target->mr_pool_size,
449 dev->max_pages_per_mr);
450 }
451
452 /**
453 * srp_destroy_qp() - destroy an RDMA queue pair
454 * @qp: RDMA queue pair.
455 *
456 * Drain the qp before destroying it. This avoids that the receive
457 * completion handler can access the queue pair while it is
458 * being destroyed.
459 */
460 static void srp_destroy_qp(struct ib_qp *qp)
461 {
462 ib_drain_rq(qp);
463 ib_destroy_qp(qp);
464 }
465
466 static int srp_create_ch_ib(struct srp_rdma_ch *ch)
467 {
468 struct srp_target_port *target = ch->target;
469 struct srp_device *dev = target->srp_host->srp_dev;
470 struct ib_qp_init_attr *init_attr;
471 struct ib_cq *recv_cq, *send_cq;
472 struct ib_qp *qp;
473 struct ib_fmr_pool *fmr_pool = NULL;
474 struct srp_fr_pool *fr_pool = NULL;
475 const int m = 1 + dev->use_fast_reg * target->mr_per_cmd * 2;
476 int ret;
477
478 init_attr = kzalloc(sizeof *init_attr, GFP_KERNEL);
479 if (!init_attr)
480 return -ENOMEM;
481
482 /* queue_size + 1 for ib_drain_rq() */
483 recv_cq = ib_alloc_cq(dev->dev, ch, target->queue_size + 1,
484 ch->comp_vector, IB_POLL_SOFTIRQ);
485 if (IS_ERR(recv_cq)) {
486 ret = PTR_ERR(recv_cq);
487 goto err;
488 }
489
490 send_cq = ib_alloc_cq(dev->dev, ch, m * target->queue_size,
491 ch->comp_vector, IB_POLL_DIRECT);
492 if (IS_ERR(send_cq)) {
493 ret = PTR_ERR(send_cq);
494 goto err_recv_cq;
495 }
496
497 init_attr->event_handler = srp_qp_event;
498 init_attr->cap.max_send_wr = m * target->queue_size;
499 init_attr->cap.max_recv_wr = target->queue_size + 1;
500 init_attr->cap.max_recv_sge = 1;
501 init_attr->cap.max_send_sge = 1;
502 init_attr->sq_sig_type = IB_SIGNAL_REQ_WR;
503 init_attr->qp_type = IB_QPT_RC;
504 init_attr->send_cq = send_cq;
505 init_attr->recv_cq = recv_cq;
506
507 qp = ib_create_qp(dev->pd, init_attr);
508 if (IS_ERR(qp)) {
509 ret = PTR_ERR(qp);
510 goto err_send_cq;
511 }
512
513 ret = srp_init_qp(target, qp);
514 if (ret)
515 goto err_qp;
516
517 if (dev->use_fast_reg) {
518 fr_pool = srp_alloc_fr_pool(target);
519 if (IS_ERR(fr_pool)) {
520 ret = PTR_ERR(fr_pool);
521 shost_printk(KERN_WARNING, target->scsi_host, PFX
522 "FR pool allocation failed (%d)\n", ret);
523 goto err_qp;
524 }
525 } else if (dev->use_fmr) {
526 fmr_pool = srp_alloc_fmr_pool(target);
527 if (IS_ERR(fmr_pool)) {
528 ret = PTR_ERR(fmr_pool);
529 shost_printk(KERN_WARNING, target->scsi_host, PFX
530 "FMR pool allocation failed (%d)\n", ret);
531 goto err_qp;
532 }
533 }
534
535 if (ch->qp)
536 srp_destroy_qp(ch->qp);
537 if (ch->recv_cq)
538 ib_free_cq(ch->recv_cq);
539 if (ch->send_cq)
540 ib_free_cq(ch->send_cq);
541
542 ch->qp = qp;
543 ch->recv_cq = recv_cq;
544 ch->send_cq = send_cq;
545
546 if (dev->use_fast_reg) {
547 if (ch->fr_pool)
548 srp_destroy_fr_pool(ch->fr_pool);
549 ch->fr_pool = fr_pool;
550 } else if (dev->use_fmr) {
551 if (ch->fmr_pool)
552 ib_destroy_fmr_pool(ch->fmr_pool);
553 ch->fmr_pool = fmr_pool;
554 }
555
556 kfree(init_attr);
557 return 0;
558
559 err_qp:
560 srp_destroy_qp(qp);
561
562 err_send_cq:
563 ib_free_cq(send_cq);
564
565 err_recv_cq:
566 ib_free_cq(recv_cq);
567
568 err:
569 kfree(init_attr);
570 return ret;
571 }
572
573 /*
574 * Note: this function may be called without srp_alloc_iu_bufs() having been
575 * invoked. Hence the ch->[rt]x_ring checks.
576 */
577 static void srp_free_ch_ib(struct srp_target_port *target,
578 struct srp_rdma_ch *ch)
579 {
580 struct srp_device *dev = target->srp_host->srp_dev;
581 int i;
582
583 if (!ch->target)
584 return;
585
586 if (ch->cm_id) {
587 ib_destroy_cm_id(ch->cm_id);
588 ch->cm_id = NULL;
589 }
590
591 /* If srp_new_cm_id() succeeded but srp_create_ch_ib() not, return. */
592 if (!ch->qp)
593 return;
594
595 if (dev->use_fast_reg) {
596 if (ch->fr_pool)
597 srp_destroy_fr_pool(ch->fr_pool);
598 } else if (dev->use_fmr) {
599 if (ch->fmr_pool)
600 ib_destroy_fmr_pool(ch->fmr_pool);
601 }
602
603 srp_destroy_qp(ch->qp);
604 ib_free_cq(ch->send_cq);
605 ib_free_cq(ch->recv_cq);
606
607 /*
608 * Avoid that the SCSI error handler tries to use this channel after
609 * it has been freed. The SCSI error handler can namely continue
610 * trying to perform recovery actions after scsi_remove_host()
611 * returned.
612 */
613 ch->target = NULL;
614
615 ch->qp = NULL;
616 ch->send_cq = ch->recv_cq = NULL;
617
618 if (ch->rx_ring) {
619 for (i = 0; i < target->queue_size; ++i)
620 srp_free_iu(target->srp_host, ch->rx_ring[i]);
621 kfree(ch->rx_ring);
622 ch->rx_ring = NULL;
623 }
624 if (ch->tx_ring) {
625 for (i = 0; i < target->queue_size; ++i)
626 srp_free_iu(target->srp_host, ch->tx_ring[i]);
627 kfree(ch->tx_ring);
628 ch->tx_ring = NULL;
629 }
630 }
631
632 static void srp_path_rec_completion(int status,
633 struct ib_sa_path_rec *pathrec,
634 void *ch_ptr)
635 {
636 struct srp_rdma_ch *ch = ch_ptr;
637 struct srp_target_port *target = ch->target;
638
639 ch->status = status;
640 if (status)
641 shost_printk(KERN_ERR, target->scsi_host,
642 PFX "Got failed path rec status %d\n", status);
643 else
644 ch->path = *pathrec;
645 complete(&ch->done);
646 }
647
648 static int srp_lookup_path(struct srp_rdma_ch *ch)
649 {
650 struct srp_target_port *target = ch->target;
651 int ret;
652
653 ch->path.numb_path = 1;
654
655 init_completion(&ch->done);
656
657 ch->path_query_id = ib_sa_path_rec_get(&srp_sa_client,
658 target->srp_host->srp_dev->dev,
659 target->srp_host->port,
660 &ch->path,
661 IB_SA_PATH_REC_SERVICE_ID |
662 IB_SA_PATH_REC_DGID |
663 IB_SA_PATH_REC_SGID |
664 IB_SA_PATH_REC_NUMB_PATH |
665 IB_SA_PATH_REC_PKEY,
666 SRP_PATH_REC_TIMEOUT_MS,
667 GFP_KERNEL,
668 srp_path_rec_completion,
669 ch, &ch->path_query);
670 if (ch->path_query_id < 0)
671 return ch->path_query_id;
672
673 ret = wait_for_completion_interruptible(&ch->done);
674 if (ret < 0)
675 return ret;
676
677 if (ch->status < 0)
678 shost_printk(KERN_WARNING, target->scsi_host,
679 PFX "Path record query failed\n");
680
681 return ch->status;
682 }
683
684 static int srp_send_req(struct srp_rdma_ch *ch, bool multich)
685 {
686 struct srp_target_port *target = ch->target;
687 struct {
688 struct ib_cm_req_param param;
689 struct srp_login_req priv;
690 } *req = NULL;
691 int status;
692
693 req = kzalloc(sizeof *req, GFP_KERNEL);
694 if (!req)
695 return -ENOMEM;
696
697 req->param.primary_path = &ch->path;
698 req->param.alternate_path = NULL;
699 req->param.service_id = target->service_id;
700 req->param.qp_num = ch->qp->qp_num;
701 req->param.qp_type = ch->qp->qp_type;
702 req->param.private_data = &req->priv;
703 req->param.private_data_len = sizeof req->priv;
704 req->param.flow_control = 1;
705
706 get_random_bytes(&req->param.starting_psn, 4);
707 req->param.starting_psn &= 0xffffff;
708
709 /*
710 * Pick some arbitrary defaults here; we could make these
711 * module parameters if anyone cared about setting them.
712 */
713 req->param.responder_resources = 4;
714 req->param.remote_cm_response_timeout = 20;
715 req->param.local_cm_response_timeout = 20;
716 req->param.retry_count = target->tl_retry_count;
717 req->param.rnr_retry_count = 7;
718 req->param.max_cm_retries = 15;
719
720 req->priv.opcode = SRP_LOGIN_REQ;
721 req->priv.tag = 0;
722 req->priv.req_it_iu_len = cpu_to_be32(target->max_iu_len);
723 req->priv.req_buf_fmt = cpu_to_be16(SRP_BUF_FORMAT_DIRECT |
724 SRP_BUF_FORMAT_INDIRECT);
725 req->priv.req_flags = (multich ? SRP_MULTICHAN_MULTI :
726 SRP_MULTICHAN_SINGLE);
727 /*
728 * In the published SRP specification (draft rev. 16a), the
729 * port identifier format is 8 bytes of ID extension followed
730 * by 8 bytes of GUID. Older drafts put the two halves in the
731 * opposite order, so that the GUID comes first.
732 *
733 * Targets conforming to these obsolete drafts can be
734 * recognized by the I/O Class they report.
735 */
736 if (target->io_class == SRP_REV10_IB_IO_CLASS) {
737 memcpy(req->priv.initiator_port_id,
738 &target->sgid.global.interface_id, 8);
739 memcpy(req->priv.initiator_port_id + 8,
740 &target->initiator_ext, 8);
741 memcpy(req->priv.target_port_id, &target->ioc_guid, 8);
742 memcpy(req->priv.target_port_id + 8, &target->id_ext, 8);
743 } else {
744 memcpy(req->priv.initiator_port_id,
745 &target->initiator_ext, 8);
746 memcpy(req->priv.initiator_port_id + 8,
747 &target->sgid.global.interface_id, 8);
748 memcpy(req->priv.target_port_id, &target->id_ext, 8);
749 memcpy(req->priv.target_port_id + 8, &target->ioc_guid, 8);
750 }
751
752 /*
753 * Topspin/Cisco SRP targets will reject our login unless we
754 * zero out the first 8 bytes of our initiator port ID and set
755 * the second 8 bytes to the local node GUID.
756 */
757 if (srp_target_is_topspin(target)) {
758 shost_printk(KERN_DEBUG, target->scsi_host,
759 PFX "Topspin/Cisco initiator port ID workaround "
760 "activated for target GUID %016llx\n",
761 be64_to_cpu(target->ioc_guid));
762 memset(req->priv.initiator_port_id, 0, 8);
763 memcpy(req->priv.initiator_port_id + 8,
764 &target->srp_host->srp_dev->dev->node_guid, 8);
765 }
766
767 status = ib_send_cm_req(ch->cm_id, &req->param);
768
769 kfree(req);
770
771 return status;
772 }
773
774 static bool srp_queue_remove_work(struct srp_target_port *target)
775 {
776 bool changed = false;
777
778 spin_lock_irq(&target->lock);
779 if (target->state != SRP_TARGET_REMOVED) {
780 target->state = SRP_TARGET_REMOVED;
781 changed = true;
782 }
783 spin_unlock_irq(&target->lock);
784
785 if (changed)
786 queue_work(srp_remove_wq, &target->remove_work);
787
788 return changed;
789 }
790
791 static void srp_disconnect_target(struct srp_target_port *target)
792 {
793 struct srp_rdma_ch *ch;
794 int i;
795
796 /* XXX should send SRP_I_LOGOUT request */
797
798 for (i = 0; i < target->ch_count; i++) {
799 ch = &target->ch[i];
800 ch->connected = false;
801 if (ch->cm_id && ib_send_cm_dreq(ch->cm_id, NULL, 0)) {
802 shost_printk(KERN_DEBUG, target->scsi_host,
803 PFX "Sending CM DREQ failed\n");
804 }
805 }
806 }
807
808 static void srp_free_req_data(struct srp_target_port *target,
809 struct srp_rdma_ch *ch)
810 {
811 struct srp_device *dev = target->srp_host->srp_dev;
812 struct ib_device *ibdev = dev->dev;
813 struct srp_request *req;
814 int i;
815
816 if (!ch->req_ring)
817 return;
818
819 for (i = 0; i < target->req_ring_size; ++i) {
820 req = &ch->req_ring[i];
821 if (dev->use_fast_reg) {
822 kfree(req->fr_list);
823 } else {
824 kfree(req->fmr_list);
825 kfree(req->map_page);
826 }
827 if (req->indirect_dma_addr) {
828 ib_dma_unmap_single(ibdev, req->indirect_dma_addr,
829 target->indirect_size,
830 DMA_TO_DEVICE);
831 }
832 kfree(req->indirect_desc);
833 }
834
835 kfree(ch->req_ring);
836 ch->req_ring = NULL;
837 }
838
839 static int srp_alloc_req_data(struct srp_rdma_ch *ch)
840 {
841 struct srp_target_port *target = ch->target;
842 struct srp_device *srp_dev = target->srp_host->srp_dev;
843 struct ib_device *ibdev = srp_dev->dev;
844 struct srp_request *req;
845 void *mr_list;
846 dma_addr_t dma_addr;
847 int i, ret = -ENOMEM;
848
849 ch->req_ring = kcalloc(target->req_ring_size, sizeof(*ch->req_ring),
850 GFP_KERNEL);
851 if (!ch->req_ring)
852 goto out;
853
854 for (i = 0; i < target->req_ring_size; ++i) {
855 req = &ch->req_ring[i];
856 mr_list = kmalloc(target->mr_per_cmd * sizeof(void *),
857 GFP_KERNEL);
858 if (!mr_list)
859 goto out;
860 if (srp_dev->use_fast_reg) {
861 req->fr_list = mr_list;
862 } else {
863 req->fmr_list = mr_list;
864 req->map_page = kmalloc(srp_dev->max_pages_per_mr *
865 sizeof(void *), GFP_KERNEL);
866 if (!req->map_page)
867 goto out;
868 }
869 req->indirect_desc = kmalloc(target->indirect_size, GFP_KERNEL);
870 if (!req->indirect_desc)
871 goto out;
872
873 dma_addr = ib_dma_map_single(ibdev, req->indirect_desc,
874 target->indirect_size,
875 DMA_TO_DEVICE);
876 if (ib_dma_mapping_error(ibdev, dma_addr))
877 goto out;
878
879 req->indirect_dma_addr = dma_addr;
880 }
881 ret = 0;
882
883 out:
884 return ret;
885 }
886
887 /**
888 * srp_del_scsi_host_attr() - Remove attributes defined in the host template.
889 * @shost: SCSI host whose attributes to remove from sysfs.
890 *
891 * Note: Any attributes defined in the host template and that did not exist
892 * before invocation of this function will be ignored.
893 */
894 static void srp_del_scsi_host_attr(struct Scsi_Host *shost)
895 {
896 struct device_attribute **attr;
897
898 for (attr = shost->hostt->shost_attrs; attr && *attr; ++attr)
899 device_remove_file(&shost->shost_dev, *attr);
900 }
901
902 static void srp_remove_target(struct srp_target_port *target)
903 {
904 struct srp_rdma_ch *ch;
905 int i;
906
907 WARN_ON_ONCE(target->state != SRP_TARGET_REMOVED);
908
909 srp_del_scsi_host_attr(target->scsi_host);
910 srp_rport_get(target->rport);
911 srp_remove_host(target->scsi_host);
912 scsi_remove_host(target->scsi_host);
913 srp_stop_rport_timers(target->rport);
914 srp_disconnect_target(target);
915 for (i = 0; i < target->ch_count; i++) {
916 ch = &target->ch[i];
917 srp_free_ch_ib(target, ch);
918 }
919 cancel_work_sync(&target->tl_err_work);
920 srp_rport_put(target->rport);
921 for (i = 0; i < target->ch_count; i++) {
922 ch = &target->ch[i];
923 srp_free_req_data(target, ch);
924 }
925 kfree(target->ch);
926 target->ch = NULL;
927
928 spin_lock(&target->srp_host->target_lock);
929 list_del(&target->list);
930 spin_unlock(&target->srp_host->target_lock);
931
932 scsi_host_put(target->scsi_host);
933 }
934
935 static void srp_remove_work(struct work_struct *work)
936 {
937 struct srp_target_port *target =
938 container_of(work, struct srp_target_port, remove_work);
939
940 WARN_ON_ONCE(target->state != SRP_TARGET_REMOVED);
941
942 srp_remove_target(target);
943 }
944
945 static void srp_rport_delete(struct srp_rport *rport)
946 {
947 struct srp_target_port *target = rport->lld_data;
948
949 srp_queue_remove_work(target);
950 }
951
952 /**
953 * srp_connected_ch() - number of connected channels
954 * @target: SRP target port.
955 */
956 static int srp_connected_ch(struct srp_target_port *target)
957 {
958 int i, c = 0;
959
960 for (i = 0; i < target->ch_count; i++)
961 c += target->ch[i].connected;
962
963 return c;
964 }
965
966 static int srp_connect_ch(struct srp_rdma_ch *ch, bool multich)
967 {
968 struct srp_target_port *target = ch->target;
969 int ret;
970
971 WARN_ON_ONCE(!multich && srp_connected_ch(target) > 0);
972
973 ret = srp_lookup_path(ch);
974 if (ret)
975 goto out;
976
977 while (1) {
978 init_completion(&ch->done);
979 ret = srp_send_req(ch, multich);
980 if (ret)
981 goto out;
982 ret = wait_for_completion_interruptible(&ch->done);
983 if (ret < 0)
984 goto out;
985
986 /*
987 * The CM event handling code will set status to
988 * SRP_PORT_REDIRECT if we get a port redirect REJ
989 * back, or SRP_DLID_REDIRECT if we get a lid/qp
990 * redirect REJ back.
991 */
992 ret = ch->status;
993 switch (ret) {
994 case 0:
995 ch->connected = true;
996 goto out;
997
998 case SRP_PORT_REDIRECT:
999 ret = srp_lookup_path(ch);
1000 if (ret)
1001 goto out;
1002 break;
1003
1004 case SRP_DLID_REDIRECT:
1005 break;
1006
1007 case SRP_STALE_CONN:
1008 shost_printk(KERN_ERR, target->scsi_host, PFX
1009 "giving up on stale connection\n");
1010 ret = -ECONNRESET;
1011 goto out;
1012
1013 default:
1014 goto out;
1015 }
1016 }
1017
1018 out:
1019 return ret <= 0 ? ret : -ENODEV;
1020 }
1021
1022 static void srp_inv_rkey_err_done(struct ib_cq *cq, struct ib_wc *wc)
1023 {
1024 srp_handle_qp_err(cq, wc, "INV RKEY");
1025 }
1026
1027 static int srp_inv_rkey(struct srp_request *req, struct srp_rdma_ch *ch,
1028 u32 rkey)
1029 {
1030 struct ib_send_wr *bad_wr;
1031 struct ib_send_wr wr = {
1032 .opcode = IB_WR_LOCAL_INV,
1033 .next = NULL,
1034 .num_sge = 0,
1035 .send_flags = 0,
1036 .ex.invalidate_rkey = rkey,
1037 };
1038
1039 wr.wr_cqe = &req->reg_cqe;
1040 req->reg_cqe.done = srp_inv_rkey_err_done;
1041 return ib_post_send(ch->qp, &wr, &bad_wr);
1042 }
1043
1044 static void srp_unmap_data(struct scsi_cmnd *scmnd,
1045 struct srp_rdma_ch *ch,
1046 struct srp_request *req)
1047 {
1048 struct srp_target_port *target = ch->target;
1049 struct srp_device *dev = target->srp_host->srp_dev;
1050 struct ib_device *ibdev = dev->dev;
1051 int i, res;
1052
1053 if (!scsi_sglist(scmnd) ||
1054 (scmnd->sc_data_direction != DMA_TO_DEVICE &&
1055 scmnd->sc_data_direction != DMA_FROM_DEVICE))
1056 return;
1057
1058 if (dev->use_fast_reg) {
1059 struct srp_fr_desc **pfr;
1060
1061 for (i = req->nmdesc, pfr = req->fr_list; i > 0; i--, pfr++) {
1062 res = srp_inv_rkey(req, ch, (*pfr)->mr->rkey);
1063 if (res < 0) {
1064 shost_printk(KERN_ERR, target->scsi_host, PFX
1065 "Queueing INV WR for rkey %#x failed (%d)\n",
1066 (*pfr)->mr->rkey, res);
1067 queue_work(system_long_wq,
1068 &target->tl_err_work);
1069 }
1070 }
1071 if (req->nmdesc)
1072 srp_fr_pool_put(ch->fr_pool, req->fr_list,
1073 req->nmdesc);
1074 } else if (dev->use_fmr) {
1075 struct ib_pool_fmr **pfmr;
1076
1077 for (i = req->nmdesc, pfmr = req->fmr_list; i > 0; i--, pfmr++)
1078 ib_fmr_pool_unmap(*pfmr);
1079 }
1080
1081 ib_dma_unmap_sg(ibdev, scsi_sglist(scmnd), scsi_sg_count(scmnd),
1082 scmnd->sc_data_direction);
1083 }
1084
1085 /**
1086 * srp_claim_req - Take ownership of the scmnd associated with a request.
1087 * @ch: SRP RDMA channel.
1088 * @req: SRP request.
1089 * @sdev: If not NULL, only take ownership for this SCSI device.
1090 * @scmnd: If NULL, take ownership of @req->scmnd. If not NULL, only take
1091 * ownership of @req->scmnd if it equals @scmnd.
1092 *
1093 * Return value:
1094 * Either NULL or a pointer to the SCSI command the caller became owner of.
1095 */
1096 static struct scsi_cmnd *srp_claim_req(struct srp_rdma_ch *ch,
1097 struct srp_request *req,
1098 struct scsi_device *sdev,
1099 struct scsi_cmnd *scmnd)
1100 {
1101 unsigned long flags;
1102
1103 spin_lock_irqsave(&ch->lock, flags);
1104 if (req->scmnd &&
1105 (!sdev || req->scmnd->device == sdev) &&
1106 (!scmnd || req->scmnd == scmnd)) {
1107 scmnd = req->scmnd;
1108 req->scmnd = NULL;
1109 } else {
1110 scmnd = NULL;
1111 }
1112 spin_unlock_irqrestore(&ch->lock, flags);
1113
1114 return scmnd;
1115 }
1116
1117 /**
1118 * srp_free_req() - Unmap data and adjust ch->req_lim.
1119 * @ch: SRP RDMA channel.
1120 * @req: Request to be freed.
1121 * @scmnd: SCSI command associated with @req.
1122 * @req_lim_delta: Amount to be added to @target->req_lim.
1123 */
1124 static void srp_free_req(struct srp_rdma_ch *ch, struct srp_request *req,
1125 struct scsi_cmnd *scmnd, s32 req_lim_delta)
1126 {
1127 unsigned long flags;
1128
1129 srp_unmap_data(scmnd, ch, req);
1130
1131 spin_lock_irqsave(&ch->lock, flags);
1132 ch->req_lim += req_lim_delta;
1133 spin_unlock_irqrestore(&ch->lock, flags);
1134 }
1135
1136 static void srp_finish_req(struct srp_rdma_ch *ch, struct srp_request *req,
1137 struct scsi_device *sdev, int result)
1138 {
1139 struct scsi_cmnd *scmnd = srp_claim_req(ch, req, sdev, NULL);
1140
1141 if (scmnd) {
1142 srp_free_req(ch, req, scmnd, 0);
1143 scmnd->result = result;
1144 scmnd->scsi_done(scmnd);
1145 }
1146 }
1147
1148 static void srp_terminate_io(struct srp_rport *rport)
1149 {
1150 struct srp_target_port *target = rport->lld_data;
1151 struct srp_rdma_ch *ch;
1152 struct Scsi_Host *shost = target->scsi_host;
1153 struct scsi_device *sdev;
1154 int i, j;
1155
1156 /*
1157 * Invoking srp_terminate_io() while srp_queuecommand() is running
1158 * is not safe. Hence the warning statement below.
1159 */
1160 shost_for_each_device(sdev, shost)
1161 WARN_ON_ONCE(sdev->request_queue->request_fn_active);
1162
1163 for (i = 0; i < target->ch_count; i++) {
1164 ch = &target->ch[i];
1165
1166 for (j = 0; j < target->req_ring_size; ++j) {
1167 struct srp_request *req = &ch->req_ring[j];
1168
1169 srp_finish_req(ch, req, NULL,
1170 DID_TRANSPORT_FAILFAST << 16);
1171 }
1172 }
1173 }
1174
1175 /*
1176 * It is up to the caller to ensure that srp_rport_reconnect() calls are
1177 * serialized and that no concurrent srp_queuecommand(), srp_abort(),
1178 * srp_reset_device() or srp_reset_host() calls will occur while this function
1179 * is in progress. One way to realize that is not to call this function
1180 * directly but to call srp_reconnect_rport() instead since that last function
1181 * serializes calls of this function via rport->mutex and also blocks
1182 * srp_queuecommand() calls before invoking this function.
1183 */
1184 static int srp_rport_reconnect(struct srp_rport *rport)
1185 {
1186 struct srp_target_port *target = rport->lld_data;
1187 struct srp_rdma_ch *ch;
1188 int i, j, ret = 0;
1189 bool multich = false;
1190
1191 srp_disconnect_target(target);
1192
1193 if (target->state == SRP_TARGET_SCANNING)
1194 return -ENODEV;
1195
1196 /*
1197 * Now get a new local CM ID so that we avoid confusing the target in
1198 * case things are really fouled up. Doing so also ensures that all CM
1199 * callbacks will have finished before a new QP is allocated.
1200 */
1201 for (i = 0; i < target->ch_count; i++) {
1202 ch = &target->ch[i];
1203 ret += srp_new_cm_id(ch);
1204 }
1205 for (i = 0; i < target->ch_count; i++) {
1206 ch = &target->ch[i];
1207 for (j = 0; j < target->req_ring_size; ++j) {
1208 struct srp_request *req = &ch->req_ring[j];
1209
1210 srp_finish_req(ch, req, NULL, DID_RESET << 16);
1211 }
1212 }
1213 for (i = 0; i < target->ch_count; i++) {
1214 ch = &target->ch[i];
1215 /*
1216 * Whether or not creating a new CM ID succeeded, create a new
1217 * QP. This guarantees that all completion callback function
1218 * invocations have finished before request resetting starts.
1219 */
1220 ret += srp_create_ch_ib(ch);
1221
1222 INIT_LIST_HEAD(&ch->free_tx);
1223 for (j = 0; j < target->queue_size; ++j)
1224 list_add(&ch->tx_ring[j]->list, &ch->free_tx);
1225 }
1226
1227 target->qp_in_error = false;
1228
1229 for (i = 0; i < target->ch_count; i++) {
1230 ch = &target->ch[i];
1231 if (ret)
1232 break;
1233 ret = srp_connect_ch(ch, multich);
1234 multich = true;
1235 }
1236
1237 if (ret == 0)
1238 shost_printk(KERN_INFO, target->scsi_host,
1239 PFX "reconnect succeeded\n");
1240
1241 return ret;
1242 }
1243
1244 static void srp_map_desc(struct srp_map_state *state, dma_addr_t dma_addr,
1245 unsigned int dma_len, u32 rkey)
1246 {
1247 struct srp_direct_buf *desc = state->desc;
1248
1249 WARN_ON_ONCE(!dma_len);
1250
1251 desc->va = cpu_to_be64(dma_addr);
1252 desc->key = cpu_to_be32(rkey);
1253 desc->len = cpu_to_be32(dma_len);
1254
1255 state->total_len += dma_len;
1256 state->desc++;
1257 state->ndesc++;
1258 }
1259
1260 static int srp_map_finish_fmr(struct srp_map_state *state,
1261 struct srp_rdma_ch *ch)
1262 {
1263 struct srp_target_port *target = ch->target;
1264 struct srp_device *dev = target->srp_host->srp_dev;
1265 struct ib_pool_fmr *fmr;
1266 u64 io_addr = 0;
1267
1268 if (state->fmr.next >= state->fmr.end)
1269 return -ENOMEM;
1270
1271 WARN_ON_ONCE(!dev->use_fmr);
1272
1273 if (state->npages == 0)
1274 return 0;
1275
1276 if (state->npages == 1 && target->global_mr) {
1277 srp_map_desc(state, state->base_dma_addr, state->dma_len,
1278 target->global_mr->rkey);
1279 goto reset_state;
1280 }
1281
1282 fmr = ib_fmr_pool_map_phys(ch->fmr_pool, state->pages,
1283 state->npages, io_addr);
1284 if (IS_ERR(fmr))
1285 return PTR_ERR(fmr);
1286
1287 *state->fmr.next++ = fmr;
1288 state->nmdesc++;
1289
1290 srp_map_desc(state, state->base_dma_addr & ~dev->mr_page_mask,
1291 state->dma_len, fmr->fmr->rkey);
1292
1293 reset_state:
1294 state->npages = 0;
1295 state->dma_len = 0;
1296
1297 return 0;
1298 }
1299
1300 static void srp_reg_mr_err_done(struct ib_cq *cq, struct ib_wc *wc)
1301 {
1302 srp_handle_qp_err(cq, wc, "FAST REG");
1303 }
1304
1305 /*
1306 * Map up to sg_nents elements of state->sg where *sg_offset_p is the offset
1307 * where to start in the first element. If sg_offset_p != NULL then
1308 * *sg_offset_p is updated to the offset in state->sg[retval] of the first
1309 * byte that has not yet been mapped.
1310 */
1311 static int srp_map_finish_fr(struct srp_map_state *state,
1312 struct srp_request *req,
1313 struct srp_rdma_ch *ch, int sg_nents,
1314 unsigned int *sg_offset_p)
1315 {
1316 struct srp_target_port *target = ch->target;
1317 struct srp_device *dev = target->srp_host->srp_dev;
1318 struct ib_send_wr *bad_wr;
1319 struct ib_reg_wr wr;
1320 struct srp_fr_desc *desc;
1321 u32 rkey;
1322 int n, err;
1323
1324 if (state->fr.next >= state->fr.end)
1325 return -ENOMEM;
1326
1327 WARN_ON_ONCE(!dev->use_fast_reg);
1328
1329 if (sg_nents == 1 && target->global_mr) {
1330 unsigned int sg_offset = sg_offset_p ? *sg_offset_p : 0;
1331
1332 srp_map_desc(state, sg_dma_address(state->sg) + sg_offset,
1333 sg_dma_len(state->sg) - sg_offset,
1334 target->global_mr->rkey);
1335 if (sg_offset_p)
1336 *sg_offset_p = 0;
1337 return 1;
1338 }
1339
1340 desc = srp_fr_pool_get(ch->fr_pool);
1341 if (!desc)
1342 return -ENOMEM;
1343
1344 rkey = ib_inc_rkey(desc->mr->rkey);
1345 ib_update_fast_reg_key(desc->mr, rkey);
1346
1347 n = ib_map_mr_sg(desc->mr, state->sg, sg_nents, sg_offset_p,
1348 dev->mr_page_size);
1349 if (unlikely(n < 0)) {
1350 srp_fr_pool_put(ch->fr_pool, &desc, 1);
1351 pr_debug("%s: ib_map_mr_sg(%d, %d) returned %d.\n",
1352 dev_name(&req->scmnd->device->sdev_gendev), sg_nents,
1353 sg_offset_p ? *sg_offset_p : -1, n);
1354 return n;
1355 }
1356
1357 WARN_ON_ONCE(desc->mr->length == 0);
1358
1359 req->reg_cqe.done = srp_reg_mr_err_done;
1360
1361 wr.wr.next = NULL;
1362 wr.wr.opcode = IB_WR_REG_MR;
1363 wr.wr.wr_cqe = &req->reg_cqe;
1364 wr.wr.num_sge = 0;
1365 wr.wr.send_flags = 0;
1366 wr.mr = desc->mr;
1367 wr.key = desc->mr->rkey;
1368 wr.access = (IB_ACCESS_LOCAL_WRITE |
1369 IB_ACCESS_REMOTE_READ |
1370 IB_ACCESS_REMOTE_WRITE);
1371
1372 *state->fr.next++ = desc;
1373 state->nmdesc++;
1374
1375 srp_map_desc(state, desc->mr->iova,
1376 desc->mr->length, desc->mr->rkey);
1377
1378 err = ib_post_send(ch->qp, &wr.wr, &bad_wr);
1379 if (unlikely(err)) {
1380 WARN_ON_ONCE(err == -ENOMEM);
1381 return err;
1382 }
1383
1384 return n;
1385 }
1386
1387 static int srp_map_sg_entry(struct srp_map_state *state,
1388 struct srp_rdma_ch *ch,
1389 struct scatterlist *sg, int sg_index)
1390 {
1391 struct srp_target_port *target = ch->target;
1392 struct srp_device *dev = target->srp_host->srp_dev;
1393 struct ib_device *ibdev = dev->dev;
1394 dma_addr_t dma_addr = ib_sg_dma_address(ibdev, sg);
1395 unsigned int dma_len = ib_sg_dma_len(ibdev, sg);
1396 unsigned int len = 0;
1397 int ret;
1398
1399 WARN_ON_ONCE(!dma_len);
1400
1401 while (dma_len) {
1402 unsigned offset = dma_addr & ~dev->mr_page_mask;
1403 if (state->npages == dev->max_pages_per_mr || offset != 0) {
1404 ret = srp_map_finish_fmr(state, ch);
1405 if (ret)
1406 return ret;
1407 }
1408
1409 len = min_t(unsigned int, dma_len, dev->mr_page_size - offset);
1410
1411 if (!state->npages)
1412 state->base_dma_addr = dma_addr;
1413 state->pages[state->npages++] = dma_addr & dev->mr_page_mask;
1414 state->dma_len += len;
1415 dma_addr += len;
1416 dma_len -= len;
1417 }
1418
1419 /*
1420 * If the last entry of the MR wasn't a full page, then we need to
1421 * close it out and start a new one -- we can only merge at page
1422 * boundaries.
1423 */
1424 ret = 0;
1425 if (len != dev->mr_page_size)
1426 ret = srp_map_finish_fmr(state, ch);
1427 return ret;
1428 }
1429
1430 static int srp_map_sg_fmr(struct srp_map_state *state, struct srp_rdma_ch *ch,
1431 struct srp_request *req, struct scatterlist *scat,
1432 int count)
1433 {
1434 struct scatterlist *sg;
1435 int i, ret;
1436
1437 state->pages = req->map_page;
1438 state->fmr.next = req->fmr_list;
1439 state->fmr.end = req->fmr_list + ch->target->mr_per_cmd;
1440
1441 for_each_sg(scat, sg, count, i) {
1442 ret = srp_map_sg_entry(state, ch, sg, i);
1443 if (ret)
1444 return ret;
1445 }
1446
1447 ret = srp_map_finish_fmr(state, ch);
1448 if (ret)
1449 return ret;
1450
1451 return 0;
1452 }
1453
1454 static int srp_map_sg_fr(struct srp_map_state *state, struct srp_rdma_ch *ch,
1455 struct srp_request *req, struct scatterlist *scat,
1456 int count)
1457 {
1458 unsigned int sg_offset = 0;
1459
1460 state->desc = req->indirect_desc;
1461 state->fr.next = req->fr_list;
1462 state->fr.end = req->fr_list + ch->target->mr_per_cmd;
1463 state->sg = scat;
1464
1465 if (count == 0)
1466 return 0;
1467
1468 while (count) {
1469 int i, n;
1470
1471 n = srp_map_finish_fr(state, req, ch, count, &sg_offset);
1472 if (unlikely(n < 0))
1473 return n;
1474
1475 count -= n;
1476 for (i = 0; i < n; i++)
1477 state->sg = sg_next(state->sg);
1478 }
1479
1480 return 0;
1481 }
1482
1483 static int srp_map_sg_dma(struct srp_map_state *state, struct srp_rdma_ch *ch,
1484 struct srp_request *req, struct scatterlist *scat,
1485 int count)
1486 {
1487 struct srp_target_port *target = ch->target;
1488 struct srp_device *dev = target->srp_host->srp_dev;
1489 struct scatterlist *sg;
1490 int i;
1491
1492 state->desc = req->indirect_desc;
1493 for_each_sg(scat, sg, count, i) {
1494 srp_map_desc(state, ib_sg_dma_address(dev->dev, sg),
1495 ib_sg_dma_len(dev->dev, sg),
1496 target->global_mr->rkey);
1497 }
1498
1499 return 0;
1500 }
1501
1502 /*
1503 * Register the indirect data buffer descriptor with the HCA.
1504 *
1505 * Note: since the indirect data buffer descriptor has been allocated with
1506 * kmalloc() it is guaranteed that this buffer is a physically contiguous
1507 * memory buffer.
1508 */
1509 static int srp_map_idb(struct srp_rdma_ch *ch, struct srp_request *req,
1510 void **next_mr, void **end_mr, u32 idb_len,
1511 __be32 *idb_rkey)
1512 {
1513 struct srp_target_port *target = ch->target;
1514 struct srp_device *dev = target->srp_host->srp_dev;
1515 struct srp_map_state state;
1516 struct srp_direct_buf idb_desc;
1517 u64 idb_pages[1];
1518 struct scatterlist idb_sg[1];
1519 int ret;
1520
1521 memset(&state, 0, sizeof(state));
1522 memset(&idb_desc, 0, sizeof(idb_desc));
1523 state.gen.next = next_mr;
1524 state.gen.end = end_mr;
1525 state.desc = &idb_desc;
1526 state.base_dma_addr = req->indirect_dma_addr;
1527 state.dma_len = idb_len;
1528
1529 if (dev->use_fast_reg) {
1530 state.sg = idb_sg;
1531 sg_init_one(idb_sg, req->indirect_desc, idb_len);
1532 idb_sg->dma_address = req->indirect_dma_addr; /* hack! */
1533 #ifdef CONFIG_NEED_SG_DMA_LENGTH
1534 idb_sg->dma_length = idb_sg->length; /* hack^2 */
1535 #endif
1536 ret = srp_map_finish_fr(&state, req, ch, 1, NULL);
1537 if (ret < 0)
1538 return ret;
1539 WARN_ON_ONCE(ret < 1);
1540 } else if (dev->use_fmr) {
1541 state.pages = idb_pages;
1542 state.pages[0] = (req->indirect_dma_addr &
1543 dev->mr_page_mask);
1544 state.npages = 1;
1545 ret = srp_map_finish_fmr(&state, ch);
1546 if (ret < 0)
1547 return ret;
1548 } else {
1549 return -EINVAL;
1550 }
1551
1552 *idb_rkey = idb_desc.key;
1553
1554 return 0;
1555 }
1556
1557 #if defined(DYNAMIC_DATA_DEBUG)
1558 static void srp_check_mapping(struct srp_map_state *state,
1559 struct srp_rdma_ch *ch, struct srp_request *req,
1560 struct scatterlist *scat, int count)
1561 {
1562 struct srp_device *dev = ch->target->srp_host->srp_dev;
1563 struct srp_fr_desc **pfr;
1564 u64 desc_len = 0, mr_len = 0;
1565 int i;
1566
1567 for (i = 0; i < state->ndesc; i++)
1568 desc_len += be32_to_cpu(req->indirect_desc[i].len);
1569 if (dev->use_fast_reg)
1570 for (i = 0, pfr = req->fr_list; i < state->nmdesc; i++, pfr++)
1571 mr_len += (*pfr)->mr->length;
1572 else if (dev->use_fmr)
1573 for (i = 0; i < state->nmdesc; i++)
1574 mr_len += be32_to_cpu(req->indirect_desc[i].len);
1575 if (desc_len != scsi_bufflen(req->scmnd) ||
1576 mr_len > scsi_bufflen(req->scmnd))
1577 pr_err("Inconsistent: scsi len %d <> desc len %lld <> mr len %lld; ndesc %d; nmdesc = %d\n",
1578 scsi_bufflen(req->scmnd), desc_len, mr_len,
1579 state->ndesc, state->nmdesc);
1580 }
1581 #endif
1582
1583 /**
1584 * srp_map_data() - map SCSI data buffer onto an SRP request
1585 * @scmnd: SCSI command to map
1586 * @ch: SRP RDMA channel
1587 * @req: SRP request
1588 *
1589 * Returns the length in bytes of the SRP_CMD IU or a negative value if
1590 * mapping failed.
1591 */
1592 static int srp_map_data(struct scsi_cmnd *scmnd, struct srp_rdma_ch *ch,
1593 struct srp_request *req)
1594 {
1595 struct srp_target_port *target = ch->target;
1596 struct scatterlist *scat;
1597 struct srp_cmd *cmd = req->cmd->buf;
1598 int len, nents, count, ret;
1599 struct srp_device *dev;
1600 struct ib_device *ibdev;
1601 struct srp_map_state state;
1602 struct srp_indirect_buf *indirect_hdr;
1603 u32 idb_len, table_len;
1604 __be32 idb_rkey;
1605 u8 fmt;
1606
1607 if (!scsi_sglist(scmnd) || scmnd->sc_data_direction == DMA_NONE)
1608 return sizeof (struct srp_cmd);
1609
1610 if (scmnd->sc_data_direction != DMA_FROM_DEVICE &&
1611 scmnd->sc_data_direction != DMA_TO_DEVICE) {
1612 shost_printk(KERN_WARNING, target->scsi_host,
1613 PFX "Unhandled data direction %d\n",
1614 scmnd->sc_data_direction);
1615 return -EINVAL;
1616 }
1617
1618 nents = scsi_sg_count(scmnd);
1619 scat = scsi_sglist(scmnd);
1620
1621 dev = target->srp_host->srp_dev;
1622 ibdev = dev->dev;
1623
1624 count = ib_dma_map_sg(ibdev, scat, nents, scmnd->sc_data_direction);
1625 if (unlikely(count == 0))
1626 return -EIO;
1627
1628 fmt = SRP_DATA_DESC_DIRECT;
1629 len = sizeof (struct srp_cmd) + sizeof (struct srp_direct_buf);
1630
1631 if (count == 1 && target->global_mr) {
1632 /*
1633 * The midlayer only generated a single gather/scatter
1634 * entry, or DMA mapping coalesced everything to a
1635 * single entry. So a direct descriptor along with
1636 * the DMA MR suffices.
1637 */
1638 struct srp_direct_buf *buf = (void *) cmd->add_data;
1639
1640 buf->va = cpu_to_be64(ib_sg_dma_address(ibdev, scat));
1641 buf->key = cpu_to_be32(target->global_mr->rkey);
1642 buf->len = cpu_to_be32(ib_sg_dma_len(ibdev, scat));
1643
1644 req->nmdesc = 0;
1645 goto map_complete;
1646 }
1647
1648 /*
1649 * We have more than one scatter/gather entry, so build our indirect
1650 * descriptor table, trying to merge as many entries as we can.
1651 */
1652 indirect_hdr = (void *) cmd->add_data;
1653
1654 ib_dma_sync_single_for_cpu(ibdev, req->indirect_dma_addr,
1655 target->indirect_size, DMA_TO_DEVICE);
1656
1657 memset(&state, 0, sizeof(state));
1658 if (dev->use_fast_reg)
1659 ret = srp_map_sg_fr(&state, ch, req, scat, count);
1660 else if (dev->use_fmr)
1661 ret = srp_map_sg_fmr(&state, ch, req, scat, count);
1662 else
1663 ret = srp_map_sg_dma(&state, ch, req, scat, count);
1664 req->nmdesc = state.nmdesc;
1665 if (ret < 0)
1666 goto unmap;
1667
1668 #if defined(DYNAMIC_DEBUG)
1669 {
1670 DEFINE_DYNAMIC_DEBUG_METADATA(ddm,
1671 "Memory mapping consistency check");
1672 if (unlikely(ddm.flags & _DPRINTK_FLAGS_PRINT))
1673 srp_check_mapping(&state, ch, req, scat, count);
1674 }
1675 #endif
1676
1677 /* We've mapped the request, now pull as much of the indirect
1678 * descriptor table as we can into the command buffer. If this
1679 * target is not using an external indirect table, we are
1680 * guaranteed to fit into the command, as the SCSI layer won't
1681 * give us more S/G entries than we allow.
1682 */
1683 if (state.ndesc == 1) {
1684 /*
1685 * Memory registration collapsed the sg-list into one entry,
1686 * so use a direct descriptor.
1687 */
1688 struct srp_direct_buf *buf = (void *) cmd->add_data;
1689
1690 *buf = req->indirect_desc[0];
1691 goto map_complete;
1692 }
1693
1694 if (unlikely(target->cmd_sg_cnt < state.ndesc &&
1695 !target->allow_ext_sg)) {
1696 shost_printk(KERN_ERR, target->scsi_host,
1697 "Could not fit S/G list into SRP_CMD\n");
1698 ret = -EIO;
1699 goto unmap;
1700 }
1701
1702 count = min(state.ndesc, target->cmd_sg_cnt);
1703 table_len = state.ndesc * sizeof (struct srp_direct_buf);
1704 idb_len = sizeof(struct srp_indirect_buf) + table_len;
1705
1706 fmt = SRP_DATA_DESC_INDIRECT;
1707 len = sizeof(struct srp_cmd) + sizeof (struct srp_indirect_buf);
1708 len += count * sizeof (struct srp_direct_buf);
1709
1710 memcpy(indirect_hdr->desc_list, req->indirect_desc,
1711 count * sizeof (struct srp_direct_buf));
1712
1713 if (!target->global_mr) {
1714 ret = srp_map_idb(ch, req, state.gen.next, state.gen.end,
1715 idb_len, &idb_rkey);
1716 if (ret < 0)
1717 goto unmap;
1718 req->nmdesc++;
1719 } else {
1720 idb_rkey = cpu_to_be32(target->global_mr->rkey);
1721 }
1722
1723 indirect_hdr->table_desc.va = cpu_to_be64(req->indirect_dma_addr);
1724 indirect_hdr->table_desc.key = idb_rkey;
1725 indirect_hdr->table_desc.len = cpu_to_be32(table_len);
1726 indirect_hdr->len = cpu_to_be32(state.total_len);
1727
1728 if (scmnd->sc_data_direction == DMA_TO_DEVICE)
1729 cmd->data_out_desc_cnt = count;
1730 else
1731 cmd->data_in_desc_cnt = count;
1732
1733 ib_dma_sync_single_for_device(ibdev, req->indirect_dma_addr, table_len,
1734 DMA_TO_DEVICE);
1735
1736 map_complete:
1737 if (scmnd->sc_data_direction == DMA_TO_DEVICE)
1738 cmd->buf_fmt = fmt << 4;
1739 else
1740 cmd->buf_fmt = fmt;
1741
1742 return len;
1743
1744 unmap:
1745 srp_unmap_data(scmnd, ch, req);
1746 if (ret == -ENOMEM && req->nmdesc >= target->mr_pool_size)
1747 ret = -E2BIG;
1748 return ret;
1749 }
1750
1751 /*
1752 * Return an IU and possible credit to the free pool
1753 */
1754 static void srp_put_tx_iu(struct srp_rdma_ch *ch, struct srp_iu *iu,
1755 enum srp_iu_type iu_type)
1756 {
1757 unsigned long flags;
1758
1759 spin_lock_irqsave(&ch->lock, flags);
1760 list_add(&iu->list, &ch->free_tx);
1761 if (iu_type != SRP_IU_RSP)
1762 ++ch->req_lim;
1763 spin_unlock_irqrestore(&ch->lock, flags);
1764 }
1765
1766 /*
1767 * Must be called with ch->lock held to protect req_lim and free_tx.
1768 * If IU is not sent, it must be returned using srp_put_tx_iu().
1769 *
1770 * Note:
1771 * An upper limit for the number of allocated information units for each
1772 * request type is:
1773 * - SRP_IU_CMD: SRP_CMD_SQ_SIZE, since the SCSI mid-layer never queues
1774 * more than Scsi_Host.can_queue requests.
1775 * - SRP_IU_TSK_MGMT: SRP_TSK_MGMT_SQ_SIZE.
1776 * - SRP_IU_RSP: 1, since a conforming SRP target never sends more than
1777 * one unanswered SRP request to an initiator.
1778 */
1779 static struct srp_iu *__srp_get_tx_iu(struct srp_rdma_ch *ch,
1780 enum srp_iu_type iu_type)
1781 {
1782 struct srp_target_port *target = ch->target;
1783 s32 rsv = (iu_type == SRP_IU_TSK_MGMT) ? 0 : SRP_TSK_MGMT_SQ_SIZE;
1784 struct srp_iu *iu;
1785
1786 ib_process_cq_direct(ch->send_cq, -1);
1787
1788 if (list_empty(&ch->free_tx))
1789 return NULL;
1790
1791 /* Initiator responses to target requests do not consume credits */
1792 if (iu_type != SRP_IU_RSP) {
1793 if (ch->req_lim <= rsv) {
1794 ++target->zero_req_lim;
1795 return NULL;
1796 }
1797
1798 --ch->req_lim;
1799 }
1800
1801 iu = list_first_entry(&ch->free_tx, struct srp_iu, list);
1802 list_del(&iu->list);
1803 return iu;
1804 }
1805
1806 static void srp_send_done(struct ib_cq *cq, struct ib_wc *wc)
1807 {
1808 struct srp_iu *iu = container_of(wc->wr_cqe, struct srp_iu, cqe);
1809 struct srp_rdma_ch *ch = cq->cq_context;
1810
1811 if (unlikely(wc->status != IB_WC_SUCCESS)) {
1812 srp_handle_qp_err(cq, wc, "SEND");
1813 return;
1814 }
1815
1816 list_add(&iu->list, &ch->free_tx);
1817 }
1818
1819 static int srp_post_send(struct srp_rdma_ch *ch, struct srp_iu *iu, int len)
1820 {
1821 struct srp_target_port *target = ch->target;
1822 struct ib_sge list;
1823 struct ib_send_wr wr, *bad_wr;
1824
1825 list.addr = iu->dma;
1826 list.length = len;
1827 list.lkey = target->lkey;
1828
1829 iu->cqe.done = srp_send_done;
1830
1831 wr.next = NULL;
1832 wr.wr_cqe = &iu->cqe;
1833 wr.sg_list = &list;
1834 wr.num_sge = 1;
1835 wr.opcode = IB_WR_SEND;
1836 wr.send_flags = IB_SEND_SIGNALED;
1837
1838 return ib_post_send(ch->qp, &wr, &bad_wr);
1839 }
1840
1841 static int srp_post_recv(struct srp_rdma_ch *ch, struct srp_iu *iu)
1842 {
1843 struct srp_target_port *target = ch->target;
1844 struct ib_recv_wr wr, *bad_wr;
1845 struct ib_sge list;
1846
1847 list.addr = iu->dma;
1848 list.length = iu->size;
1849 list.lkey = target->lkey;
1850
1851 iu->cqe.done = srp_recv_done;
1852
1853 wr.next = NULL;
1854 wr.wr_cqe = &iu->cqe;
1855 wr.sg_list = &list;
1856 wr.num_sge = 1;
1857
1858 return ib_post_recv(ch->qp, &wr, &bad_wr);
1859 }
1860
1861 static void srp_process_rsp(struct srp_rdma_ch *ch, struct srp_rsp *rsp)
1862 {
1863 struct srp_target_port *target = ch->target;
1864 struct srp_request *req;
1865 struct scsi_cmnd *scmnd;
1866 unsigned long flags;
1867
1868 if (unlikely(rsp->tag & SRP_TAG_TSK_MGMT)) {
1869 spin_lock_irqsave(&ch->lock, flags);
1870 ch->req_lim += be32_to_cpu(rsp->req_lim_delta);
1871 spin_unlock_irqrestore(&ch->lock, flags);
1872
1873 ch->tsk_mgmt_status = -1;
1874 if (be32_to_cpu(rsp->resp_data_len) >= 4)
1875 ch->tsk_mgmt_status = rsp->data[3];
1876 complete(&ch->tsk_mgmt_done);
1877 } else {
1878 scmnd = scsi_host_find_tag(target->scsi_host, rsp->tag);
1879 if (scmnd) {
1880 req = (void *)scmnd->host_scribble;
1881 scmnd = srp_claim_req(ch, req, NULL, scmnd);
1882 }
1883 if (!scmnd) {
1884 shost_printk(KERN_ERR, target->scsi_host,
1885 "Null scmnd for RSP w/tag %#016llx received on ch %td / QP %#x\n",
1886 rsp->tag, ch - target->ch, ch->qp->qp_num);
1887
1888 spin_lock_irqsave(&ch->lock, flags);
1889 ch->req_lim += be32_to_cpu(rsp->req_lim_delta);
1890 spin_unlock_irqrestore(&ch->lock, flags);
1891
1892 return;
1893 }
1894 scmnd->result = rsp->status;
1895
1896 if (rsp->flags & SRP_RSP_FLAG_SNSVALID) {
1897 memcpy(scmnd->sense_buffer, rsp->data +
1898 be32_to_cpu(rsp->resp_data_len),
1899 min_t(int, be32_to_cpu(rsp->sense_data_len),
1900 SCSI_SENSE_BUFFERSIZE));
1901 }
1902
1903 if (unlikely(rsp->flags & SRP_RSP_FLAG_DIUNDER))
1904 scsi_set_resid(scmnd, be32_to_cpu(rsp->data_in_res_cnt));
1905 else if (unlikely(rsp->flags & SRP_RSP_FLAG_DIOVER))
1906 scsi_set_resid(scmnd, -be32_to_cpu(rsp->data_in_res_cnt));
1907 else if (unlikely(rsp->flags & SRP_RSP_FLAG_DOUNDER))
1908 scsi_set_resid(scmnd, be32_to_cpu(rsp->data_out_res_cnt));
1909 else if (unlikely(rsp->flags & SRP_RSP_FLAG_DOOVER))
1910 scsi_set_resid(scmnd, -be32_to_cpu(rsp->data_out_res_cnt));
1911
1912 srp_free_req(ch, req, scmnd,
1913 be32_to_cpu(rsp->req_lim_delta));
1914
1915 scmnd->host_scribble = NULL;
1916 scmnd->scsi_done(scmnd);
1917 }
1918 }
1919
1920 static int srp_response_common(struct srp_rdma_ch *ch, s32 req_delta,
1921 void *rsp, int len)
1922 {
1923 struct srp_target_port *target = ch->target;
1924 struct ib_device *dev = target->srp_host->srp_dev->dev;
1925 unsigned long flags;
1926 struct srp_iu *iu;
1927 int err;
1928
1929 spin_lock_irqsave(&ch->lock, flags);
1930 ch->req_lim += req_delta;
1931 iu = __srp_get_tx_iu(ch, SRP_IU_RSP);
1932 spin_unlock_irqrestore(&ch->lock, flags);
1933
1934 if (!iu) {
1935 shost_printk(KERN_ERR, target->scsi_host, PFX
1936 "no IU available to send response\n");
1937 return 1;
1938 }
1939
1940 ib_dma_sync_single_for_cpu(dev, iu->dma, len, DMA_TO_DEVICE);
1941 memcpy(iu->buf, rsp, len);
1942 ib_dma_sync_single_for_device(dev, iu->dma, len, DMA_TO_DEVICE);
1943
1944 err = srp_post_send(ch, iu, len);
1945 if (err) {
1946 shost_printk(KERN_ERR, target->scsi_host, PFX
1947 "unable to post response: %d\n", err);
1948 srp_put_tx_iu(ch, iu, SRP_IU_RSP);
1949 }
1950
1951 return err;
1952 }
1953
1954 static void srp_process_cred_req(struct srp_rdma_ch *ch,
1955 struct srp_cred_req *req)
1956 {
1957 struct srp_cred_rsp rsp = {
1958 .opcode = SRP_CRED_RSP,
1959 .tag = req->tag,
1960 };
1961 s32 delta = be32_to_cpu(req->req_lim_delta);
1962
1963 if (srp_response_common(ch, delta, &rsp, sizeof(rsp)))
1964 shost_printk(KERN_ERR, ch->target->scsi_host, PFX
1965 "problems processing SRP_CRED_REQ\n");
1966 }
1967
1968 static void srp_process_aer_req(struct srp_rdma_ch *ch,
1969 struct srp_aer_req *req)
1970 {
1971 struct srp_target_port *target = ch->target;
1972 struct srp_aer_rsp rsp = {
1973 .opcode = SRP_AER_RSP,
1974 .tag = req->tag,
1975 };
1976 s32 delta = be32_to_cpu(req->req_lim_delta);
1977
1978 shost_printk(KERN_ERR, target->scsi_host, PFX
1979 "ignoring AER for LUN %llu\n", scsilun_to_int(&req->lun));
1980
1981 if (srp_response_common(ch, delta, &rsp, sizeof(rsp)))
1982 shost_printk(KERN_ERR, target->scsi_host, PFX
1983 "problems processing SRP_AER_REQ\n");
1984 }
1985
1986 static void srp_recv_done(struct ib_cq *cq, struct ib_wc *wc)
1987 {
1988 struct srp_iu *iu = container_of(wc->wr_cqe, struct srp_iu, cqe);
1989 struct srp_rdma_ch *ch = cq->cq_context;
1990 struct srp_target_port *target = ch->target;
1991 struct ib_device *dev = target->srp_host->srp_dev->dev;
1992 int res;
1993 u8 opcode;
1994
1995 if (unlikely(wc->status != IB_WC_SUCCESS)) {
1996 srp_handle_qp_err(cq, wc, "RECV");
1997 return;
1998 }
1999
2000 ib_dma_sync_single_for_cpu(dev, iu->dma, ch->max_ti_iu_len,
2001 DMA_FROM_DEVICE);
2002
2003 opcode = *(u8 *) iu->buf;
2004
2005 if (0) {
2006 shost_printk(KERN_ERR, target->scsi_host,
2007 PFX "recv completion, opcode 0x%02x\n", opcode);
2008 print_hex_dump(KERN_ERR, "", DUMP_PREFIX_OFFSET, 8, 1,
2009 iu->buf, wc->byte_len, true);
2010 }
2011
2012 switch (opcode) {
2013 case SRP_RSP:
2014 srp_process_rsp(ch, iu->buf);
2015 break;
2016
2017 case SRP_CRED_REQ:
2018 srp_process_cred_req(ch, iu->buf);
2019 break;
2020
2021 case SRP_AER_REQ:
2022 srp_process_aer_req(ch, iu->buf);
2023 break;
2024
2025 case SRP_T_LOGOUT:
2026 /* XXX Handle target logout */
2027 shost_printk(KERN_WARNING, target->scsi_host,
2028 PFX "Got target logout request\n");
2029 break;
2030
2031 default:
2032 shost_printk(KERN_WARNING, target->scsi_host,
2033 PFX "Unhandled SRP opcode 0x%02x\n", opcode);
2034 break;
2035 }
2036
2037 ib_dma_sync_single_for_device(dev, iu->dma, ch->max_ti_iu_len,
2038 DMA_FROM_DEVICE);
2039
2040 res = srp_post_recv(ch, iu);
2041 if (res != 0)
2042 shost_printk(KERN_ERR, target->scsi_host,
2043 PFX "Recv failed with error code %d\n", res);
2044 }
2045
2046 /**
2047 * srp_tl_err_work() - handle a transport layer error
2048 * @work: Work structure embedded in an SRP target port.
2049 *
2050 * Note: This function may get invoked before the rport has been created,
2051 * hence the target->rport test.
2052 */
2053 static void srp_tl_err_work(struct work_struct *work)
2054 {
2055 struct srp_target_port *target;
2056
2057 target = container_of(work, struct srp_target_port, tl_err_work);
2058 if (target->rport)
2059 srp_start_tl_fail_timers(target->rport);
2060 }
2061
2062 static void srp_handle_qp_err(struct ib_cq *cq, struct ib_wc *wc,
2063 const char *opname)
2064 {
2065 struct srp_rdma_ch *ch = cq->cq_context;
2066 struct srp_target_port *target = ch->target;
2067
2068 if (ch->connected && !target->qp_in_error) {
2069 shost_printk(KERN_ERR, target->scsi_host,
2070 PFX "failed %s status %s (%d) for CQE %p\n",
2071 opname, ib_wc_status_msg(wc->status), wc->status,
2072 wc->wr_cqe);
2073 queue_work(system_long_wq, &target->tl_err_work);
2074 }
2075 target->qp_in_error = true;
2076 }
2077
2078 static int srp_queuecommand(struct Scsi_Host *shost, struct scsi_cmnd *scmnd)
2079 {
2080 struct srp_target_port *target = host_to_target(shost);
2081 struct srp_rport *rport = target->rport;
2082 struct srp_rdma_ch *ch;
2083 struct srp_request *req;
2084 struct srp_iu *iu;
2085 struct srp_cmd *cmd;
2086 struct ib_device *dev;
2087 unsigned long flags;
2088 u32 tag;
2089 u16 idx;
2090 int len, ret;
2091 const bool in_scsi_eh = !in_interrupt() && current == shost->ehandler;
2092
2093 /*
2094 * The SCSI EH thread is the only context from which srp_queuecommand()
2095 * can get invoked for blocked devices (SDEV_BLOCK /
2096 * SDEV_CREATED_BLOCK). Avoid racing with srp_reconnect_rport() by
2097 * locking the rport mutex if invoked from inside the SCSI EH.
2098 */
2099 if (in_scsi_eh)
2100 mutex_lock(&rport->mutex);
2101
2102 scmnd->result = srp_chkready(target->rport);
2103 if (unlikely(scmnd->result))
2104 goto err;
2105
2106 WARN_ON_ONCE(scmnd->request->tag < 0);
2107 tag = blk_mq_unique_tag(scmnd->request);
2108 ch = &target->ch[blk_mq_unique_tag_to_hwq(tag)];
2109 idx = blk_mq_unique_tag_to_tag(tag);
2110 WARN_ONCE(idx >= target->req_ring_size, "%s: tag %#x: idx %d >= %d\n",
2111 dev_name(&shost->shost_gendev), tag, idx,
2112 target->req_ring_size);
2113
2114 spin_lock_irqsave(&ch->lock, flags);
2115 iu = __srp_get_tx_iu(ch, SRP_IU_CMD);
2116 spin_unlock_irqrestore(&ch->lock, flags);
2117
2118 if (!iu)
2119 goto err;
2120
2121 req = &ch->req_ring[idx];
2122 dev = target->srp_host->srp_dev->dev;
2123 ib_dma_sync_single_for_cpu(dev, iu->dma, target->max_iu_len,
2124 DMA_TO_DEVICE);
2125
2126 scmnd->host_scribble = (void *) req;
2127
2128 cmd = iu->buf;
2129 memset(cmd, 0, sizeof *cmd);
2130
2131 cmd->opcode = SRP_CMD;
2132 int_to_scsilun(scmnd->device->lun, &cmd->lun);
2133 cmd->tag = tag;
2134 memcpy(cmd->cdb, scmnd->cmnd, scmnd->cmd_len);
2135
2136 req->scmnd = scmnd;
2137 req->cmd = iu;
2138
2139 len = srp_map_data(scmnd, ch, req);
2140 if (len < 0) {
2141 shost_printk(KERN_ERR, target->scsi_host,
2142 PFX "Failed to map data (%d)\n", len);
2143 /*
2144 * If we ran out of memory descriptors (-ENOMEM) because an
2145 * application is queuing many requests with more than
2146 * max_pages_per_mr sg-list elements, tell the SCSI mid-layer
2147 * to reduce queue depth temporarily.
2148 */
2149 scmnd->result = len == -ENOMEM ?
2150 DID_OK << 16 | QUEUE_FULL << 1 : DID_ERROR << 16;
2151 goto err_iu;
2152 }
2153
2154 ib_dma_sync_single_for_device(dev, iu->dma, target->max_iu_len,
2155 DMA_TO_DEVICE);
2156
2157 if (srp_post_send(ch, iu, len)) {
2158 shost_printk(KERN_ERR, target->scsi_host, PFX "Send failed\n");
2159 goto err_unmap;
2160 }
2161
2162 ret = 0;
2163
2164 unlock_rport:
2165 if (in_scsi_eh)
2166 mutex_unlock(&rport->mutex);
2167
2168 return ret;
2169
2170 err_unmap:
2171 srp_unmap_data(scmnd, ch, req);
2172
2173 err_iu:
2174 srp_put_tx_iu(ch, iu, SRP_IU_CMD);
2175
2176 /*
2177 * Avoid that the loops that iterate over the request ring can
2178 * encounter a dangling SCSI command pointer.
2179 */
2180 req->scmnd = NULL;
2181
2182 err:
2183 if (scmnd->result) {
2184 scmnd->scsi_done(scmnd);
2185 ret = 0;
2186 } else {
2187 ret = SCSI_MLQUEUE_HOST_BUSY;
2188 }
2189
2190 goto unlock_rport;
2191 }
2192
2193 /*
2194 * Note: the resources allocated in this function are freed in
2195 * srp_free_ch_ib().
2196 */
2197 static int srp_alloc_iu_bufs(struct srp_rdma_ch *ch)
2198 {
2199 struct srp_target_port *target = ch->target;
2200 int i;
2201
2202 ch->rx_ring = kcalloc(target->queue_size, sizeof(*ch->rx_ring),
2203 GFP_KERNEL);
2204 if (!ch->rx_ring)
2205 goto err_no_ring;
2206 ch->tx_ring = kcalloc(target->queue_size, sizeof(*ch->tx_ring),
2207 GFP_KERNEL);
2208 if (!ch->tx_ring)
2209 goto err_no_ring;
2210
2211 for (i = 0; i < target->queue_size; ++i) {
2212 ch->rx_ring[i] = srp_alloc_iu(target->srp_host,
2213 ch->max_ti_iu_len,
2214 GFP_KERNEL, DMA_FROM_DEVICE);
2215 if (!ch->rx_ring[i])
2216 goto err;
2217 }
2218
2219 for (i = 0; i < target->queue_size; ++i) {
2220 ch->tx_ring[i] = srp_alloc_iu(target->srp_host,
2221 target->max_iu_len,
2222 GFP_KERNEL, DMA_TO_DEVICE);
2223 if (!ch->tx_ring[i])
2224 goto err;
2225
2226 list_add(&ch->tx_ring[i]->list, &ch->free_tx);
2227 }
2228
2229 return 0;
2230
2231 err:
2232 for (i = 0; i < target->queue_size; ++i) {
2233 srp_free_iu(target->srp_host, ch->rx_ring[i]);
2234 srp_free_iu(target->srp_host, ch->tx_ring[i]);
2235 }
2236
2237
2238 err_no_ring:
2239 kfree(ch->tx_ring);
2240 ch->tx_ring = NULL;
2241 kfree(ch->rx_ring);
2242 ch->rx_ring = NULL;
2243
2244 return -ENOMEM;
2245 }
2246
2247 static uint32_t srp_compute_rq_tmo(struct ib_qp_attr *qp_attr, int attr_mask)
2248 {
2249 uint64_t T_tr_ns, max_compl_time_ms;
2250 uint32_t rq_tmo_jiffies;
2251
2252 /*
2253 * According to section 11.2.4.2 in the IBTA spec (Modify Queue Pair,
2254 * table 91), both the QP timeout and the retry count have to be set
2255 * for RC QP's during the RTR to RTS transition.
2256 */
2257 WARN_ON_ONCE((attr_mask & (IB_QP_TIMEOUT | IB_QP_RETRY_CNT)) !=
2258 (IB_QP_TIMEOUT | IB_QP_RETRY_CNT));
2259
2260 /*
2261 * Set target->rq_tmo_jiffies to one second more than the largest time
2262 * it can take before an error completion is generated. See also
2263 * C9-140..142 in the IBTA spec for more information about how to
2264 * convert the QP Local ACK Timeout value to nanoseconds.
2265 */
2266 T_tr_ns = 4096 * (1ULL << qp_attr->timeout);
2267 max_compl_time_ms = qp_attr->retry_cnt * 4 * T_tr_ns;
2268 do_div(max_compl_time_ms, NSEC_PER_MSEC);
2269 rq_tmo_jiffies = msecs_to_jiffies(max_compl_time_ms + 1000);
2270
2271 return rq_tmo_jiffies;
2272 }
2273
2274 static void srp_cm_rep_handler(struct ib_cm_id *cm_id,
2275 const struct srp_login_rsp *lrsp,
2276 struct srp_rdma_ch *ch)
2277 {
2278 struct srp_target_port *target = ch->target;
2279 struct ib_qp_attr *qp_attr = NULL;
2280 int attr_mask = 0;
2281 int ret;
2282 int i;
2283
2284 if (lrsp->opcode == SRP_LOGIN_RSP) {
2285 ch->max_ti_iu_len = be32_to_cpu(lrsp->max_ti_iu_len);
2286 ch->req_lim = be32_to_cpu(lrsp->req_lim_delta);
2287
2288 /*
2289 * Reserve credits for task management so we don't
2290 * bounce requests back to the SCSI mid-layer.
2291 */
2292 target->scsi_host->can_queue
2293 = min(ch->req_lim - SRP_TSK_MGMT_SQ_SIZE,
2294 target->scsi_host->can_queue);
2295 target->scsi_host->cmd_per_lun
2296 = min_t(int, target->scsi_host->can_queue,
2297 target->scsi_host->cmd_per_lun);
2298 } else {
2299 shost_printk(KERN_WARNING, target->scsi_host,
2300 PFX "Unhandled RSP opcode %#x\n", lrsp->opcode);
2301 ret = -ECONNRESET;
2302 goto error;
2303 }
2304
2305 if (!ch->rx_ring) {
2306 ret = srp_alloc_iu_bufs(ch);
2307 if (ret)
2308 goto error;
2309 }
2310
2311 ret = -ENOMEM;
2312 qp_attr = kmalloc(sizeof *qp_attr, GFP_KERNEL);
2313 if (!qp_attr)
2314 goto error;
2315
2316 qp_attr->qp_state = IB_QPS_RTR;
2317 ret = ib_cm_init_qp_attr(cm_id, qp_attr, &attr_mask);
2318 if (ret)
2319 goto error_free;
2320
2321 ret = ib_modify_qp(ch->qp, qp_attr, attr_mask);
2322 if (ret)
2323 goto error_free;
2324
2325 for (i = 0; i < target->queue_size; i++) {
2326 struct srp_iu *iu = ch->rx_ring[i];
2327
2328 ret = srp_post_recv(ch, iu);
2329 if (ret)
2330 goto error_free;
2331 }
2332
2333 qp_attr->qp_state = IB_QPS_RTS;
2334 ret = ib_cm_init_qp_attr(cm_id, qp_attr, &attr_mask);
2335 if (ret)
2336 goto error_free;
2337
2338 target->rq_tmo_jiffies = srp_compute_rq_tmo(qp_attr, attr_mask);
2339
2340 ret = ib_modify_qp(ch->qp, qp_attr, attr_mask);
2341 if (ret)
2342 goto error_free;
2343
2344 ret = ib_send_cm_rtu(cm_id, NULL, 0);
2345
2346 error_free:
2347 kfree(qp_attr);
2348
2349 error:
2350 ch->status = ret;
2351 }
2352
2353 static void srp_cm_rej_handler(struct ib_cm_id *cm_id,
2354 struct ib_cm_event *event,
2355 struct srp_rdma_ch *ch)
2356 {
2357 struct srp_target_port *target = ch->target;
2358 struct Scsi_Host *shost = target->scsi_host;
2359 struct ib_class_port_info *cpi;
2360 int opcode;
2361
2362 switch (event->param.rej_rcvd.reason) {
2363 case IB_CM_REJ_PORT_CM_REDIRECT:
2364 cpi = event->param.rej_rcvd.ari;
2365 ch->path.dlid = cpi->redirect_lid;
2366 ch->path.pkey = cpi->redirect_pkey;
2367 cm_id->remote_cm_qpn = be32_to_cpu(cpi->redirect_qp) & 0x00ffffff;
2368 memcpy(ch->path.dgid.raw, cpi->redirect_gid, 16);
2369
2370 ch->status = ch->path.dlid ?
2371 SRP_DLID_REDIRECT : SRP_PORT_REDIRECT;
2372 break;
2373
2374 case IB_CM_REJ_PORT_REDIRECT:
2375 if (srp_target_is_topspin(target)) {
2376 /*
2377 * Topspin/Cisco SRP gateways incorrectly send
2378 * reject reason code 25 when they mean 24
2379 * (port redirect).
2380 */
2381 memcpy(ch->path.dgid.raw,
2382 event->param.rej_rcvd.ari, 16);
2383
2384 shost_printk(KERN_DEBUG, shost,
2385 PFX "Topspin/Cisco redirect to target port GID %016llx%016llx\n",
2386 be64_to_cpu(ch->path.dgid.global.subnet_prefix),
2387 be64_to_cpu(ch->path.dgid.global.interface_id));
2388
2389 ch->status = SRP_PORT_REDIRECT;
2390 } else {
2391 shost_printk(KERN_WARNING, shost,
2392 " REJ reason: IB_CM_REJ_PORT_REDIRECT\n");
2393 ch->status = -ECONNRESET;
2394 }
2395 break;
2396
2397 case IB_CM_REJ_DUPLICATE_LOCAL_COMM_ID:
2398 shost_printk(KERN_WARNING, shost,
2399 " REJ reason: IB_CM_REJ_DUPLICATE_LOCAL_COMM_ID\n");
2400 ch->status = -ECONNRESET;
2401 break;
2402
2403 case IB_CM_REJ_CONSUMER_DEFINED:
2404 opcode = *(u8 *) event->private_data;
2405 if (opcode == SRP_LOGIN_REJ) {
2406 struct srp_login_rej *rej = event->private_data;
2407 u32 reason = be32_to_cpu(rej->reason);
2408
2409 if (reason == SRP_LOGIN_REJ_REQ_IT_IU_LENGTH_TOO_LARGE)
2410 shost_printk(KERN_WARNING, shost,
2411 PFX "SRP_LOGIN_REJ: requested max_it_iu_len too large\n");
2412 else
2413 shost_printk(KERN_WARNING, shost, PFX
2414 "SRP LOGIN from %pI6 to %pI6 REJECTED, reason 0x%08x\n",
2415 target->sgid.raw,
2416 target->orig_dgid.raw, reason);
2417 } else
2418 shost_printk(KERN_WARNING, shost,
2419 " REJ reason: IB_CM_REJ_CONSUMER_DEFINED,"
2420 " opcode 0x%02x\n", opcode);
2421 ch->status = -ECONNRESET;
2422 break;
2423
2424 case IB_CM_REJ_STALE_CONN:
2425 shost_printk(KERN_WARNING, shost, " REJ reason: stale connection\n");
2426 ch->status = SRP_STALE_CONN;
2427 break;
2428
2429 default:
2430 shost_printk(KERN_WARNING, shost, " REJ reason 0x%x\n",
2431 event->param.rej_rcvd.reason);
2432 ch->status = -ECONNRESET;
2433 }
2434 }
2435
2436 static int srp_cm_handler(struct ib_cm_id *cm_id, struct ib_cm_event *event)
2437 {
2438 struct srp_rdma_ch *ch = cm_id->context;
2439 struct srp_target_port *target = ch->target;
2440 int comp = 0;
2441
2442 switch (event->event) {
2443 case IB_CM_REQ_ERROR:
2444 shost_printk(KERN_DEBUG, target->scsi_host,
2445 PFX "Sending CM REQ failed\n");
2446 comp = 1;
2447 ch->status = -ECONNRESET;
2448 break;
2449
2450 case IB_CM_REP_RECEIVED:
2451 comp = 1;
2452 srp_cm_rep_handler(cm_id, event->private_data, ch);
2453 break;
2454
2455 case IB_CM_REJ_RECEIVED:
2456 shost_printk(KERN_DEBUG, target->scsi_host, PFX "REJ received\n");
2457 comp = 1;
2458
2459 srp_cm_rej_handler(cm_id, event, ch);
2460 break;
2461
2462 case IB_CM_DREQ_RECEIVED:
2463 shost_printk(KERN_WARNING, target->scsi_host,
2464 PFX "DREQ received - connection closed\n");
2465 ch->connected = false;
2466 if (ib_send_cm_drep(cm_id, NULL, 0))
2467 shost_printk(KERN_ERR, target->scsi_host,
2468 PFX "Sending CM DREP failed\n");
2469 queue_work(system_long_wq, &target->tl_err_work);
2470 break;
2471
2472 case IB_CM_TIMEWAIT_EXIT:
2473 shost_printk(KERN_ERR, target->scsi_host,
2474 PFX "connection closed\n");
2475 comp = 1;
2476
2477 ch->status = 0;
2478 break;
2479
2480 case IB_CM_MRA_RECEIVED:
2481 case IB_CM_DREQ_ERROR:
2482 case IB_CM_DREP_RECEIVED:
2483 break;
2484
2485 default:
2486 shost_printk(KERN_WARNING, target->scsi_host,
2487 PFX "Unhandled CM event %d\n", event->event);
2488 break;
2489 }
2490
2491 if (comp)
2492 complete(&ch->done);
2493
2494 return 0;
2495 }
2496
2497 /**
2498 * srp_change_queue_depth - setting device queue depth
2499 * @sdev: scsi device struct
2500 * @qdepth: requested queue depth
2501 *
2502 * Returns queue depth.
2503 */
2504 static int
2505 srp_change_queue_depth(struct scsi_device *sdev, int qdepth)
2506 {
2507 if (!sdev->tagged_supported)
2508 qdepth = 1;
2509 return scsi_change_queue_depth(sdev, qdepth);
2510 }
2511
2512 static int srp_send_tsk_mgmt(struct srp_rdma_ch *ch, u64 req_tag, u64 lun,
2513 u8 func)
2514 {
2515 struct srp_target_port *target = ch->target;
2516 struct srp_rport *rport = target->rport;
2517 struct ib_device *dev = target->srp_host->srp_dev->dev;
2518 struct srp_iu *iu;
2519 struct srp_tsk_mgmt *tsk_mgmt;
2520
2521 if (!ch->connected || target->qp_in_error)
2522 return -1;
2523
2524 init_completion(&ch->tsk_mgmt_done);
2525
2526 /*
2527 * Lock the rport mutex to avoid that srp_create_ch_ib() is
2528 * invoked while a task management function is being sent.
2529 */
2530 mutex_lock(&rport->mutex);
2531 spin_lock_irq(&ch->lock);
2532 iu = __srp_get_tx_iu(ch, SRP_IU_TSK_MGMT);
2533 spin_unlock_irq(&ch->lock);
2534
2535 if (!iu) {
2536 mutex_unlock(&rport->mutex);
2537
2538 return -1;
2539 }
2540
2541 ib_dma_sync_single_for_cpu(dev, iu->dma, sizeof *tsk_mgmt,
2542 DMA_TO_DEVICE);
2543 tsk_mgmt = iu->buf;
2544 memset(tsk_mgmt, 0, sizeof *tsk_mgmt);
2545
2546 tsk_mgmt->opcode = SRP_TSK_MGMT;
2547 int_to_scsilun(lun, &tsk_mgmt->lun);
2548 tsk_mgmt->tag = req_tag | SRP_TAG_TSK_MGMT;
2549 tsk_mgmt->tsk_mgmt_func = func;
2550 tsk_mgmt->task_tag = req_tag;
2551
2552 ib_dma_sync_single_for_device(dev, iu->dma, sizeof *tsk_mgmt,
2553 DMA_TO_DEVICE);
2554 if (srp_post_send(ch, iu, sizeof(*tsk_mgmt))) {
2555 srp_put_tx_iu(ch, iu, SRP_IU_TSK_MGMT);
2556 mutex_unlock(&rport->mutex);
2557
2558 return -1;
2559 }
2560 mutex_unlock(&rport->mutex);
2561
2562 if (!wait_for_completion_timeout(&ch->tsk_mgmt_done,
2563 msecs_to_jiffies(SRP_ABORT_TIMEOUT_MS)))
2564 return -1;
2565
2566 return 0;
2567 }
2568
2569 static int srp_abort(struct scsi_cmnd *scmnd)
2570 {
2571 struct srp_target_port *target = host_to_target(scmnd->device->host);
2572 struct srp_request *req = (struct srp_request *) scmnd->host_scribble;
2573 u32 tag;
2574 u16 ch_idx;
2575 struct srp_rdma_ch *ch;
2576 int ret;
2577
2578 shost_printk(KERN_ERR, target->scsi_host, "SRP abort called\n");
2579
2580 if (!req)
2581 return SUCCESS;
2582 tag = blk_mq_unique_tag(scmnd->request);
2583 ch_idx = blk_mq_unique_tag_to_hwq(tag);
2584 if (WARN_ON_ONCE(ch_idx >= target->ch_count))
2585 return SUCCESS;
2586 ch = &target->ch[ch_idx];
2587 if (!srp_claim_req(ch, req, NULL, scmnd))
2588 return SUCCESS;
2589 shost_printk(KERN_ERR, target->scsi_host,
2590 "Sending SRP abort for tag %#x\n", tag);
2591 if (srp_send_tsk_mgmt(ch, tag, scmnd->device->lun,
2592 SRP_TSK_ABORT_TASK) == 0)
2593 ret = SUCCESS;
2594 else if (target->rport->state == SRP_RPORT_LOST)
2595 ret = FAST_IO_FAIL;
2596 else
2597 ret = FAILED;
2598 srp_free_req(ch, req, scmnd, 0);
2599 scmnd->result = DID_ABORT << 16;
2600 scmnd->scsi_done(scmnd);
2601
2602 return ret;
2603 }
2604
2605 static int srp_reset_device(struct scsi_cmnd *scmnd)
2606 {
2607 struct srp_target_port *target = host_to_target(scmnd->device->host);
2608 struct srp_rdma_ch *ch;
2609 int i;
2610
2611 shost_printk(KERN_ERR, target->scsi_host, "SRP reset_device called\n");
2612
2613 ch = &target->ch[0];
2614 if (srp_send_tsk_mgmt(ch, SRP_TAG_NO_REQ, scmnd->device->lun,
2615 SRP_TSK_LUN_RESET))
2616 return FAILED;
2617 if (ch->tsk_mgmt_status)
2618 return FAILED;
2619
2620 for (i = 0; i < target->ch_count; i++) {
2621 ch = &target->ch[i];
2622 for (i = 0; i < target->req_ring_size; ++i) {
2623 struct srp_request *req = &ch->req_ring[i];
2624
2625 srp_finish_req(ch, req, scmnd->device, DID_RESET << 16);
2626 }
2627 }
2628
2629 return SUCCESS;
2630 }
2631
2632 static int srp_reset_host(struct scsi_cmnd *scmnd)
2633 {
2634 struct srp_target_port *target = host_to_target(scmnd->device->host);
2635
2636 shost_printk(KERN_ERR, target->scsi_host, PFX "SRP reset_host called\n");
2637
2638 return srp_reconnect_rport(target->rport) == 0 ? SUCCESS : FAILED;
2639 }
2640
2641 static int srp_slave_alloc(struct scsi_device *sdev)
2642 {
2643 struct Scsi_Host *shost = sdev->host;
2644 struct srp_target_port *target = host_to_target(shost);
2645 struct srp_device *srp_dev = target->srp_host->srp_dev;
2646 struct ib_device *ibdev = srp_dev->dev;
2647
2648 if (!(ibdev->attrs.device_cap_flags & IB_DEVICE_SG_GAPS_REG))
2649 blk_queue_virt_boundary(sdev->request_queue,
2650 ~srp_dev->mr_page_mask);
2651
2652 return 0;
2653 }
2654
2655 static int srp_slave_configure(struct scsi_device *sdev)
2656 {
2657 struct Scsi_Host *shost = sdev->host;
2658 struct srp_target_port *target = host_to_target(shost);
2659 struct request_queue *q = sdev->request_queue;
2660 unsigned long timeout;
2661
2662 if (sdev->type == TYPE_DISK) {
2663 timeout = max_t(unsigned, 30 * HZ, target->rq_tmo_jiffies);
2664 blk_queue_rq_timeout(q, timeout);
2665 }
2666
2667 return 0;
2668 }
2669
2670 static ssize_t show_id_ext(struct device *dev, struct device_attribute *attr,
2671 char *buf)
2672 {
2673 struct srp_target_port *target = host_to_target(class_to_shost(dev));
2674
2675 return sprintf(buf, "0x%016llx\n", be64_to_cpu(target->id_ext));
2676 }
2677
2678 static ssize_t show_ioc_guid(struct device *dev, struct device_attribute *attr,
2679 char *buf)
2680 {
2681 struct srp_target_port *target = host_to_target(class_to_shost(dev));
2682
2683 return sprintf(buf, "0x%016llx\n", be64_to_cpu(target->ioc_guid));
2684 }
2685
2686 static ssize_t show_service_id(struct device *dev,
2687 struct device_attribute *attr, char *buf)
2688 {
2689 struct srp_target_port *target = host_to_target(class_to_shost(dev));
2690
2691 return sprintf(buf, "0x%016llx\n", be64_to_cpu(target->service_id));
2692 }
2693
2694 static ssize_t show_pkey(struct device *dev, struct device_attribute *attr,
2695 char *buf)
2696 {
2697 struct srp_target_port *target = host_to_target(class_to_shost(dev));
2698
2699 return sprintf(buf, "0x%04x\n", be16_to_cpu(target->pkey));
2700 }
2701
2702 static ssize_t show_sgid(struct device *dev, struct device_attribute *attr,
2703 char *buf)
2704 {
2705 struct srp_target_port *target = host_to_target(class_to_shost(dev));
2706
2707 return sprintf(buf, "%pI6\n", target->sgid.raw);
2708 }
2709
2710 static ssize_t show_dgid(struct device *dev, struct device_attribute *attr,
2711 char *buf)
2712 {
2713 struct srp_target_port *target = host_to_target(class_to_shost(dev));
2714 struct srp_rdma_ch *ch = &target->ch[0];
2715
2716 return sprintf(buf, "%pI6\n", ch->path.dgid.raw);
2717 }
2718
2719 static ssize_t show_orig_dgid(struct device *dev,
2720 struct device_attribute *attr, char *buf)
2721 {
2722 struct srp_target_port *target = host_to_target(class_to_shost(dev));
2723
2724 return sprintf(buf, "%pI6\n", target->orig_dgid.raw);
2725 }
2726
2727 static ssize_t show_req_lim(struct device *dev,
2728 struct device_attribute *attr, char *buf)
2729 {
2730 struct srp_target_port *target = host_to_target(class_to_shost(dev));
2731 struct srp_rdma_ch *ch;
2732 int i, req_lim = INT_MAX;
2733
2734 for (i = 0; i < target->ch_count; i++) {
2735 ch = &target->ch[i];
2736 req_lim = min(req_lim, ch->req_lim);
2737 }
2738 return sprintf(buf, "%d\n", req_lim);
2739 }
2740
2741 static ssize_t show_zero_req_lim(struct device *dev,
2742 struct device_attribute *attr, char *buf)
2743 {
2744 struct srp_target_port *target = host_to_target(class_to_shost(dev));
2745
2746 return sprintf(buf, "%d\n", target->zero_req_lim);
2747 }
2748
2749 static ssize_t show_local_ib_port(struct device *dev,
2750 struct device_attribute *attr, char *buf)
2751 {
2752 struct srp_target_port *target = host_to_target(class_to_shost(dev));
2753
2754 return sprintf(buf, "%d\n", target->srp_host->port);
2755 }
2756
2757 static ssize_t show_local_ib_device(struct device *dev,
2758 struct device_attribute *attr, char *buf)
2759 {
2760 struct srp_target_port *target = host_to_target(class_to_shost(dev));
2761
2762 return sprintf(buf, "%s\n", target->srp_host->srp_dev->dev->name);
2763 }
2764
2765 static ssize_t show_ch_count(struct device *dev, struct device_attribute *attr,
2766 char *buf)
2767 {
2768 struct srp_target_port *target = host_to_target(class_to_shost(dev));
2769
2770 return sprintf(buf, "%d\n", target->ch_count);
2771 }
2772
2773 static ssize_t show_comp_vector(struct device *dev,
2774 struct device_attribute *attr, char *buf)
2775 {
2776 struct srp_target_port *target = host_to_target(class_to_shost(dev));
2777
2778 return sprintf(buf, "%d\n", target->comp_vector);
2779 }
2780
2781 static ssize_t show_tl_retry_count(struct device *dev,
2782 struct device_attribute *attr, char *buf)
2783 {
2784 struct srp_target_port *target = host_to_target(class_to_shost(dev));
2785
2786 return sprintf(buf, "%d\n", target->tl_retry_count);
2787 }
2788
2789 static ssize_t show_cmd_sg_entries(struct device *dev,
2790 struct device_attribute *attr, char *buf)
2791 {
2792 struct srp_target_port *target = host_to_target(class_to_shost(dev));
2793
2794 return sprintf(buf, "%u\n", target->cmd_sg_cnt);
2795 }
2796
2797 static ssize_t show_allow_ext_sg(struct device *dev,
2798 struct device_attribute *attr, char *buf)
2799 {
2800 struct srp_target_port *target = host_to_target(class_to_shost(dev));
2801
2802 return sprintf(buf, "%s\n", target->allow_ext_sg ? "true" : "false");
2803 }
2804
2805 static DEVICE_ATTR(id_ext, S_IRUGO, show_id_ext, NULL);
2806 static DEVICE_ATTR(ioc_guid, S_IRUGO, show_ioc_guid, NULL);
2807 static DEVICE_ATTR(service_id, S_IRUGO, show_service_id, NULL);
2808 static DEVICE_ATTR(pkey, S_IRUGO, show_pkey, NULL);
2809 static DEVICE_ATTR(sgid, S_IRUGO, show_sgid, NULL);
2810 static DEVICE_ATTR(dgid, S_IRUGO, show_dgid, NULL);
2811 static DEVICE_ATTR(orig_dgid, S_IRUGO, show_orig_dgid, NULL);
2812 static DEVICE_ATTR(req_lim, S_IRUGO, show_req_lim, NULL);
2813 static DEVICE_ATTR(zero_req_lim, S_IRUGO, show_zero_req_lim, NULL);
2814 static DEVICE_ATTR(local_ib_port, S_IRUGO, show_local_ib_port, NULL);
2815 static DEVICE_ATTR(local_ib_device, S_IRUGO, show_local_ib_device, NULL);
2816 static DEVICE_ATTR(ch_count, S_IRUGO, show_ch_count, NULL);
2817 static DEVICE_ATTR(comp_vector, S_IRUGO, show_comp_vector, NULL);
2818 static DEVICE_ATTR(tl_retry_count, S_IRUGO, show_tl_retry_count, NULL);
2819 static DEVICE_ATTR(cmd_sg_entries, S_IRUGO, show_cmd_sg_entries, NULL);
2820 static DEVICE_ATTR(allow_ext_sg, S_IRUGO, show_allow_ext_sg, NULL);
2821
2822 static struct device_attribute *srp_host_attrs[] = {
2823 &dev_attr_id_ext,
2824 &dev_attr_ioc_guid,
2825 &dev_attr_service_id,
2826 &dev_attr_pkey,
2827 &dev_attr_sgid,
2828 &dev_attr_dgid,
2829 &dev_attr_orig_dgid,
2830 &dev_attr_req_lim,
2831 &dev_attr_zero_req_lim,
2832 &dev_attr_local_ib_port,
2833 &dev_attr_local_ib_device,
2834 &dev_attr_ch_count,
2835 &dev_attr_comp_vector,
2836 &dev_attr_tl_retry_count,
2837 &dev_attr_cmd_sg_entries,
2838 &dev_attr_allow_ext_sg,
2839 NULL
2840 };
2841
2842 static struct scsi_host_template srp_template = {
2843 .module = THIS_MODULE,
2844 .name = "InfiniBand SRP initiator",
2845 .proc_name = DRV_NAME,
2846 .slave_alloc = srp_slave_alloc,
2847 .slave_configure = srp_slave_configure,
2848 .info = srp_target_info,
2849 .queuecommand = srp_queuecommand,
2850 .change_queue_depth = srp_change_queue_depth,
2851 .eh_abort_handler = srp_abort,
2852 .eh_device_reset_handler = srp_reset_device,
2853 .eh_host_reset_handler = srp_reset_host,
2854 .skip_settle_delay = true,
2855 .sg_tablesize = SRP_DEF_SG_TABLESIZE,
2856 .can_queue = SRP_DEFAULT_CMD_SQ_SIZE,
2857 .this_id = -1,
2858 .cmd_per_lun = SRP_DEFAULT_CMD_SQ_SIZE,
2859 .use_clustering = ENABLE_CLUSTERING,
2860 .shost_attrs = srp_host_attrs,
2861 .track_queue_depth = 1,
2862 };
2863
2864 static int srp_sdev_count(struct Scsi_Host *host)
2865 {
2866 struct scsi_device *sdev;
2867 int c = 0;
2868
2869 shost_for_each_device(sdev, host)
2870 c++;
2871
2872 return c;
2873 }
2874
2875 /*
2876 * Return values:
2877 * < 0 upon failure. Caller is responsible for SRP target port cleanup.
2878 * 0 and target->state == SRP_TARGET_REMOVED if asynchronous target port
2879 * removal has been scheduled.
2880 * 0 and target->state != SRP_TARGET_REMOVED upon success.
2881 */
2882 static int srp_add_target(struct srp_host *host, struct srp_target_port *target)
2883 {
2884 struct srp_rport_identifiers ids;
2885 struct srp_rport *rport;
2886
2887 target->state = SRP_TARGET_SCANNING;
2888 sprintf(target->target_name, "SRP.T10:%016llX",
2889 be64_to_cpu(target->id_ext));
2890
2891 if (scsi_add_host(target->scsi_host, host->srp_dev->dev->dma_device))
2892 return -ENODEV;
2893
2894 memcpy(ids.port_id, &target->id_ext, 8);
2895 memcpy(ids.port_id + 8, &target->ioc_guid, 8);
2896 ids.roles = SRP_RPORT_ROLE_TARGET;
2897 rport = srp_rport_add(target->scsi_host, &ids);
2898 if (IS_ERR(rport)) {
2899 scsi_remove_host(target->scsi_host);
2900 return PTR_ERR(rport);
2901 }
2902
2903 rport->lld_data = target;
2904 target->rport = rport;
2905
2906 spin_lock(&host->target_lock);
2907 list_add_tail(&target->list, &host->target_list);
2908 spin_unlock(&host->target_lock);
2909
2910 scsi_scan_target(&target->scsi_host->shost_gendev,
2911 0, target->scsi_id, SCAN_WILD_CARD, SCSI_SCAN_INITIAL);
2912
2913 if (srp_connected_ch(target) < target->ch_count ||
2914 target->qp_in_error) {
2915 shost_printk(KERN_INFO, target->scsi_host,
2916 PFX "SCSI scan failed - removing SCSI host\n");
2917 srp_queue_remove_work(target);
2918 goto out;
2919 }
2920
2921 pr_debug("%s: SCSI scan succeeded - detected %d LUNs\n",
2922 dev_name(&target->scsi_host->shost_gendev),
2923 srp_sdev_count(target->scsi_host));
2924
2925 spin_lock_irq(&target->lock);
2926 if (target->state == SRP_TARGET_SCANNING)
2927 target->state = SRP_TARGET_LIVE;
2928 spin_unlock_irq(&target->lock);
2929
2930 out:
2931 return 0;
2932 }
2933
2934 static void srp_release_dev(struct device *dev)
2935 {
2936 struct srp_host *host =
2937 container_of(dev, struct srp_host, dev);
2938
2939 complete(&host->released);
2940 }
2941
2942 static struct class srp_class = {
2943 .name = "infiniband_srp",
2944 .dev_release = srp_release_dev
2945 };
2946
2947 /**
2948 * srp_conn_unique() - check whether the connection to a target is unique
2949 * @host: SRP host.
2950 * @target: SRP target port.
2951 */
2952 static bool srp_conn_unique(struct srp_host *host,
2953 struct srp_target_port *target)
2954 {
2955 struct srp_target_port *t;
2956 bool ret = false;
2957
2958 if (target->state == SRP_TARGET_REMOVED)
2959 goto out;
2960
2961 ret = true;
2962
2963 spin_lock(&host->target_lock);
2964 list_for_each_entry(t, &host->target_list, list) {
2965 if (t != target &&
2966 target->id_ext == t->id_ext &&
2967 target->ioc_guid == t->ioc_guid &&
2968 target->initiator_ext == t->initiator_ext) {
2969 ret = false;
2970 break;
2971 }
2972 }
2973 spin_unlock(&host->target_lock);
2974
2975 out:
2976 return ret;
2977 }
2978
2979 /*
2980 * Target ports are added by writing
2981 *
2982 * id_ext=<SRP ID ext>,ioc_guid=<SRP IOC GUID>,dgid=<dest GID>,
2983 * pkey=<P_Key>,service_id=<service ID>
2984 *
2985 * to the add_target sysfs attribute.
2986 */
2987 enum {
2988 SRP_OPT_ERR = 0,
2989 SRP_OPT_ID_EXT = 1 << 0,
2990 SRP_OPT_IOC_GUID = 1 << 1,
2991 SRP_OPT_DGID = 1 << 2,
2992 SRP_OPT_PKEY = 1 << 3,
2993 SRP_OPT_SERVICE_ID = 1 << 4,
2994 SRP_OPT_MAX_SECT = 1 << 5,
2995 SRP_OPT_MAX_CMD_PER_LUN = 1 << 6,
2996 SRP_OPT_IO_CLASS = 1 << 7,
2997 SRP_OPT_INITIATOR_EXT = 1 << 8,
2998 SRP_OPT_CMD_SG_ENTRIES = 1 << 9,
2999 SRP_OPT_ALLOW_EXT_SG = 1 << 10,
3000 SRP_OPT_SG_TABLESIZE = 1 << 11,
3001 SRP_OPT_COMP_VECTOR = 1 << 12,
3002 SRP_OPT_TL_RETRY_COUNT = 1 << 13,
3003 SRP_OPT_QUEUE_SIZE = 1 << 14,
3004 SRP_OPT_ALL = (SRP_OPT_ID_EXT |
3005 SRP_OPT_IOC_GUID |
3006 SRP_OPT_DGID |
3007 SRP_OPT_PKEY |
3008 SRP_OPT_SERVICE_ID),
3009 };
3010
3011 static const match_table_t srp_opt_tokens = {
3012 { SRP_OPT_ID_EXT, "id_ext=%s" },
3013 { SRP_OPT_IOC_GUID, "ioc_guid=%s" },
3014 { SRP_OPT_DGID, "dgid=%s" },
3015 { SRP_OPT_PKEY, "pkey=%x" },
3016 { SRP_OPT_SERVICE_ID, "service_id=%s" },
3017 { SRP_OPT_MAX_SECT, "max_sect=%d" },
3018 { SRP_OPT_MAX_CMD_PER_LUN, "max_cmd_per_lun=%d" },
3019 { SRP_OPT_IO_CLASS, "io_class=%x" },
3020 { SRP_OPT_INITIATOR_EXT, "initiator_ext=%s" },
3021 { SRP_OPT_CMD_SG_ENTRIES, "cmd_sg_entries=%u" },
3022 { SRP_OPT_ALLOW_EXT_SG, "allow_ext_sg=%u" },
3023 { SRP_OPT_SG_TABLESIZE, "sg_tablesize=%u" },
3024 { SRP_OPT_COMP_VECTOR, "comp_vector=%u" },
3025 { SRP_OPT_TL_RETRY_COUNT, "tl_retry_count=%u" },
3026 { SRP_OPT_QUEUE_SIZE, "queue_size=%d" },
3027 { SRP_OPT_ERR, NULL }
3028 };
3029
3030 static int srp_parse_options(const char *buf, struct srp_target_port *target)
3031 {
3032 char *options, *sep_opt;
3033 char *p;
3034 char dgid[3];
3035 substring_t args[MAX_OPT_ARGS];
3036 int opt_mask = 0;
3037 int token;
3038 int ret = -EINVAL;
3039 int i;
3040
3041 options = kstrdup(buf, GFP_KERNEL);
3042 if (!options)
3043 return -ENOMEM;
3044
3045 sep_opt = options;
3046 while ((p = strsep(&sep_opt, ",\n")) != NULL) {
3047 if (!*p)
3048 continue;
3049
3050 token = match_token(p, srp_opt_tokens, args);
3051 opt_mask |= token;
3052
3053 switch (token) {
3054 case SRP_OPT_ID_EXT:
3055 p = match_strdup(args);
3056 if (!p) {
3057 ret = -ENOMEM;
3058 goto out;
3059 }
3060 target->id_ext = cpu_to_be64(simple_strtoull(p, NULL, 16));
3061 kfree(p);
3062 break;
3063
3064 case SRP_OPT_IOC_GUID:
3065 p = match_strdup(args);
3066 if (!p) {
3067 ret = -ENOMEM;
3068 goto out;
3069 }
3070 target->ioc_guid = cpu_to_be64(simple_strtoull(p, NULL, 16));
3071 kfree(p);
3072 break;
3073
3074 case SRP_OPT_DGID:
3075 p = match_strdup(args);
3076 if (!p) {
3077 ret = -ENOMEM;
3078 goto out;
3079 }
3080 if (strlen(p) != 32) {
3081 pr_warn("bad dest GID parameter '%s'\n", p);
3082 kfree(p);
3083 goto out;
3084 }
3085
3086 for (i = 0; i < 16; ++i) {
3087 strlcpy(dgid, p + i * 2, sizeof(dgid));
3088 if (sscanf(dgid, "%hhx",
3089 &target->orig_dgid.raw[i]) < 1) {
3090 ret = -EINVAL;
3091 kfree(p);
3092 goto out;
3093 }
3094 }
3095 kfree(p);
3096 break;
3097
3098 case SRP_OPT_PKEY:
3099 if (match_hex(args, &token)) {
3100 pr_warn("bad P_Key parameter '%s'\n", p);
3101 goto out;
3102 }
3103 target->pkey = cpu_to_be16(token);
3104 break;
3105
3106 case SRP_OPT_SERVICE_ID:
3107 p = match_strdup(args);
3108 if (!p) {
3109 ret = -ENOMEM;
3110 goto out;
3111 }
3112 target->service_id = cpu_to_be64(simple_strtoull(p, NULL, 16));
3113 kfree(p);
3114 break;
3115
3116 case SRP_OPT_MAX_SECT:
3117 if (match_int(args, &token)) {
3118 pr_warn("bad max sect parameter '%s'\n", p);
3119 goto out;
3120 }
3121 target->scsi_host->max_sectors = token;
3122 break;
3123
3124 case SRP_OPT_QUEUE_SIZE:
3125 if (match_int(args, &token) || token < 1) {
3126 pr_warn("bad queue_size parameter '%s'\n", p);
3127 goto out;
3128 }
3129 target->scsi_host->can_queue = token;
3130 target->queue_size = token + SRP_RSP_SQ_SIZE +
3131 SRP_TSK_MGMT_SQ_SIZE;
3132 if (!(opt_mask & SRP_OPT_MAX_CMD_PER_LUN))
3133 target->scsi_host->cmd_per_lun = token;
3134 break;
3135
3136 case SRP_OPT_MAX_CMD_PER_LUN:
3137 if (match_int(args, &token) || token < 1) {
3138 pr_warn("bad max cmd_per_lun parameter '%s'\n",
3139 p);
3140 goto out;
3141 }
3142 target->scsi_host->cmd_per_lun = token;
3143 break;
3144
3145 case SRP_OPT_IO_CLASS:
3146 if (match_hex(args, &token)) {
3147 pr_warn("bad IO class parameter '%s'\n", p);
3148 goto out;
3149 }
3150 if (token != SRP_REV10_IB_IO_CLASS &&
3151 token != SRP_REV16A_IB_IO_CLASS) {
3152 pr_warn("unknown IO class parameter value %x specified (use %x or %x).\n",
3153 token, SRP_REV10_IB_IO_CLASS,
3154 SRP_REV16A_IB_IO_CLASS);
3155 goto out;
3156 }
3157 target->io_class = token;
3158 break;
3159
3160 case SRP_OPT_INITIATOR_EXT:
3161 p = match_strdup(args);
3162 if (!p) {
3163 ret = -ENOMEM;
3164 goto out;
3165 }
3166 target->initiator_ext = cpu_to_be64(simple_strtoull(p, NULL, 16));
3167 kfree(p);
3168 break;
3169
3170 case SRP_OPT_CMD_SG_ENTRIES:
3171 if (match_int(args, &token) || token < 1 || token > 255) {
3172 pr_warn("bad max cmd_sg_entries parameter '%s'\n",
3173 p);
3174 goto out;
3175 }
3176 target->cmd_sg_cnt = token;
3177 break;
3178
3179 case SRP_OPT_ALLOW_EXT_SG:
3180 if (match_int(args, &token)) {
3181 pr_warn("bad allow_ext_sg parameter '%s'\n", p);
3182 goto out;
3183 }
3184 target->allow_ext_sg = !!token;
3185 break;
3186
3187 case SRP_OPT_SG_TABLESIZE:
3188 if (match_int(args, &token) || token < 1 ||
3189 token > SG_MAX_SEGMENTS) {
3190 pr_warn("bad max sg_tablesize parameter '%s'\n",
3191 p);
3192 goto out;
3193 }
3194 target->sg_tablesize = token;
3195 break;
3196
3197 case SRP_OPT_COMP_VECTOR:
3198 if (match_int(args, &token) || token < 0) {
3199 pr_warn("bad comp_vector parameter '%s'\n", p);
3200 goto out;
3201 }
3202 target->comp_vector = token;
3203 break;
3204
3205 case SRP_OPT_TL_RETRY_COUNT:
3206 if (match_int(args, &token) || token < 2 || token > 7) {
3207 pr_warn("bad tl_retry_count parameter '%s' (must be a number between 2 and 7)\n",
3208 p);
3209 goto out;
3210 }
3211 target->tl_retry_count = token;
3212 break;
3213
3214 default:
3215 pr_warn("unknown parameter or missing value '%s' in target creation request\n",
3216 p);
3217 goto out;
3218 }
3219 }
3220
3221 if ((opt_mask & SRP_OPT_ALL) == SRP_OPT_ALL)
3222 ret = 0;
3223 else
3224 for (i = 0; i < ARRAY_SIZE(srp_opt_tokens); ++i)
3225 if ((srp_opt_tokens[i].token & SRP_OPT_ALL) &&
3226 !(srp_opt_tokens[i].token & opt_mask))
3227 pr_warn("target creation request is missing parameter '%s'\n",
3228 srp_opt_tokens[i].pattern);
3229
3230 if (target->scsi_host->cmd_per_lun > target->scsi_host->can_queue
3231 && (opt_mask & SRP_OPT_MAX_CMD_PER_LUN))
3232 pr_warn("cmd_per_lun = %d > queue_size = %d\n",
3233 target->scsi_host->cmd_per_lun,
3234 target->scsi_host->can_queue);
3235
3236 out:
3237 kfree(options);
3238 return ret;
3239 }
3240
3241 static ssize_t srp_create_target(struct device *dev,
3242 struct device_attribute *attr,
3243 const char *buf, size_t count)
3244 {
3245 struct srp_host *host =
3246 container_of(dev, struct srp_host, dev);
3247 struct Scsi_Host *target_host;
3248 struct srp_target_port *target;
3249 struct srp_rdma_ch *ch;
3250 struct srp_device *srp_dev = host->srp_dev;
3251 struct ib_device *ibdev = srp_dev->dev;
3252 int ret, node_idx, node, cpu, i;
3253 unsigned int max_sectors_per_mr, mr_per_cmd = 0;
3254 bool multich = false;
3255
3256 target_host = scsi_host_alloc(&srp_template,
3257 sizeof (struct srp_target_port));
3258 if (!target_host)
3259 return -ENOMEM;
3260
3261 target_host->transportt = ib_srp_transport_template;
3262 target_host->max_channel = 0;
3263 target_host->max_id = 1;
3264 target_host->max_lun = -1LL;
3265 target_host->max_cmd_len = sizeof ((struct srp_cmd *) (void *) 0L)->cdb;
3266
3267 target = host_to_target(target_host);
3268
3269 target->io_class = SRP_REV16A_IB_IO_CLASS;
3270 target->scsi_host = target_host;
3271 target->srp_host = host;
3272 target->lkey = host->srp_dev->pd->local_dma_lkey;
3273 target->global_mr = host->srp_dev->global_mr;
3274 target->cmd_sg_cnt = cmd_sg_entries;
3275 target->sg_tablesize = indirect_sg_entries ? : cmd_sg_entries;
3276 target->allow_ext_sg = allow_ext_sg;
3277 target->tl_retry_count = 7;
3278 target->queue_size = SRP_DEFAULT_QUEUE_SIZE;
3279
3280 /*
3281 * Avoid that the SCSI host can be removed by srp_remove_target()
3282 * before this function returns.
3283 */
3284 scsi_host_get(target->scsi_host);
3285
3286 mutex_lock(&host->add_target_mutex);
3287
3288 ret = srp_parse_options(buf, target);
3289 if (ret)
3290 goto out;
3291
3292 target->req_ring_size = target->queue_size - SRP_TSK_MGMT_SQ_SIZE;
3293
3294 if (!srp_conn_unique(target->srp_host, target)) {
3295 shost_printk(KERN_INFO, target->scsi_host,
3296 PFX "Already connected to target port with id_ext=%016llx;ioc_guid=%016llx;initiator_ext=%016llx\n",
3297 be64_to_cpu(target->id_ext),
3298 be64_to_cpu(target->ioc_guid),
3299 be64_to_cpu(target->initiator_ext));
3300 ret = -EEXIST;
3301 goto out;
3302 }
3303
3304 if (!srp_dev->has_fmr && !srp_dev->has_fr && !target->allow_ext_sg &&
3305 target->cmd_sg_cnt < target->sg_tablesize) {
3306 pr_warn("No MR pool and no external indirect descriptors, limiting sg_tablesize to cmd_sg_cnt\n");
3307 target->sg_tablesize = target->cmd_sg_cnt;
3308 }
3309
3310 if (srp_dev->use_fast_reg || srp_dev->use_fmr) {
3311 /*
3312 * FR and FMR can only map one HCA page per entry. If the
3313 * start address is not aligned on a HCA page boundary two
3314 * entries will be used for the head and the tail although
3315 * these two entries combined contain at most one HCA page of
3316 * data. Hence the "+ 1" in the calculation below.
3317 *
3318 * The indirect data buffer descriptor is contiguous so the
3319 * memory for that buffer will only be registered if
3320 * register_always is true. Hence add one to mr_per_cmd if
3321 * register_always has been set.
3322 */
3323 max_sectors_per_mr = srp_dev->max_pages_per_mr <<
3324 (ilog2(srp_dev->mr_page_size) - 9);
3325 mr_per_cmd = register_always +
3326 (target->scsi_host->max_sectors + 1 +
3327 max_sectors_per_mr - 1) / max_sectors_per_mr;
3328 pr_debug("max_sectors = %u; max_pages_per_mr = %u; mr_page_size = %u; max_sectors_per_mr = %u; mr_per_cmd = %u\n",
3329 target->scsi_host->max_sectors,
3330 srp_dev->max_pages_per_mr, srp_dev->mr_page_size,
3331 max_sectors_per_mr, mr_per_cmd);
3332 }
3333
3334 target_host->sg_tablesize = target->sg_tablesize;
3335 target->mr_pool_size = target->scsi_host->can_queue * mr_per_cmd;
3336 target->mr_per_cmd = mr_per_cmd;
3337 target->indirect_size = target->sg_tablesize *
3338 sizeof (struct srp_direct_buf);
3339 target->max_iu_len = sizeof (struct srp_cmd) +
3340 sizeof (struct srp_indirect_buf) +
3341 target->cmd_sg_cnt * sizeof (struct srp_direct_buf);
3342
3343 INIT_WORK(&target->tl_err_work, srp_tl_err_work);
3344 INIT_WORK(&target->remove_work, srp_remove_work);
3345 spin_lock_init(&target->lock);
3346 ret = ib_query_gid(ibdev, host->port, 0, &target->sgid, NULL);
3347 if (ret)
3348 goto out;
3349
3350 ret = -ENOMEM;
3351 target->ch_count = max_t(unsigned, num_online_nodes(),
3352 min(ch_count ? :
3353 min(4 * num_online_nodes(),
3354 ibdev->num_comp_vectors),
3355 num_online_cpus()));
3356 target->ch = kcalloc(target->ch_count, sizeof(*target->ch),
3357 GFP_KERNEL);
3358 if (!target->ch)
3359 goto out;
3360
3361 node_idx = 0;
3362 for_each_online_node(node) {
3363 const int ch_start = (node_idx * target->ch_count /
3364 num_online_nodes());
3365 const int ch_end = ((node_idx + 1) * target->ch_count /
3366 num_online_nodes());
3367 const int cv_start = (node_idx * ibdev->num_comp_vectors /
3368 num_online_nodes() + target->comp_vector)
3369 % ibdev->num_comp_vectors;
3370 const int cv_end = ((node_idx + 1) * ibdev->num_comp_vectors /
3371 num_online_nodes() + target->comp_vector)
3372 % ibdev->num_comp_vectors;
3373 int cpu_idx = 0;
3374
3375 for_each_online_cpu(cpu) {
3376 if (cpu_to_node(cpu) != node)
3377 continue;
3378 if (ch_start + cpu_idx >= ch_end)
3379 continue;
3380 ch = &target->ch[ch_start + cpu_idx];
3381 ch->target = target;
3382 ch->comp_vector = cv_start == cv_end ? cv_start :
3383 cv_start + cpu_idx % (cv_end - cv_start);
3384 spin_lock_init(&ch->lock);
3385 INIT_LIST_HEAD(&ch->free_tx);
3386 ret = srp_new_cm_id(ch);
3387 if (ret)
3388 goto err_disconnect;
3389
3390 ret = srp_create_ch_ib(ch);
3391 if (ret)
3392 goto err_disconnect;
3393
3394 ret = srp_alloc_req_data(ch);
3395 if (ret)
3396 goto err_disconnect;
3397
3398 ret = srp_connect_ch(ch, multich);
3399 if (ret) {
3400 shost_printk(KERN_ERR, target->scsi_host,
3401 PFX "Connection %d/%d failed\n",
3402 ch_start + cpu_idx,
3403 target->ch_count);
3404 if (node_idx == 0 && cpu_idx == 0) {
3405 goto err_disconnect;
3406 } else {
3407 srp_free_ch_ib(target, ch);
3408 srp_free_req_data(target, ch);
3409 target->ch_count = ch - target->ch;
3410 goto connected;
3411 }
3412 }
3413
3414 multich = true;
3415 cpu_idx++;
3416 }
3417 node_idx++;
3418 }
3419
3420 connected:
3421 target->scsi_host->nr_hw_queues = target->ch_count;
3422
3423 ret = srp_add_target(host, target);
3424 if (ret)
3425 goto err_disconnect;
3426
3427 if (target->state != SRP_TARGET_REMOVED) {
3428 shost_printk(KERN_DEBUG, target->scsi_host, PFX
3429 "new target: id_ext %016llx ioc_guid %016llx pkey %04x service_id %016llx sgid %pI6 dgid %pI6\n",
3430 be64_to_cpu(target->id_ext),
3431 be64_to_cpu(target->ioc_guid),
3432 be16_to_cpu(target->pkey),
3433 be64_to_cpu(target->service_id),
3434 target->sgid.raw, target->orig_dgid.raw);
3435 }
3436
3437 ret = count;
3438
3439 out:
3440 mutex_unlock(&host->add_target_mutex);
3441
3442 scsi_host_put(target->scsi_host);
3443 if (ret < 0)
3444 scsi_host_put(target->scsi_host);
3445
3446 return ret;
3447
3448 err_disconnect:
3449 srp_disconnect_target(target);
3450
3451 for (i = 0; i < target->ch_count; i++) {
3452 ch = &target->ch[i];
3453 srp_free_ch_ib(target, ch);
3454 srp_free_req_data(target, ch);
3455 }
3456
3457 kfree(target->ch);
3458 goto out;
3459 }
3460
3461 static DEVICE_ATTR(add_target, S_IWUSR, NULL, srp_create_target);
3462
3463 static ssize_t show_ibdev(struct device *dev, struct device_attribute *attr,
3464 char *buf)
3465 {
3466 struct srp_host *host = container_of(dev, struct srp_host, dev);
3467
3468 return sprintf(buf, "%s\n", host->srp_dev->dev->name);
3469 }
3470
3471 static DEVICE_ATTR(ibdev, S_IRUGO, show_ibdev, NULL);
3472
3473 static ssize_t show_port(struct device *dev, struct device_attribute *attr,
3474 char *buf)
3475 {
3476 struct srp_host *host = container_of(dev, struct srp_host, dev);
3477
3478 return sprintf(buf, "%d\n", host->port);
3479 }
3480
3481 static DEVICE_ATTR(port, S_IRUGO, show_port, NULL);
3482
3483 static struct srp_host *srp_add_port(struct srp_device *device, u8 port)
3484 {
3485 struct srp_host *host;
3486
3487 host = kzalloc(sizeof *host, GFP_KERNEL);
3488 if (!host)
3489 return NULL;
3490
3491 INIT_LIST_HEAD(&host->target_list);
3492 spin_lock_init(&host->target_lock);
3493 init_completion(&host->released);
3494 mutex_init(&host->add_target_mutex);
3495 host->srp_dev = device;
3496 host->port = port;
3497
3498 host->dev.class = &srp_class;
3499 host->dev.parent = device->dev->dma_device;
3500 dev_set_name(&host->dev, "srp-%s-%d", device->dev->name, port);
3501
3502 if (device_register(&host->dev))
3503 goto free_host;
3504 if (device_create_file(&host->dev, &dev_attr_add_target))
3505 goto err_class;
3506 if (device_create_file(&host->dev, &dev_attr_ibdev))
3507 goto err_class;
3508 if (device_create_file(&host->dev, &dev_attr_port))
3509 goto err_class;
3510
3511 return host;
3512
3513 err_class:
3514 device_unregister(&host->dev);
3515
3516 free_host:
3517 kfree(host);
3518
3519 return NULL;
3520 }
3521
3522 static void srp_add_one(struct ib_device *device)
3523 {
3524 struct srp_device *srp_dev;
3525 struct srp_host *host;
3526 int mr_page_shift, p;
3527 u64 max_pages_per_mr;
3528
3529 srp_dev = kmalloc(sizeof *srp_dev, GFP_KERNEL);
3530 if (!srp_dev)
3531 return;
3532
3533 /*
3534 * Use the smallest page size supported by the HCA, down to a
3535 * minimum of 4096 bytes. We're unlikely to build large sglists
3536 * out of smaller entries.
3537 */
3538 mr_page_shift = max(12, ffs(device->attrs.page_size_cap) - 1);
3539 srp_dev->mr_page_size = 1 << mr_page_shift;
3540 srp_dev->mr_page_mask = ~((u64) srp_dev->mr_page_size - 1);
3541 max_pages_per_mr = device->attrs.max_mr_size;
3542 do_div(max_pages_per_mr, srp_dev->mr_page_size);
3543 pr_debug("%s: %llu / %u = %llu <> %u\n", __func__,
3544 device->attrs.max_mr_size, srp_dev->mr_page_size,
3545 max_pages_per_mr, SRP_MAX_PAGES_PER_MR);
3546 srp_dev->max_pages_per_mr = min_t(u64, SRP_MAX_PAGES_PER_MR,
3547 max_pages_per_mr);
3548
3549 srp_dev->has_fmr = (device->alloc_fmr && device->dealloc_fmr &&
3550 device->map_phys_fmr && device->unmap_fmr);
3551 srp_dev->has_fr = (device->attrs.device_cap_flags &
3552 IB_DEVICE_MEM_MGT_EXTENSIONS);
3553 if (!never_register && !srp_dev->has_fmr && !srp_dev->has_fr) {
3554 dev_warn(&device->dev, "neither FMR nor FR is supported\n");
3555 } else if (!never_register &&
3556 device->attrs.max_mr_size >= 2 * srp_dev->mr_page_size) {
3557 srp_dev->use_fast_reg = (srp_dev->has_fr &&
3558 (!srp_dev->has_fmr || prefer_fr));
3559 srp_dev->use_fmr = !srp_dev->use_fast_reg && srp_dev->has_fmr;
3560 }
3561
3562 if (srp_dev->use_fast_reg) {
3563 srp_dev->max_pages_per_mr =
3564 min_t(u32, srp_dev->max_pages_per_mr,
3565 device->attrs.max_fast_reg_page_list_len);
3566 }
3567 srp_dev->mr_max_size = srp_dev->mr_page_size *
3568 srp_dev->max_pages_per_mr;
3569 pr_debug("%s: mr_page_shift = %d, device->max_mr_size = %#llx, device->max_fast_reg_page_list_len = %u, max_pages_per_mr = %d, mr_max_size = %#x\n",
3570 device->name, mr_page_shift, device->attrs.max_mr_size,
3571 device->attrs.max_fast_reg_page_list_len,
3572 srp_dev->max_pages_per_mr, srp_dev->mr_max_size);
3573
3574 INIT_LIST_HEAD(&srp_dev->dev_list);
3575
3576 srp_dev->dev = device;
3577 srp_dev->pd = ib_alloc_pd(device);
3578 if (IS_ERR(srp_dev->pd))
3579 goto free_dev;
3580
3581 if (never_register || !register_always ||
3582 (!srp_dev->has_fmr && !srp_dev->has_fr)) {
3583 srp_dev->global_mr = ib_get_dma_mr(srp_dev->pd,
3584 IB_ACCESS_LOCAL_WRITE |
3585 IB_ACCESS_REMOTE_READ |
3586 IB_ACCESS_REMOTE_WRITE);
3587 if (IS_ERR(srp_dev->global_mr))
3588 goto err_pd;
3589 } else {
3590 srp_dev->global_mr = NULL;
3591 }
3592
3593 for (p = rdma_start_port(device); p <= rdma_end_port(device); ++p) {
3594 host = srp_add_port(srp_dev, p);
3595 if (host)
3596 list_add_tail(&host->list, &srp_dev->dev_list);
3597 }
3598
3599 ib_set_client_data(device, &srp_client, srp_dev);
3600 return;
3601
3602 err_pd:
3603 ib_dealloc_pd(srp_dev->pd);
3604
3605 free_dev:
3606 kfree(srp_dev);
3607 }
3608
3609 static void srp_remove_one(struct ib_device *device, void *client_data)
3610 {
3611 struct srp_device *srp_dev;
3612 struct srp_host *host, *tmp_host;
3613 struct srp_target_port *target;
3614
3615 srp_dev = client_data;
3616 if (!srp_dev)
3617 return;
3618
3619 list_for_each_entry_safe(host, tmp_host, &srp_dev->dev_list, list) {
3620 device_unregister(&host->dev);
3621 /*
3622 * Wait for the sysfs entry to go away, so that no new
3623 * target ports can be created.
3624 */
3625 wait_for_completion(&host->released);
3626
3627 /*
3628 * Remove all target ports.
3629 */
3630 spin_lock(&host->target_lock);
3631 list_for_each_entry(target, &host->target_list, list)
3632 srp_queue_remove_work(target);
3633 spin_unlock(&host->target_lock);
3634
3635 /*
3636 * Wait for tl_err and target port removal tasks.
3637 */
3638 flush_workqueue(system_long_wq);
3639 flush_workqueue(srp_remove_wq);
3640
3641 kfree(host);
3642 }
3643
3644 if (srp_dev->global_mr)
3645 ib_dereg_mr(srp_dev->global_mr);
3646 ib_dealloc_pd(srp_dev->pd);
3647
3648 kfree(srp_dev);
3649 }
3650
3651 static struct srp_function_template ib_srp_transport_functions = {
3652 .has_rport_state = true,
3653 .reset_timer_if_blocked = true,
3654 .reconnect_delay = &srp_reconnect_delay,
3655 .fast_io_fail_tmo = &srp_fast_io_fail_tmo,
3656 .dev_loss_tmo = &srp_dev_loss_tmo,
3657 .reconnect = srp_rport_reconnect,
3658 .rport_delete = srp_rport_delete,
3659 .terminate_rport_io = srp_terminate_io,
3660 };
3661
3662 static int __init srp_init_module(void)
3663 {
3664 int ret;
3665
3666 if (srp_sg_tablesize) {
3667 pr_warn("srp_sg_tablesize is deprecated, please use cmd_sg_entries\n");
3668 if (!cmd_sg_entries)
3669 cmd_sg_entries = srp_sg_tablesize;
3670 }
3671
3672 if (!cmd_sg_entries)
3673 cmd_sg_entries = SRP_DEF_SG_TABLESIZE;
3674
3675 if (cmd_sg_entries > 255) {
3676 pr_warn("Clamping cmd_sg_entries to 255\n");
3677 cmd_sg_entries = 255;
3678 }
3679
3680 if (!indirect_sg_entries)
3681 indirect_sg_entries = cmd_sg_entries;
3682 else if (indirect_sg_entries < cmd_sg_entries) {
3683 pr_warn("Bumping up indirect_sg_entries to match cmd_sg_entries (%u)\n",
3684 cmd_sg_entries);
3685 indirect_sg_entries = cmd_sg_entries;
3686 }
3687
3688 srp_remove_wq = create_workqueue("srp_remove");
3689 if (!srp_remove_wq) {
3690 ret = -ENOMEM;
3691 goto out;
3692 }
3693
3694 ret = -ENOMEM;
3695 ib_srp_transport_template =
3696 srp_attach_transport(&ib_srp_transport_functions);
3697 if (!ib_srp_transport_template)
3698 goto destroy_wq;
3699
3700 ret = class_register(&srp_class);
3701 if (ret) {
3702 pr_err("couldn't register class infiniband_srp\n");
3703 goto release_tr;
3704 }
3705
3706 ib_sa_register_client(&srp_sa_client);
3707
3708 ret = ib_register_client(&srp_client);
3709 if (ret) {
3710 pr_err("couldn't register IB client\n");
3711 goto unreg_sa;
3712 }
3713
3714 out:
3715 return ret;
3716
3717 unreg_sa:
3718 ib_sa_unregister_client(&srp_sa_client);
3719 class_unregister(&srp_class);
3720
3721 release_tr:
3722 srp_release_transport(ib_srp_transport_template);
3723
3724 destroy_wq:
3725 destroy_workqueue(srp_remove_wq);
3726 goto out;
3727 }
3728
3729 static void __exit srp_cleanup_module(void)
3730 {
3731 ib_unregister_client(&srp_client);
3732 ib_sa_unregister_client(&srp_sa_client);
3733 class_unregister(&srp_class);
3734 srp_release_transport(ib_srp_transport_template);
3735 destroy_workqueue(srp_remove_wq);
3736 }
3737
3738 module_init(srp_init_module);
3739 module_exit(srp_cleanup_module);
This page took 0.109559 seconds and 5 git commands to generate.