Lines Matching refs:sdev
118 static inline const char *srpt_sdev_name(struct srpt_device *sdev) in srpt_sdev_name() argument
120 return sdev->device->name; in srpt_sdev_name()
178 struct srpt_device *sdev; in srpt_event_handler() local
181 sdev = ib_get_client_data(event->device, &srpt_client); in srpt_event_handler()
182 if (!sdev || sdev->device != event->device) in srpt_event_handler()
186 srpt_sdev_name(sdev)); in srpt_event_handler()
190 if (event->element.port_num <= sdev->device->phys_port_cnt) { in srpt_event_handler()
191 sport = &sdev->port[event->element.port_num - 1]; in srpt_event_handler()
203 if (event->element.port_num <= sdev->device->phys_port_cnt) { in srpt_event_handler()
204 sport = &sdev->port[event->element.port_num - 1]; in srpt_event_handler()
327 struct srpt_device *sdev = sport->sdev; in srpt_get_ioc() local
347 iocp->vendor_id = cpu_to_be32(sdev->dev_attr.vendor_id); in srpt_get_ioc()
348 iocp->device_id = cpu_to_be32(sdev->dev_attr.vendor_part_id); in srpt_get_ioc()
349 iocp->device_version = cpu_to_be16(sdev->dev_attr.hw_ver); in srpt_get_ioc()
350 iocp->subsys_vendor_id = cpu_to_be32(sdev->dev_attr.vendor_id); in srpt_get_ioc()
356 iocp->send_queue_depth = cpu_to_be16(sdev->srq_size); in srpt_get_ioc()
538 ret = ib_modify_port(sport->sdev->device, sport->port, 0, &port_modify); in srpt_refresh_port()
542 ret = ib_query_port(sport->sdev->device, sport->port, &port_attr); in srpt_refresh_port()
549 ret = ib_query_gid(sport->sdev->device, sport->port, 0, &sport->gid); in srpt_refresh_port()
560 sport->mad_agent = ib_register_mad_agent(sport->sdev->device, in srpt_refresh_port()
580 ib_modify_port(sport->sdev->device, sport->port, 0, &port_modify); in srpt_refresh_port()
592 static void srpt_unregister_mad_agent(struct srpt_device *sdev) in srpt_unregister_mad_agent() argument
600 for (i = 1; i <= sdev->device->phys_port_cnt; i++) { in srpt_unregister_mad_agent()
601 sport = &sdev->port[i - 1]; in srpt_unregister_mad_agent()
603 if (ib_modify_port(sdev->device, i, 0, &port_modify) < 0) in srpt_unregister_mad_agent()
615 static struct srpt_ioctx *srpt_alloc_ioctx(struct srpt_device *sdev, in srpt_alloc_ioctx() argument
629 ioctx->dma = ib_dma_map_single(sdev->device, ioctx->buf, dma_size, dir); in srpt_alloc_ioctx()
630 if (ib_dma_mapping_error(sdev->device, ioctx->dma)) in srpt_alloc_ioctx()
646 static void srpt_free_ioctx(struct srpt_device *sdev, struct srpt_ioctx *ioctx, in srpt_free_ioctx() argument
652 ib_dma_unmap_single(sdev->device, ioctx->dma, dma_size, dir); in srpt_free_ioctx()
665 static struct srpt_ioctx **srpt_alloc_ioctx_ring(struct srpt_device *sdev, in srpt_alloc_ioctx_ring() argument
679 ring[i] = srpt_alloc_ioctx(sdev, ioctx_size, dma_size, dir); in srpt_alloc_ioctx_ring()
688 srpt_free_ioctx(sdev, ring[i], dma_size, dir); in srpt_alloc_ioctx_ring()
699 struct srpt_device *sdev, int ring_size, in srpt_free_ioctx_ring() argument
705 srpt_free_ioctx(sdev, ioctx_ring[i], dma_size, dir); in srpt_free_ioctx_ring()
775 static int srpt_post_recv(struct srpt_device *sdev, in srpt_post_recv() argument
781 BUG_ON(!sdev); in srpt_post_recv()
786 list.lkey = sdev->mr->lkey; in srpt_post_recv()
792 return ib_post_srq_recv(sdev->srq, &wr, &bad_wr); in srpt_post_recv()
805 struct srpt_device *sdev = ch->sport->sdev; in srpt_post_send() local
816 ib_dma_sync_single_for_device(sdev->device, ioctx->ioctx.dma, len, in srpt_post_send()
821 list.lkey = sdev->mr->lkey; in srpt_post_send()
1069 ib_dma_unmap_sg(ch->sport->sdev->device, sg, ioctx->sg_cnt, in srpt_unmap_sg_to_ib_sge()
1081 struct ib_device *dev = ch->sport->sdev->device; in srpt_map_sg_to_ib_sge()
1106 count = ib_dma_map_sg(ch->sport->sdev->device, sg, sg_cnt, in srpt_map_sg_to_ib_sge()
1209 sge->lkey = ch->sport->sdev->mr->lkey; in srpt_map_sg_to_ib_sge()
1823 ib_dma_sync_single_for_cpu(ch->sport->sdev->device, in srpt_handle_new_iu()
1872 srpt_post_recv(ch->sport->sdev, recv_ioctx); in srpt_handle_new_iu()
1881 struct srpt_device *sdev = ch->sport->sdev; in srpt_process_rcv_completion() local
1892 ioctx = sdev->ioctx_ring[index]; in srpt_process_rcv_completion()
2024 struct srpt_device *sdev = sport->sdev; in srpt_create_ch_ib() local
2036 ch->cq = ib_create_cq(sdev->device, srpt_completion, NULL, ch, in srpt_create_ch_ib()
2050 qp_init->srq = sdev->srq; in srpt_create_ch_ib()
2056 ch->qp = ib_create_qp(sdev->pd, qp_init); in srpt_create_ch_ib()
2122 struct srpt_device *sdev; in __srpt_close_ch() local
2126 sdev = ch->sport->sdev; in __srpt_close_ch()
2162 struct srpt_device *sdev; in srpt_close_ch() local
2164 sdev = ch->sport->sdev; in srpt_close_ch()
2165 spin_lock_irq(&sdev->spinlock); in srpt_close_ch()
2167 spin_unlock_irq(&sdev->spinlock); in srpt_close_ch()
2205 struct srpt_device *sdev; in srpt_drain_channel() local
2212 sdev = cm_id->context; in srpt_drain_channel()
2213 BUG_ON(!sdev); in srpt_drain_channel()
2214 spin_lock_irq(&sdev->spinlock); in srpt_drain_channel()
2215 list_for_each_entry(ch, &sdev->rch_list, list) { in srpt_drain_channel()
2226 spin_unlock_irq(&sdev->spinlock); in srpt_drain_channel()
2245 static struct srpt_rdma_ch *srpt_find_channel(struct srpt_device *sdev, in srpt_find_channel() argument
2252 BUG_ON(!sdev); in srpt_find_channel()
2255 spin_lock_irq(&sdev->spinlock); in srpt_find_channel()
2256 list_for_each_entry(ch, &sdev->rch_list, list) { in srpt_find_channel()
2262 spin_unlock_irq(&sdev->spinlock); in srpt_find_channel()
2283 struct srpt_device *sdev; in srpt_release_channel_work() local
2290 sdev = ch->sport->sdev; in srpt_release_channel_work()
2291 BUG_ON(!sdev); in srpt_release_channel_work()
2307 ch->sport->sdev, ch->rq_size, in srpt_release_channel_work()
2310 spin_lock_irq(&sdev->spinlock); in srpt_release_channel_work()
2312 spin_unlock_irq(&sdev->spinlock); in srpt_release_channel_work()
2317 wake_up(&sdev->ch_releaseQ); in srpt_release_channel_work()
2357 struct srpt_device *sdev = cm_id->context; in srpt_cm_req_recv() local
2358 struct srpt_port *sport = &sdev->port[param->port - 1]; in srpt_cm_req_recv()
2371 if (WARN_ON(!sdev || !private_data)) in srpt_cm_req_recv()
2387 be64_to_cpu(*(__be64 *)&sdev->port[param->port - 1].gid.raw[0]), in srpt_cm_req_recv()
2388 be64_to_cpu(*(__be64 *)&sdev->port[param->port - 1].gid.raw[8])); in srpt_cm_req_recv()
2421 spin_lock_irq(&sdev->spinlock); in srpt_cm_req_recv()
2423 list_for_each_entry_safe(ch, tmp_ch, &sdev->rch_list, list) { in srpt_cm_req_recv()
2427 && param->listen_id == ch->sport->sdev->cm_id in srpt_cm_req_recv()
2448 spin_unlock_irq(&sdev->spinlock); in srpt_cm_req_recv()
2476 ch->sport = &sdev->port[param->port - 1]; in srpt_cm_req_recv()
2489 srpt_alloc_ioctx_ring(ch->sport->sdev, ch->rq_size, in srpt_cm_req_recv()
2579 spin_lock_irq(&sdev->spinlock); in srpt_cm_req_recv()
2580 list_add_tail(&ch->list, &sdev->rch_list); in srpt_cm_req_recv()
2581 spin_unlock_irq(&sdev->spinlock); in srpt_cm_req_recv()
2598 ch->sport->sdev, ch->rq_size, in srpt_cm_req_recv()
3064 static int srpt_ch_list_empty(struct srpt_device *sdev) in srpt_ch_list_empty() argument
3068 spin_lock_irq(&sdev->spinlock); in srpt_ch_list_empty()
3069 res = list_empty(&sdev->rch_list); in srpt_ch_list_empty()
3070 spin_unlock_irq(&sdev->spinlock); in srpt_ch_list_empty()
3078 static int srpt_release_sdev(struct srpt_device *sdev) in srpt_release_sdev() argument
3085 BUG_ON(!sdev); in srpt_release_sdev()
3087 spin_lock_irq(&sdev->spinlock); in srpt_release_sdev()
3088 list_for_each_entry_safe(ch, tmp_ch, &sdev->rch_list, list) in srpt_release_sdev()
3090 spin_unlock_irq(&sdev->spinlock); in srpt_release_sdev()
3092 res = wait_event_interruptible(sdev->ch_releaseQ, in srpt_release_sdev()
3093 srpt_ch_list_empty(sdev)); in srpt_release_sdev()
3103 struct srpt_device *sdev; in __srpt_lookup_port() local
3107 list_for_each_entry(sdev, &srpt_dev_list, list) { in __srpt_lookup_port()
3108 dev = sdev->device; in __srpt_lookup_port()
3113 sport = &sdev->port[i]; in __srpt_lookup_port()
3139 struct srpt_device *sdev; in srpt_add_one() local
3147 sdev = kzalloc(sizeof *sdev, GFP_KERNEL); in srpt_add_one()
3148 if (!sdev) in srpt_add_one()
3151 sdev->device = device; in srpt_add_one()
3152 INIT_LIST_HEAD(&sdev->rch_list); in srpt_add_one()
3153 init_waitqueue_head(&sdev->ch_releaseQ); in srpt_add_one()
3154 spin_lock_init(&sdev->spinlock); in srpt_add_one()
3156 if (ib_query_device(device, &sdev->dev_attr)) in srpt_add_one()
3159 sdev->pd = ib_alloc_pd(device); in srpt_add_one()
3160 if (IS_ERR(sdev->pd)) in srpt_add_one()
3163 sdev->mr = ib_get_dma_mr(sdev->pd, IB_ACCESS_LOCAL_WRITE); in srpt_add_one()
3164 if (IS_ERR(sdev->mr)) in srpt_add_one()
3167 sdev->srq_size = min(srpt_srq_size, sdev->dev_attr.max_srq_wr); in srpt_add_one()
3170 srq_attr.srq_context = (void *)sdev; in srpt_add_one()
3171 srq_attr.attr.max_wr = sdev->srq_size; in srpt_add_one()
3176 sdev->srq = ib_create_srq(sdev->pd, &srq_attr); in srpt_add_one()
3177 if (IS_ERR(sdev->srq)) in srpt_add_one()
3181 __func__, sdev->srq_size, sdev->dev_attr.max_srq_wr, in srpt_add_one()
3187 sdev->cm_id = ib_create_cm_id(device, srpt_cm_handler, sdev); in srpt_add_one()
3188 if (IS_ERR(sdev->cm_id)) in srpt_add_one()
3202 if (ib_cm_listen(sdev->cm_id, cpu_to_be64(srpt_service_guid), 0, NULL)) in srpt_add_one()
3205 INIT_IB_EVENT_HANDLER(&sdev->event_handler, sdev->device, in srpt_add_one()
3207 if (ib_register_event_handler(&sdev->event_handler)) in srpt_add_one()
3210 sdev->ioctx_ring = (struct srpt_recv_ioctx **) in srpt_add_one()
3211 srpt_alloc_ioctx_ring(sdev, sdev->srq_size, in srpt_add_one()
3212 sizeof(*sdev->ioctx_ring[0]), in srpt_add_one()
3214 if (!sdev->ioctx_ring) in srpt_add_one()
3217 for (i = 0; i < sdev->srq_size; ++i) in srpt_add_one()
3218 srpt_post_recv(sdev, sdev->ioctx_ring[i]); in srpt_add_one()
3220 WARN_ON(sdev->device->phys_port_cnt > ARRAY_SIZE(sdev->port)); in srpt_add_one()
3222 for (i = 1; i <= sdev->device->phys_port_cnt; i++) { in srpt_add_one()
3223 sport = &sdev->port[i - 1]; in srpt_add_one()
3224 sport->sdev = sdev; in srpt_add_one()
3235 srpt_sdev_name(sdev), i); in srpt_add_one()
3245 list_add_tail(&sdev->list, &srpt_dev_list); in srpt_add_one()
3249 ib_set_client_data(device, &srpt_client, sdev); in srpt_add_one()
3254 srpt_free_ioctx_ring((struct srpt_ioctx **)sdev->ioctx_ring, sdev, in srpt_add_one()
3255 sdev->srq_size, srp_max_req_size, in srpt_add_one()
3258 ib_unregister_event_handler(&sdev->event_handler); in srpt_add_one()
3260 ib_destroy_cm_id(sdev->cm_id); in srpt_add_one()
3262 ib_destroy_srq(sdev->srq); in srpt_add_one()
3264 ib_dereg_mr(sdev->mr); in srpt_add_one()
3266 ib_dealloc_pd(sdev->pd); in srpt_add_one()
3268 kfree(sdev); in srpt_add_one()
3270 sdev = NULL; in srpt_add_one()
3280 struct srpt_device *sdev; in srpt_remove_one() local
3283 sdev = ib_get_client_data(device, &srpt_client); in srpt_remove_one()
3284 if (!sdev) { in srpt_remove_one()
3289 srpt_unregister_mad_agent(sdev); in srpt_remove_one()
3291 ib_unregister_event_handler(&sdev->event_handler); in srpt_remove_one()
3294 for (i = 0; i < sdev->device->phys_port_cnt; i++) in srpt_remove_one()
3295 cancel_work_sync(&sdev->port[i].work); in srpt_remove_one()
3297 ib_destroy_cm_id(sdev->cm_id); in srpt_remove_one()
3305 list_del(&sdev->list); in srpt_remove_one()
3307 srpt_release_sdev(sdev); in srpt_remove_one()
3309 ib_destroy_srq(sdev->srq); in srpt_remove_one()
3310 ib_dereg_mr(sdev->mr); in srpt_remove_one()
3311 ib_dealloc_pd(sdev->pd); in srpt_remove_one()
3313 srpt_free_ioctx_ring((struct srpt_ioctx **)sdev->ioctx_ring, sdev, in srpt_remove_one()
3314 sdev->srq_size, srp_max_req_size, DMA_FROM_DEVICE); in srpt_remove_one()
3315 sdev->ioctx_ring = NULL; in srpt_remove_one()
3316 kfree(sdev); in srpt_remove_one()
3457 struct srpt_device *sdev; in srpt_close_session() local
3465 sdev = ch->sport->sdev; in srpt_close_session()
3466 spin_lock_irq(&sdev->spinlock); in srpt_close_session()
3470 spin_unlock_irq(&sdev->spinlock); in srpt_close_session()
3596 struct srpt_device *sdev; in srpt_drop_nodeacl() local
3601 sdev = sport->sdev; in srpt_drop_nodeacl()