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