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