Lines Matching defs:mad_send_wr

567 static int send_next_seg(struct ib_mad_send_wr_private *mad_send_wr)
573 rmpp_mad = mad_send_wr->send_buf.mad;
575 rmpp_mad->rmpp_hdr.seg_num = cpu_to_be32(++mad_send_wr->seg_num);
577 if (mad_send_wr->seg_num == 1) {
579 paylen = (mad_send_wr->send_buf.seg_count *
580 mad_send_wr->send_buf.seg_rmpp_size) -
581 mad_send_wr->pad;
584 if (mad_send_wr->seg_num == mad_send_wr->send_buf.seg_count) {
586 paylen = mad_send_wr->send_buf.seg_rmpp_size - mad_send_wr->pad;
591 timeout = mad_send_wr->send_buf.timeout_ms;
593 mad_send_wr->timeout = msecs_to_jiffies(2000);
595 return ib_send_mad(mad_send_wr);
601 struct ib_mad_send_wr_private *mad_send_wr;
606 mad_send_wr = ib_find_send_mad(agent, mad_recv_wc);
607 if (!mad_send_wr)
610 if ((mad_send_wr->last_ack == mad_send_wr->send_buf.seg_count) ||
611 (!mad_send_wr->timeout) || (mad_send_wr->status != IB_WC_SUCCESS))
614 ib_mark_mad_done(mad_send_wr);
619 wc.send_buf = &mad_send_wr->send_buf;
620 ib_mad_complete_send_wr(mad_send_wr, &wc);
651 struct ib_mad_send_wr_private *mad_send_wr;
672 mad_send_wr = ib_find_send_mad(agent, mad_recv_wc);
673 if (!mad_send_wr) {
679 if ((mad_send_wr->last_ack == mad_send_wr->send_buf.seg_count) &&
680 (mad_send_wr->timeout)) {
686 if ((mad_send_wr->last_ack == mad_send_wr->send_buf.seg_count) ||
687 (!mad_send_wr->timeout) || (mad_send_wr->status != IB_WC_SUCCESS))
690 if (seg_num > mad_send_wr->send_buf.seg_count ||
691 seg_num > mad_send_wr->newwin) {
698 if (newwin < mad_send_wr->newwin || seg_num < mad_send_wr->last_ack)
701 if (seg_num > mad_send_wr->last_ack) {
702 adjust_last_ack(mad_send_wr, seg_num);
703 mad_send_wr->retries_left = mad_send_wr->max_retries;
705 mad_send_wr->newwin = newwin;
706 if (mad_send_wr->last_ack == mad_send_wr->send_buf.seg_count) {
708 if (!mad_send_wr->send_buf.timeout_ms) {
711 ib_mark_mad_done(mad_send_wr);
716 wc.send_buf = &mad_send_wr->send_buf;
717 ib_mad_complete_send_wr(mad_send_wr, &wc);
720 if (mad_send_wr->refcount == 1)
721 ib_reset_mad_timeout(mad_send_wr,
722 mad_send_wr->send_buf.timeout_ms);
726 } else if (mad_send_wr->refcount == 1 &&
727 mad_send_wr->seg_num < mad_send_wr->newwin &&
728 mad_send_wr->seg_num < mad_send_wr->send_buf.seg_count) {
730 ret = send_next_seg(mad_send_wr);
734 mad_send_wr->refcount++;
735 list_move_tail(&mad_send_wr->agent_list,
736 &mad_send_wr->mad_agent_priv->send_list);
842 static int init_newwin(struct ib_mad_send_wr_private *mad_send_wr)
844 struct ib_mad_agent_private *agent = mad_send_wr->mad_agent_priv;
845 struct ib_mad_hdr *mad_hdr = mad_send_wr->send_buf.mad;
862 if (rdma_query_ah(mad_send_wr->send_buf.ah, &ah_attr))
875 int ib_send_rmpp_mad(struct ib_mad_send_wr_private *mad_send_wr)
880 rmpp_mad = mad_send_wr->send_buf.mad;
886 mad_send_wr->seg_num = 1;
890 mad_send_wr->newwin = init_newwin(mad_send_wr);
893 mad_send_wr->refcount += (mad_send_wr->timeout == 0);
894 ret = send_next_seg(mad_send_wr);
900 int ib_process_rmpp_send_wc(struct ib_mad_send_wr_private *mad_send_wr,
906 rmpp_mad = mad_send_wr->send_buf.mad;
915 mad_send_wr->status != IB_WC_SUCCESS)
918 if (!mad_send_wr->timeout)
921 if (mad_send_wr->last_ack == mad_send_wr->send_buf.seg_count) {
922 mad_send_wr->timeout =
923 msecs_to_jiffies(mad_send_wr->send_buf.timeout_ms);
927 if (mad_send_wr->seg_num == mad_send_wr->newwin ||
928 mad_send_wr->seg_num == mad_send_wr->send_buf.seg_count)
931 ret = send_next_seg(mad_send_wr);
939 int ib_retry_rmpp(struct ib_mad_send_wr_private *mad_send_wr)
944 rmpp_mad = mad_send_wr->send_buf.mad;
949 if (mad_send_wr->last_ack == mad_send_wr->send_buf.seg_count)
952 mad_send_wr->seg_num = mad_send_wr->last_ack;
953 mad_send_wr->cur_seg = mad_send_wr->last_ack_seg;
955 ret = send_next_seg(mad_send_wr);