• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-WNDR4500-V1.0.1.40_1.0.68/src/linux/linux-2.6/drivers/infiniband/core/

Lines Matching defs:mad_send_wr

668 				  struct ib_mad_send_wr_private *mad_send_wr)
671 struct ib_smp *smp = mad_send_wr->send_buf.mad;
680 struct ib_send_wr *send_wr = &mad_send_wr->send_wr;
770 local->mad_send_wr = mad_send_wr;
796 static void free_send_rmpp_list(struct ib_mad_send_wr_private *mad_send_wr)
800 list_for_each_entry_safe(s, t, &mad_send_wr->rmpp_list, list) {
854 struct ib_mad_send_wr_private *mad_send_wr;
869 buf = kzalloc(sizeof *mad_send_wr + size, gfp_mask);
873 mad_send_wr = buf + size;
874 INIT_LIST_HEAD(&mad_send_wr->rmpp_list);
875 mad_send_wr->send_buf.mad = buf;
876 mad_send_wr->send_buf.hdr_len = hdr_len;
877 mad_send_wr->send_buf.data_len = data_len;
878 mad_send_wr->pad = pad;
880 mad_send_wr->mad_agent_priv = mad_agent_priv;
881 mad_send_wr->sg_list[0].length = hdr_len;
882 mad_send_wr->sg_list[0].lkey = mad_agent->mr->lkey;
883 mad_send_wr->sg_list[1].length = sizeof(struct ib_mad) - hdr_len;
884 mad_send_wr->sg_list[1].lkey = mad_agent->mr->lkey;
886 mad_send_wr->send_wr.wr_id = (unsigned long) mad_send_wr;
887 mad_send_wr->send_wr.sg_list = mad_send_wr->sg_list;
888 mad_send_wr->send_wr.num_sge = 2;
889 mad_send_wr->send_wr.opcode = IB_WR_SEND;
890 mad_send_wr->send_wr.send_flags = IB_SEND_SIGNALED;
891 mad_send_wr->send_wr.wr.ud.remote_qpn = remote_qpn;
892 mad_send_wr->send_wr.wr.ud.remote_qkey = IB_QP_SET_QKEY;
893 mad_send_wr->send_wr.wr.ud.pkey_index = pkey_index;
896 ret = alloc_send_rmpp_list(mad_send_wr, gfp_mask);
903 mad_send_wr->send_buf.mad_agent = mad_agent;
905 return &mad_send_wr->send_buf;
940 struct ib_mad_send_wr_private *mad_send_wr;
943 mad_send_wr = container_of(send_buf, struct ib_mad_send_wr_private,
945 list = &mad_send_wr->cur_seg->list;
947 if (mad_send_wr->cur_seg->num < seg_num) {
948 list_for_each_entry(mad_send_wr->cur_seg, list, list)
949 if (mad_send_wr->cur_seg->num == seg_num)
951 } else if (mad_send_wr->cur_seg->num > seg_num) {
952 list_for_each_entry_reverse(mad_send_wr->cur_seg, list, list)
953 if (mad_send_wr->cur_seg->num == seg_num)
956 return mad_send_wr->cur_seg->data;
960 static inline void *ib_get_payload(struct ib_mad_send_wr_private *mad_send_wr)
962 if (mad_send_wr->send_buf.seg_count)
963 return ib_get_rmpp_segment(&mad_send_wr->send_buf,
964 mad_send_wr->seg_num);
966 return mad_send_wr->send_buf.mad +
967 mad_send_wr->send_buf.hdr_len;
973 struct ib_mad_send_wr_private *mad_send_wr;
977 mad_send_wr = container_of(send_buf, struct ib_mad_send_wr_private,
980 free_send_rmpp_list(mad_send_wr);
986 int ib_send_mad(struct ib_mad_send_wr_private *mad_send_wr)
996 /* Set WR ID to find mad_send_wr upon completion */
997 qp_info = mad_send_wr->mad_agent_priv->qp_info;
998 mad_send_wr->send_wr.wr_id = (unsigned long)&mad_send_wr->mad_list;
999 mad_send_wr->mad_list.mad_queue = &qp_info->send_queue;
1001 mad_agent = mad_send_wr->send_buf.mad_agent;
1002 sge = mad_send_wr->sg_list;
1004 mad_send_wr->send_buf.mad,
1007 mad_send_wr->header_mapping = sge[0].addr;
1010 ib_get_payload(mad_send_wr),
1013 mad_send_wr->payload_mapping = sge[1].addr;
1017 ret = ib_post_send(mad_agent->qp, &mad_send_wr->send_wr,
1027 list_add_tail(&mad_send_wr->mad_list.list, list);
1032 mad_send_wr->header_mapping,
1035 mad_send_wr->payload_mapping,
1050 struct ib_mad_send_wr_private *mad_send_wr;
1057 mad_send_wr = container_of(send_buf,
1060 mad_agent_priv = mad_send_wr->mad_agent_priv;
1082 mad_send_wr->send_wr.wr.ud.ah = send_buf->ah;
1087 mad_send_wr);
1094 mad_send_wr->tid = ((struct ib_mad_hdr *) send_buf->mad)->tid;
1096 mad_send_wr->timeout = msecs_to_jiffies(send_buf->timeout_ms);
1097 mad_send_wr->retries = send_buf->retries;
1099 mad_send_wr->refcount = 1 + (mad_send_wr->timeout > 0);
1100 mad_send_wr->status = IB_WC_SUCCESS;
1105 list_add_tail(&mad_send_wr->agent_list,
1110 ret = ib_send_rmpp_mad(mad_send_wr);
1112 ret = ib_send_mad(mad_send_wr);
1114 ret = ib_send_mad(mad_send_wr);
1118 list_del(&mad_send_wr->agent_list);
1778 void ib_mark_mad_done(struct ib_mad_send_wr_private *mad_send_wr)
1780 mad_send_wr->timeout = 0;
1781 if (mad_send_wr->refcount == 1)
1782 list_move_tail(&mad_send_wr->agent_list,
1783 &mad_send_wr->mad_agent_priv->done_list);
1789 struct ib_mad_send_wr_private *mad_send_wr;
1807 mad_send_wr = ib_find_send_mad(mad_agent_priv, mad_recv_wc);
1808 if (!mad_send_wr) {
1814 ib_mark_mad_done(mad_send_wr);
1818 mad_recv_wc->wc->wr_id = (unsigned long) &mad_send_wr->send_buf;
1825 mad_send_wc.send_buf = &mad_send_wr->send_buf;
1826 ib_mad_complete_send_wr(mad_send_wr, &mad_send_wc);
1951 struct ib_mad_send_wr_private *mad_send_wr;
1957 mad_send_wr = list_entry(mad_agent_priv->wait_list.next,
1962 mad_send_wr->timeout)) {
1963 mad_agent_priv->timeout = mad_send_wr->timeout;
1965 delay = mad_send_wr->timeout - jiffies;
1975 static void wait_for_response(struct ib_mad_send_wr_private *mad_send_wr)
1982 mad_agent_priv = mad_send_wr->mad_agent_priv;
1983 list_del(&mad_send_wr->agent_list);
1985 delay = mad_send_wr->timeout;
1986 mad_send_wr->timeout += jiffies;
1993 if (time_after(mad_send_wr->timeout,
2000 list_add(&mad_send_wr->agent_list, list_item);
2003 if (mad_agent_priv->wait_list.next == &mad_send_wr->agent_list) {
2010 void ib_reset_mad_timeout(struct ib_mad_send_wr_private *mad_send_wr,
2013 mad_send_wr->timeout = msecs_to_jiffies(timeout_ms);
2014 wait_for_response(mad_send_wr);
2020 void ib_mad_complete_send_wr(struct ib_mad_send_wr_private *mad_send_wr,
2027 mad_agent_priv = mad_send_wr->mad_agent_priv;
2030 ret = ib_process_rmpp_send_wc(mad_send_wr, mad_send_wc);
2037 mad_send_wr->status == IB_WC_SUCCESS) {
2038 mad_send_wr->status = mad_send_wc->status;
2039 mad_send_wr->refcount -= (mad_send_wr->timeout > 0);
2042 if (--mad_send_wr->refcount > 0) {
2043 if (mad_send_wr->refcount == 1 && mad_send_wr->timeout &&
2044 mad_send_wr->status == IB_WC_SUCCESS) {
2045 wait_for_response(mad_send_wr);
2051 list_del(&mad_send_wr->agent_list);
2055 if (mad_send_wr->status != IB_WC_SUCCESS )
2056 mad_send_wc->status = mad_send_wr->status;
2073 struct ib_mad_send_wr_private *mad_send_wr, *queued_send_wr;
2083 mad_send_wr = container_of(mad_list, struct ib_mad_send_wr_private,
2089 ib_dma_unmap_single(mad_send_wr->send_buf.mad_agent->device,
2090 mad_send_wr->header_mapping,
2091 mad_send_wr->sg_list[0].length, DMA_TO_DEVICE);
2092 ib_dma_unmap_single(mad_send_wr->send_buf.mad_agent->device,
2093 mad_send_wr->payload_mapping,
2094 mad_send_wr->sg_list[1].length, DMA_TO_DEVICE);
2110 mad_send_wc.send_buf = &mad_send_wr->send_buf;
2114 snoop_send(qp_info, &mad_send_wr->send_buf, &mad_send_wc,
2116 ib_mad_complete_send_wr(mad_send_wr, &mad_send_wc);
2123 mad_send_wr = queued_send_wr;
2132 struct ib_mad_send_wr_private *mad_send_wr;
2138 mad_send_wr = container_of(mad_list,
2141 mad_send_wr->retry = 1;
2151 struct ib_mad_send_wr_private *mad_send_wr;
2168 mad_send_wr = container_of(mad_list, struct ib_mad_send_wr_private,
2171 if (mad_send_wr->retry) {
2175 mad_send_wr->retry = 0;
2176 ret = ib_post_send(qp_info->qp, &mad_send_wr->send_wr,
2235 struct ib_mad_send_wr_private *mad_send_wr, *temp_mad_send_wr;
2242 list_for_each_entry_safe(mad_send_wr, temp_mad_send_wr,
2244 if (mad_send_wr->status == IB_WC_SUCCESS) {
2245 mad_send_wr->status = IB_WC_WR_FLUSH_ERR;
2246 mad_send_wr->refcount -= (mad_send_wr->timeout > 0);
2260 list_for_each_entry_safe(mad_send_wr, temp_mad_send_wr,
2262 mad_send_wc.send_buf = &mad_send_wr->send_buf;
2263 list_del(&mad_send_wr->agent_list);
2274 struct ib_mad_send_wr_private *mad_send_wr;
2276 list_for_each_entry(mad_send_wr, &mad_agent_priv->wait_list,
2278 if (&mad_send_wr->send_buf == send_buf)
2279 return mad_send_wr;
2282 list_for_each_entry(mad_send_wr, &mad_agent_priv->send_list,
2284 if (is_data_mad(mad_agent_priv, mad_send_wr->send_buf.mad) &&
2285 &mad_send_wr->send_buf == send_buf)
2286 return mad_send_wr;
2295 struct ib_mad_send_wr_private *mad_send_wr;
2302 mad_send_wr = find_send_wr(mad_agent_priv, send_buf);
2303 if (!mad_send_wr || mad_send_wr->status != IB_WC_SUCCESS) {
2308 active = (!mad_send_wr->timeout || mad_send_wr->refcount > 1);
2310 mad_send_wr->status = IB_WC_WR_FLUSH_ERR;
2311 mad_send_wr->refcount -= (mad_send_wr->timeout > 0);
2314 mad_send_wr->send_buf.timeout_ms = timeout_ms;
2316 mad_send_wr->timeout = msecs_to_jiffies(timeout_ms);
2318 ib_reset_mad_timeout(mad_send_wr, timeout_ms);
2365 (unsigned long) local->mad_send_wr,
2394 mad_send_wc.send_buf = &local->mad_send_wr->send_buf;
2397 &local->mad_send_wr->send_buf,
2411 static int retry_send(struct ib_mad_send_wr_private *mad_send_wr)
2415 if (!mad_send_wr->retries--)
2418 mad_send_wr->timeout = msecs_to_jiffies(mad_send_wr->send_buf.timeout_ms);
2420 if (mad_send_wr->mad_agent_priv->agent.rmpp_version) {
2421 ret = ib_retry_rmpp(mad_send_wr);
2424 ret = ib_send_mad(mad_send_wr);
2434 ret = ib_send_mad(mad_send_wr);
2437 mad_send_wr->refcount++;
2438 list_add_tail(&mad_send_wr->agent_list,
2439 &mad_send_wr->mad_agent_priv->send_list);
2447 struct ib_mad_send_wr_private *mad_send_wr;
2457 mad_send_wr = list_entry(mad_agent_priv->wait_list.next,
2461 if (time_after(mad_send_wr->timeout, jiffies)) {
2462 delay = mad_send_wr->timeout - jiffies;
2471 list_del(&mad_send_wr->agent_list);
2472 if (mad_send_wr->status == IB_WC_SUCCESS &&
2473 !retry_send(mad_send_wr))
2478 if (mad_send_wr->status == IB_WC_SUCCESS)
2481 mad_send_wc.status = mad_send_wr->status;
2482 mad_send_wc.send_buf = &mad_send_wr->send_buf;