[openib-general] [PATCH] ib_mad: In ib_mad_complete_recv, use atomic_dec_and_test and wait_event rather than just atomic_dec for RMPP segments and when solicited and there is no matching request found

Hal Rosenstock halr at voltaire.com
Mon Oct 25 11:57:20 PDT 2004


ib_mad: In ib_mad_complete_recv, use atomic_dec_and_test and wait_event
rather than just atomic_dec for RMPP segments and when solicited and
there is no matching request found.


Index: ib_mad.c
===================================================================
--- ib_mad.c	(revision 1062)
+++ ib_mad.c	(working copy)
@@ -875,7 +875,8 @@
 	/* Fully reassemble receive before processing */
 	recv = reassemble_recv(mad_agent_priv, recv);
 	if (!recv) {
-		atomic_dec(&mad_agent_priv->refcount);
+		if (atomic_dec_and_test(&mad_agent_priv->refcount))
+			wake_up(&mad_agent_priv->wait);
 		return;
 	}
 
@@ -887,7 +888,8 @@
 		if (!mad_send_wr) {
 			spin_unlock_irqrestore(&mad_agent_priv->lock, flags);
 			ib_free_recv_mad(&recv->header.recv_wc);
-			atomic_dec(&mad_agent_priv->refcount);
+			if (atomic_dec_and_test(&mad_agent_priv->refcount))
+				wake_up(&mad_agent_priv->wait);
 			return;
 		}
 		/* Timeout = 0 means that we won't wait for a response */






More information about the general mailing list