Take KPROCESSOR_MODE as input to um_open calls. Stores the mode the HCA was opened under, to be used to affect how memory is registered as well as how I/O space is mapped.
Signed-off-by: Fab Tillier <[email protected]> diff -dwup3 -x *svn* -r c:\dev\openib\ofw\gen1\branches\mlx4_30\trunk\core\al\al_ca.c .\core\al\al_ca.c --- c:\dev\openib\ofw\gen1\branches\mlx4_30\trunk\core\al\al_ca.c Thu May 31 11:22:16 2012 +++ .\core\al\al_ca.c Wed May 23 18:26:47 2012 @@ -85,7 +85,11 @@ ib_open_ca( } AL_PRINT( TRACE_LEVEL_ERROR, AL_DBG_ERROR, ("ib_open_ca: open CA\n")); - status = open_ca( h_al, ca_guid, pfn_ca_event_cb, ca_context, ph_ca, NULL ); + status = open_ca( h_al, ca_guid, pfn_ca_event_cb, ca_context, +#if defined(CL_KERNEL) + KernelMode, +#endif + ph_ca, NULL ); /* Release the reference taken in init_al_obj. */ if( status == IB_SUCCESS ) @@ -101,6 +105,9 @@ open_ca( IN const ib_net64_t ca_guid, IN const ib_pfn_event_cb_t pfn_ca_event_cb OPTIONAL, IN const void* const ca_context, +#if defined(CL_KERNEL) + IN KPROCESSOR_MODE mode, +#endif OUT ib_ca_handle_t* const ph_ca, IN OUT ci_umv_buf_t* const p_umv_buf OPTIONAL ) { @@ -161,7 +168,7 @@ open_ca( if( p_umv_buf ) { status = h_ca->obj.p_ci_ca->verbs.um_open_ca( - h_ca->obj.p_ci_ca->h_ci_ca, p_umv_buf, &h_ca->h_um_ca ); + h_ca->obj.p_ci_ca->h_ci_ca, mode, p_umv_buf, &h_ca->h_um_ca ); if( status != IB_SUCCESS ) { h_ca->obj.pfn_destroy( &h_ca->obj, NULL ); diff -dwup3 -x *svn* -r c:\dev\openib\ofw\gen1\branches\mlx4_30\trunk\core\al\al_ca.h .\core\al\al_ca.h --- c:\dev\openib\ofw\gen1\branches\mlx4_30\trunk\core\al\al_ca.h Thu May 31 11:22:16 2012 +++ .\core\al\al_ca.h Wed May 23 18:26:47 2012 @@ -61,6 +61,9 @@ open_ca( IN const ib_net64_t ca_guid, IN const ib_pfn_event_cb_t pfn_ca_event_cb OPTIONAL, IN const void* const ca_context, +#if defined(CL_KERNEL) + IN KPROCESSOR_MODE mode, +#endif OUT ib_ca_handle_t* const ph_ca, IN OUT ci_umv_buf_t* const p_umv_buf OPTIONAL ); diff -dwup3 -x *svn* -r c:\dev\openib\ofw\gen1\branches\mlx4_30\trunk\core\al\kernel\al_proxy_verbs.c .\core\al\kernel\al_proxy_verbs.c --- c:\dev\openib\ofw\gen1\branches\mlx4_30\trunk\core\al\kernel\al_proxy_verbs.c Thu May 31 11:22:15 2012 +++ .\core\al\kernel\al_proxy_verbs.c Wed May 23 18:26:47 2012 @@ -393,7 +393,8 @@ proxy_open_ca( AL_PRINT( TRACE_LEVEL_ERROR, AL_DBG_ERROR, ("proxy_open_ca: open CA\n")); status = open_ca( p_context->h_al, p_ioctl->in.guid, proxy_ca_err_cb, - (void*)(ULONG_PTR)p_ioctl->in.context, &h_ca, p_umv_buf ); + (void*)(ULONG_PTR)p_ioctl->in.context, UserMode, &h_ca, + p_umv_buf ); if( status != IB_SUCCESS ) goto proxy_open_ca_err; diff -dwup3 -x *svn* -r c:\dev\openib\ofw\gen1\branches\mlx4_30\trunk\core\winverbs\kernel\wv_device.c .\core\winverbs\kernel\wv_device.c --- c:\dev\openib\ofw\gen1\branches\mlx4_30\trunk\core\winverbs\kernel\wv_device.c Thu Mar 29 00:15:18 2012 +++ .\core\winverbs\kernel\wv_device.c Thu Jul 26 15:31:14 2012 @@ -135,6 +135,7 @@ static void WvDeviceEventHandler(ib_even WvDeviceCompleteRequests(&dev->pPorts[i], STATUS_SUCCESS, event); } } else { + ASSERT(pEvent->port_number <= dev->PortCount); if(pEvent->port_number <= dev->PortCount) { WvDeviceCompleteRequests(&dev->pPorts[pEvent->port_number - 1], STATUS_SUCCESS, event); @@ -255,7 +256,7 @@ static NTSTATUS WvDeviceInit(WV_DEVICE * pDevice->pDevice = dev; pDevice->pVerbs = &dev->Interface.Verbs; - ib_status = pDevice->pVerbs->um_open_ca(dev->hDevice, pVerbsData, + ib_status = pDevice->pVerbs->um_open_ca(dev->hDevice, UserMode, pVerbsData, &pDevice->hVerbsDevice); if (ib_status != IB_SUCCESS) { goto err1; diff -dwup3 -x *svn* -r c:\dev\openib\ofw\gen1\branches\mlx4_30\trunk\hw\mlx4\kernel\bus\inc\ib_verbs_ex.h .\hw\mlx4\kernel\bus\inc\ib_verbs_ex.h --- c:\dev\openib\ofw\gen1\branches\mlx4_30\trunk\hw\mlx4\kernel\bus\inc\ib_verbs_ex.h Thu May 31 11:22:18 2012 +++ .\hw\mlx4\kernel\bus\inc\ib_verbs_ex.h Thu Jul 26 15:31:14 2012 @@ -97,6 +97,7 @@ struct ib_ucontext_ex PMDL p_mdl; PVOID va; int fw_if_open; + KPROCESSOR_MODE mode; }; /* extension for ib_event */ diff -dwup3 -x *svn* -r c:\dev\openib\ofw\gen1\branches\mlx4_30\trunk\hw\mlx4\kernel\hca\hverbs.c .\hw\mlx4\kernel\hca\hverbs.c --- c:\dev\openib\ofw\gen1\branches\mlx4_30\trunk\hw\mlx4\kernel\hca\hverbs.c Thu May 31 11:22:19 2012 +++ .\hw\mlx4\kernel\hca\hverbs.c Thu Jul 26 15:31:14 2012 @@ -621,6 +621,7 @@ ib_api_status_t ibv_um_open( ib_api_status_t ibv_um_open( IN struct ib_device * p_ibdev, + IN KPROCESSOR_MODE mode, IN OUT ci_umv_buf_t* const p_umv_buf, OUT struct ib_ucontext ** pp_uctx ) { @@ -652,6 +653,7 @@ ib_api_status_t ibv_um_open( // fill the rest of ib_ucontext fields p_uctx->device = p_ibdev; p_uctx->closing = 0; + p_uctx->x.mode = mode; // map uar to user space status = __map_memory_for_user( diff -dwup3 -x *svn* -r c:\dev\openib\ofw\gen1\branches\mlx4_30\trunk\hw\mlx4\kernel\hca\hverbs.h .\hw\mlx4\kernel\hca\hverbs.h --- c:\dev\openib\ofw\gen1\branches\mlx4_30\trunk\hw\mlx4\kernel\hca\hverbs.h Thu May 31 11:22:19 2012 +++ .\hw\mlx4\kernel\hca\hverbs.h Wed May 23 18:26:47 2012 @@ -72,6 +72,7 @@ struct ib_srq *ibv_create_srq(struct ib_ ib_api_status_t ibv_um_open( IN struct ib_device * p_ibdev, + IN KPROCESSOR_MODE mode, IN OUT ci_umv_buf_t* const p_umv_buf, OUT struct ib_ucontext ** pp_uctx ); diff -dwup3 -x *svn* -r c:\dev\openib\ofw\gen1\branches\mlx4_30\trunk\hw\mlx4\kernel\hca\vp.c .\hw\mlx4\kernel\hca\vp.c --- c:\dev\openib\ofw\gen1\branches\mlx4_30\trunk\hw\mlx4\kernel\hca\vp.c Thu May 31 11:22:19 2012 +++ .\hw\mlx4\kernel\hca\vp.c Thu Jul 26 15:31:14 2012 @@ -41,6 +41,7 @@ static ib_api_status_t mlnx_um_open( IN const ib_ca_handle_t h_ca, + IN KPROCESSOR_MODE mode, IN OUT ci_umv_buf_t* const p_umv_buf, OUT ib_ca_handle_t* const ph_um_ca ) { @@ -65,19 +66,20 @@ mlnx_um_open( } /* Copy the dev info. */ p_uctx->device = p_ibdev; + p_uctx->x.mode = mode; p_umv_buf->output_size = 0; status = IB_SUCCESS; - goto done; } - + else + { // sanity check if ( p_umv_buf->output_size < sizeof(struct ibv_get_context_resp) || !p_umv_buf->p_inout_buf) { status = IB_INVALID_PARAMETER; goto err_inval_params; } - status = ibv_um_open( p_ibdev, p_umv_buf, &p_uctx ); + status = ibv_um_open( p_ibdev, mode, p_umv_buf, &p_uctx ); if (status != IB_SUCCESS) { goto end; } @@ -90,8 +92,8 @@ mlnx_um_open( p_uresp->max_cqe = hca2mdev(p_hca)->caps.max_cqes; p_uresp->max_sge = min( hca2mdev(p_hca)->caps.max_sq_sg, hca2mdev(p_hca)->caps.max_rq_sg ); + } -done: // fill the rest of ib_ucontext_ex fields atomic_set(&p_uctx->x.usecnt, 0); p_uctx->x.va = p_uctx->x.p_mdl = NULL; diff -dwup3 -x *svn* -r c:\dev\openib\ofw\gen1\branches\mlx4_30\trunk\hw\mthca\kernel\hca_verbs.c .\hw\mthca\kernel\hca_verbs.c --- c:\dev\openib\ofw\gen1\branches\mlx4_30\trunk\hw\mthca\kernel\hca_verbs.c Thu May 31 11:22:19 2012 +++ .\hw\mthca\kernel\hca_verbs.c Wed May 23 18:26:48 2012 @@ -421,6 +421,7 @@ mlnx_close_ca ( static ib_api_status_t mlnx_um_open( IN const ib_ca_handle_t h_ca, + IN KPROCESSOR_MODE mode, IN OUT ci_umv_buf_t* const p_umv_buf, OUT ib_ca_handle_t* const ph_um_ca ) { @@ -436,6 +437,8 @@ mlnx_um_open( HCA_ENTER(HCA_DBG_SHIM); + UNREFERENCED_PARAMETER( mode ); + // sanity check ASSERT( p_umv_buf ); if( !p_umv_buf->command ) @@ -1640,7 +1643,7 @@ mlnx_port_get_transport ( return RDMA_TRANSPORT_IB; } -enum uint8_t +uint8_t mlnx_get_sl_for_ip_port ( IN const ib_ca_handle_t h_ca, IN const uint8_t ca_port_num, @@ -1649,7 +1652,7 @@ mlnx_get_sl_for_ip_port ( UNREFERENCED_PARAMETER(h_ca); UNREFERENCED_PARAMETER(ca_port_num); UNREFERENCED_PARAMETER(ip_port_num); - return -1; + return 0xff; } void diff -dwup3 -x *svn* -r c:\dev\openib\ofw\gen1\branches\mlx4_30\trunk\inc\iba\ib_ci.h .\inc\iba\ib_ci.h --- c:\dev\openib\ofw\gen1\branches\mlx4_30\trunk\inc\iba\ib_ci.h Thu May 31 11:22:18 2012 +++ .\inc\iba\ib_ci.h Thu Jul 26 15:31:14 2012 @@ -285,6 +285,7 @@ typedef void typedef ib_api_status_t (*ci_um_open_ca_t) ( IN const ib_ca_handle_t h_ca, + IN KPROCESSOR_MODE mode, IN OUT ci_umv_buf_t* const p_umv_buf, OUT ib_ca_handle_t* const ph_um_ca ); /* @@ -295,6 +296,8 @@ typedef ib_api_status_t * PARAMETERS * h_ca * [in] Handle returned by an earlier call to ci_open_ca() +* mode +* [in] Processor mode of the caller, either UserMode or KernelMode. * p_umv_buf * [in/out] Vendor specific parameter to support user mode IO. * ph_um_ca
ndv2.10.patch
Description: ndv2.10.patch
_______________________________________________ ofw mailing list [email protected] http://lists.openfabrics.org/cgi-bin/mailman/listinfo/ofw
