Lines Matching refs:target

199 static int srp_target_is_topspin(struct srp_target_port *target)  in srp_target_is_topspin()  argument
205 (!memcmp(&target->ioc_guid, topspin_oui, sizeof topspin_oui) || in srp_target_is_topspin()
206 !memcmp(&target->ioc_guid, cisco_oui, sizeof cisco_oui)); in srp_target_is_topspin()
258 static int srp_init_qp(struct srp_target_port *target, in srp_init_qp() argument
268 ret = ib_find_cached_pkey(target->srp_host->srp_dev->dev, in srp_init_qp()
269 target->srp_host->port, in srp_init_qp()
270 be16_to_cpu(target->pkey), in srp_init_qp()
278 attr->port_num = target->srp_host->port; in srp_init_qp()
293 struct srp_target_port *target = ch->target; in srp_new_cm_id() local
296 new_cm_id = ib_create_cm_id(target->srp_host->srp_dev->dev, in srp_new_cm_id()
304 ch->path.sgid = target->sgid; in srp_new_cm_id()
305 ch->path.dgid = target->orig_dgid; in srp_new_cm_id()
306 ch->path.pkey = target->pkey; in srp_new_cm_id()
307 ch->path.service_id = target->service_id; in srp_new_cm_id()
312 static struct ib_fmr_pool *srp_alloc_fmr_pool(struct srp_target_port *target) in srp_alloc_fmr_pool() argument
314 struct srp_device *dev = target->srp_host->srp_dev; in srp_alloc_fmr_pool()
318 fmr_param.pool_size = target->scsi_host->can_queue; in srp_alloc_fmr_pool()
439 static struct srp_fr_pool *srp_alloc_fr_pool(struct srp_target_port *target) in srp_alloc_fr_pool() argument
441 struct srp_device *dev = target->srp_host->srp_dev; in srp_alloc_fr_pool()
444 target->scsi_host->can_queue, in srp_alloc_fr_pool()
484 struct srp_target_port *target = ch->target; in srp_create_ch_ib() local
485 struct srp_device *dev = target->srp_host->srp_dev; in srp_create_ch_ib()
500 cq_attr.cqe = target->queue_size + 1; in srp_create_ch_ib()
509 cq_attr.cqe = m * target->queue_size; in srp_create_ch_ib()
521 init_attr->cap.max_send_wr = m * target->queue_size; in srp_create_ch_ib()
522 init_attr->cap.max_recv_wr = target->queue_size + 1; in srp_create_ch_ib()
536 ret = srp_init_qp(target, qp); in srp_create_ch_ib()
541 fr_pool = srp_alloc_fr_pool(target); in srp_create_ch_ib()
544 shost_printk(KERN_WARNING, target->scsi_host, PFX in srp_create_ch_ib()
549 fmr_pool = srp_alloc_fmr_pool(target); in srp_create_ch_ib()
552 shost_printk(KERN_WARNING, target->scsi_host, PFX in srp_create_ch_ib()
600 static void srp_free_ch_ib(struct srp_target_port *target, in srp_free_ch_ib() argument
603 struct srp_device *dev = target->srp_host->srp_dev; in srp_free_ch_ib()
606 if (!ch->target) in srp_free_ch_ib()
635 ch->target = NULL; in srp_free_ch_ib()
641 for (i = 0; i < target->queue_size; ++i) in srp_free_ch_ib()
642 srp_free_iu(target->srp_host, ch->rx_ring[i]); in srp_free_ch_ib()
647 for (i = 0; i < target->queue_size; ++i) in srp_free_ch_ib()
648 srp_free_iu(target->srp_host, ch->tx_ring[i]); in srp_free_ch_ib()
659 struct srp_target_port *target = ch->target; in srp_path_rec_completion() local
663 shost_printk(KERN_ERR, target->scsi_host, in srp_path_rec_completion()
672 struct srp_target_port *target = ch->target; in srp_lookup_path() local
680 target->srp_host->srp_dev->dev, in srp_lookup_path()
681 target->srp_host->port, in srp_lookup_path()
700 shost_printk(KERN_WARNING, target->scsi_host, in srp_lookup_path()
708 struct srp_target_port *target = ch->target; in srp_send_req() local
721 req->param.service_id = target->service_id; in srp_send_req()
738 req->param.retry_count = target->tl_retry_count; in srp_send_req()
744 req->priv.req_it_iu_len = cpu_to_be32(target->max_iu_len); in srp_send_req()
758 if (target->io_class == SRP_REV10_IB_IO_CLASS) { in srp_send_req()
760 &target->sgid.global.interface_id, 8); in srp_send_req()
762 &target->initiator_ext, 8); in srp_send_req()
763 memcpy(req->priv.target_port_id, &target->ioc_guid, 8); in srp_send_req()
764 memcpy(req->priv.target_port_id + 8, &target->id_ext, 8); in srp_send_req()
767 &target->initiator_ext, 8); in srp_send_req()
769 &target->sgid.global.interface_id, 8); in srp_send_req()
770 memcpy(req->priv.target_port_id, &target->id_ext, 8); in srp_send_req()
771 memcpy(req->priv.target_port_id + 8, &target->ioc_guid, 8); in srp_send_req()
779 if (srp_target_is_topspin(target)) { in srp_send_req()
780 shost_printk(KERN_DEBUG, target->scsi_host, in srp_send_req()
783 be64_to_cpu(target->ioc_guid)); in srp_send_req()
786 &target->srp_host->srp_dev->dev->node_guid, 8); in srp_send_req()
796 static bool srp_queue_remove_work(struct srp_target_port *target) in srp_queue_remove_work() argument
800 spin_lock_irq(&target->lock); in srp_queue_remove_work()
801 if (target->state != SRP_TARGET_REMOVED) { in srp_queue_remove_work()
802 target->state = SRP_TARGET_REMOVED; in srp_queue_remove_work()
805 spin_unlock_irq(&target->lock); in srp_queue_remove_work()
808 queue_work(srp_remove_wq, &target->remove_work); in srp_queue_remove_work()
813 static void srp_disconnect_target(struct srp_target_port *target) in srp_disconnect_target() argument
820 for (i = 0; i < target->ch_count; i++) { in srp_disconnect_target()
821 ch = &target->ch[i]; in srp_disconnect_target()
824 shost_printk(KERN_DEBUG, target->scsi_host, in srp_disconnect_target()
830 static void srp_free_req_data(struct srp_target_port *target, in srp_free_req_data() argument
833 struct srp_device *dev = target->srp_host->srp_dev; in srp_free_req_data()
841 for (i = 0; i < target->req_ring_size; ++i) { in srp_free_req_data()
851 target->indirect_size, in srp_free_req_data()
863 struct srp_target_port *target = ch->target; in srp_alloc_req_data() local
864 struct srp_device *srp_dev = target->srp_host->srp_dev; in srp_alloc_req_data()
871 ch->req_ring = kcalloc(target->req_ring_size, sizeof(*ch->req_ring), in srp_alloc_req_data()
876 for (i = 0; i < target->req_ring_size; ++i) { in srp_alloc_req_data()
878 mr_list = kmalloc(target->cmd_sg_cnt * sizeof(void *), in srp_alloc_req_data()
891 req->indirect_desc = kmalloc(target->indirect_size, GFP_KERNEL); in srp_alloc_req_data()
896 target->indirect_size, in srp_alloc_req_data()
924 static void srp_remove_target(struct srp_target_port *target) in srp_remove_target() argument
929 WARN_ON_ONCE(target->state != SRP_TARGET_REMOVED); in srp_remove_target()
931 srp_del_scsi_host_attr(target->scsi_host); in srp_remove_target()
932 srp_rport_get(target->rport); in srp_remove_target()
933 srp_remove_host(target->scsi_host); in srp_remove_target()
934 scsi_remove_host(target->scsi_host); in srp_remove_target()
935 srp_stop_rport_timers(target->rport); in srp_remove_target()
936 srp_disconnect_target(target); in srp_remove_target()
937 for (i = 0; i < target->ch_count; i++) { in srp_remove_target()
938 ch = &target->ch[i]; in srp_remove_target()
939 srp_free_ch_ib(target, ch); in srp_remove_target()
941 cancel_work_sync(&target->tl_err_work); in srp_remove_target()
942 srp_rport_put(target->rport); in srp_remove_target()
943 for (i = 0; i < target->ch_count; i++) { in srp_remove_target()
944 ch = &target->ch[i]; in srp_remove_target()
945 srp_free_req_data(target, ch); in srp_remove_target()
947 kfree(target->ch); in srp_remove_target()
948 target->ch = NULL; in srp_remove_target()
950 spin_lock(&target->srp_host->target_lock); in srp_remove_target()
951 list_del(&target->list); in srp_remove_target()
952 spin_unlock(&target->srp_host->target_lock); in srp_remove_target()
954 scsi_host_put(target->scsi_host); in srp_remove_target()
959 struct srp_target_port *target = in srp_remove_work() local
962 WARN_ON_ONCE(target->state != SRP_TARGET_REMOVED); in srp_remove_work()
964 srp_remove_target(target); in srp_remove_work()
969 struct srp_target_port *target = rport->lld_data; in srp_rport_delete() local
971 srp_queue_remove_work(target); in srp_rport_delete()
978 static int srp_connected_ch(struct srp_target_port *target) in srp_connected_ch() argument
982 for (i = 0; i < target->ch_count; i++) in srp_connected_ch()
983 c += target->ch[i].connected; in srp_connected_ch()
990 struct srp_target_port *target = ch->target; in srp_connect_ch() local
993 WARN_ON_ONCE(!multich && srp_connected_ch(target) > 0); in srp_connect_ch()
1030 shost_printk(KERN_ERR, target->scsi_host, PFX in srp_connect_ch()
1063 struct srp_target_port *target = ch->target; in srp_unmap_data() local
1064 struct srp_device *dev = target->srp_host->srp_dev; in srp_unmap_data()
1079 shost_printk(KERN_ERR, target->scsi_host, PFX in srp_unmap_data()
1083 &target->tl_err_work); in srp_unmap_data()
1165 struct srp_target_port *target = rport->lld_data; in srp_terminate_io() local
1167 struct Scsi_Host *shost = target->scsi_host; in srp_terminate_io()
1178 for (i = 0; i < target->ch_count; i++) { in srp_terminate_io()
1179 ch = &target->ch[i]; in srp_terminate_io()
1181 for (j = 0; j < target->req_ring_size; ++j) { in srp_terminate_io()
1201 struct srp_target_port *target = rport->lld_data; in srp_rport_reconnect() local
1206 srp_disconnect_target(target); in srp_rport_reconnect()
1208 if (target->state == SRP_TARGET_SCANNING) in srp_rport_reconnect()
1216 for (i = 0; i < target->ch_count; i++) { in srp_rport_reconnect()
1217 ch = &target->ch[i]; in srp_rport_reconnect()
1220 for (i = 0; i < target->ch_count; i++) { in srp_rport_reconnect()
1221 ch = &target->ch[i]; in srp_rport_reconnect()
1222 for (j = 0; j < target->req_ring_size; ++j) { in srp_rport_reconnect()
1228 for (i = 0; i < target->ch_count; i++) { in srp_rport_reconnect()
1229 ch = &target->ch[i]; in srp_rport_reconnect()
1238 for (j = 0; j < target->queue_size; ++j) in srp_rport_reconnect()
1242 target->qp_in_error = false; in srp_rport_reconnect()
1244 for (i = 0; i < target->ch_count; i++) { in srp_rport_reconnect()
1245 ch = &target->ch[i]; in srp_rport_reconnect()
1253 shost_printk(KERN_INFO, target->scsi_host, in srp_rport_reconnect()
1278 struct srp_target_port *target = ch->target; in srp_map_finish_fmr() local
1279 struct srp_device *dev = target->srp_host->srp_dev; in srp_map_finish_fmr()
1291 if (state->npages == 1 && target->global_mr) { in srp_map_finish_fmr()
1293 target->global_mr->rkey); in srp_map_finish_fmr()
1318 struct srp_target_port *target = ch->target; in srp_map_finish_fr() local
1319 struct srp_device *dev = target->srp_host->srp_dev; in srp_map_finish_fr()
1334 if (sg_nents == 1 && target->global_mr) { in srp_map_finish_fr()
1337 target->global_mr->rkey); in srp_map_finish_fr()
1380 struct srp_target_port *target = ch->target; in srp_map_sg_entry() local
1381 struct srp_device *dev = target->srp_host->srp_dev; in srp_map_sg_entry()
1429 state->fmr.end = req->fmr_list + ch->target->cmd_sg_cnt; in srp_map_sg_fmr()
1452 state->fr.end = req->fr_list + ch->target->cmd_sg_cnt; in srp_map_sg_fr()
1476 struct srp_target_port *target = ch->target; in srp_map_sg_dma() local
1477 struct srp_device *dev = target->srp_host->srp_dev; in srp_map_sg_dma()
1485 target->global_mr->rkey); in srp_map_sg_dma()
1504 struct srp_target_port *target = ch->target; in srp_map_idb() local
1505 struct srp_device *dev = target->srp_host->srp_dev; in srp_map_idb()
1550 struct srp_target_port *target = ch->target; in srp_map_data() local
1567 shost_printk(KERN_WARNING, target->scsi_host, in srp_map_data()
1576 dev = target->srp_host->srp_dev; in srp_map_data()
1586 if (count == 1 && target->global_mr) { in srp_map_data()
1596 buf->key = cpu_to_be32(target->global_mr->rkey); in srp_map_data()
1610 target->indirect_size, DMA_TO_DEVICE); in srp_map_data()
1637 if (unlikely(target->cmd_sg_cnt < state.ndesc && in srp_map_data()
1638 !target->allow_ext_sg)) { in srp_map_data()
1639 shost_printk(KERN_ERR, target->scsi_host, in srp_map_data()
1644 count = min(state.ndesc, target->cmd_sg_cnt); in srp_map_data()
1655 if (!target->global_mr) { in srp_map_data()
1662 idb_rkey = cpu_to_be32(target->global_mr->rkey); in srp_map_data()
1718 struct srp_target_port *target = ch->target; in __srp_get_tx_iu() local
1730 ++target->zero_req_lim; in __srp_get_tx_iu()
1744 struct srp_target_port *target = ch->target; in srp_post_send() local
1750 list.lkey = target->lkey; in srp_post_send()
1764 struct srp_target_port *target = ch->target; in srp_post_recv() local
1770 list.lkey = target->lkey; in srp_post_recv()
1782 struct srp_target_port *target = ch->target; in srp_process_rsp() local
1797 scmnd = scsi_host_find_tag(target->scsi_host, rsp->tag); in srp_process_rsp()
1803 shost_printk(KERN_ERR, target->scsi_host, in srp_process_rsp()
1805 rsp->tag, ch - target->ch, ch->qp->qp_num); in srp_process_rsp()
1842 struct srp_target_port *target = ch->target; in srp_response_common() local
1843 struct ib_device *dev = target->srp_host->srp_dev->dev; in srp_response_common()
1854 shost_printk(KERN_ERR, target->scsi_host, PFX in srp_response_common()
1865 shost_printk(KERN_ERR, target->scsi_host, PFX in srp_response_common()
1883 shost_printk(KERN_ERR, ch->target->scsi_host, PFX in srp_process_cred_req()
1890 struct srp_target_port *target = ch->target; in srp_process_aer_req() local
1897 shost_printk(KERN_ERR, target->scsi_host, PFX in srp_process_aer_req()
1901 shost_printk(KERN_ERR, target->scsi_host, PFX in srp_process_aer_req()
1907 struct srp_target_port *target = ch->target; in srp_handle_recv() local
1908 struct ib_device *dev = target->srp_host->srp_dev->dev; in srp_handle_recv()
1919 shost_printk(KERN_ERR, target->scsi_host, in srp_handle_recv()
1940 shost_printk(KERN_WARNING, target->scsi_host, in srp_handle_recv()
1945 shost_printk(KERN_WARNING, target->scsi_host, in srp_handle_recv()
1955 shost_printk(KERN_ERR, target->scsi_host, in srp_handle_recv()
1968 struct srp_target_port *target; in srp_tl_err_work() local
1970 target = container_of(work, struct srp_target_port, tl_err_work); in srp_tl_err_work()
1971 if (target->rport) in srp_tl_err_work()
1972 srp_start_tl_fail_timers(target->rport); in srp_tl_err_work()
1978 struct srp_target_port *target = ch->target; in srp_handle_qp_err() local
1985 if (ch->connected && !target->qp_in_error) { in srp_handle_qp_err()
1987 shost_printk(KERN_ERR, target->scsi_host, PFX in srp_handle_qp_err()
1991 shost_printk(KERN_ERR, target->scsi_host, PFX in srp_handle_qp_err()
1995 shost_printk(KERN_ERR, target->scsi_host, in srp_handle_qp_err()
2001 queue_work(system_long_wq, &target->tl_err_work); in srp_handle_qp_err()
2003 target->qp_in_error = true; in srp_handle_qp_err()
2039 struct srp_target_port *target = host_to_target(shost); in srp_queuecommand() local
2040 struct srp_rport *rport = target->rport; in srp_queuecommand()
2061 scmnd->result = srp_chkready(target->rport); in srp_queuecommand()
2067 ch = &target->ch[blk_mq_unique_tag_to_hwq(tag)]; in srp_queuecommand()
2069 WARN_ONCE(idx >= target->req_ring_size, "%s: tag %#x: idx %d >= %d\n", in srp_queuecommand()
2071 target->req_ring_size); in srp_queuecommand()
2081 dev = target->srp_host->srp_dev->dev; in srp_queuecommand()
2082 ib_dma_sync_single_for_cpu(dev, iu->dma, target->max_iu_len, in srp_queuecommand()
2100 shost_printk(KERN_ERR, target->scsi_host, in srp_queuecommand()
2113 ib_dma_sync_single_for_device(dev, iu->dma, target->max_iu_len, in srp_queuecommand()
2117 shost_printk(KERN_ERR, target->scsi_host, PFX "Send failed\n"); in srp_queuecommand()
2158 struct srp_target_port *target = ch->target; in srp_alloc_iu_bufs() local
2161 ch->rx_ring = kcalloc(target->queue_size, sizeof(*ch->rx_ring), in srp_alloc_iu_bufs()
2165 ch->tx_ring = kcalloc(target->queue_size, sizeof(*ch->tx_ring), in srp_alloc_iu_bufs()
2170 for (i = 0; i < target->queue_size; ++i) { in srp_alloc_iu_bufs()
2171 ch->rx_ring[i] = srp_alloc_iu(target->srp_host, in srp_alloc_iu_bufs()
2178 for (i = 0; i < target->queue_size; ++i) { in srp_alloc_iu_bufs()
2179 ch->tx_ring[i] = srp_alloc_iu(target->srp_host, in srp_alloc_iu_bufs()
2180 target->max_iu_len, in srp_alloc_iu_bufs()
2191 for (i = 0; i < target->queue_size; ++i) { in srp_alloc_iu_bufs()
2192 srp_free_iu(target->srp_host, ch->rx_ring[i]); in srp_alloc_iu_bufs()
2193 srp_free_iu(target->srp_host, ch->tx_ring[i]); in srp_alloc_iu_bufs()
2237 struct srp_target_port *target = ch->target; in srp_cm_rep_handler() local
2251 target->scsi_host->can_queue in srp_cm_rep_handler()
2253 target->scsi_host->can_queue); in srp_cm_rep_handler()
2254 target->scsi_host->cmd_per_lun in srp_cm_rep_handler()
2255 = min_t(int, target->scsi_host->can_queue, in srp_cm_rep_handler()
2256 target->scsi_host->cmd_per_lun); in srp_cm_rep_handler()
2258 shost_printk(KERN_WARNING, target->scsi_host, in srp_cm_rep_handler()
2284 for (i = 0; i < target->queue_size; i++) { in srp_cm_rep_handler()
2297 target->rq_tmo_jiffies = srp_compute_rq_tmo(qp_attr, attr_mask); in srp_cm_rep_handler()
2316 struct srp_target_port *target = ch->target; in srp_cm_rej_handler() local
2317 struct Scsi_Host *shost = target->scsi_host; in srp_cm_rej_handler()
2334 if (srp_target_is_topspin(target)) { in srp_cm_rej_handler()
2374 target->sgid.raw, in srp_cm_rej_handler()
2375 target->orig_dgid.raw, reason); in srp_cm_rej_handler()
2398 struct srp_target_port *target = ch->target; in srp_cm_handler() local
2403 shost_printk(KERN_DEBUG, target->scsi_host, in srp_cm_handler()
2415 shost_printk(KERN_DEBUG, target->scsi_host, PFX "REJ received\n"); in srp_cm_handler()
2422 shost_printk(KERN_WARNING, target->scsi_host, in srp_cm_handler()
2426 shost_printk(KERN_ERR, target->scsi_host, in srp_cm_handler()
2428 queue_work(system_long_wq, &target->tl_err_work); in srp_cm_handler()
2432 shost_printk(KERN_ERR, target->scsi_host, in srp_cm_handler()
2445 shost_printk(KERN_WARNING, target->scsi_host, in srp_cm_handler()
2474 struct srp_target_port *target = ch->target; in srp_send_tsk_mgmt() local
2475 struct srp_rport *rport = target->rport; in srp_send_tsk_mgmt()
2476 struct ib_device *dev = target->srp_host->srp_dev->dev; in srp_send_tsk_mgmt()
2480 if (!ch->connected || target->qp_in_error) in srp_send_tsk_mgmt()
2530 struct srp_target_port *target = host_to_target(scmnd->device->host); in srp_abort() local
2537 shost_printk(KERN_ERR, target->scsi_host, "SRP abort called\n"); in srp_abort()
2543 if (WARN_ON_ONCE(ch_idx >= target->ch_count)) in srp_abort()
2545 ch = &target->ch[ch_idx]; in srp_abort()
2548 shost_printk(KERN_ERR, target->scsi_host, in srp_abort()
2553 else if (target->rport->state == SRP_RPORT_LOST) in srp_abort()
2566 struct srp_target_port *target = host_to_target(scmnd->device->host); in srp_reset_device() local
2570 shost_printk(KERN_ERR, target->scsi_host, "SRP reset_device called\n"); in srp_reset_device()
2572 ch = &target->ch[0]; in srp_reset_device()
2579 for (i = 0; i < target->ch_count; i++) { in srp_reset_device()
2580 ch = &target->ch[i]; in srp_reset_device()
2581 for (i = 0; i < target->req_ring_size; ++i) { in srp_reset_device()
2593 struct srp_target_port *target = host_to_target(scmnd->device->host); in srp_reset_host() local
2595 shost_printk(KERN_ERR, target->scsi_host, PFX "SRP reset_host called\n"); in srp_reset_host()
2597 return srp_reconnect_rport(target->rport) == 0 ? SUCCESS : FAILED; in srp_reset_host()
2603 struct srp_target_port *target = host_to_target(shost); in srp_slave_configure() local
2608 timeout = max_t(unsigned, 30 * HZ, target->rq_tmo_jiffies); in srp_slave_configure()
2618 struct srp_target_port *target = host_to_target(class_to_shost(dev)); in show_id_ext() local
2620 return sprintf(buf, "0x%016llx\n", be64_to_cpu(target->id_ext)); in show_id_ext()
2626 struct srp_target_port *target = host_to_target(class_to_shost(dev)); in show_ioc_guid() local
2628 return sprintf(buf, "0x%016llx\n", be64_to_cpu(target->ioc_guid)); in show_ioc_guid()
2634 struct srp_target_port *target = host_to_target(class_to_shost(dev)); in show_service_id() local
2636 return sprintf(buf, "0x%016llx\n", be64_to_cpu(target->service_id)); in show_service_id()
2642 struct srp_target_port *target = host_to_target(class_to_shost(dev)); in show_pkey() local
2644 return sprintf(buf, "0x%04x\n", be16_to_cpu(target->pkey)); in show_pkey()
2650 struct srp_target_port *target = host_to_target(class_to_shost(dev)); in show_sgid() local
2652 return sprintf(buf, "%pI6\n", target->sgid.raw); in show_sgid()
2658 struct srp_target_port *target = host_to_target(class_to_shost(dev)); in show_dgid() local
2659 struct srp_rdma_ch *ch = &target->ch[0]; in show_dgid()
2667 struct srp_target_port *target = host_to_target(class_to_shost(dev)); in show_orig_dgid() local
2669 return sprintf(buf, "%pI6\n", target->orig_dgid.raw); in show_orig_dgid()
2675 struct srp_target_port *target = host_to_target(class_to_shost(dev)); in show_req_lim() local
2679 for (i = 0; i < target->ch_count; i++) { in show_req_lim()
2680 ch = &target->ch[i]; in show_req_lim()
2689 struct srp_target_port *target = host_to_target(class_to_shost(dev)); in show_zero_req_lim() local
2691 return sprintf(buf, "%d\n", target->zero_req_lim); in show_zero_req_lim()
2697 struct srp_target_port *target = host_to_target(class_to_shost(dev)); in show_local_ib_port() local
2699 return sprintf(buf, "%d\n", target->srp_host->port); in show_local_ib_port()
2705 struct srp_target_port *target = host_to_target(class_to_shost(dev)); in show_local_ib_device() local
2707 return sprintf(buf, "%s\n", target->srp_host->srp_dev->dev->name); in show_local_ib_device()
2713 struct srp_target_port *target = host_to_target(class_to_shost(dev)); in show_ch_count() local
2715 return sprintf(buf, "%d\n", target->ch_count); in show_ch_count()
2721 struct srp_target_port *target = host_to_target(class_to_shost(dev)); in show_comp_vector() local
2723 return sprintf(buf, "%d\n", target->comp_vector); in show_comp_vector()
2729 struct srp_target_port *target = host_to_target(class_to_shost(dev)); in show_tl_retry_count() local
2731 return sprintf(buf, "%d\n", target->tl_retry_count); in show_tl_retry_count()
2737 struct srp_target_port *target = host_to_target(class_to_shost(dev)); in show_cmd_sg_entries() local
2739 return sprintf(buf, "%u\n", target->cmd_sg_cnt); in show_cmd_sg_entries()
2745 struct srp_target_port *target = host_to_target(class_to_shost(dev)); in show_allow_ext_sg() local
2747 return sprintf(buf, "%s\n", target->allow_ext_sg ? "true" : "false"); in show_allow_ext_sg()
2826 static int srp_add_target(struct srp_host *host, struct srp_target_port *target) in srp_add_target() argument
2831 target->state = SRP_TARGET_SCANNING; in srp_add_target()
2832 sprintf(target->target_name, "SRP.T10:%016llX", in srp_add_target()
2833 be64_to_cpu(target->id_ext)); in srp_add_target()
2835 if (scsi_add_host(target->scsi_host, host->srp_dev->dev->dma_device)) in srp_add_target()
2838 memcpy(ids.port_id, &target->id_ext, 8); in srp_add_target()
2839 memcpy(ids.port_id + 8, &target->ioc_guid, 8); in srp_add_target()
2841 rport = srp_rport_add(target->scsi_host, &ids); in srp_add_target()
2843 scsi_remove_host(target->scsi_host); in srp_add_target()
2847 rport->lld_data = target; in srp_add_target()
2848 target->rport = rport; in srp_add_target()
2851 list_add_tail(&target->list, &host->target_list); in srp_add_target()
2854 scsi_scan_target(&target->scsi_host->shost_gendev, in srp_add_target()
2855 0, target->scsi_id, SCAN_WILD_CARD, 0); in srp_add_target()
2857 if (srp_connected_ch(target) < target->ch_count || in srp_add_target()
2858 target->qp_in_error) { in srp_add_target()
2859 shost_printk(KERN_INFO, target->scsi_host, in srp_add_target()
2861 srp_queue_remove_work(target); in srp_add_target()
2866 dev_name(&target->scsi_host->shost_gendev), in srp_add_target()
2867 srp_sdev_count(target->scsi_host)); in srp_add_target()
2869 spin_lock_irq(&target->lock); in srp_add_target()
2870 if (target->state == SRP_TARGET_SCANNING) in srp_add_target()
2871 target->state = SRP_TARGET_LIVE; in srp_add_target()
2872 spin_unlock_irq(&target->lock); in srp_add_target()
2897 struct srp_target_port *target) in srp_conn_unique() argument
2902 if (target->state == SRP_TARGET_REMOVED) in srp_conn_unique()
2909 if (t != target && in srp_conn_unique()
2910 target->id_ext == t->id_ext && in srp_conn_unique()
2911 target->ioc_guid == t->ioc_guid && in srp_conn_unique()
2912 target->initiator_ext == t->initiator_ext) { in srp_conn_unique()
2974 static int srp_parse_options(const char *buf, struct srp_target_port *target) in srp_parse_options() argument
3004 target->id_ext = cpu_to_be64(simple_strtoull(p, NULL, 16)); in srp_parse_options()
3014 target->ioc_guid = cpu_to_be64(simple_strtoull(p, NULL, 16)); in srp_parse_options()
3033 &target->orig_dgid.raw[i]) < 1) { in srp_parse_options()
3047 target->pkey = cpu_to_be16(token); in srp_parse_options()
3056 target->service_id = cpu_to_be64(simple_strtoull(p, NULL, 16)); in srp_parse_options()
3065 target->scsi_host->max_sectors = token; in srp_parse_options()
3073 target->scsi_host->can_queue = token; in srp_parse_options()
3074 target->queue_size = token + SRP_RSP_SQ_SIZE + in srp_parse_options()
3077 target->scsi_host->cmd_per_lun = token; in srp_parse_options()
3086 target->scsi_host->cmd_per_lun = token; in srp_parse_options()
3101 target->io_class = token; in srp_parse_options()
3110 target->initiator_ext = cpu_to_be64(simple_strtoull(p, NULL, 16)); in srp_parse_options()
3120 target->cmd_sg_cnt = token; in srp_parse_options()
3128 target->allow_ext_sg = !!token; in srp_parse_options()
3138 target->sg_tablesize = token; in srp_parse_options()
3146 target->comp_vector = token; in srp_parse_options()
3155 target->tl_retry_count = token; in srp_parse_options()
3174 if (target->scsi_host->cmd_per_lun > target->scsi_host->can_queue in srp_parse_options()
3177 target->scsi_host->cmd_per_lun, in srp_parse_options()
3178 target->scsi_host->can_queue); in srp_parse_options()
3192 struct srp_target_port *target; in srp_create_target() local
3210 target = host_to_target(target_host); in srp_create_target()
3212 target->io_class = SRP_REV16A_IB_IO_CLASS; in srp_create_target()
3213 target->scsi_host = target_host; in srp_create_target()
3214 target->srp_host = host; in srp_create_target()
3215 target->lkey = host->srp_dev->pd->local_dma_lkey; in srp_create_target()
3216 target->global_mr = host->srp_dev->global_mr; in srp_create_target()
3217 target->cmd_sg_cnt = cmd_sg_entries; in srp_create_target()
3218 target->sg_tablesize = indirect_sg_entries ? : cmd_sg_entries; in srp_create_target()
3219 target->allow_ext_sg = allow_ext_sg; in srp_create_target()
3220 target->tl_retry_count = 7; in srp_create_target()
3221 target->queue_size = SRP_DEFAULT_QUEUE_SIZE; in srp_create_target()
3227 scsi_host_get(target->scsi_host); in srp_create_target()
3231 ret = srp_parse_options(buf, target); in srp_create_target()
3235 target->req_ring_size = target->queue_size - SRP_TSK_MGMT_SQ_SIZE; in srp_create_target()
3237 if (!srp_conn_unique(target->srp_host, target)) { in srp_create_target()
3238 shost_printk(KERN_INFO, target->scsi_host, in srp_create_target()
3240 be64_to_cpu(target->id_ext), in srp_create_target()
3241 be64_to_cpu(target->ioc_guid), in srp_create_target()
3242 be64_to_cpu(target->initiator_ext)); in srp_create_target()
3247 if (!srp_dev->has_fmr && !srp_dev->has_fr && !target->allow_ext_sg && in srp_create_target()
3248 target->cmd_sg_cnt < target->sg_tablesize) { in srp_create_target()
3250 target->sg_tablesize = target->cmd_sg_cnt; in srp_create_target()
3253 target_host->sg_tablesize = target->sg_tablesize; in srp_create_target()
3254 target->indirect_size = target->sg_tablesize * in srp_create_target()
3256 target->max_iu_len = sizeof (struct srp_cmd) + in srp_create_target()
3258 target->cmd_sg_cnt * sizeof (struct srp_direct_buf); in srp_create_target()
3260 INIT_WORK(&target->tl_err_work, srp_tl_err_work); in srp_create_target()
3261 INIT_WORK(&target->remove_work, srp_remove_work); in srp_create_target()
3262 spin_lock_init(&target->lock); in srp_create_target()
3263 ret = ib_query_gid(ibdev, host->port, 0, &target->sgid, NULL); in srp_create_target()
3268 target->ch_count = max_t(unsigned, num_online_nodes(), in srp_create_target()
3273 target->ch = kcalloc(target->ch_count, sizeof(*target->ch), in srp_create_target()
3275 if (!target->ch) in srp_create_target()
3280 const int ch_start = (node_idx * target->ch_count / in srp_create_target()
3282 const int ch_end = ((node_idx + 1) * target->ch_count / in srp_create_target()
3285 num_online_nodes() + target->comp_vector) in srp_create_target()
3288 num_online_nodes() + target->comp_vector) in srp_create_target()
3297 ch = &target->ch[ch_start + cpu_idx]; in srp_create_target()
3298 ch->target = target; in srp_create_target()
3317 shost_printk(KERN_ERR, target->scsi_host, in srp_create_target()
3320 target->ch_count); in srp_create_target()
3324 srp_free_ch_ib(target, ch); in srp_create_target()
3325 srp_free_req_data(target, ch); in srp_create_target()
3326 target->ch_count = ch - target->ch; in srp_create_target()
3338 target->scsi_host->nr_hw_queues = target->ch_count; in srp_create_target()
3340 ret = srp_add_target(host, target); in srp_create_target()
3344 if (target->state != SRP_TARGET_REMOVED) { in srp_create_target()
3345 shost_printk(KERN_DEBUG, target->scsi_host, PFX in srp_create_target()
3347 be64_to_cpu(target->id_ext), in srp_create_target()
3348 be64_to_cpu(target->ioc_guid), in srp_create_target()
3349 be16_to_cpu(target->pkey), in srp_create_target()
3350 be64_to_cpu(target->service_id), in srp_create_target()
3351 target->sgid.raw, target->orig_dgid.raw); in srp_create_target()
3359 scsi_host_put(target->scsi_host); in srp_create_target()
3361 scsi_host_put(target->scsi_host); in srp_create_target()
3366 srp_disconnect_target(target); in srp_create_target()
3368 for (i = 0; i < target->ch_count; i++) { in srp_create_target()
3369 ch = &target->ch[i]; in srp_create_target()
3370 srp_free_ch_ib(target, ch); in srp_create_target()
3371 srp_free_req_data(target, ch); in srp_create_target()
3374 kfree(target->ch); in srp_create_target()
3537 struct srp_target_port *target; in srp_remove_one() local
3555 list_for_each_entry(target, &host->target_list, list) in srp_remove_one()
3556 srp_queue_remove_work(target); in srp_remove_one()