• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src-rt-6.x.4708/linux/linux-2.6.36/net/rds/

Lines Matching defs:ic

69 static void rds_iw_recv_unmap_page(struct rds_iw_connection *ic,
76 ib_dma_unmap_page(ic->i_cm_id->device,
82 void rds_iw_recv_init_ring(struct rds_iw_connection *ic)
87 for (i = 0, recv = ic->i_recvs; i < ic->i_recv_ring.w_nr; i++, recv++) {
98 sge = rds_iw_data_sge(ic, recv->r_sge);
103 sge = rds_iw_header_sge(ic, recv->r_sge);
104 sge->addr = ic->i_recv_hdrs_dma + (i * sizeof(struct rds_header));
110 static void rds_iw_recv_clear_one(struct rds_iw_connection *ic,
118 rds_iw_recv_unmap_page(ic, recv);
126 void rds_iw_recv_clear_ring(struct rds_iw_connection *ic)
130 for (i = 0; i < ic->i_recv_ring.w_nr; i++)
131 rds_iw_recv_clear_one(ic, &ic->i_recvs[i]);
133 if (ic->i_frag.f_page)
134 rds_iw_frag_drop_page(&ic->i_frag);
141 struct rds_iw_connection *ic = conn->c_transport_data;
169 if (ic->i_frag.f_page == NULL) {
170 ic->i_frag.f_page = alloc_page(page_gfp);
171 if (ic->i_frag.f_page == NULL)
173 ic->i_frag.f_offset = 0;
176 dma_addr = ib_dma_map_page(ic->i_cm_id->device,
177 ic->i_frag.f_page,
178 ic->i_frag.f_offset,
181 if (ib_dma_mapping_error(ic->i_cm_id->device, dma_addr))
189 recv->r_frag->f_page = ic->i_frag.f_page;
190 recv->r_frag->f_offset = ic->i_frag.f_offset;
193 sge = rds_iw_data_sge(ic, recv->r_sge);
197 sge = rds_iw_header_sge(ic, recv->r_sge);
198 sge->addr = ic->i_recv_hdrs_dma + (recv - ic->i_recvs) * sizeof(struct rds_header);
203 if (ic->i_frag.f_offset < RDS_PAGE_LAST_OFF) {
204 ic->i_frag.f_offset += RDS_FRAG_SIZE;
206 put_page(ic->i_frag.f_page);
207 ic->i_frag.f_page = NULL;
208 ic->i_frag.f_offset = 0;
227 struct rds_iw_connection *ic = conn->c_transport_data;
235 rds_iw_ring_alloc(&ic->i_recv_ring, 1, &pos)) {
236 if (pos >= ic->i_recv_ring.w_nr) {
243 recv = &ic->i_recvs[pos];
250 ret = ib_post_recv(ic->i_cm_id->qp, &recv->r_wr, &failed_wr);
267 if (ic->i_flowctl && posted)
271 rds_iw_ring_unalloc(&ic->i_recv_ring, 1);
359 /* ic starts out kzalloc()ed */
360 void rds_iw_recv_init_ack(struct rds_iw_connection *ic)
362 struct ib_send_wr *wr = &ic->i_ack_wr;
363 struct ib_sge *sge = &ic->i_ack_sge;
365 sge->addr = ic->i_ack_dma;
367 sge->lkey = rds_iw_local_dma_lkey(ic);
399 static void rds_iw_set_ack(struct rds_iw_connection *ic, u64 seq,
404 spin_lock_irqsave(&ic->i_ack_lock, flags);
405 ic->i_ack_next = seq;
407 set_bit(IB_ACK_REQUESTED, &ic->i_ack_flags);
408 spin_unlock_irqrestore(&ic->i_ack_lock, flags);
411 static u64 rds_iw_get_ack(struct rds_iw_connection *ic)
416 clear_bit(IB_ACK_REQUESTED, &ic->i_ack_flags);
418 spin_lock_irqsave(&ic->i_ack_lock, flags);
419 seq = ic->i_ack_next;
420 spin_unlock_irqrestore(&ic->i_ack_lock, flags);
425 static void rds_iw_set_ack(struct rds_iw_connection *ic, u64 seq,
428 atomic64_set(&ic->i_ack_next, seq);
431 set_bit(IB_ACK_REQUESTED, &ic->i_ack_flags);
435 static u64 rds_iw_get_ack(struct rds_iw_connection *ic)
437 clear_bit(IB_ACK_REQUESTED, &ic->i_ack_flags);
440 return atomic64_read(&ic->i_ack_next);
445 static void rds_iw_send_ack(struct rds_iw_connection *ic, unsigned int adv_credits)
447 struct rds_header *hdr = ic->i_ack;
452 seq = rds_iw_get_ack(ic);
454 rdsdebug("send_ack: ic %p ack %llu\n", ic, (unsigned long long) seq);
459 ic->i_ack_queued = jiffies;
461 ret = ib_post_send(ic->i_cm_id->qp, &ic->i_ack_wr, &failed_wr);
466 clear_bit(IB_ACK_IN_FLIGHT, &ic->i_ack_flags);
467 set_bit(IB_ACK_REQUESTED, &ic->i_ack_flags);
471 rds_iw_conn_error(ic->conn, "sending ack failed\n");
514 void rds_iw_attempt_ack(struct rds_iw_connection *ic)
518 if (!test_bit(IB_ACK_REQUESTED, &ic->i_ack_flags))
521 if (test_and_set_bit(IB_ACK_IN_FLIGHT, &ic->i_ack_flags)) {
527 if (!rds_iw_send_grab_credits(ic, 1, &adv_credits, 0, RDS_MAX_ADV_CREDIT)) {
529 clear_bit(IB_ACK_IN_FLIGHT, &ic->i_ack_flags);
533 clear_bit(IB_ACK_REQUESTED, &ic->i_ack_flags);
534 rds_iw_send_ack(ic, adv_credits);
541 void rds_iw_ack_send_complete(struct rds_iw_connection *ic)
543 clear_bit(IB_ACK_IN_FLIGHT, &ic->i_ack_flags);
544 rds_iw_attempt_ack(ic);
551 u64 rds_iw_piggyb_ack(struct rds_iw_connection *ic)
553 if (test_and_clear_bit(IB_ACK_REQUESTED, &ic->i_ack_flags))
555 return rds_iw_get_ack(ic);
651 struct rds_iw_connection *ic = conn->c_transport_data;
652 struct rds_iw_incoming *iwinc = ic->i_iwinc;
656 rdsdebug("ic %p iwinc %p recv %p byte len %u\n", ic, iwinc, recv,
669 ihdr = &ic->i_recv_hdrs[recv - ic->i_recvs];
709 ic->i_iwinc = iwinc;
713 ic->i_recv_data_rem = be32_to_cpu(hdr->h_len);
715 rdsdebug("ic %p iwinc %p rem %u flag 0x%x\n", ic, iwinc,
716 ic->i_recv_data_rem, hdr->h_flags);
734 if (ic->i_recv_data_rem > RDS_FRAG_SIZE)
735 ic->i_recv_data_rem -= RDS_FRAG_SIZE;
737 ic->i_recv_data_rem = 0;
738 ic->i_iwinc = NULL;
774 struct rds_iw_connection *ic = conn->c_transport_data;
780 tasklet_schedule(&ic->i_recv_tasklet);
783 static inline void rds_poll_cq(struct rds_iw_connection *ic,
786 struct rds_connection *conn = ic->conn;
790 while (ib_poll_cq(ic->i_recv_cq, 1, &wc) > 0) {
796 recv = &ic->i_recvs[rds_iw_ring_oldest(&ic->i_recv_ring)];
798 rds_iw_recv_unmap_page(ic, recv);
817 rds_iw_ring_free(&ic->i_recv_ring, 1);
823 struct rds_iw_connection *ic = (struct rds_iw_connection *) data;
824 struct rds_connection *conn = ic->conn;
827 rds_poll_cq(ic, &state);
828 ib_req_notify_cq(ic->i_recv_cq, IB_CQ_SOLICITED);
829 rds_poll_cq(ic, &state);
832 rds_iw_set_ack(ic, state.ack_next, state.ack_required);
833 if (state.ack_recv_valid && state.ack_recv > ic->i_ack_recv) {
835 ic->i_ack_recv = state.ack_recv;
838 rds_iw_attempt_ack(ic);
843 if (rds_iw_ring_empty(&ic->i_recv_ring))
849 if (rds_iw_ring_low(&ic->i_recv_ring))
855 struct rds_iw_connection *ic = conn->c_transport_data;
864 mutex_lock(&ic->i_recv_mutex);
869 mutex_unlock(&ic->i_recv_mutex);
872 rds_iw_attempt_ack(ic);