[ofw] [PATCH] core [4/5] - qp create sanity checks

Reuven Amitai reuven at mellanox.co.il
Mon Apr 14 01:37:32 PDT 2008


Hi,
 
The patch removes the #if 0 sanity check and add one check of
p_qp_create pointer.
 
I looked at IB spec and there isn't forbiddance of qp with sq depth of 0
(Although the low level driver will set it to 1).
Thanks for demonstrate one case of such use.
The sanity check is promoted from create_qp() (core\al_qp.c # 281) which
is called at the end of ib_create_qp.
Crash the app or assert the pointer is one way but IBAL performs sanity
checks all over the code and adhere this will be more consistent.
 
Reuven.
 
Index: core/al/al_pd.c

===================================================================

--- core/al/al_pd.c     (revision 1049)

+++ core/al/al_pd.c     (working copy)

@@ -333,24 +333,11 @@

            AL_PRINT_EXIT( TRACE_LEVEL_ERROR, AL_DBG_ERROR,
("IB_INVALID_PD_HANDLE\n") );

            return IB_INVALID_PD_HANDLE;

      }

-

-#if 0

-     /* seems like no need in these checks */

-     if( !p_qp_create->rq_depth || !p_qp_create->sq_depth )

+     if( !p_qp_create || !ph_qp )

      {

-           AL_PRINT_EXIT( TRACE_LEVEL_ERROR, AL_DBG_ERROR,
("IB_INVALID_MAX_WRS (%d:%d)\n",

-                 p_qp_create->rq_depth, p_qp_create->sq_depth ) );

-           return IB_INVALID_MAX_WRS;

+           AL_PRINT_EXIT( TRACE_LEVEL_ERROR, AL_DBG_ERROR,
("IB_INVALID_PARAMETER\n") );

+           return IB_INVALID_PARAMETER;

      }

-

-     if( !p_qp_create->rq_sge || !p_qp_create->sq_sge)

-     {

-           AL_PRINT_EXIT( TRACE_LEVEL_ERROR, AL_DBG_ERROR,
("IB_INVALID_MAX_SGE (%d:%d)\n", 

-                 p_qp_create->rq_sge, p_qp_create->sq_sge ) );

-           return IB_INVALID_MAX_SGE;

-     }

-#endif     

-

      if (h_pd->obj.p_ci_ca && h_pd->obj.p_ci_ca->p_pnp_attr)

      {

            if ((p_qp_create->rq_depth >
h_pd->obj.p_ci_ca->p_pnp_attr->max_wrs) ||

 

 

 

________________________________

From: Sean Hefty [mailto:sean.hefty at intel.com] 
Sent: Thursday, April 10, 2008 9:20 PM
To: Reuven Amitai; ofw at lists.openfabrics.org
Subject: RE: [ofw] [PATCH] core [4/5]



Index: core/al/al_pd.c

===================================================================

--- core/al/al_pd.c    (revision 1047)

+++ core/al/al_pd.c    (working copy)

@@ -333,24 +333,22 @@

           AL_PRINT_EXIT( TRACE_LEVEL_ERROR, AL_DBG_ERROR,
("IB_INVALID_PD_HANDLE\n") );

           return IB_INVALID_PD_HANDLE;

     }

-

-#if 0

-    /* seems like no need in these checks */

-    if( !p_qp_create->rq_depth || !p_qp_create->sq_depth )

+    if( !p_qp_create || !ph_qp )

 

These sort of checks are pointless.  There's nothing that can be done at
run time.  Crash the app so that they get a backtrace and force the
programmer to fix them.

 

 

     {

-          AL_PRINT_EXIT( TRACE_LEVEL_ERROR, AL_DBG_ERROR,
("IB_INVALID_MAX_WRS (%d:%d)\n",

-                p_qp_create->rq_depth, p_qp_create->sq_depth ) );

-          return IB_INVALID_MAX_WRS;

+          AL_PRINT_EXIT( TRACE_LEVEL_ERROR, AL_DBG_ERROR,
("IB_INVALID_PARAMETER\n") );

+          return IB_INVALID_PARAMETER;

     }

-

-    if( !p_qp_create->rq_sge || !p_qp_create->sq_sge)

+    if( !p_qp_create->rq_depth &&  !p_qp_create->sq_depth )

 

Couldn't a QP that's the target of RDMA reads/writes support depths of 0
on both?  The RDMA target information can be exchanged out of bounds or
during connection establishment.  (I know that Intel MPI exchanges RKey
information during connection setup.)

 

     {

-          AL_PRINT_EXIT( TRACE_LEVEL_ERROR, AL_DBG_ERROR,
("IB_INVALID_MAX_SGE (%d:%d)\n", 

-                p_qp_create->rq_sge, p_qp_create->sq_sge ) );

-          return IB_INVALID_MAX_SGE;

+          AL_PRINT_EXIT( TRACE_LEVEL_ERROR, AL_DBG_ERROR,
("IB_INVALID_SETTING\n") );

+          return IB_INVALID_SETTING;

     }

-#endif    

+    if( !p_qp_create->rq_sge && !p_qp_create->sq_sge)

+    {

 

These checks are related to checks against rq_depth and sq_depth,
respectively.

 

+          AL_PRINT_EXIT( TRACE_LEVEL_ERROR, AL_DBG_ERROR,
("IB_INVALID_SETTING\n") );

+          return IB_INVALID_SETTING;

 

+    }

     if (h_pd->obj.p_ci_ca && h_pd->obj.p_ci_ca->p_pnp_attr)

     {

           if ((p_qp_create->rq_depth >
h_pd->obj.p_ci_ca->p_pnp_attr->max_wrs) ||

 

 

- Sean

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openfabrics.org/pipermail/ofw/attachments/20080414/cdb5a2b5/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: qp_create_sanity_checks-fixed.patch
Type: application/octet-stream
Size: 1137 bytes
Desc: qp_create_sanity_checks-fixed.patch
URL: <http://lists.openfabrics.org/pipermail/ofw/attachments/20080414/cdb5a2b5/attachment.obj>


More information about the ofw mailing list