Lines Matching refs:agent

45 	struct ib_mad_agent_private *agent;
84 void ib_cancel_rmpp_recvs(struct ib_mad_agent_private *agent)
89 spin_lock_irqsave(&agent->lock, flags);
90 list_for_each_entry(rmpp_recv, &agent->rmpp_list, list) {
95 spin_unlock_irqrestore(&agent->lock, flags);
97 list_for_each_entry(rmpp_recv, &agent->rmpp_list, list) {
102 flush_workqueue(agent->qp_info->port_priv->wq);
105 &agent->rmpp_list, list) {
138 msg = ib_create_send_mad(&rmpp_recv->agent->agent, recv_wc->wc->src_qp,
151 static struct ib_mad_send_buf *alloc_response_msg(struct ib_mad_agent *agent,
158 ah = ib_create_ah_from_wc(agent->qp->pd, recv_wc->wc,
159 recv_wc->recv_buf.grh, agent->port_num);
164 msg = ib_create_send_mad(agent, recv_wc->wc->src_qp,
177 static void ack_ds_ack(struct ib_mad_agent_private *agent,
184 msg = alloc_response_msg(&agent->agent, recv_wc);
210 static void nack_recv(struct ib_mad_agent_private *agent,
217 msg = alloc_response_msg(&agent->agent, recv_wc);
246 spin_lock_irqsave(&rmpp_recv->agent->lock, flags);
248 spin_unlock_irqrestore(&rmpp_recv->agent->lock, flags);
253 spin_unlock_irqrestore(&rmpp_recv->agent->lock, flags);
256 nack_recv(rmpp_recv->agent, rmpp_wc, IB_MGMT_RMPP_STATUS_T2L);
267 spin_lock_irqsave(&rmpp_recv->agent->lock, flags);
269 spin_unlock_irqrestore(&rmpp_recv->agent->lock, flags);
273 spin_unlock_irqrestore(&rmpp_recv->agent->lock, flags);
278 create_rmpp_recv(struct ib_mad_agent_private *agent,
288 rmpp_recv->ah = ib_create_ah_from_wc(agent->agent.qp->pd,
291 agent->agent.port_num);
295 rmpp_recv->agent = agent;
324 find_rmpp_recv(struct ib_mad_agent_private *agent,
330 list_for_each_entry(rmpp_recv, &agent->rmpp_list, list) {
343 acquire_rmpp_recv(struct ib_mad_agent_private *agent,
349 spin_lock_irqsave(&agent->lock, flags);
350 rmpp_recv = find_rmpp_recv(agent, mad_recv_wc);
353 spin_unlock_irqrestore(&agent->lock, flags);
358 insert_rmpp_recv(struct ib_mad_agent_private *agent,
363 cur_rmpp_recv = find_rmpp_recv(agent, rmpp_recv->rmpp_wc);
365 list_add_tail(&rmpp_recv->list, &agent->rmpp_list);
395 static inline int window_size(struct ib_mad_agent_private *agent)
397 return max(agent->qp_info->recv_queue.max_active >> 3, 1);
455 queue_delayed_work(rmpp_recv->agent->qp_info->port_priv->wq,
461 continue_rmpp(struct ib_mad_agent_private *agent,
470 rmpp_recv = acquire_rmpp_recv(agent, mad_recv_wc);
502 rmpp_recv->newwin += window_size(agent);
520 start_rmpp(struct ib_mad_agent_private *agent,
526 rmpp_recv = create_rmpp_recv(agent, mad_recv_wc);
532 spin_lock_irqsave(&agent->lock, flags);
533 if (insert_rmpp_recv(agent, rmpp_recv)) {
534 spin_unlock_irqrestore(&agent->lock, flags);
537 return continue_rmpp(agent, mad_recv_wc);
543 spin_unlock_irqrestore(&agent->lock, flags);
546 spin_unlock_irqrestore(&agent->lock, flags);
548 queue_delayed_work(agent->qp_info->port_priv->wq,
551 rmpp_recv->newwin += window_size(agent);
589 static void abort_send(struct ib_mad_agent_private *agent,
596 spin_lock_irqsave(&agent->lock, flags);
597 mad_send_wr = ib_find_send_mad(agent, mad_recv_wc);
606 spin_unlock_irqrestore(&agent->lock, flags);
614 spin_unlock_irqrestore(&agent->lock, flags);
629 static void process_ds_ack(struct ib_mad_agent_private *agent,
634 rmpp_recv = find_rmpp_recv(agent, mad_recv_wc);
639 static void process_rmpp_ack(struct ib_mad_agent_private *agent,
649 abort_send(agent, mad_recv_wc, IB_MGMT_RMPP_STATUS_BAD_STATUS);
650 nack_recv(agent, mad_recv_wc, IB_MGMT_RMPP_STATUS_BAD_STATUS);
657 abort_send(agent, mad_recv_wc, IB_MGMT_RMPP_STATUS_W2S);
658 nack_recv(agent, mad_recv_wc, IB_MGMT_RMPP_STATUS_W2S);
662 spin_lock_irqsave(&agent->lock, flags);
663 mad_send_wr = ib_find_send_mad(agent, mad_recv_wc);
666 process_ds_ack(agent, mad_recv_wc, newwin);
672 spin_unlock_irqrestore(&agent->lock, flags);
673 ack_ds_ack(agent, mad_recv_wc);
683 spin_unlock_irqrestore(&agent->lock, flags);
684 abort_send(agent, mad_recv_wc, IB_MGMT_RMPP_STATUS_S2B);
685 nack_recv(agent, mad_recv_wc, IB_MGMT_RMPP_STATUS_S2B);
703 spin_unlock_irqrestore(&agent->lock, flags);
714 spin_unlock_irqrestore(&agent->lock, flags);
715 ack_ds_ack(agent, mad_recv_wc);
730 spin_unlock_irqrestore(&agent->lock, flags);
734 process_rmpp_data(struct ib_mad_agent_private *agent,
752 return start_rmpp(agent, mad_recv_wc);
758 return continue_rmpp(agent, mad_recv_wc);
761 nack_recv(agent, mad_recv_wc, rmpp_status);
766 static void process_rmpp_stop(struct ib_mad_agent_private *agent,
774 abort_send(agent, mad_recv_wc, IB_MGMT_RMPP_STATUS_BAD_STATUS);
775 nack_recv(agent, mad_recv_wc, IB_MGMT_RMPP_STATUS_BAD_STATUS);
777 abort_send(agent, mad_recv_wc, rmpp_mad->rmpp_hdr.rmpp_status);
780 static void process_rmpp_abort(struct ib_mad_agent_private *agent,
789 abort_send(agent, mad_recv_wc, IB_MGMT_RMPP_STATUS_BAD_STATUS);
790 nack_recv(agent, mad_recv_wc, IB_MGMT_RMPP_STATUS_BAD_STATUS);
792 abort_send(agent, mad_recv_wc, rmpp_mad->rmpp_hdr.rmpp_status);
796 ib_process_rmpp_recv_wc(struct ib_mad_agent_private *agent,
806 abort_send(agent, mad_recv_wc, IB_MGMT_RMPP_STATUS_UNV);
807 nack_recv(agent, mad_recv_wc, IB_MGMT_RMPP_STATUS_UNV);
813 return process_rmpp_data(agent, mad_recv_wc);
815 process_rmpp_ack(agent, mad_recv_wc);
818 process_rmpp_stop(agent, mad_recv_wc);
821 process_rmpp_abort(agent, mad_recv_wc);
824 abort_send(agent, mad_recv_wc, IB_MGMT_RMPP_STATUS_BADT);
825 nack_recv(agent, mad_recv_wc, IB_MGMT_RMPP_STATUS_BADT);
835 struct ib_mad_agent_private *agent = mad_send_wr->mad_agent_priv;
845 spin_lock_irqsave(&agent->lock, flags);
846 list_for_each_entry(rmpp_recv, &agent->rmpp_list, list) {
861 spin_unlock_irqrestore(&agent->lock, flags);