[ofw] [Patch 20/62] Reference implementation of NDv2

Fab Tillier ftillier at microsoft.com
Wed Feb 20 17:45:40 PST 2013


Unify formatting QP INIT parameters in CEP manager.

Currently, the CEP manager has different logic for formatting the QP INIT parameters between al_cep_pre_rep and al_cep_get_init_attr.  This patch unifies the QP INIT parameters returned by the two functions.  The key difference is in the access_ctrl returned by al_cep_pre_rep, in that they will enable RDMA writes always, as well as enable RDMA reads and atomic operations if responder resources are being provided by the peer.

Signed-off-by: Fab Tillier <ftillier at microsoft.com>

diff -dwup3 -x *svn* -x *makefile.inc -x *sources -r c:\dev\openib\ofw\gen1\branches\mlx4_30\trunk\core\al\kernel\al_cm_cep.c .\core\al\kernel\al_cm_cep.c
--- c:\dev\openib\ofw\gen1\branches\mlx4_30\trunk\core\al\kernel\al_cm_cep.c	Fri Aug 03 12:58:50 2012
+++ .\core\al\kernel\al_cm_cep.c	Mon Jul 30 22:23:51 2012
@@ -5021,6 +5112,27 @@ __format_rep(
 }
 
 
+static void
+__al_cep_fill_init_attr(
+	__in kcep_t *p_cep,
+	__out ib_qp_mod_t* p_init
+	)
+{
+	/* Format the INIT qp modify attributes. */
+	cl_memclr(p_init, sizeof(*p_init));
+	p_init->req_state = IB_QPS_INIT;
+	p_init->state.init.primary_port =
+		p_cep->av[p_cep->idx_primary].attr.port_num;
+	p_init->state.init.qkey = 0;
+	p_init->state.init.pkey_index =
+		p_cep->av[p_cep->idx_primary].pkey_index;
+	p_init->state.init.access_ctrl = IB_AC_LOCAL_WRITE | IB_AC_RDMA_WRITE;
+	if ( p_cep->resp_res )
+	{
+		p_init->state.init.access_ctrl |= IB_AC_RDMA_READ | IB_AC_ATOMIC;
+	}
+}
+
 
 static ib_api_status_t
 __al_cep_pre_rep(
@@ -5065,14 +5177,9 @@ __al_cep_pre_rep(
 		/* Format the INIT qp modify attributes. */
 		if( p_init )
 		{
-			p_init->req_state = IB_QPS_INIT;
-			p_init->state.init.primary_port =
-				p_cep->av[p_cep->idx_primary].attr.port_num;
-			p_init->state.init.qkey = 0;
-			p_init->state.init.pkey_index =
-				p_cep->av[p_cep->idx_primary].pkey_index;
-			p_init->state.init.access_ctrl = IB_AC_LOCAL_WRITE;
+			__al_cep_fill_init_attr(p_cep, p_init);
 		}
+
 		/* Just OR in the PREP bit into the state. */
 		p_cep->state |= CEP_STATE_PREP;
 		break;
@@ -6222,7 +6329,7 @@ kal_cep_format_event(
 		}
 		break;
 	case CM_APR_ATTR_ID:
-		p_event->type = iba_cm_apr_received;;
+		p_event->type = iba_cm_apr_received;
 		// TODO: format apr event
 		break;
 	case CM_SIDR_REQ_ATTR_ID:
@@ -6278,17 +6385,7 @@ al_cep_get_init_attr(
 	case CEP_STATE_REP_MRA_SENT:
 	case CEP_STATE_ESTABLISHED:
 		/* Format the INIT qp modify attributes. */
-		cl_memclr(p_init, sizeof(ib_qp_mod_t));
-		p_init->req_state = IB_QPS_INIT;
-		p_init->state.init.primary_port =
-			p_cep->av[p_cep->idx_primary].attr.port_num;
-		p_init->state.init.pkey_index =
-			p_cep->av[p_cep->idx_primary].pkey_index;
-		p_init->state.init.access_ctrl = IB_AC_LOCAL_WRITE | IB_AC_RDMA_WRITE;
-		if ( p_cep->resp_res )
-		{
-			p_init->state.init.access_ctrl |= IB_AC_RDMA_READ | IB_AC_ATOMIC;
-		}
+		__al_cep_fill_init_attr(p_cep, p_init);
 		status = IB_SUCCESS;
 		break;
 	default:
@@ -6617,8 +6714,6 @@ al_cep_queue_irp(
 	return STATUS_PENDING;
 }
 
-//debug
-#include "bus_stat.h"
 
 void
 al_cep_cleanup_al(
@@ -6648,19 +6743,6 @@ al_cep_cleanup_al(
 		 */
 		cid = PARENT_STRUCT( p_item, kcep_t, al_item )->cid;
 		cl_spinlock_release( &h_al->obj.lock );
-
-		// debug
-		// allow to IBAL to remove CEP Manager
-		if ( KeGetCurrentIrql() == PASSIVE_LEVEL )
-			cl_thread_suspend(1000);
-		// if it is removed - assert
-		if ( !gp_cep_mgr ) {
-			AL_PRINT( TRACE_LEVEL_ERROR, AL_DBG_CM, ("BUG!!! Trying to release CEPs after destroying CEP manager\n") );
-			g_post_event("IBAL: al_cep_cleanup_al: BUG!!! Trying to release CEPs after destroying CEP manager.\n");
-			ASSERT(0);
-			break;
-		}
-		
 		al_destroy_cep( h_al, &cid, FALSE );
 		cl_spinlock_acquire( &h_al->obj.lock );
 	}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: ndv2.20.patch
Type: application/octet-stream
Size: 3353 bytes
Desc: ndv2.20.patch
URL: <http://lists.openfabrics.org/pipermail/ofw/attachments/20130221/a8b6a237/attachment.obj>


More information about the ofw mailing list