[ofw] [PATCH] Make al_cep_get_pdata return NTSTATUS

Leonid Keller leonid at mellanox.co.il
Wed Jul 2 04:55:42 PDT 2008


Applied in 1320. Fixed compiler problem in 1321. 
Thank you. 

> -----Original Message-----
> From: ofw-bounces at lists.openfabrics.org 
> [mailto:ofw-bounces at lists.openfabrics.org] On Behalf Of Fab Tillier
> Sent: Tuesday, July 01, 2008 10:22 PM
> To: ofw at lists.openfabrics.org
> Subject: [ofw] [PATCH] Make al_cep_get_pdata return NTSTATUS
> 
> There are a bunch of places where ib_api_status_t is 
> converted to either cl_status_t or NTSTATUS.  Thankfully 
> cl_status_t and NTSTATUS are the same now.
> 
> There's no reason not to make al_cep_get_pdata return 
> NTSTATUS.  It makes the IRP handling a lot simpler.
> 
> This patch does this.
> 
> Signed-off-by: Fab Tillier <ftillier at microsoft.com>
> 
> diff -up -r -X trunk\docs\dontdiff.txt -I \$Id: 
> old\core\al\al_cm_cep.h trunk\core\al\al_cm_cep.h
> --- old\core\al\al_cm_cep.h     Tue Jul 01 12:06:18 2008
> +++ trunk\core\al\al_cm_cep.h   Tue Jul 01 12:06:46 2008
> @@ -280,7 +280,7 @@ al_cep_get_cid(
>         IN              PIRP                                  
>                           h_ioctl
>         );
> 
> -ib_api_status_t
> +NTSTATUS
>  al_cep_get_pdata(
>         IN                              ib_al_handle_t        
>                   h_al,
>         IN                              net32_t               
>                           cid,
> diff -up -r -X trunk\docs\dontdiff.txt -I \$Id: 
> old\core\al\kernel\al_cm_cep.c trunk\core\al\kernel\al_cm_cep.c
> --- old\core\al\kernel\al_cm_cep.c      Tue Jul 01 12:06:18 2008
> +++ trunk\core\al\kernel\al_cm_cep.c    Tue Jul 01 12:06:46 2008
> @@ -6379,7 +6379,7 @@ exit:
>  }
> 
> 
> -ib_api_status_t
> +NTSTATUS
>  al_cep_get_pdata(
>         IN                              ib_al_handle_t        
>                   h_al,
>         IN                              net32_t               
>                           cid,
> @@ -6388,7 +6388,7 @@ al_cep_get_pdata(
>  {
>         kcep_t                          *p_cep;
>         KLOCK_QUEUE_HANDLE      hdl;
> -       uint8_t remainder;
> +       uint8_t             copy_len;
> 
>         AL_ENTER( AL_DBG_CM );
> 
> @@ -6401,34 +6401,22 @@ al_cep_get_pdata(
>                 KeReleaseInStackQueuedSpinLock( &hdl );
>                 AL_PRINT_EXIT( TRACE_LEVEL_ERROR, AL_DBG_ERROR,
>                         ("CEP not found for cid %d, h_al 
> %p\n", cid, h_al ));
> -               return IB_INVALID_HANDLE;
> +               return STATUS_CONNECTION_INVALID;
>         }
> 
> -       if ( *p_psize < p_cep->psize )
> -       {
> -               KeReleaseInStackQueuedSpinLock( &hdl );
> -               AL_PRINT_EXIT( TRACE_LEVEL_ERROR, AL_DBG_ERROR,
> -                       ("Insufficient size: *p_psize %d, max 
> %d, cid %d, h_al %p\n",
> -                       *p_psize, p_cep->psize, cid, h_al ));
> -               return IB_INVALID_PARAMETER;
> -       }
> -
> -       memcpy( pdata, p_cep->pdata, p_cep->psize );
> -       remainder = *p_psize - p_cep->psize;
> -       if (remainder)
> -               cl_memclr( &pdata[p_cep->psize], remainder );
> -       *p_psize = p_cep->psize;
> -       if ( !*p_psize )
> -       {
> -               AL_PRINT_EXIT( TRACE_LEVEL_ERROR, AL_DBG_ERROR,
> -                       ("p_cep->psize is zero for cid %d, 
> h_al %p\n", cid, h_al ));
> -       }
> +    copy_len = min( *p_psize, p_cep->psize );
> +
> +    if( copy_len )
> +        RtlCopyMemory( pdata, p_cep->pdata, copy_len );
> +
> +    // Always report the maximum available user private data.
> +    *p_psize = p_cep->psize;
> 
>         AL_PRINT(TRACE_LEVEL_INFORMATION ,AL_DBG_CM ,
>                 ("al_cep_get_pdata: get %d of pdata from CEP 
> with cid %d, h_al %p, context %p \n",
> -               p_cep->psize, cid, h_al, p_cep->context ));
> +               copy_len, cid, h_al, p_cep->context ));
> 
>         KeReleaseInStackQueuedSpinLock( &hdl );
>         AL_EXIT( AL_DBG_CM );
> -       return IB_SUCCESS;
> +       return STATUS_SUCCESS;
>  }
> diff -up -r -X trunk\docs\dontdiff.txt -I \$Id: 
> old\core\al\kernel\al_proxy_cep.c trunk\core\al\kernel\al_proxy_cep.c
> --- old\core\al\kernel\al_proxy_cep.c   Tue Jul 01 10:36:03 2008
> +++ trunk\core\al\kernel\al_proxy_cep.c Tue Jul 01 12:06:46 2008
> @@ -899,10 +899,8 @@ proxy_cep_get_pdata(  {
>         al_dev_open_context_t           *p_context;
>         ual_cep_get_pdata_ioctl_t       *p_ioctl;
> -       ib_qp_handle_t VOID_PTR64                             
>   h_qp = NULL;
> -       net32_t                                         cid;
> -       ib_api_status_t                         status;
> -       cl_status_t                                     cl_status;
> +       al_conn_qp_t                            *p_qp;
> +       NTSTATUS                    status;
> 
>         AL_ENTER( AL_DBG_CM );
> 
> @@ -921,47 +919,34 @@ proxy_cep_get_pdata(
>                 return CL_INVALID_PARAMETER;
>         }
> 
> -       *p_ret_bytes = sizeof(struct _ual_cep_get_pdata_ioctl_out);
> -
>         if ( p_ioctl->in.h_qp )
>         {
>                 /* Get the kernel QP handle. */
> -               h_qp = (ib_qp_handle_t VOID_PTR64)al_hdl_ref(
> +               p_qp = (al_conn_qp_t*)al_hdl_ref(
>                         p_context->h_al, p_ioctl->in.h_qp, 
> AL_OBJ_TYPE_H_QP );
> -               if( !h_qp )
> +               if( !p_qp )
>                 {
>                         AL_PRINT_EXIT( TRACE_LEVEL_ERROR, 
> AL_DBG_ERROR,
>                                 ("Invalid QP handle\n"));
>                         return CL_CONNECTION_INVALID;
>                 }
> -               cid = ((al_conn_qp_t*)h_qp)->cid;
> -       }
> -       else
> -       {
> -               cid = p_ioctl->in.cid;
> +               p_ioctl->in.cid = p_qp->cid;
> +               deref_al_obj( &p_qp->qp.obj );
>         }
> 
>         p_ioctl->out.pdata_len = sizeof(p_ioctl->out.pdata);
> -       status = al_cep_get_pdata( p_context->h_al, cid,
> +       status = al_cep_get_pdata( p_context->h_al, p_ioctl->in.cid,
>                 (uint8_t*)&p_ioctl->out.pdata_len, 
> p_ioctl->out.pdata );
> 
> -       if ( status == IB_SUCCESS )
> +       if( NT_SUCCESS( status ) )
>         {
> -               cl_status = CL_SUCCESS;
> -               *p_ret_bytes = p_ioctl->out.pdata_len;
> +               *p_ret_bytes = sizeof(struct 
> + _ual_cep_get_pdata_ioctl_out);
>                 AL_PRINT(TRACE_LEVEL_INFORMATION ,AL_DBG_CM ,
>                         ("proxy_cep_get_pdata: get %d of 
> pdata \n", (int)*p_ret_bytes ));
>         }
> -       else
> -       {
> -               cl_status = CL_CONNECTION_INVALID;
> -       }
> -
> -       if ( h_qp )
> -               deref_al_obj( &h_qp->obj );
> 
>         AL_EXIT( AL_DBG_CM );
> -       return cl_status;
> +       return status;
>  }
> 
>  cl_status_t cep_ioctl(
> 



More information about the ofw mailing list