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