Lines Matching refs:target

201 static int srp_target_is_topspin(struct srp_target_port *target)  in srp_target_is_topspin()  argument
207 (!memcmp(&target->ioc_guid, topspin_oui, sizeof topspin_oui) || in srp_target_is_topspin()
208 !memcmp(&target->ioc_guid, cisco_oui, sizeof cisco_oui)); in srp_target_is_topspin()
259 static int srp_init_qp(struct srp_target_port *target, in srp_init_qp() argument
269 ret = ib_find_cached_pkey(target->srp_host->srp_dev->dev, in srp_init_qp()
270 target->srp_host->port, in srp_init_qp()
271 be16_to_cpu(target->pkey), in srp_init_qp()
279 attr->port_num = target->srp_host->port; in srp_init_qp()
294 struct srp_target_port *target = ch->target; in srp_new_cm_id() local
297 new_cm_id = ib_create_cm_id(target->srp_host->srp_dev->dev, in srp_new_cm_id()
305 ch->path.sgid = target->sgid; in srp_new_cm_id()
306 ch->path.dgid = target->orig_dgid; in srp_new_cm_id()
307 ch->path.pkey = target->pkey; in srp_new_cm_id()
308 ch->path.service_id = target->service_id; in srp_new_cm_id()
313 static struct ib_fmr_pool *srp_alloc_fmr_pool(struct srp_target_port *target) in srp_alloc_fmr_pool() argument
315 struct srp_device *dev = target->srp_host->srp_dev; in srp_alloc_fmr_pool()
319 fmr_param.pool_size = target->scsi_host->can_queue; in srp_alloc_fmr_pool()
448 static struct srp_fr_pool *srp_alloc_fr_pool(struct srp_target_port *target) in srp_alloc_fr_pool() argument
450 struct srp_device *dev = target->srp_host->srp_dev; in srp_alloc_fr_pool()
453 target->scsi_host->can_queue, in srp_alloc_fr_pool()
493 struct srp_target_port *target = ch->target; in srp_create_ch_ib() local
494 struct srp_device *dev = target->srp_host->srp_dev; in srp_create_ch_ib()
509 target->queue_size + 1, ch->comp_vector); in srp_create_ch_ib()
516 m * target->queue_size, ch->comp_vector); in srp_create_ch_ib()
525 init_attr->cap.max_send_wr = m * target->queue_size; in srp_create_ch_ib()
526 init_attr->cap.max_recv_wr = target->queue_size + 1; in srp_create_ch_ib()
540 ret = srp_init_qp(target, qp); in srp_create_ch_ib()
545 fr_pool = srp_alloc_fr_pool(target); in srp_create_ch_ib()
548 shost_printk(KERN_WARNING, target->scsi_host, PFX in srp_create_ch_ib()
556 fmr_pool = srp_alloc_fmr_pool(target); in srp_create_ch_ib()
559 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 (unsigned long long) 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()
838 if (!ch->target || !ch->req_ring) in srp_free_req_data()
841 for (i = 0; i < target->req_ring_size; ++i) { in srp_free_req_data()
850 target->indirect_size, in srp_free_req_data()
862 struct srp_target_port *target = ch->target; in srp_alloc_req_data() local
863 struct srp_device *srp_dev = target->srp_host->srp_dev; in srp_alloc_req_data()
870 ch->req_ring = kcalloc(target->req_ring_size, sizeof(*ch->req_ring), in srp_alloc_req_data()
875 for (i = 0; i < target->req_ring_size; ++i) { in srp_alloc_req_data()
877 mr_list = kmalloc(target->cmd_sg_cnt * sizeof(void *), in srp_alloc_req_data()
889 req->indirect_desc = kmalloc(target->indirect_size, GFP_KERNEL); in srp_alloc_req_data()
894 target->indirect_size, in srp_alloc_req_data()
922 static void srp_remove_target(struct srp_target_port *target) in srp_remove_target() argument
927 WARN_ON_ONCE(target->state != SRP_TARGET_REMOVED); in srp_remove_target()
929 srp_del_scsi_host_attr(target->scsi_host); in srp_remove_target()
930 srp_rport_get(target->rport); in srp_remove_target()
931 srp_remove_host(target->scsi_host); in srp_remove_target()
932 scsi_remove_host(target->scsi_host); in srp_remove_target()
933 srp_stop_rport_timers(target->rport); in srp_remove_target()
934 srp_disconnect_target(target); in srp_remove_target()
935 for (i = 0; i < target->ch_count; i++) { in srp_remove_target()
936 ch = &target->ch[i]; in srp_remove_target()
937 srp_free_ch_ib(target, ch); in srp_remove_target()
939 cancel_work_sync(&target->tl_err_work); in srp_remove_target()
940 srp_rport_put(target->rport); in srp_remove_target()
941 for (i = 0; i < target->ch_count; i++) { in srp_remove_target()
942 ch = &target->ch[i]; in srp_remove_target()
943 srp_free_req_data(target, ch); in srp_remove_target()
945 kfree(target->ch); in srp_remove_target()
946 target->ch = NULL; in srp_remove_target()
948 spin_lock(&target->srp_host->target_lock); in srp_remove_target()
949 list_del(&target->list); in srp_remove_target()
950 spin_unlock(&target->srp_host->target_lock); in srp_remove_target()
952 scsi_host_put(target->scsi_host); in srp_remove_target()
957 struct srp_target_port *target = in srp_remove_work() local
960 WARN_ON_ONCE(target->state != SRP_TARGET_REMOVED); in srp_remove_work()
962 srp_remove_target(target); in srp_remove_work()
967 struct srp_target_port *target = rport->lld_data; in srp_rport_delete() local
969 srp_queue_remove_work(target); in srp_rport_delete()
976 static int srp_connected_ch(struct srp_target_port *target) in srp_connected_ch() argument
980 for (i = 0; i < target->ch_count; i++) in srp_connected_ch()
981 c += target->ch[i].connected; in srp_connected_ch()
988 struct srp_target_port *target = ch->target; in srp_connect_ch() local
991 WARN_ON_ONCE(!multich && srp_connected_ch(target) > 0); in srp_connect_ch()
1027 shost_printk(KERN_ERR, target->scsi_host, PFX in srp_connect_ch()
1057 struct srp_target_port *target = ch->target; in srp_unmap_data() local
1058 struct srp_device *dev = target->srp_host->srp_dev; in srp_unmap_data()
1073 shost_printk(KERN_ERR, target->scsi_host, PFX in srp_unmap_data()
1077 &target->tl_err_work); in srp_unmap_data()
1159 struct srp_target_port *target = rport->lld_data; in srp_terminate_io() local
1161 struct Scsi_Host *shost = target->scsi_host; in srp_terminate_io()
1172 for (i = 0; i < target->ch_count; i++) { in srp_terminate_io()
1173 ch = &target->ch[i]; in srp_terminate_io()
1175 for (j = 0; j < target->req_ring_size; ++j) { in srp_terminate_io()
1195 struct srp_target_port *target = rport->lld_data; in srp_rport_reconnect() local
1200 srp_disconnect_target(target); in srp_rport_reconnect()
1202 if (target->state == SRP_TARGET_SCANNING) in srp_rport_reconnect()
1210 for (i = 0; i < target->ch_count; i++) { in srp_rport_reconnect()
1211 ch = &target->ch[i]; in srp_rport_reconnect()
1212 if (!ch->target) 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()
1218 if (!ch->target) in srp_rport_reconnect()
1220 for (j = 0; j < target->req_ring_size; ++j) { in srp_rport_reconnect()
1226 for (i = 0; i < target->ch_count; i++) { in srp_rport_reconnect()
1227 ch = &target->ch[i]; in srp_rport_reconnect()
1228 if (!ch->target) 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()
1246 if (ret || !ch->target) in srp_rport_reconnect()
1253 shost_printk(KERN_INFO, target->scsi_host, in srp_rport_reconnect()
1295 struct srp_target_port *target = ch->target; in srp_map_finish_fr() local
1296 struct srp_device *dev = target->srp_host->srp_dev; in srp_map_finish_fr()
1337 struct srp_target_port *target = ch->target; in srp_finish_mapping() local
1345 target->rkey); in srp_finish_mapping()
1347 ret = target->srp_host->srp_dev->use_fast_reg ? in srp_finish_mapping()
1373 struct srp_target_port *target = ch->target; in srp_map_sg_entry() local
1374 struct srp_device *dev = target->srp_host->srp_dev; in srp_map_sg_entry()
1390 srp_map_desc(state, dma_addr, dma_len, target->rkey); in srp_map_sg_entry()
1406 srp_map_desc(state, dma_addr, dma_len, target->rkey); in srp_map_sg_entry()
1458 struct srp_target_port *target = ch->target; in srp_map_sg() local
1459 struct srp_device *dev = target->srp_host->srp_dev; in srp_map_sg()
1494 srp_map_desc(state, dma_addr, dma_len, target->rkey); in srp_map_sg()
1509 struct srp_target_port *target = ch->target; in srp_map_data() local
1525 shost_printk(KERN_WARNING, target->scsi_host, in srp_map_data()
1534 dev = target->srp_host->srp_dev; in srp_map_data()
1554 buf->key = cpu_to_be32(target->rkey); in srp_map_data()
1568 target->indirect_size, DMA_TO_DEVICE); in srp_map_data()
1590 if (unlikely(target->cmd_sg_cnt < state.ndesc && in srp_map_data()
1591 !target->allow_ext_sg)) { in srp_map_data()
1592 shost_printk(KERN_ERR, target->scsi_host, in srp_map_data()
1597 count = min(state.ndesc, target->cmd_sg_cnt); in srp_map_data()
1608 indirect_hdr->table_desc.key = cpu_to_be32(target->rkey); in srp_map_data()
1660 struct srp_target_port *target = ch->target; in __srp_get_tx_iu() local
1672 ++target->zero_req_lim; in __srp_get_tx_iu()
1686 struct srp_target_port *target = ch->target; in srp_post_send() local
1692 list.lkey = target->lkey; in srp_post_send()
1706 struct srp_target_port *target = ch->target; in srp_post_recv() local
1712 list.lkey = target->lkey; in srp_post_recv()
1724 struct srp_target_port *target = ch->target; in srp_process_rsp() local
1739 scmnd = scsi_host_find_tag(target->scsi_host, rsp->tag); in srp_process_rsp()
1745 shost_printk(KERN_ERR, target->scsi_host, in srp_process_rsp()
1747 rsp->tag, ch - target->ch, ch->qp->qp_num); in srp_process_rsp()
1784 struct srp_target_port *target = ch->target; in srp_response_common() local
1785 struct ib_device *dev = target->srp_host->srp_dev->dev; in srp_response_common()
1796 shost_printk(KERN_ERR, target->scsi_host, PFX in srp_response_common()
1807 shost_printk(KERN_ERR, target->scsi_host, PFX in srp_response_common()
1825 shost_printk(KERN_ERR, ch->target->scsi_host, PFX in srp_process_cred_req()
1832 struct srp_target_port *target = ch->target; in srp_process_aer_req() local
1839 shost_printk(KERN_ERR, target->scsi_host, PFX in srp_process_aer_req()
1843 shost_printk(KERN_ERR, target->scsi_host, PFX in srp_process_aer_req()
1849 struct srp_target_port *target = ch->target; in srp_handle_recv() local
1850 struct ib_device *dev = target->srp_host->srp_dev->dev; in srp_handle_recv()
1861 shost_printk(KERN_ERR, target->scsi_host, in srp_handle_recv()
1882 shost_printk(KERN_WARNING, target->scsi_host, in srp_handle_recv()
1887 shost_printk(KERN_WARNING, target->scsi_host, in srp_handle_recv()
1897 shost_printk(KERN_ERR, target->scsi_host, in srp_handle_recv()
1910 struct srp_target_port *target; in srp_tl_err_work() local
1912 target = container_of(work, struct srp_target_port, tl_err_work); in srp_tl_err_work()
1913 if (target->rport) in srp_tl_err_work()
1914 srp_start_tl_fail_timers(target->rport); in srp_tl_err_work()
1920 struct srp_target_port *target = ch->target; in srp_handle_qp_err() local
1927 if (ch->connected && !target->qp_in_error) { in srp_handle_qp_err()
1929 shost_printk(KERN_ERR, target->scsi_host, PFX in srp_handle_qp_err()
1933 shost_printk(KERN_ERR, target->scsi_host, PFX in srp_handle_qp_err()
1937 shost_printk(KERN_ERR, target->scsi_host, in srp_handle_qp_err()
1942 queue_work(system_long_wq, &target->tl_err_work); in srp_handle_qp_err()
1944 target->qp_in_error = true; in srp_handle_qp_err()
1980 struct srp_target_port *target = host_to_target(shost); in srp_queuecommand() local
1981 struct srp_rport *rport = target->rport; in srp_queuecommand()
2002 scmnd->result = srp_chkready(target->rport); in srp_queuecommand()
2008 ch = &target->ch[blk_mq_unique_tag_to_hwq(tag)]; in srp_queuecommand()
2010 WARN_ONCE(idx >= target->req_ring_size, "%s: tag %#x: idx %d >= %d\n", in srp_queuecommand()
2012 target->req_ring_size); in srp_queuecommand()
2022 dev = target->srp_host->srp_dev->dev; in srp_queuecommand()
2023 ib_dma_sync_single_for_cpu(dev, iu->dma, target->max_iu_len, in srp_queuecommand()
2041 shost_printk(KERN_ERR, target->scsi_host, in srp_queuecommand()
2054 ib_dma_sync_single_for_device(dev, iu->dma, target->max_iu_len, in srp_queuecommand()
2058 shost_printk(KERN_ERR, target->scsi_host, PFX "Send failed\n"); in srp_queuecommand()
2099 struct srp_target_port *target = ch->target; in srp_alloc_iu_bufs() local
2102 ch->rx_ring = kcalloc(target->queue_size, sizeof(*ch->rx_ring), in srp_alloc_iu_bufs()
2106 ch->tx_ring = kcalloc(target->queue_size, sizeof(*ch->tx_ring), in srp_alloc_iu_bufs()
2111 for (i = 0; i < target->queue_size; ++i) { in srp_alloc_iu_bufs()
2112 ch->rx_ring[i] = srp_alloc_iu(target->srp_host, in srp_alloc_iu_bufs()
2119 for (i = 0; i < target->queue_size; ++i) { in srp_alloc_iu_bufs()
2120 ch->tx_ring[i] = srp_alloc_iu(target->srp_host, in srp_alloc_iu_bufs()
2121 target->max_iu_len, in srp_alloc_iu_bufs()
2132 for (i = 0; i < target->queue_size; ++i) { in srp_alloc_iu_bufs()
2133 srp_free_iu(target->srp_host, ch->rx_ring[i]); in srp_alloc_iu_bufs()
2134 srp_free_iu(target->srp_host, ch->tx_ring[i]); in srp_alloc_iu_bufs()
2178 struct srp_target_port *target = ch->target; in srp_cm_rep_handler() local
2192 target->scsi_host->can_queue in srp_cm_rep_handler()
2194 target->scsi_host->can_queue); in srp_cm_rep_handler()
2195 target->scsi_host->cmd_per_lun in srp_cm_rep_handler()
2196 = min_t(int, target->scsi_host->can_queue, in srp_cm_rep_handler()
2197 target->scsi_host->cmd_per_lun); in srp_cm_rep_handler()
2199 shost_printk(KERN_WARNING, target->scsi_host, in srp_cm_rep_handler()
2225 for (i = 0; i < target->queue_size; i++) { in srp_cm_rep_handler()
2238 target->rq_tmo_jiffies = srp_compute_rq_tmo(qp_attr, attr_mask); in srp_cm_rep_handler()
2257 struct srp_target_port *target = ch->target; in srp_cm_rej_handler() local
2258 struct Scsi_Host *shost = target->scsi_host; in srp_cm_rej_handler()
2275 if (srp_target_is_topspin(target)) { in srp_cm_rej_handler()
2315 target->sgid.raw, in srp_cm_rej_handler()
2316 target->orig_dgid.raw, reason); in srp_cm_rej_handler()
2339 struct srp_target_port *target = ch->target; in srp_cm_handler() local
2344 shost_printk(KERN_DEBUG, target->scsi_host, in srp_cm_handler()
2356 shost_printk(KERN_DEBUG, target->scsi_host, PFX "REJ received\n"); in srp_cm_handler()
2363 shost_printk(KERN_WARNING, target->scsi_host, in srp_cm_handler()
2367 shost_printk(KERN_ERR, target->scsi_host, in srp_cm_handler()
2369 queue_work(system_long_wq, &target->tl_err_work); in srp_cm_handler()
2373 shost_printk(KERN_ERR, target->scsi_host, in srp_cm_handler()
2386 shost_printk(KERN_WARNING, target->scsi_host, in srp_cm_handler()
2415 struct srp_target_port *target = ch->target; in srp_send_tsk_mgmt() local
2416 struct srp_rport *rport = target->rport; in srp_send_tsk_mgmt()
2417 struct ib_device *dev = target->srp_host->srp_dev->dev; in srp_send_tsk_mgmt()
2421 if (!ch->connected || target->qp_in_error) in srp_send_tsk_mgmt()
2471 struct srp_target_port *target = host_to_target(scmnd->device->host); in srp_abort() local
2478 shost_printk(KERN_ERR, target->scsi_host, "SRP abort called\n"); in srp_abort()
2484 if (WARN_ON_ONCE(ch_idx >= target->ch_count)) in srp_abort()
2486 ch = &target->ch[ch_idx]; in srp_abort()
2489 shost_printk(KERN_ERR, target->scsi_host, in srp_abort()
2494 else if (target->rport->state == SRP_RPORT_LOST) in srp_abort()
2507 struct srp_target_port *target = host_to_target(scmnd->device->host); in srp_reset_device() local
2511 shost_printk(KERN_ERR, target->scsi_host, "SRP reset_device called\n"); in srp_reset_device()
2513 ch = &target->ch[0]; in srp_reset_device()
2520 for (i = 0; i < target->ch_count; i++) { in srp_reset_device()
2521 ch = &target->ch[i]; in srp_reset_device()
2522 for (i = 0; i < target->req_ring_size; ++i) { in srp_reset_device()
2534 struct srp_target_port *target = host_to_target(scmnd->device->host); in srp_reset_host() local
2536 shost_printk(KERN_ERR, target->scsi_host, PFX "SRP reset_host called\n"); in srp_reset_host()
2538 return srp_reconnect_rport(target->rport) == 0 ? SUCCESS : FAILED; in srp_reset_host()
2544 struct srp_target_port *target = host_to_target(shost); in srp_slave_configure() local
2549 timeout = max_t(unsigned, 30 * HZ, target->rq_tmo_jiffies); in srp_slave_configure()
2559 struct srp_target_port *target = host_to_target(class_to_shost(dev)); in show_id_ext() local
2562 (unsigned long long) be64_to_cpu(target->id_ext)); in show_id_ext()
2568 struct srp_target_port *target = host_to_target(class_to_shost(dev)); in show_ioc_guid() local
2571 (unsigned long long) be64_to_cpu(target->ioc_guid)); in show_ioc_guid()
2577 struct srp_target_port *target = host_to_target(class_to_shost(dev)); in show_service_id() local
2580 (unsigned long long) be64_to_cpu(target->service_id)); in show_service_id()
2586 struct srp_target_port *target = host_to_target(class_to_shost(dev)); in show_pkey() local
2588 return sprintf(buf, "0x%04x\n", be16_to_cpu(target->pkey)); in show_pkey()
2594 struct srp_target_port *target = host_to_target(class_to_shost(dev)); in show_sgid() local
2596 return sprintf(buf, "%pI6\n", target->sgid.raw); in show_sgid()
2602 struct srp_target_port *target = host_to_target(class_to_shost(dev)); in show_dgid() local
2603 struct srp_rdma_ch *ch = &target->ch[0]; in show_dgid()
2611 struct srp_target_port *target = host_to_target(class_to_shost(dev)); in show_orig_dgid() local
2613 return sprintf(buf, "%pI6\n", target->orig_dgid.raw); in show_orig_dgid()
2619 struct srp_target_port *target = host_to_target(class_to_shost(dev)); in show_req_lim() local
2623 for (i = 0; i < target->ch_count; i++) { in show_req_lim()
2624 ch = &target->ch[i]; in show_req_lim()
2633 struct srp_target_port *target = host_to_target(class_to_shost(dev)); in show_zero_req_lim() local
2635 return sprintf(buf, "%d\n", target->zero_req_lim); in show_zero_req_lim()
2641 struct srp_target_port *target = host_to_target(class_to_shost(dev)); in show_local_ib_port() local
2643 return sprintf(buf, "%d\n", target->srp_host->port); in show_local_ib_port()
2649 struct srp_target_port *target = host_to_target(class_to_shost(dev)); in show_local_ib_device() local
2651 return sprintf(buf, "%s\n", target->srp_host->srp_dev->dev->name); in show_local_ib_device()
2657 struct srp_target_port *target = host_to_target(class_to_shost(dev)); in show_ch_count() local
2659 return sprintf(buf, "%d\n", target->ch_count); in show_ch_count()
2665 struct srp_target_port *target = host_to_target(class_to_shost(dev)); in show_comp_vector() local
2667 return sprintf(buf, "%d\n", target->comp_vector); in show_comp_vector()
2673 struct srp_target_port *target = host_to_target(class_to_shost(dev)); in show_tl_retry_count() local
2675 return sprintf(buf, "%d\n", target->tl_retry_count); in show_tl_retry_count()
2681 struct srp_target_port *target = host_to_target(class_to_shost(dev)); in show_cmd_sg_entries() local
2683 return sprintf(buf, "%u\n", target->cmd_sg_cnt); in show_cmd_sg_entries()
2689 struct srp_target_port *target = host_to_target(class_to_shost(dev)); in show_allow_ext_sg() local
2691 return sprintf(buf, "%s\n", target->allow_ext_sg ? "true" : "false"); in show_allow_ext_sg()
2771 static int srp_add_target(struct srp_host *host, struct srp_target_port *target) in srp_add_target() argument
2776 target->state = SRP_TARGET_SCANNING; in srp_add_target()
2777 sprintf(target->target_name, "SRP.T10:%016llX", in srp_add_target()
2778 (unsigned long long) be64_to_cpu(target->id_ext)); in srp_add_target()
2780 if (scsi_add_host(target->scsi_host, host->srp_dev->dev->dma_device)) in srp_add_target()
2783 memcpy(ids.port_id, &target->id_ext, 8); in srp_add_target()
2784 memcpy(ids.port_id + 8, &target->ioc_guid, 8); in srp_add_target()
2786 rport = srp_rport_add(target->scsi_host, &ids); in srp_add_target()
2788 scsi_remove_host(target->scsi_host); in srp_add_target()
2792 rport->lld_data = target; in srp_add_target()
2793 target->rport = rport; in srp_add_target()
2796 list_add_tail(&target->list, &host->target_list); in srp_add_target()
2799 scsi_scan_target(&target->scsi_host->shost_gendev, in srp_add_target()
2800 0, target->scsi_id, SCAN_WILD_CARD, 0); in srp_add_target()
2802 if (srp_connected_ch(target) < target->ch_count || in srp_add_target()
2803 target->qp_in_error) { in srp_add_target()
2804 shost_printk(KERN_INFO, target->scsi_host, in srp_add_target()
2806 srp_queue_remove_work(target); in srp_add_target()
2811 dev_name(&target->scsi_host->shost_gendev), in srp_add_target()
2812 srp_sdev_count(target->scsi_host)); in srp_add_target()
2814 spin_lock_irq(&target->lock); in srp_add_target()
2815 if (target->state == SRP_TARGET_SCANNING) in srp_add_target()
2816 target->state = SRP_TARGET_LIVE; in srp_add_target()
2817 spin_unlock_irq(&target->lock); in srp_add_target()
2842 struct srp_target_port *target) in srp_conn_unique() argument
2847 if (target->state == SRP_TARGET_REMOVED) in srp_conn_unique()
2854 if (t != target && in srp_conn_unique()
2855 target->id_ext == t->id_ext && in srp_conn_unique()
2856 target->ioc_guid == t->ioc_guid && in srp_conn_unique()
2857 target->initiator_ext == t->initiator_ext) { in srp_conn_unique()
2919 static int srp_parse_options(const char *buf, struct srp_target_port *target) in srp_parse_options() argument
2949 target->id_ext = cpu_to_be64(simple_strtoull(p, NULL, 16)); in srp_parse_options()
2959 target->ioc_guid = cpu_to_be64(simple_strtoull(p, NULL, 16)); in srp_parse_options()
2978 &target->orig_dgid.raw[i]) < 1) { in srp_parse_options()
2992 target->pkey = cpu_to_be16(token); in srp_parse_options()
3001 target->service_id = cpu_to_be64(simple_strtoull(p, NULL, 16)); in srp_parse_options()
3010 target->scsi_host->max_sectors = token; in srp_parse_options()
3018 target->scsi_host->can_queue = token; in srp_parse_options()
3019 target->queue_size = token + SRP_RSP_SQ_SIZE + in srp_parse_options()
3022 target->scsi_host->cmd_per_lun = token; in srp_parse_options()
3031 target->scsi_host->cmd_per_lun = token; in srp_parse_options()
3046 target->io_class = token; in srp_parse_options()
3055 target->initiator_ext = cpu_to_be64(simple_strtoull(p, NULL, 16)); in srp_parse_options()
3065 target->cmd_sg_cnt = token; in srp_parse_options()
3073 target->allow_ext_sg = !!token; in srp_parse_options()
3083 target->sg_tablesize = token; in srp_parse_options()
3091 target->comp_vector = token; in srp_parse_options()
3100 target->tl_retry_count = token; in srp_parse_options()
3119 if (target->scsi_host->cmd_per_lun > target->scsi_host->can_queue in srp_parse_options()
3122 target->scsi_host->cmd_per_lun, in srp_parse_options()
3123 target->scsi_host->can_queue); in srp_parse_options()
3137 struct srp_target_port *target; in srp_create_target() local
3155 target = host_to_target(target_host); in srp_create_target()
3157 target->io_class = SRP_REV16A_IB_IO_CLASS; in srp_create_target()
3158 target->scsi_host = target_host; in srp_create_target()
3159 target->srp_host = host; in srp_create_target()
3160 target->lkey = host->srp_dev->mr->lkey; in srp_create_target()
3161 target->rkey = host->srp_dev->mr->rkey; in srp_create_target()
3162 target->cmd_sg_cnt = cmd_sg_entries; in srp_create_target()
3163 target->sg_tablesize = indirect_sg_entries ? : cmd_sg_entries; in srp_create_target()
3164 target->allow_ext_sg = allow_ext_sg; in srp_create_target()
3165 target->tl_retry_count = 7; in srp_create_target()
3166 target->queue_size = SRP_DEFAULT_QUEUE_SIZE; in srp_create_target()
3172 scsi_host_get(target->scsi_host); in srp_create_target()
3176 ret = srp_parse_options(buf, target); in srp_create_target()
3184 target->req_ring_size = target->queue_size - SRP_TSK_MGMT_SQ_SIZE; in srp_create_target()
3186 if (!srp_conn_unique(target->srp_host, target)) { in srp_create_target()
3187 shost_printk(KERN_INFO, target->scsi_host, in srp_create_target()
3189 be64_to_cpu(target->id_ext), in srp_create_target()
3190 be64_to_cpu(target->ioc_guid), in srp_create_target()
3191 be64_to_cpu(target->initiator_ext)); in srp_create_target()
3196 if (!srp_dev->has_fmr && !srp_dev->has_fr && !target->allow_ext_sg && in srp_create_target()
3197 target->cmd_sg_cnt < target->sg_tablesize) { in srp_create_target()
3199 target->sg_tablesize = target->cmd_sg_cnt; in srp_create_target()
3202 target_host->sg_tablesize = target->sg_tablesize; in srp_create_target()
3203 target->indirect_size = target->sg_tablesize * in srp_create_target()
3205 target->max_iu_len = sizeof (struct srp_cmd) + in srp_create_target()
3207 target->cmd_sg_cnt * sizeof (struct srp_direct_buf); in srp_create_target()
3209 INIT_WORK(&target->tl_err_work, srp_tl_err_work); in srp_create_target()
3210 INIT_WORK(&target->remove_work, srp_remove_work); in srp_create_target()
3211 spin_lock_init(&target->lock); in srp_create_target()
3212 ret = ib_query_gid(ibdev, host->port, 0, &target->sgid); in srp_create_target()
3217 target->ch_count = max_t(unsigned, num_online_nodes(), in srp_create_target()
3222 target->ch = kcalloc(target->ch_count, sizeof(*target->ch), in srp_create_target()
3224 if (!target->ch) in srp_create_target()
3229 const int ch_start = (node_idx * target->ch_count / in srp_create_target()
3231 const int ch_end = ((node_idx + 1) * target->ch_count / in srp_create_target()
3234 num_online_nodes() + target->comp_vector) in srp_create_target()
3237 num_online_nodes() + target->comp_vector) in srp_create_target()
3246 ch = &target->ch[ch_start + cpu_idx]; in srp_create_target()
3247 ch->target = target; in srp_create_target()
3266 shost_printk(KERN_ERR, target->scsi_host, in srp_create_target()
3269 target->ch_count); in srp_create_target()
3273 srp_free_ch_ib(target, ch); in srp_create_target()
3274 srp_free_req_data(target, ch); in srp_create_target()
3275 target->ch_count = ch - target->ch; in srp_create_target()
3287 target->scsi_host->nr_hw_queues = target->ch_count; in srp_create_target()
3289 ret = srp_add_target(host, target); in srp_create_target()
3293 if (target->state != SRP_TARGET_REMOVED) { in srp_create_target()
3294 shost_printk(KERN_DEBUG, target->scsi_host, PFX in srp_create_target()
3296 be64_to_cpu(target->id_ext), in srp_create_target()
3297 be64_to_cpu(target->ioc_guid), in srp_create_target()
3298 be16_to_cpu(target->pkey), in srp_create_target()
3299 be64_to_cpu(target->service_id), in srp_create_target()
3300 target->sgid.raw, target->orig_dgid.raw); in srp_create_target()
3308 scsi_host_put(target->scsi_host); in srp_create_target()
3310 scsi_host_put(target->scsi_host); in srp_create_target()
3315 srp_disconnect_target(target); in srp_create_target()
3317 for (i = 0; i < target->ch_count; i++) { in srp_create_target()
3318 ch = &target->ch[i]; in srp_create_target()
3319 srp_free_ch_ib(target, ch); in srp_create_target()
3320 srp_free_req_data(target, ch); in srp_create_target()
3323 kfree(target->ch); in srp_create_target()
3489 struct srp_target_port *target; in srp_remove_one() local
3507 list_for_each_entry(target, &host->target_list, list) in srp_remove_one()
3508 srp_queue_remove_work(target); in srp_remove_one()