Lines Matching refs:mad_send_wr

580 static int send_next_seg(struct ib_mad_send_wr_private *mad_send_wr)
586 rmpp_mad = mad_send_wr->send_buf.mad;
588 rmpp_mad->rmpp_hdr.seg_num = cpu_to_be32(++mad_send_wr->seg_num);
590 if (mad_send_wr->seg_num == 1) {
592 paylen = (mad_send_wr->send_buf.seg_count *
593 mad_send_wr->send_buf.seg_rmpp_size) -
594 mad_send_wr->pad;
597 if (mad_send_wr->seg_num == mad_send_wr->send_buf.seg_count) {
599 paylen = mad_send_wr->send_buf.seg_rmpp_size - mad_send_wr->pad;
604 timeout = mad_send_wr->send_buf.timeout_ms;
606 mad_send_wr->timeout = msecs_to_jiffies(2000);
608 return ib_send_mad(mad_send_wr);
614 struct ib_mad_send_wr_private *mad_send_wr;
619 mad_send_wr = ib_find_send_mad(agent, mad_recv_wc);
620 if (!mad_send_wr)
623 if ((mad_send_wr->last_ack == mad_send_wr->send_buf.seg_count) ||
624 (!mad_send_wr->timeout) || (mad_send_wr->status != IB_WC_SUCCESS))
627 ib_mark_mad_done(mad_send_wr);
632 wc.send_buf = &mad_send_wr->send_buf;
633 ib_mad_complete_send_wr(mad_send_wr, &wc);
664 struct ib_mad_send_wr_private *mad_send_wr;
685 mad_send_wr = ib_find_send_mad(agent, mad_recv_wc);
686 if (!mad_send_wr) {
692 if ((mad_send_wr->last_ack == mad_send_wr->send_buf.seg_count) &&
693 (mad_send_wr->timeout)) {
699 if ((mad_send_wr->last_ack == mad_send_wr->send_buf.seg_count) ||
700 (!mad_send_wr->timeout) || (mad_send_wr->status != IB_WC_SUCCESS))
703 if (seg_num > mad_send_wr->send_buf.seg_count ||
704 seg_num > mad_send_wr->newwin) {
711 if (newwin < mad_send_wr->newwin || seg_num < mad_send_wr->last_ack)
714 if (seg_num > mad_send_wr->last_ack) {
715 adjust_last_ack(mad_send_wr, seg_num);
716 mad_send_wr->retries_left = mad_send_wr->max_retries;
718 mad_send_wr->newwin = newwin;
719 if (mad_send_wr->last_ack == mad_send_wr->send_buf.seg_count) {
721 if (!mad_send_wr->send_buf.timeout_ms) {
724 ib_mark_mad_done(mad_send_wr);
729 wc.send_buf = &mad_send_wr->send_buf;
730 ib_mad_complete_send_wr(mad_send_wr, &wc);
733 if (mad_send_wr->refcount == 1)
734 ib_reset_mad_timeout(mad_send_wr,
735 mad_send_wr->send_buf.timeout_ms);
739 } else if (mad_send_wr->refcount == 1 &&
740 mad_send_wr->seg_num < mad_send_wr->newwin &&
741 mad_send_wr->seg_num < mad_send_wr->send_buf.seg_count) {
743 ret = send_next_seg(mad_send_wr);
747 mad_send_wr->refcount++;
748 list_move_tail(&mad_send_wr->agent_list,
749 &mad_send_wr->mad_agent_priv->send_list);
855 static int init_newwin(struct ib_mad_send_wr_private *mad_send_wr)
857 struct ib_mad_agent_private *agent = mad_send_wr->mad_agent_priv;
858 struct ib_mad_hdr *mad_hdr = mad_send_wr->send_buf.mad;
875 if (ib_query_ah(mad_send_wr->send_buf.ah, &ah_attr))
888 int ib_send_rmpp_mad(struct ib_mad_send_wr_private *mad_send_wr)
893 rmpp_mad = mad_send_wr->send_buf.mad;
899 mad_send_wr->seg_num = 1;
903 mad_send_wr->newwin = init_newwin(mad_send_wr);
906 mad_send_wr->refcount += (mad_send_wr->timeout == 0);
907 ret = send_next_seg(mad_send_wr);
913 int ib_process_rmpp_send_wc(struct ib_mad_send_wr_private *mad_send_wr,
919 rmpp_mad = mad_send_wr->send_buf.mad;
928 mad_send_wr->status != IB_WC_SUCCESS)
931 if (!mad_send_wr->timeout)
934 if (mad_send_wr->last_ack == mad_send_wr->send_buf.seg_count) {
935 mad_send_wr->timeout =
936 msecs_to_jiffies(mad_send_wr->send_buf.timeout_ms);
940 if (mad_send_wr->seg_num == mad_send_wr->newwin ||
941 mad_send_wr->seg_num == mad_send_wr->send_buf.seg_count)
944 ret = send_next_seg(mad_send_wr);
952 int ib_retry_rmpp(struct ib_mad_send_wr_private *mad_send_wr)
957 rmpp_mad = mad_send_wr->send_buf.mad;
962 if (mad_send_wr->last_ack == mad_send_wr->send_buf.seg_count)
965 mad_send_wr->seg_num = mad_send_wr->last_ack;
966 mad_send_wr->cur_seg = mad_send_wr->last_ack_seg;
968 ret = send_next_seg(mad_send_wr);