Lines Matching defs:ic

57 rdsv3_ib_recv_init_ring(struct rdsv3_ib_connection *ic)
63 RDSV3_DPRINTF4("rdsv3_ib_recv_init_ring", "ic: %p", ic);
65 hdrp = ic->i_recv_hdrs;
66 for (i = 0, recv = ic->i_recvs; i < ic->i_recv_ring.w_nr; i++, recv++) {
73 recv->r_sge[0].ds_key = ic->i_mr->lkey;
78 rdsv3_ib_recv_clear_one(struct rdsv3_ib_connection *ic,
81 RDSV3_DPRINTF4("rdsv3_ib_recv_clear_one", "ic: %p, recv: %p",
82 ic, recv);
90 kmem_cache_free(ic->rds_ibdev->ib_frag_slab, recv->r_frag);
94 RDSV3_DPRINTF4("rdsv3_ib_recv_clear_one", "Return: ic: %p, recv: %p",
95 ic, recv);
99 rdsv3_ib_recv_clear_ring(struct rdsv3_ib_connection *ic)
103 RDSV3_DPRINTF4("rdsv3_ib_recv_clear_ring", "ic: %p", ic);
105 for (i = 0; i < ic->i_recv_ring.w_nr; i++)
106 rdsv3_ib_recv_clear_one(ic, &ic->i_recvs[i]);
115 struct rdsv3_ib_connection *ic = conn->c_transport_data;
125 ic->i_max_recv_alloc)) {
136 recv->r_ibinc->ii_ibdev = ic->rds_ibdev;
137 recv->r_ibinc->ii_pool = ic->rds_ibdev->inc_pool;
141 recv->r_frag = kmem_cache_alloc(ic->rds_ibdev->ib_frag_slab,
174 struct rdsv3_ib_connection *ic = conn->c_transport_data;
184 uint_t w_nr = ic->i_recv_ring.w_nr;
186 avail = rdsv3_ib_ring_alloc(&ic->i_recv_ring, w_nr, &pos);
196 recv = &ic->i_recvs[pos];
199 rdsv3_ib_ring_unalloc(&ic->i_recv_ring,
203 ic->i_recv_wrs[i].wr_id = (ibt_wrid_t)pos;
204 ic->i_recv_wrs[i].wr_nds = RDSV3_IB_RECV_SGE;
205 ic->i_recv_wrs[i].wr_sgl = &recv->r_sge[0];
212 ret = ibt_post_recv(ib_get_ibt_channel_hdl(ic->i_cm_id),
213 &ic->i_recv_wrs[0], i, &posted);
221 rdsv3_ib_ring_unalloc(&ic->i_recv_ring,
229 if (ic->i_flowctl && posted)
383 /* ic starts out kmem_zalloc()ed */
385 rdsv3_ib_recv_init_ack(struct rdsv3_ib_connection *ic)
387 ibt_send_wr_t *wr = &ic->i_ack_wr;
388 ibt_wr_ds_t *sge = &ic->i_ack_sge;
390 RDSV3_DPRINTF4("rdsv3_ib_recv_init_ack", "ic: %p", ic);
392 sge->ds_va = ic->i_ack_dma;
394 sge->ds_key = ic->i_mr->lkey;
426 rdsv3_ib_set_ack(struct rdsv3_ib_connection *ic, uint64_t seq,
429 RDSV3_DPRINTF4("rdsv3_ib_set_ack", "ic: %p, seq: %lld ack: %d",
430 ic, seq, ack_required);
432 mutex_enter(&ic->i_ack_lock);
433 ic->i_ack_next = seq;
435 set_bit(IB_ACK_REQUESTED, &ic->i_ack_flags);
436 mutex_exit(&ic->i_ack_lock);
440 rdsv3_ib_get_ack(struct rdsv3_ib_connection *ic)
444 RDSV3_DPRINTF4("rdsv3_ib_get_ack", "ic: %p", ic);
446 clear_bit(IB_ACK_REQUESTED, &ic->i_ack_flags);
448 mutex_enter(&ic->i_ack_lock);
449 seq = ic->i_ack_next;
450 mutex_exit(&ic->i_ack_lock);
456 rdsv3_ib_send_ack(struct rdsv3_ib_connection *ic, unsigned int adv_credits)
458 struct rdsv3_header *hdr = ic->i_ack;
462 RDSV3_DPRINTF4("rdsv3_ib_send_ack", "ic: %p adv_credits: %d",
463 ic, adv_credits);
465 seq = rdsv3_ib_get_ack(ic);
467 RDSV3_DPRINTF4("rdsv3_ib_send_ack", "send_ack: ic %p ack %llu",
468 ic, (unsigned long long) seq);
473 ic->i_ack_queued = jiffies;
475 ret = ibt_post_send(RDSV3_QP2CHANHDL(ic->i_cm_id->qp), &ic->i_ack_wr, 1,
482 clear_bit(IB_ACK_IN_FLIGHT, &ic->i_ack_flags);
483 set_bit(IB_ACK_REQUESTED, &ic->i_ack_flags);
486 rdsv3_conn_drop(ic->conn);
490 RDSV3_DPRINTF4("rdsv3_ib_send_ack", "Return: ic: %p adv_credits: %d",
491 ic, adv_credits);
533 rdsv3_ib_attempt_ack(struct rdsv3_ib_connection *ic)
537 RDSV3_DPRINTF4("rdsv3_ib_attempt_ack", "ic: %p", ic);
539 if (!test_bit(IB_ACK_REQUESTED, &ic->i_ack_flags))
542 if (test_and_set_bit(IB_ACK_IN_FLIGHT, &ic->i_ack_flags)) {
548 if (!rdsv3_ib_send_grab_credits(ic, 1, &adv_credits, 0)) {
550 clear_bit(IB_ACK_IN_FLIGHT, &ic->i_ack_flags);
554 clear_bit(IB_ACK_REQUESTED, &ic->i_ack_flags);
555 rdsv3_ib_send_ack(ic, adv_credits);
557 RDSV3_DPRINTF4("rdsv3_ib_attempt_ack", "Return: ic: %p", ic);
565 rdsv3_ib_ack_send_complete(struct rdsv3_ib_connection *ic)
567 RDSV3_DPRINTF4("rdsv3_ib_ack_send_complete", "ic: %p", ic);
568 clear_bit(IB_ACK_IN_FLIGHT, &ic->i_ack_flags);
569 rdsv3_ib_attempt_ack(ic);
577 rdsv3_ib_piggyb_ack(struct rdsv3_ib_connection *ic)
579 RDSV3_DPRINTF4("rdsv3_ib_piggyb_ack", "ic: %p", ic);
580 if (test_and_clear_bit(IB_ACK_REQUESTED, &ic->i_ack_flags)) {
583 return (rdsv3_ib_get_ack(ic));
680 struct rdsv3_ib_connection *ic = conn->c_transport_data;
681 struct rdsv3_ib_incoming *ibinc = ic->i_ibinc;
687 "ic %p ibinc %p recv %p byte len %u", ic, ibinc, recv, data_len);
699 ihdr = &ic->i_recv_hdrs[recv - ic->i_recvs];
739 ic->i_ibinc = ibinc;
743 ic->i_recv_data_rem = ntohl(hdr->h_len);
746 "ic %p ibinc %p rem %u flag 0x%x", ic, ibinc,
747 ic->i_recv_data_rem, hdr->h_flags);
768 if (ic->i_recv_data_rem > RDSV3_FRAG_SIZE)
769 ic->i_recv_data_rem -= RDSV3_FRAG_SIZE;
771 ic->i_recv_data_rem = 0;
772 ic->i_ibinc = NULL;
802 rdsv3_ib_recv_cqe_handler(struct rdsv3_ib_connection *ic, ibt_wc_t *wc,
805 struct rdsv3_connection *conn = ic->conn;
807 struct rdsv3_ib_work_ring *recv_ringp = &ic->i_recv_ring;
816 recv = &ic->i_recvs[rdsv3_ib_ring_oldest(recv_ringp)];
850 rdsv3_af_thr_fire(ic->i_refill_rq);
857 struct rdsv3_ib_connection *ic = conn->c_transport_data;
863 rdsv3_ib_attempt_ack(ic);