• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/components/opensource/linux/linux-2.6.36/drivers/infiniband/core/

Lines Matching defs:mad_send_wr

670 				  struct ib_mad_send_wr_private *mad_send_wr)
673 struct ib_smp *smp = mad_send_wr->send_buf.mad;
682 struct ib_send_wr *send_wr = &mad_send_wr->send_wr;
780 local->mad_send_wr = mad_send_wr;
806 static void free_send_rmpp_list(struct ib_mad_send_wr_private *mad_send_wr)
810 list_for_each_entry_safe(s, t, &mad_send_wr->rmpp_list, list) {
864 struct ib_mad_send_wr_private *mad_send_wr;
879 buf = kzalloc(sizeof *mad_send_wr + size, gfp_mask);
883 mad_send_wr = buf + size;
884 INIT_LIST_HEAD(&mad_send_wr->rmpp_list);
885 mad_send_wr->send_buf.mad = buf;
886 mad_send_wr->send_buf.hdr_len = hdr_len;
887 mad_send_wr->send_buf.data_len = data_len;
888 mad_send_wr->pad = pad;
890 mad_send_wr->mad_agent_priv = mad_agent_priv;
891 mad_send_wr->sg_list[0].length = hdr_len;
892 mad_send_wr->sg_list[0].lkey = mad_agent->mr->lkey;
893 mad_send_wr->sg_list[1].length = sizeof(struct ib_mad) - hdr_len;
894 mad_send_wr->sg_list[1].lkey = mad_agent->mr->lkey;
896 mad_send_wr->send_wr.wr_id = (unsigned long) mad_send_wr;
897 mad_send_wr->send_wr.sg_list = mad_send_wr->sg_list;
898 mad_send_wr->send_wr.num_sge = 2;
899 mad_send_wr->send_wr.opcode = IB_WR_SEND;
900 mad_send_wr->send_wr.send_flags = IB_SEND_SIGNALED;
901 mad_send_wr->send_wr.wr.ud.remote_qpn = remote_qpn;
902 mad_send_wr->send_wr.wr.ud.remote_qkey = IB_QP_SET_QKEY;
903 mad_send_wr->send_wr.wr.ud.pkey_index = pkey_index;
906 ret = alloc_send_rmpp_list(mad_send_wr, gfp_mask);
913 mad_send_wr->send_buf.mad_agent = mad_agent;
915 return &mad_send_wr->send_buf;
950 struct ib_mad_send_wr_private *mad_send_wr;
953 mad_send_wr = container_of(send_buf, struct ib_mad_send_wr_private,
955 list = &mad_send_wr->cur_seg->list;
957 if (mad_send_wr->cur_seg->num < seg_num) {
958 list_for_each_entry(mad_send_wr->cur_seg, list, list)
959 if (mad_send_wr->cur_seg->num == seg_num)
961 } else if (mad_send_wr->cur_seg->num > seg_num) {
962 list_for_each_entry_reverse(mad_send_wr->cur_seg, list, list)
963 if (mad_send_wr->cur_seg->num == seg_num)
966 return mad_send_wr->cur_seg->data;
970 static inline void *ib_get_payload(struct ib_mad_send_wr_private *mad_send_wr)
972 if (mad_send_wr->send_buf.seg_count)
973 return ib_get_rmpp_segment(&mad_send_wr->send_buf,
974 mad_send_wr->seg_num);
976 return mad_send_wr->send_buf.mad +
977 mad_send_wr->send_buf.hdr_len;
983 struct ib_mad_send_wr_private *mad_send_wr;
987 mad_send_wr = container_of(send_buf, struct ib_mad_send_wr_private,
990 free_send_rmpp_list(mad_send_wr);
996 int ib_send_mad(struct ib_mad_send_wr_private *mad_send_wr)
1006 /* Set WR ID to find mad_send_wr upon completion */
1007 qp_info = mad_send_wr->mad_agent_priv->qp_info;
1008 mad_send_wr->send_wr.wr_id = (unsigned long)&mad_send_wr->mad_list;
1009 mad_send_wr->mad_list.mad_queue = &qp_info->send_queue;
1011 mad_agent = mad_send_wr->send_buf.mad_agent;
1012 sge = mad_send_wr->sg_list;
1014 mad_send_wr->send_buf.mad,
1017 mad_send_wr->header_mapping = sge[0].addr;
1020 ib_get_payload(mad_send_wr),
1023 mad_send_wr->payload_mapping = sge[1].addr;
1027 ret = ib_post_send(mad_agent->qp, &mad_send_wr->send_wr,
1037 list_add_tail(&mad_send_wr->mad_list.list, list);
1042 mad_send_wr->header_mapping,
1045 mad_send_wr->payload_mapping,
1060 struct ib_mad_send_wr_private *mad_send_wr;
1067 mad_send_wr = container_of(send_buf,
1070 mad_agent_priv = mad_send_wr->mad_agent_priv;
1092 mad_send_wr->send_wr.wr.ud.ah = send_buf->ah;
1097 mad_send_wr);
1104 mad_send_wr->tid = ((struct ib_mad_hdr *) send_buf->mad)->tid;
1106 mad_send_wr->timeout = msecs_to_jiffies(send_buf->timeout_ms);
1107 mad_send_wr->max_retries = send_buf->retries;
1108 mad_send_wr->retries_left = send_buf->retries;
1111 mad_send_wr->refcount = 1 + (mad_send_wr->timeout > 0);
1112 mad_send_wr->status = IB_WC_SUCCESS;
1117 list_add_tail(&mad_send_wr->agent_list,
1122 ret = ib_send_rmpp_mad(mad_send_wr);
1124 ret = ib_send_mad(mad_send_wr);
1126 ret = ib_send_mad(mad_send_wr);
1130 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);
1969 struct ib_mad_send_wr_private *mad_send_wr;
1975 mad_send_wr = list_entry(mad_agent_priv->wait_list.next,
1980 mad_send_wr->timeout)) {
1981 mad_agent_priv->timeout = mad_send_wr->timeout;
1983 delay = mad_send_wr->timeout - jiffies;
1993 static void wait_for_response(struct ib_mad_send_wr_private *mad_send_wr)
2000 mad_agent_priv = mad_send_wr->mad_agent_priv;
2001 list_del(&mad_send_wr->agent_list);
2003 delay = mad_send_wr->timeout;
2004 mad_send_wr->timeout += jiffies;
2011 if (time_after(mad_send_wr->timeout,
2018 list_add(&mad_send_wr->agent_list, list_item);
2021 if (mad_agent_priv->wait_list.next == &mad_send_wr->agent_list) {
2028 void ib_reset_mad_timeout(struct ib_mad_send_wr_private *mad_send_wr,
2031 mad_send_wr->timeout = msecs_to_jiffies(timeout_ms);
2032 wait_for_response(mad_send_wr);
2038 void ib_mad_complete_send_wr(struct ib_mad_send_wr_private *mad_send_wr,
2045 mad_agent_priv = mad_send_wr->mad_agent_priv;
2048 ret = ib_process_rmpp_send_wc(mad_send_wr, mad_send_wc);
2055 mad_send_wr->status == IB_WC_SUCCESS) {
2056 mad_send_wr->status = mad_send_wc->status;
2057 mad_send_wr->refcount -= (mad_send_wr->timeout > 0);
2060 if (--mad_send_wr->refcount > 0) {
2061 if (mad_send_wr->refcount == 1 && mad_send_wr->timeout &&
2062 mad_send_wr->status == IB_WC_SUCCESS) {
2063 wait_for_response(mad_send_wr);
2069 list_del(&mad_send_wr->agent_list);
2073 if (mad_send_wr->status != IB_WC_SUCCESS )
2074 mad_send_wc->status = mad_send_wr->status;
2091 struct ib_mad_send_wr_private *mad_send_wr, *queued_send_wr;
2101 mad_send_wr = container_of(mad_list, struct ib_mad_send_wr_private,
2107 ib_dma_unmap_single(mad_send_wr->send_buf.mad_agent->device,
2108 mad_send_wr->header_mapping,
2109 mad_send_wr->sg_list[0].length, DMA_TO_DEVICE);
2110 ib_dma_unmap_single(mad_send_wr->send_buf.mad_agent->device,
2111 mad_send_wr->payload_mapping,
2112 mad_send_wr->sg_list[1].length, DMA_TO_DEVICE);
2128 mad_send_wc.send_buf = &mad_send_wr->send_buf;
2132 snoop_send(qp_info, &mad_send_wr->send_buf, &mad_send_wc,
2134 ib_mad_complete_send_wr(mad_send_wr, &mad_send_wc);
2141 mad_send_wr = queued_send_wr;
2150 struct ib_mad_send_wr_private *mad_send_wr;
2156 mad_send_wr = container_of(mad_list,
2159 mad_send_wr->retry = 1;
2169 struct ib_mad_send_wr_private *mad_send_wr;
2186 mad_send_wr = container_of(mad_list, struct ib_mad_send_wr_private,
2189 if (mad_send_wr->retry) {
2193 mad_send_wr->retry = 0;
2194 ret = ib_post_send(qp_info->qp, &mad_send_wr->send_wr,
2253 struct ib_mad_send_wr_private *mad_send_wr, *temp_mad_send_wr;
2260 list_for_each_entry_safe(mad_send_wr, temp_mad_send_wr,
2262 if (mad_send_wr->status == IB_WC_SUCCESS) {
2263 mad_send_wr->status = IB_WC_WR_FLUSH_ERR;
2264 mad_send_wr->refcount -= (mad_send_wr->timeout > 0);
2276 list_for_each_entry_safe(mad_send_wr, temp_mad_send_wr,
2278 mad_send_wc.send_buf = &mad_send_wr->send_buf;
2279 list_del(&mad_send_wr->agent_list);
2290 struct ib_mad_send_wr_private *mad_send_wr;
2292 list_for_each_entry(mad_send_wr, &mad_agent_priv->wait_list,
2294 if (&mad_send_wr->send_buf == send_buf)
2295 return mad_send_wr;
2298 list_for_each_entry(mad_send_wr, &mad_agent_priv->send_list,
2300 if (is_data_mad(mad_agent_priv, mad_send_wr->send_buf.mad) &&
2301 &mad_send_wr->send_buf == send_buf)
2302 return mad_send_wr;
2311 struct ib_mad_send_wr_private *mad_send_wr;
2318 mad_send_wr = find_send_wr(mad_agent_priv, send_buf);
2319 if (!mad_send_wr || mad_send_wr->status != IB_WC_SUCCESS) {
2324 active = (!mad_send_wr->timeout || mad_send_wr->refcount > 1);
2326 mad_send_wr->status = IB_WC_WR_FLUSH_ERR;
2327 mad_send_wr->refcount -= (mad_send_wr->timeout > 0);
2330 mad_send_wr->send_buf.timeout_ms = timeout_ms;
2332 mad_send_wr->timeout = msecs_to_jiffies(timeout_ms);
2334 ib_reset_mad_timeout(mad_send_wr, timeout_ms);
2382 (unsigned long) local->mad_send_wr,
2411 mad_send_wc.send_buf = &local->mad_send_wr->send_buf;
2414 &local->mad_send_wr->send_buf,
2428 static int retry_send(struct ib_mad_send_wr_private *mad_send_wr)
2432 if (!mad_send_wr->retries_left)
2435 mad_send_wr->retries_left--;
2436 mad_send_wr->send_buf.retries++;
2438 mad_send_wr->timeout = msecs_to_jiffies(mad_send_wr->send_buf.timeout_ms);
2440 if (mad_send_wr->mad_agent_priv->agent.rmpp_version) {
2441 ret = ib_retry_rmpp(mad_send_wr);
2444 ret = ib_send_mad(mad_send_wr);
2454 ret = ib_send_mad(mad_send_wr);
2457 mad_send_wr->refcount++;
2458 list_add_tail(&mad_send_wr->agent_list,
2459 &mad_send_wr->mad_agent_priv->send_list);
2467 struct ib_mad_send_wr_private *mad_send_wr;
2477 mad_send_wr = list_entry(mad_agent_priv->wait_list.next,
2481 if (time_after(mad_send_wr->timeout, jiffies)) {
2482 delay = mad_send_wr->timeout - jiffies;
2491 list_del(&mad_send_wr->agent_list);
2492 if (mad_send_wr->status == IB_WC_SUCCESS &&
2493 !retry_send(mad_send_wr))
2498 if (mad_send_wr->status == IB_WC_SUCCESS)
2501 mad_send_wc.status = mad_send_wr->status;
2502 mad_send_wc.send_buf = &mad_send_wr->send_buf;