[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