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