> spin_lock_irqsave(&qp_info->send_queue.lock, flags); > if (qp_info->send_queue.count < qp_info->send_queue.max_active) { >+ qp_info->send_queue.count++; > >+ spin_unlock_irqrestore(&qp_info->send_queue.lock, flags); > > ret = ib_post_send(mad_agent->qp, &mad_send_wr->send_wr, > &bad_send_wr); > >+ spin_lock_irqsave(&qp_info->send_queue.lock, flags); > list = &qp_info->send_queue.list; > } else { > ret = 0; >+ qp_info->send_queue.count++; > list = &qp_info->overflow_list; > } > > if (!ret) > list_add_tail(&mad_send_wr->mad_list.list, list); >+ else >+ qp_info->send_queue.count--;
It's not quite this simple. Once the lock is released before calling ib_post_send, another thread could come down and queue a MAD to the overflow list. If ib_post_send fails, the overflow list must be checked to see if a queued mad should now be sent. As for being able to hold a lock when calling ib_post_send, that's something that should be allowed. - Sean _______________________________________________ general mailing list general@lists.openfabrics.org http://lists.openfabrics.org/cgi-bin/mailman/listinfo/general To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general