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