Lines Matching refs:agent

47 	struct ib_mad_agent_private *agent;  member
86 void ib_cancel_rmpp_recvs(struct ib_mad_agent_private *agent) in ib_cancel_rmpp_recvs() argument
91 spin_lock_irqsave(&agent->lock, flags); in ib_cancel_rmpp_recvs()
92 list_for_each_entry(rmpp_recv, &agent->rmpp_list, list) { in ib_cancel_rmpp_recvs()
97 spin_unlock_irqrestore(&agent->lock, flags); in ib_cancel_rmpp_recvs()
99 list_for_each_entry(rmpp_recv, &agent->rmpp_list, list) { in ib_cancel_rmpp_recvs()
104 flush_workqueue(agent->qp_info->port_priv->wq); in ib_cancel_rmpp_recvs()
107 &agent->rmpp_list, list) { in ib_cancel_rmpp_recvs()
140 msg = ib_create_send_mad(&rmpp_recv->agent->agent, recv_wc->wc->src_qp, in ack_recv()
153 static struct ib_mad_send_buf *alloc_response_msg(struct ib_mad_agent *agent, in alloc_response_msg() argument
160 ah = ib_create_ah_from_wc(agent->qp->pd, recv_wc->wc, in alloc_response_msg()
161 recv_wc->recv_buf.grh, agent->port_num); in alloc_response_msg()
166 msg = ib_create_send_mad(agent, recv_wc->wc->src_qp, in alloc_response_msg()
179 static void ack_ds_ack(struct ib_mad_agent_private *agent, in ack_ds_ack() argument
186 msg = alloc_response_msg(&agent->agent, recv_wc); in ack_ds_ack()
212 static void nack_recv(struct ib_mad_agent_private *agent, in nack_recv() argument
219 msg = alloc_response_msg(&agent->agent, recv_wc); in nack_recv()
248 spin_lock_irqsave(&rmpp_recv->agent->lock, flags); in recv_timeout_handler()
250 spin_unlock_irqrestore(&rmpp_recv->agent->lock, flags); in recv_timeout_handler()
255 spin_unlock_irqrestore(&rmpp_recv->agent->lock, flags); in recv_timeout_handler()
258 nack_recv(rmpp_recv->agent, rmpp_wc, IB_MGMT_RMPP_STATUS_T2L); in recv_timeout_handler()
269 spin_lock_irqsave(&rmpp_recv->agent->lock, flags); in recv_cleanup_handler()
271 spin_unlock_irqrestore(&rmpp_recv->agent->lock, flags); in recv_cleanup_handler()
275 spin_unlock_irqrestore(&rmpp_recv->agent->lock, flags); in recv_cleanup_handler()
280 create_rmpp_recv(struct ib_mad_agent_private *agent, in create_rmpp_recv() argument
290 rmpp_recv->ah = ib_create_ah_from_wc(agent->agent.qp->pd, in create_rmpp_recv()
293 agent->agent.port_num); in create_rmpp_recv()
297 rmpp_recv->agent = agent; in create_rmpp_recv()
326 find_rmpp_recv(struct ib_mad_agent_private *agent, in find_rmpp_recv() argument
332 list_for_each_entry(rmpp_recv, &agent->rmpp_list, list) { in find_rmpp_recv()
345 acquire_rmpp_recv(struct ib_mad_agent_private *agent, in acquire_rmpp_recv() argument
351 spin_lock_irqsave(&agent->lock, flags); in acquire_rmpp_recv()
352 rmpp_recv = find_rmpp_recv(agent, mad_recv_wc); in acquire_rmpp_recv()
355 spin_unlock_irqrestore(&agent->lock, flags); in acquire_rmpp_recv()
360 insert_rmpp_recv(struct ib_mad_agent_private *agent, in insert_rmpp_recv() argument
365 cur_rmpp_recv = find_rmpp_recv(agent, rmpp_recv->rmpp_wc); in insert_rmpp_recv()
367 list_add_tail(&rmpp_recv->list, &agent->rmpp_list); in insert_rmpp_recv()
397 static inline int window_size(struct ib_mad_agent_private *agent) in window_size() argument
399 return max(agent->qp_info->recv_queue.max_active >> 3, 1); in window_size()
457 queue_delayed_work(rmpp_recv->agent->qp_info->port_priv->wq, in complete_rmpp()
463 continue_rmpp(struct ib_mad_agent_private *agent, in continue_rmpp() argument
472 rmpp_recv = acquire_rmpp_recv(agent, mad_recv_wc); in continue_rmpp()
504 rmpp_recv->newwin += window_size(agent); in continue_rmpp()
522 start_rmpp(struct ib_mad_agent_private *agent, in start_rmpp() argument
528 rmpp_recv = create_rmpp_recv(agent, mad_recv_wc); in start_rmpp()
534 spin_lock_irqsave(&agent->lock, flags); in start_rmpp()
535 if (insert_rmpp_recv(agent, rmpp_recv)) { in start_rmpp()
536 spin_unlock_irqrestore(&agent->lock, flags); in start_rmpp()
539 return continue_rmpp(agent, mad_recv_wc); in start_rmpp()
545 spin_unlock_irqrestore(&agent->lock, flags); in start_rmpp()
548 spin_unlock_irqrestore(&agent->lock, flags); in start_rmpp()
550 queue_delayed_work(agent->qp_info->port_priv->wq, in start_rmpp()
553 rmpp_recv->newwin += window_size(agent); in start_rmpp()
591 static void abort_send(struct ib_mad_agent_private *agent, in abort_send() argument
598 spin_lock_irqsave(&agent->lock, flags); in abort_send()
599 mad_send_wr = ib_find_send_mad(agent, mad_recv_wc); in abort_send()
608 spin_unlock_irqrestore(&agent->lock, flags); in abort_send()
616 spin_unlock_irqrestore(&agent->lock, flags); in abort_send()
631 static void process_ds_ack(struct ib_mad_agent_private *agent, in process_ds_ack() argument
636 rmpp_recv = find_rmpp_recv(agent, mad_recv_wc); in process_ds_ack()
641 static void process_rmpp_ack(struct ib_mad_agent_private *agent, in process_rmpp_ack() argument
651 abort_send(agent, mad_recv_wc, IB_MGMT_RMPP_STATUS_BAD_STATUS); in process_rmpp_ack()
652 nack_recv(agent, mad_recv_wc, IB_MGMT_RMPP_STATUS_BAD_STATUS); in process_rmpp_ack()
659 abort_send(agent, mad_recv_wc, IB_MGMT_RMPP_STATUS_W2S); in process_rmpp_ack()
660 nack_recv(agent, mad_recv_wc, IB_MGMT_RMPP_STATUS_W2S); in process_rmpp_ack()
664 spin_lock_irqsave(&agent->lock, flags); in process_rmpp_ack()
665 mad_send_wr = ib_find_send_mad(agent, mad_recv_wc); in process_rmpp_ack()
668 process_ds_ack(agent, mad_recv_wc, newwin); in process_rmpp_ack()
674 spin_unlock_irqrestore(&agent->lock, flags); in process_rmpp_ack()
675 ack_ds_ack(agent, mad_recv_wc); in process_rmpp_ack()
685 spin_unlock_irqrestore(&agent->lock, flags); in process_rmpp_ack()
686 abort_send(agent, mad_recv_wc, IB_MGMT_RMPP_STATUS_S2B); in process_rmpp_ack()
687 nack_recv(agent, mad_recv_wc, IB_MGMT_RMPP_STATUS_S2B); in process_rmpp_ack()
705 spin_unlock_irqrestore(&agent->lock, flags); in process_rmpp_ack()
716 spin_unlock_irqrestore(&agent->lock, flags); in process_rmpp_ack()
717 ack_ds_ack(agent, mad_recv_wc); in process_rmpp_ack()
732 spin_unlock_irqrestore(&agent->lock, flags); in process_rmpp_ack()
736 process_rmpp_data(struct ib_mad_agent_private *agent, in process_rmpp_data() argument
754 return start_rmpp(agent, mad_recv_wc); in process_rmpp_data()
760 return continue_rmpp(agent, mad_recv_wc); in process_rmpp_data()
763 nack_recv(agent, mad_recv_wc, rmpp_status); in process_rmpp_data()
768 static void process_rmpp_stop(struct ib_mad_agent_private *agent, in process_rmpp_stop() argument
776 abort_send(agent, mad_recv_wc, IB_MGMT_RMPP_STATUS_BAD_STATUS); in process_rmpp_stop()
777 nack_recv(agent, mad_recv_wc, IB_MGMT_RMPP_STATUS_BAD_STATUS); in process_rmpp_stop()
779 abort_send(agent, mad_recv_wc, rmpp_mad->rmpp_hdr.rmpp_status); in process_rmpp_stop()
782 static void process_rmpp_abort(struct ib_mad_agent_private *agent, in process_rmpp_abort() argument
791 abort_send(agent, mad_recv_wc, IB_MGMT_RMPP_STATUS_BAD_STATUS); in process_rmpp_abort()
792 nack_recv(agent, mad_recv_wc, IB_MGMT_RMPP_STATUS_BAD_STATUS); in process_rmpp_abort()
794 abort_send(agent, mad_recv_wc, rmpp_mad->rmpp_hdr.rmpp_status); in process_rmpp_abort()
798 ib_process_rmpp_recv_wc(struct ib_mad_agent_private *agent, in ib_process_rmpp_recv_wc() argument
808 abort_send(agent, mad_recv_wc, IB_MGMT_RMPP_STATUS_UNV); in ib_process_rmpp_recv_wc()
809 nack_recv(agent, mad_recv_wc, IB_MGMT_RMPP_STATUS_UNV); in ib_process_rmpp_recv_wc()
815 return process_rmpp_data(agent, mad_recv_wc); in ib_process_rmpp_recv_wc()
817 process_rmpp_ack(agent, mad_recv_wc); in ib_process_rmpp_recv_wc()
820 process_rmpp_stop(agent, mad_recv_wc); in ib_process_rmpp_recv_wc()
823 process_rmpp_abort(agent, mad_recv_wc); in ib_process_rmpp_recv_wc()
826 abort_send(agent, mad_recv_wc, IB_MGMT_RMPP_STATUS_BADT); in ib_process_rmpp_recv_wc()
827 nack_recv(agent, mad_recv_wc, IB_MGMT_RMPP_STATUS_BADT); in ib_process_rmpp_recv_wc()
837 struct ib_mad_agent_private *agent = mad_send_wr->mad_agent_priv; in init_newwin() local
847 spin_lock_irqsave(&agent->lock, flags); in init_newwin()
848 list_for_each_entry(rmpp_recv, &agent->rmpp_list, list) { in init_newwin()
863 spin_unlock_irqrestore(&agent->lock, flags); in init_newwin()