Lines Matching refs:ic
55 struct rds_iw_connection *ic = conn->c_transport_data; in rds_iw_set_flow_control() local
59 ic->i_flowctl = 1; in rds_iw_set_flow_control()
62 ic->i_flowctl = 0; in rds_iw_set_flow_control()
73 struct rds_iw_connection *ic = conn->c_transport_data; in rds_iw_cm_connect_complete() local
87 rds_iwdev = ib_get_client_data(ic->i_cm_id->device, &rds_iw_client); in rds_iw_cm_connect_complete()
88 err = rds_iw_update_cm_id(rds_iwdev, ic->i_cm_id); in rds_iw_cm_connect_complete()
102 ic->i_flowctl ? ", flow control" : ""); in rds_iw_cm_connect_complete()
112 struct rds_iw_connection *ic = conn->c_transport_data; in rds_iw_cm_fill_conn_param() local
126 dp->dp_ack_seq = rds_iw_piggyb_ack(ic); in rds_iw_cm_fill_conn_param()
129 if (ic->i_flowctl) { in rds_iw_cm_fill_conn_param()
132 credits = IB_GET_POST_CREDITS(atomic_read(&ic->i_credits)); in rds_iw_cm_fill_conn_param()
134 atomic_sub(IB_SET_POST_CREDITS(credits), &ic->i_credits); in rds_iw_cm_fill_conn_param()
150 struct rds_iw_connection *ic = conn->c_transport_data; in rds_iw_qp_event_handler() local
152 rdsdebug("conn %p ic %p event %u\n", conn, ic, event->event); in rds_iw_qp_event_handler()
156 rdma_notify(ic->i_cm_id, IB_EVENT_COMM_EST); in rds_iw_qp_event_handler()
249 struct rds_iw_connection *ic = conn->c_transport_data; in rds_iw_setup_qp() local
250 struct ib_device *dev = ic->i_cm_id->device; in rds_iw_setup_qp()
268 ic->i_pd = rds_iwdev->pd; in rds_iw_setup_qp()
269 ic->i_mr = rds_iwdev->mr; in rds_iw_setup_qp()
272 &ic->i_send_ring, rds_iw_send_cq_comp_handler, in rds_iw_setup_qp()
273 &ic->i_recv_ring, rds_iw_recv_cq_comp_handler, in rds_iw_setup_qp()
278 ic->i_send_cq = attr.send_cq; in rds_iw_setup_qp()
279 ic->i_recv_cq = attr.recv_cq; in rds_iw_setup_qp()
285 ret = rdma_create_qp(ic->i_cm_id, ic->i_pd, &attr); in rds_iw_setup_qp()
291 ic->i_send_hdrs = ib_dma_alloc_coherent(dev, in rds_iw_setup_qp()
292 ic->i_send_ring.w_nr * in rds_iw_setup_qp()
294 &ic->i_send_hdrs_dma, GFP_KERNEL); in rds_iw_setup_qp()
295 if (!ic->i_send_hdrs) { in rds_iw_setup_qp()
301 ic->i_recv_hdrs = ib_dma_alloc_coherent(dev, in rds_iw_setup_qp()
302 ic->i_recv_ring.w_nr * in rds_iw_setup_qp()
304 &ic->i_recv_hdrs_dma, GFP_KERNEL); in rds_iw_setup_qp()
305 if (!ic->i_recv_hdrs) { in rds_iw_setup_qp()
311 ic->i_ack = ib_dma_alloc_coherent(dev, sizeof(struct rds_header), in rds_iw_setup_qp()
312 &ic->i_ack_dma, GFP_KERNEL); in rds_iw_setup_qp()
313 if (!ic->i_ack) { in rds_iw_setup_qp()
319 ic->i_sends = vmalloc(ic->i_send_ring.w_nr * sizeof(struct rds_iw_send_work)); in rds_iw_setup_qp()
320 if (!ic->i_sends) { in rds_iw_setup_qp()
325 rds_iw_send_init_ring(ic); in rds_iw_setup_qp()
327 ic->i_recvs = vmalloc(ic->i_recv_ring.w_nr * sizeof(struct rds_iw_recv_work)); in rds_iw_setup_qp()
328 if (!ic->i_recvs) { in rds_iw_setup_qp()
334 rds_iw_recv_init_ring(ic); in rds_iw_setup_qp()
335 rds_iw_recv_init_ack(ic); in rds_iw_setup_qp()
341 rdsdebug("conn %p pd %p mr %p cq %p %p\n", conn, ic->i_pd, ic->i_mr, in rds_iw_setup_qp()
342 ic->i_send_cq, ic->i_recv_cq); in rds_iw_setup_qp()
383 struct rds_iw_connection *ic = NULL; in rds_iw_cm_handle_connect() local
428 ic = conn->c_transport_data; in rds_iw_cm_handle_connect()
439 BUG_ON(ic->i_cm_id); in rds_iw_cm_handle_connect()
441 ic->i_cm_id = cm_id; in rds_iw_cm_handle_connect()
445 ic->i_dma_local_lkey = rds_iwdev->dma_local_lkey; in rds_iw_cm_handle_connect()
479 struct rds_iw_connection *ic = conn->c_transport_data; in rds_iw_cm_initiate_connect() local
487 ic->i_flowctl = rds_iw_sysctl_flow_control; /* advertise flow control */ in rds_iw_cm_initiate_connect()
506 struct rds_iw_connection *ic = conn->c_transport_data; in rds_iw_cm_initiate_connect() local
508 if (ic->i_cm_id == cm_id) in rds_iw_cm_initiate_connect()
516 struct rds_iw_connection *ic = conn->c_transport_data; in rds_iw_conn_connect() local
523 ic->i_cm_id = rdma_create_id(rds_rdma_cm_event_handler, conn, in rds_iw_conn_connect()
525 if (IS_ERR(ic->i_cm_id)) { in rds_iw_conn_connect()
526 ret = PTR_ERR(ic->i_cm_id); in rds_iw_conn_connect()
527 ic->i_cm_id = NULL; in rds_iw_conn_connect()
532 rdsdebug("created cm id %p for conn %p\n", ic->i_cm_id, conn); in rds_iw_conn_connect()
539 ret = rdma_bind_addr(ic->i_cm_id, (struct sockaddr *) &src); in rds_iw_conn_connect()
543 rdma_destroy_id(ic->i_cm_id); in rds_iw_conn_connect()
544 ic->i_cm_id = NULL; in rds_iw_conn_connect()
548 rds_iwdev = ib_get_client_data(ic->i_cm_id->device, &rds_iw_client); in rds_iw_conn_connect()
549 ic->i_dma_local_lkey = rds_iwdev->dma_local_lkey; in rds_iw_conn_connect()
555 ret = rdma_resolve_addr(ic->i_cm_id, (struct sockaddr *)&src, in rds_iw_conn_connect()
559 rdsdebug("addr resolve failed for cm id %p: %d\n", ic->i_cm_id, in rds_iw_conn_connect()
561 rdma_destroy_id(ic->i_cm_id); in rds_iw_conn_connect()
562 ic->i_cm_id = NULL; in rds_iw_conn_connect()
576 struct rds_iw_connection *ic = conn->c_transport_data; in rds_iw_conn_shutdown() local
580 rdsdebug("cm %p pd %p cq %p %p qp %p\n", ic->i_cm_id, in rds_iw_conn_shutdown()
581 ic->i_pd, ic->i_send_cq, ic->i_recv_cq, in rds_iw_conn_shutdown()
582 ic->i_cm_id ? ic->i_cm_id->qp : NULL); in rds_iw_conn_shutdown()
584 if (ic->i_cm_id) { in rds_iw_conn_shutdown()
585 struct ib_device *dev = ic->i_cm_id->device; in rds_iw_conn_shutdown()
587 rdsdebug("disconnecting cm %p\n", ic->i_cm_id); in rds_iw_conn_shutdown()
588 err = rdma_disconnect(ic->i_cm_id); in rds_iw_conn_shutdown()
594 " cm: %p err %d\n", ic->i_cm_id, err); in rds_iw_conn_shutdown()
597 if (ic->i_cm_id->qp) { in rds_iw_conn_shutdown()
599 ib_modify_qp(ic->i_cm_id->qp, &qp_attr, IB_QP_STATE); in rds_iw_conn_shutdown()
603 rds_iw_ring_empty(&ic->i_send_ring) && in rds_iw_conn_shutdown()
604 rds_iw_ring_empty(&ic->i_recv_ring)); in rds_iw_conn_shutdown()
606 if (ic->i_send_hdrs) in rds_iw_conn_shutdown()
608 ic->i_send_ring.w_nr * in rds_iw_conn_shutdown()
610 ic->i_send_hdrs, in rds_iw_conn_shutdown()
611 ic->i_send_hdrs_dma); in rds_iw_conn_shutdown()
613 if (ic->i_recv_hdrs) in rds_iw_conn_shutdown()
615 ic->i_recv_ring.w_nr * in rds_iw_conn_shutdown()
617 ic->i_recv_hdrs, in rds_iw_conn_shutdown()
618 ic->i_recv_hdrs_dma); in rds_iw_conn_shutdown()
620 if (ic->i_ack) in rds_iw_conn_shutdown()
622 ic->i_ack, ic->i_ack_dma); in rds_iw_conn_shutdown()
624 if (ic->i_sends) in rds_iw_conn_shutdown()
625 rds_iw_send_clear_ring(ic); in rds_iw_conn_shutdown()
626 if (ic->i_recvs) in rds_iw_conn_shutdown()
627 rds_iw_recv_clear_ring(ic); in rds_iw_conn_shutdown()
629 if (ic->i_cm_id->qp) in rds_iw_conn_shutdown()
630 rdma_destroy_qp(ic->i_cm_id); in rds_iw_conn_shutdown()
631 if (ic->i_send_cq) in rds_iw_conn_shutdown()
632 ib_destroy_cq(ic->i_send_cq); in rds_iw_conn_shutdown()
633 if (ic->i_recv_cq) in rds_iw_conn_shutdown()
634 ib_destroy_cq(ic->i_recv_cq); in rds_iw_conn_shutdown()
641 if (ic->rds_iwdev) in rds_iw_conn_shutdown()
642 rds_iw_remove_conn(ic->rds_iwdev, conn); in rds_iw_conn_shutdown()
644 rdma_destroy_id(ic->i_cm_id); in rds_iw_conn_shutdown()
646 ic->i_cm_id = NULL; in rds_iw_conn_shutdown()
647 ic->i_pd = NULL; in rds_iw_conn_shutdown()
648 ic->i_mr = NULL; in rds_iw_conn_shutdown()
649 ic->i_send_cq = NULL; in rds_iw_conn_shutdown()
650 ic->i_recv_cq = NULL; in rds_iw_conn_shutdown()
651 ic->i_send_hdrs = NULL; in rds_iw_conn_shutdown()
652 ic->i_recv_hdrs = NULL; in rds_iw_conn_shutdown()
653 ic->i_ack = NULL; in rds_iw_conn_shutdown()
655 BUG_ON(ic->rds_iwdev); in rds_iw_conn_shutdown()
658 if (ic->i_rm) { in rds_iw_conn_shutdown()
659 rds_message_put(ic->i_rm); in rds_iw_conn_shutdown()
660 ic->i_rm = NULL; in rds_iw_conn_shutdown()
664 clear_bit(IB_ACK_IN_FLIGHT, &ic->i_ack_flags); in rds_iw_conn_shutdown()
666 atomic64_set(&ic->i_ack_next, 0); in rds_iw_conn_shutdown()
668 ic->i_ack_next = 0; in rds_iw_conn_shutdown()
670 ic->i_ack_recv = 0; in rds_iw_conn_shutdown()
673 ic->i_flowctl = 0; in rds_iw_conn_shutdown()
674 atomic_set(&ic->i_credits, 0); in rds_iw_conn_shutdown()
676 rds_iw_ring_init(&ic->i_send_ring, rds_iw_sysctl_max_send_wr); in rds_iw_conn_shutdown()
677 rds_iw_ring_init(&ic->i_recv_ring, rds_iw_sysctl_max_recv_wr); in rds_iw_conn_shutdown()
679 if (ic->i_iwinc) { in rds_iw_conn_shutdown()
680 rds_inc_put(&ic->i_iwinc->ii_inc); in rds_iw_conn_shutdown()
681 ic->i_iwinc = NULL; in rds_iw_conn_shutdown()
684 vfree(ic->i_sends); in rds_iw_conn_shutdown()
685 ic->i_sends = NULL; in rds_iw_conn_shutdown()
686 vfree(ic->i_recvs); in rds_iw_conn_shutdown()
687 ic->i_recvs = NULL; in rds_iw_conn_shutdown()
693 struct rds_iw_connection *ic; in rds_iw_conn_alloc() local
697 ic = kzalloc(sizeof(struct rds_iw_connection), gfp); in rds_iw_conn_alloc()
698 if (!ic) in rds_iw_conn_alloc()
701 INIT_LIST_HEAD(&ic->iw_node); in rds_iw_conn_alloc()
702 tasklet_init(&ic->i_recv_tasklet, rds_iw_recv_tasklet_fn, in rds_iw_conn_alloc()
703 (unsigned long) ic); in rds_iw_conn_alloc()
704 mutex_init(&ic->i_recv_mutex); in rds_iw_conn_alloc()
706 spin_lock_init(&ic->i_ack_lock); in rds_iw_conn_alloc()
713 rds_iw_ring_init(&ic->i_send_ring, rds_iw_sysctl_max_send_wr); in rds_iw_conn_alloc()
714 rds_iw_ring_init(&ic->i_recv_ring, rds_iw_sysctl_max_recv_wr); in rds_iw_conn_alloc()
716 ic->conn = conn; in rds_iw_conn_alloc()
717 conn->c_transport_data = ic; in rds_iw_conn_alloc()
720 list_add_tail(&ic->iw_node, &iw_nodev_conns); in rds_iw_conn_alloc()
733 struct rds_iw_connection *ic = arg; in rds_iw_conn_free() local
736 rdsdebug("ic %p\n", ic); in rds_iw_conn_free()
743 lock_ptr = ic->rds_iwdev ? &ic->rds_iwdev->spinlock : &iw_nodev_conns_lock; in rds_iw_conn_free()
746 list_del(&ic->iw_node); in rds_iw_conn_free()
749 kfree(ic); in rds_iw_conn_free()