[ofw] [PATCH v2] Use the CM protocol to exchange initiator depth and responder resources
Leonid Keller
leonid at mellanox.co.il
Wed Jul 2 05:45:28 PDT 2008
Applied in 1324. Thank you.
> -----Original Message-----
> From: ofw-bounces at lists.openfabrics.org
> [mailto:ofw-bounces at lists.openfabrics.org] On Behalf Of Fab Tillier
> Sent: Wednesday, July 02, 2008 1:39 AM
> To: Sean Hefty; ofw at lists.openfabrics.org
> Subject: [ofw] [PATCH v2] Use the CM protocol to exchange
> initiator depth and responder resources
>
> Here's the updated patch (only moves the init_depth and
> resp_res in the ual_ndi_req_cm_ioctl_in_t structure.
> Renaming the structures/functions will come later.)
>
> 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 15:34:07 2008
> +++ trunk\core\al\al_cm_cep.h Tue Jul 01 15:34:50 2008
> @@ -284,6 +284,8 @@ NTSTATUS
> al_cep_get_pdata(
> IN ib_al_handle_t
> h_al,
> IN net32_t
> cid,
> + OUT uint8_t *p_init_depth,
> + OUT uint8_t *p_resp_res,
> IN OUT uint8_t
> *p_psize,
> OUT uint8_t*
> pdata );
>
> diff -up -r -X trunk\docs\dontdiff.txt -I \$Id:
> old\core\al\al_dev.h trunk\core\al\al_dev.h
> --- old\core\al\al_dev.h Tue Jul 01 15:34:07 2008
> +++ trunk\core\al\al_dev.h Tue Jul 01 15:34:50 2008
> @@ -55,7 +55,7 @@
> #define AL_DEVICE_NAME L"\\Device\\ibal"
> #define ALDEV_KEY (0x3B) /* Matches
> FILE_DEVICE_INFINIBAND from wdm.h */
>
> -#define AL_IOCTL_VERSION (6)
> +#define AL_IOCTL_VERSION (7)
>
> /* max number of devices with non-default pkey */
> #define MAX_NUM_PKEY 16
> 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 15:34:07 2008
> +++ trunk\core\al\kernel\al_cm_cep.c Tue Jul 01 15:34:50 2008
> @@ -6379,6 +6379,8 @@ NTSTATUS
> al_cep_get_pdata(
> IN ib_al_handle_t
> h_al,
> IN net32_t
> cid,
> + OUT uint8_t *p_init_depth,
> + OUT uint8_t *p_resp_res,
> IN OUT uint8_t
> *p_psize,
> OUT uint8_t*
> pdata )
> {
> @@ -6399,6 +6401,9 @@ al_cep_get_pdata(
> ("CEP not found for cid %d, h_al
> %p\n", cid, h_al ));
> return STATUS_CONNECTION_INVALID;
> }
> +
> + *p_init_depth = p_cep->init_depth;
> + *p_resp_res = p_cep->resp_res;
>
> copy_len = min( *p_psize, p_cep->psize );
>
> diff -up -r -X trunk\docs\dontdiff.txt -I \$Id:
> old\core\al\kernel\al_ndi_cm.c trunk\core\al\kernel\al_ndi_cm.c
> --- old\core\al\kernel\al_ndi_cm.c Tue Jul 01 15:34:07 2008
> +++ trunk\core\al\kernel\al_ndi_cm.c Tue Jul 01 15:34:50 2008
> @@ -184,29 +184,26 @@ __cep_timewait_qp( static
> ib_api_status_t __ndi_qp2rts(
> IN ib_qp_handle_t const
> h_qp,
> - IN uint8_t
> init_depth,
> - IN uint8_t
> resp_res,
> - IN PIRP
> p_irp,
> - IN OUT ib_qp_mod_t
> *p_qp_mod
> + IN PIRP
> p_irp
> )
> {
> ib_api_status_t status;
> + ib_qp_mod_t qp_mod;
>
> AL_ENTER( AL_DBG_NDI );
>
> /* fill required qp attributes */
> status = al_cep_get_rtr_attr( qp_get_al( h_qp ),
> - ((al_conn_qp_t*)h_qp)->cid, p_qp_mod );
> + ((al_conn_qp_t*)h_qp)->cid, &qp_mod );
> if ( status != IB_SUCCESS )
> {
> AL_PRINT( TRACE_LEVEL_ERROR, AL_DBG_ERROR,
> ("al_cep_get_rtr_attr returned %s\n",
> ib_get_err_str( status )) );
> goto exit;
> }
> - p_qp_mod->state.rtr.resp_res = resp_res;
>
> /* perform the request: INIT->RTR */
> - status = ndi_modify_qp( h_qp, p_qp_mod,
> + status = ndi_modify_qp( h_qp, &qp_mod,
> cl_ioctl_out_size( p_irp ), cl_ioctl_out_buf(
> p_irp ) );
> if ( status != IB_SUCCESS )
> {
> @@ -217,17 +214,16 @@ __ndi_qp2rts(
>
> /* fill required qp attributes */
> status = al_cep_get_rts_attr( qp_get_al( h_qp ),
> - ((al_conn_qp_t*)h_qp)->cid, p_qp_mod );
> + ((al_conn_qp_t*)h_qp)->cid, &qp_mod );
> if ( status != IB_SUCCESS )
> {
> AL_PRINT( TRACE_LEVEL_ERROR, AL_DBG_ERROR,
> ("al_cep_get_rts_attr returned %s\n",
> ib_get_err_str( status )) );
> goto exit;
> }
> - p_qp_mod->state.rts.init_depth = init_depth;
>
> /* perform the request: RTR->RTS */
> - status = ndi_modify_qp( h_qp, p_qp_mod,
> + status = ndi_modify_qp( h_qp, &qp_mod,
> cl_ioctl_out_size( p_irp ), cl_ioctl_out_buf(
> p_irp ) );
> if ( status != IB_SUCCESS )
> {
> @@ -848,8 +844,8 @@ __ndi_fill_cm_req(
>
> p_cm_req->qp_type = IB_QPT_RELIABLE_CONN;
> p_cm_req->h_qp = h_qp;
> - p_cm_req->resp_res = 0;
> - p_cm_req->init_depth = 0;
> + p_cm_req->resp_res = p_req->resp_res;
> + p_cm_req->init_depth = p_req->init_depth;
>
> p_cm_req->remote_resp_timeout =
> ib_path_rec_pkt_life( p_path_rec ) +
> CM_REMOTE_TIMEOUT; @@ -1218,13 +1214,8 @@ __ndi_rtu_cm(
> IN PIRP
> p_irp )
> {
> NTSTATUS nt_status;
> - ib_qp_mod_t qp_mod;
> ib_api_status_t status;
> - ib_qp_handle_t VOID_PTR64 h_qp =
> p_irp->Tail.Overlay.DriverContext[0];
> - ual_ndi_rtu_cm_ioctl_in_t *p_rtu =
> - (ual_ndi_rtu_cm_ioctl_in_t*)cl_ioctl_in_buf( p_irp );
> - uint8_t pdata[IB_REJ_PDATA_SIZE];
> - uint8_t psize = sizeof(pdata);
> + ib_qp_handle_t h_qp = p_irp->Tail.Overlay.DriverContext[0];
>
> UNUSED_PARAM(p_dev_obj);
>
> @@ -1235,17 +1226,15 @@ __ndi_rtu_cm(
> IoFreeWorkItem(
> p_irp->Tail.Overlay.DriverContext[1] );
>
> /* change the QP state to RTS */
> - status = __ndi_qp2rts( h_qp, p_rtu->init_depth,
> - p_rtu->resp_res, p_irp, &qp_mod );
> + status = __ndi_qp2rts( h_qp, p_irp );
> if ( status != IB_SUCCESS )
> {
> goto err;
> }
>
> /* send RTU */
> - al_cep_get_pdata( qp_get_al( h_qp ),
> ((al_conn_qp_t*)h_qp)->cid, &psize, pdata );
> - status = al_cep_rtu( qp_get_al( h_qp ),
> ((al_conn_qp_t*)h_qp)->cid, pdata, psize );
> - if( status != IB_SUCCESS && status != IB_INVALID_STATE )
> + status = al_cep_rtu( qp_get_al( h_qp ),
> ((al_conn_qp_t*)h_qp)->cid, NULL, 0 );
> + if( status != IB_SUCCESS )
> {
> net32_t cid;
> err:
> @@ -1333,7 +1322,6 @@ __ndi_rep_cm(
> IN PIRP
> p_irp )
> {
> NTSTATUS nt_status;
> - ib_qp_mod_t qp_mod;
> ib_api_status_t status;
> ib_qp_handle_t VOID_PTR64 h_qp =
> p_irp->Tail.Overlay.DriverContext[0];
> ual_ndi_rep_cm_ioctl_in_t *p_rep = @@ -1348,8 +1336,7
> @@ __ndi_rep_cm(
> IoFreeWorkItem(
> p_irp->Tail.Overlay.DriverContext[1] );
>
> /* change the QP state to RTS */
> - status = __ndi_qp2rts( h_qp, p_rep->init_depth,
> - p_rep->resp_res, p_irp, &qp_mod );
> + status = __ndi_qp2rts( h_qp, p_irp );
> if ( status != IB_SUCCESS )
> {
> nt_status = STATUS_CONNECTION_ABORTED; @@
> -1417,7 +1404,7 @@ __ndi_fill_cm_rep(
> p_cm_rep->h_qp = h_qp;
>
> p_cm_rep->access_ctrl = IB_AC_RDMA_READ |
> IB_AC_RDMA_WRITE | IB_AC_LOCAL_WRITE;
> - p_cm_rep->init_depth = 0;
> + p_cm_rep->init_depth = p_rep->init_depth;
> p_cm_rep->target_ack_delay = 10;
> p_cm_rep->failover_accepted = IB_FAILOVER_ACCEPT_UNSUPPORTED;
> p_cm_rep->flow_ctrl = TRUE; /* HCAs must support
> end-to-end flow control. */
> 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 15:34:07 2008
> +++ trunk\core\al\kernel\al_proxy_cep.c Tue Jul 01 15:34:50 2008
> @@ -935,7 +935,8 @@ proxy_cep_get_pdata(
> }
>
> p_ioctl->out.pdata_len = sizeof(p_ioctl->out.pdata);
> - status = al_cep_get_pdata( p_context->h_al, p_ioctl->in.cid,
> + status = al_cep_get_pdata( p_context->h_al, p_ioctl->in.cid,
> + &p_ioctl->out.init_depth, &p_ioctl->out.resp_res,
> (uint8_t*)&p_ioctl->out.pdata_len,
> p_ioctl->out.pdata );
>
> if( NT_SUCCESS( status ) )
> Only in old\hw\mthca\kernel: mthca_log.rc diff -up -r -X
> trunk\docs\dontdiff.txt -I \$Id: old\inc\iba\ib_al_ioctl.h
> trunk\inc\iba\ib_al_ioctl.h
> --- old\inc\iba\ib_al_ioctl.h Tue Jul 01 15:34:04 2008
> +++ trunk\inc\iba\ib_al_ioctl.h Tue Jul 01 15:34:50 2008
> @@ -3130,6 +3130,8 @@ typedef union _ual_cep_get_pdata_ioctl
> {
> uint32_t pdata_len;
> uint8_t
> pdata[IB_REJ_PDATA_SIZE];
> + uint8_t resp_res;
> + uint8_t init_depth;
>
> } out;
>
> @@ -3513,6 +3515,8 @@ typedef struct _ual_ndi_req_cm_ioctl_in
> uint64_t h_qp;
> net64_t guid;
> uint16_t dst_port;
> + uint8_t resp_res;
> + uint8_t init_depth;
> uint8_t prot;
> uint8_t pdata_size;
> ib_cm_rdma_req_t pdata;
> @@ -3532,6 +3536,12 @@ typedef struct _ual_ndi_req_cm_ioctl_in
> * dst_port
> * Destination port number.
> *
> +* resp_res
> +* Responder resources for the QP.
> +*
> +* init_depth
> +* Initiator depth for the QP.
> +*
> * prot
> * Protocol.
> *
> @@ -3635,8 +3645,6 @@ typedef struct _ual_ndi_rej_cm_ioctl_in
> typedef struct _ual_ndi_rtu_cm_ioctl_in {
> uint64_t h_qp;
> - uint8_t init_depth;
> - uint8_t resp_res;
>
> } ual_ndi_rtu_cm_ioctl_in_t;
> /*
>
More information about the ofw
mailing list