<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=US-ASCII">
<META NAME="Generator" CONTENT="MS Exchange Server version 5.5.2654.45">
<TITLE>RE: [PATCH] query-cq</TITLE>
</HEAD>
<BODY>
<P><FONT SIZE=2>Fab</FONT>
</P>
<P><FONT SIZE=2>I am Ok with that,I test it and it work.</FONT>
</P>
<P><FONT SIZE=2>One small thing,</FONT>
<BR><FONT SIZE=2>I think you forgot to patch 2 files (interface files)</FONT>
</P>
<BR>
<P><FONT SIZE=2>Index: C:/sleybo/latest/hw/mt23108/vapi/Hca/hcahal/tavor/thhul_hob/thhul_hob.c</FONT>
<BR><FONT SIZE=2>===================================================================</FONT>
<BR><FONT SIZE=2>--- C:/sleybo/latest/hw/mt23108/vapi/Hca/hcahal/tavor/thhul_hob/thhul_hob.c (revision 351)</FONT>
<BR><FONT SIZE=2>+++ C:/sleybo/latest/hw/mt23108/vapi/Hca/hcahal/tavor/thhul_hob/thhul_hob.c (working copy)</FONT>
<BR><FONT SIZE=2>@@ -86,6 +86,7 @@</FONT>
<BR><FONT SIZE=2> NULL /* HHULIF_poll4cqe */,</FONT>
<BR><FONT SIZE=2> NULL /* HHULIF_poll_and_rearm_cq */, </FONT>
<BR><FONT SIZE=2> THHUL_cqm_peek_cq /* HHULIF_peek_cq */,</FONT>
<BR><FONT SIZE=2>+ THHUL_cqm_query_cq /* HHULIF_query_cq */,</FONT>
<BR><FONT SIZE=2> THHUL_cqm_req_comp_notif /* HHULIF_req_comp_notif */,</FONT>
<BR><FONT SIZE=2> THHUL_cqm_req_ncomp_notif /* HHULIF_req_ncomp_notif */,</FONT>
<BR><FONT SIZE=2> THHUL_cqm_destroy_cq_done /* HHULIF_destroy_cq_done */,</FONT>
</P>
<BR>
<P><FONT SIZE=2>Index: C:/sleybo/latest/hw/mt23108/vapi/Hca/hcahal/hhul.h</FONT>
<BR><FONT SIZE=2>===================================================================</FONT>
<BR><FONT SIZE=2>--- C:/sleybo/latest/hw/mt23108/vapi/Hca/hcahal/hhul.h (revision 351)</FONT>
<BR><FONT SIZE=2>+++ C:/sleybo/latest/hw/mt23108/vapi/Hca/hcahal/hhul.h (working copy)</FONT>
<BR><FONT SIZE=2>@@ -229,6 +229,10 @@</FONT>
<BR><FONT SIZE=2> VAPI_cqe_num_t cqe_num);</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>+ HH_ret_t (*HHULIF_query_cq)(HHUL_hca_hndl_t hca_hndl,</FONT>
<BR><FONT SIZE=2>+ HHUL_cq_hndl_t cq,</FONT>
<BR><FONT SIZE=2>+ VAPI_cqe_num_t* num_o_cqes_p);</FONT>
<BR><FONT SIZE=2>+</FONT>
<BR><FONT SIZE=2> HH_ret_t (*HHULIF_req_comp_notif)(HHUL_hca_hndl_t hca_hndl,</FONT>
<BR><FONT SIZE=2> HHUL_cq_hndl_t cq,</FONT>
<BR><FONT SIZE=2> VAPI_cq_notif_type_t notif_type);</FONT>
</P>
<BR>
<BR>
<BR>
<P><FONT SIZE=2>> -----Original Message-----</FONT>
<BR><FONT SIZE=2>> From: Fab Tillier [<A HREF="mailto:ftillier@silverstorm.com">mailto:ftillier@silverstorm.com</A>]</FONT>
<BR><FONT SIZE=2>> Sent: Thursday, September 08, 2005 8:18 PM</FONT>
<BR><FONT SIZE=2>> To: 'Yossi Leybovich'</FONT>
<BR><FONT SIZE=2>> Cc: openib-windows@openib.org; Ziv Farjun</FONT>
<BR><FONT SIZE=2>> Subject: RE: [PATCH] query-cq</FONT>
<BR><FONT SIZE=2>> </FONT>
<BR><FONT SIZE=2>> </FONT>
<BR><FONT SIZE=2>> > From: Yossi Leybovich [<A HREF="mailto:sleybo@mellanox.co.il">mailto:sleybo@mellanox.co.il</A>]</FONT>
<BR><FONT SIZE=2>> > Sent: Wednesday, September 07, 2005 4:59 AM</FONT>
<BR><FONT SIZE=2>> > </FONT>
<BR><FONT SIZE=2>> > The issue is that for UL CQ the kernel get the final size so the</FONT>
<BR><FONT SIZE=2>> > query shouldn't move to kernel but finish in the user level (the </FONT>
<BR><FONT SIZE=2>> > kernel does not know about the spare cqes)</FONT>
<BR><FONT SIZE=2>> </FONT>
<BR><FONT SIZE=2>> Ahh, I didn't realize only THHUL knew about spare CQEs. Ok, this all </FONT>
<BR><FONT SIZE=2>> makes sense now.</FONT>
<BR><FONT SIZE=2>> </FONT>
<BR><FONT SIZE=2>> > I attached patch that return the correct size also in CQs that were </FONT>
<BR><FONT SIZE=2>> > created in kernel.(+ the previous changes)</FONT>
<BR><FONT SIZE=2>> </FONT>
<BR><FONT SIZE=2>> I made some slight changes to the patch. Most significantly, I </FONT>
<BR><FONT SIZE=2>> changed the pre-query call to return the size if it returns </FONT>
<BR><FONT SIZE=2>> IB_VERBS_PROCESSING_DONE. This allowed eliminating the post-query </FONT>
<BR><FONT SIZE=2>> call. This is something that I'll cleanup on a larger scale at some </FONT>
<BR><FONT SIZE=2>> point - there is no reason to have the post_xxx calls if the UVP </FONT>
<BR><FONT SIZE=2>> finished processing in the pre_xxx call.</FONT>
<BR><FONT SIZE=2>> </FONT>
<BR><FONT SIZE=2>> > I didn't manage to test it because I could not make alts work in </FONT>
<BR><FONT SIZE=2>> > kernel ( BTW Is alts work at kernel level ? How ? )</FONT>
<BR><FONT SIZE=2>> </FONT>
<BR><FONT SIZE=2>> ALTS can be run in kernel mode, but it's a pain. I had hacked it at </FONT>
<BR><FONT SIZE=2>> some point to load as an upper filter driver to the HCA driver, and </FONT>
<BR><FONT SIZE=2>> run the tests after the START_DEVICE PnP IRP finished being processed </FONT>
<BR><FONT SIZE=2>> by the lower driver. There are better ways of doing this by making </FONT>
<BR><FONT SIZE=2>> the kernel ALTS a service and using the service control manager to </FONT>
<BR><FONT SIZE=2>> start and stop the driver, as well as to launch tests. This hasn't </FONT>
<BR><FONT SIZE=2>> been a priority, though. I changed one minor thing in the kernel</FONT>
<BR><FONT SIZE=2>> driver - the check for the umv_buf command is moved to the </FONT>
<BR><FONT SIZE=2>> head of the query_cq function, and if there's a command the </FONT>
<BR><FONT SIZE=2>> call is failed. Since the UVP is expected to handle this </FONT>
<BR><FONT SIZE=2>> entirely in user-mode, I thought it might make sense to fail </FONT>
<BR><FONT SIZE=2>> this explicitly. In any case, the kernel code looks good </FONT>
<BR><FONT SIZE=2>> enough that I'd be comfortable checking in.</FONT>
<BR><FONT SIZE=2>> </FONT>
<BR><FONT SIZE=2>> Let me know what you think, and if it looks good enough to check in.</FONT>
<BR><FONT SIZE=2>> </FONT>
<BR><FONT SIZE=2>> Thanks,</FONT>
<BR><FONT SIZE=2>> </FONT>
<BR><FONT SIZE=2>> - Fab</FONT>
<BR><FONT SIZE=2>> </FONT>
<BR><FONT SIZE=2>> Index: core/al/user/ual_cq.c </FONT>
<BR><FONT SIZE=2>> ===================================================================</FONT>
<BR><FONT SIZE=2>> --- core/al/user/ual_cq.c (revision 61)</FONT>
<BR><FONT SIZE=2>> +++ core/al/user/ual_cq.c (working copy)</FONT>
<BR><FONT SIZE=2>> @@ -305,7 +305,13 @@</FONT>
<BR><FONT SIZE=2>> if( h_cq->h_ci_cq && uvp_intf.pre_query_cq )</FONT>
<BR><FONT SIZE=2>> {</FONT>
<BR><FONT SIZE=2>> /* Pre call to the UVP library */</FONT>
<BR><FONT SIZE=2>> - status = uvp_intf.pre_query_cq( h_cq->h_ci_cq,</FONT>
<BR><FONT SIZE=2>> &cq_ioctl.in.umv_buf );</FONT>
<BR><FONT SIZE=2>> + status = uvp_intf.pre_query_cq(</FONT>
<BR><FONT SIZE=2>> + h_cq->h_ci_cq, p_size, &cq_ioctl.in.umv_buf );</FONT>
<BR><FONT SIZE=2>> + if( status == IB_VERBS_PROCESSING_DONE )</FONT>
<BR><FONT SIZE=2>> + {</FONT>
<BR><FONT SIZE=2>> + AL_EXIT( AL_DBG_CQ );</FONT>
<BR><FONT SIZE=2>> + return IB_SUCCESS;</FONT>
<BR><FONT SIZE=2>> + }</FONT>
<BR><FONT SIZE=2>> if( status != IB_SUCCESS )</FONT>
<BR><FONT SIZE=2>> {</FONT>
<BR><FONT SIZE=2>> AL_EXIT( AL_DBG_CQ );</FONT>
<BR><FONT SIZE=2>> Index: inc/user/iba/ib_uvp.h </FONT>
<BR><FONT SIZE=2>> ===================================================================</FONT>
<BR><FONT SIZE=2>> --- inc/user/iba/ib_uvp.h (revision 61)</FONT>
<BR><FONT SIZE=2>> +++ inc/user/iba/ib_uvp.h (working copy)</FONT>
<BR><FONT SIZE=2>> @@ -1739,6 +1739,7 @@</FONT>
<BR><FONT SIZE=2>> typedef ib_api_status_t</FONT>
<BR><FONT SIZE=2>> (AL_API *uvp_pre_query_cq) (</FONT>
<BR><FONT SIZE=2>> IN const ib_cq_handle_t</FONT>
<BR><FONT SIZE=2>> h_uvp_cq,</FONT>
<BR><FONT SIZE=2>> + IN OUT uint32_t* const</FONT>
<BR><FONT SIZE=2>> p_size,</FONT>
<BR><FONT SIZE=2>> IN OUT ci_umv_buf_t</FONT>
<BR><FONT SIZE=2>> *p_umv_buf );</FONT>
<BR><FONT SIZE=2>> </FONT>
<BR><FONT SIZE=2>> /*</FONT>
<BR><FONT SIZE=2>> @@ -1752,6 +1753,9 @@</FONT>
<BR><FONT SIZE=2>> * h_uvp_cq</FONT>
<BR><FONT SIZE=2>> * [in] Vendor's Handle to the already created CQ </FONT>
<BR><FONT SIZE=2>> (in user-mode</FONT>
<BR><FONT SIZE=2>> library).</FONT>
<BR><FONT SIZE=2>> *</FONT>
<BR><FONT SIZE=2>> +* p_size</FONT>
<BR><FONT SIZE=2>> +* [out] Size of the CQ if processing ends in user-mode.</FONT>
<BR><FONT SIZE=2>> +*</FONT>
<BR><FONT SIZE=2>> * p_umv_buf</FONT>
<BR><FONT SIZE=2>> * [in out] On input, UAL provides this buffer template.</FONT>
<BR><FONT SIZE=2>> * On return from this function, p_umv_buf contains</FONT>
<BR><FONT SIZE=2>> @@ -1765,6 +1769,9 @@</FONT>
<BR><FONT SIZE=2>> * The CQ handle is invalid.</FONT>
<BR><FONT SIZE=2>> * IB_INSUFFICIENT_RESOURCES</FONT>
<BR><FONT SIZE=2>> * Insufficient resources in Vendor library to </FONT>
<BR><FONT SIZE=2>> complete the call.</FONT>
<BR><FONT SIZE=2>> +* IB_VERBS_PROCESSING_DONE</FONT>
<BR><FONT SIZE=2>> +* The UVP fully processed the request. The </FONT>
<BR><FONT SIZE=2>> post_query_cq handler</FONT>
<BR><FONT SIZE=2>> +* will not be invoked.</FONT>
<BR><FONT SIZE=2>> *</FONT>
<BR><FONT SIZE=2>> * PORTABILITY</FONT>
<BR><FONT SIZE=2>> * User mode.</FONT>
<BR><FONT SIZE=2>> Index: hw/mt23108/vapi/Hca/hcahal/tavor/thhul_cqm/thhul_cqm.c</FONT>
<BR><FONT SIZE=2>> ===================================================================</FONT>
<BR><FONT SIZE=2>> --- hw/mt23108/vapi/Hca/hcahal/tavor/thhul_cqm/thhul_cqm.c </FONT>
<BR><FONT SIZE=2>> (revision 61)</FONT>
<BR><FONT SIZE=2>> +++ hw/mt23108/vapi/Hca/hcahal/tavor/thhul_cqm/thhul_cqm.c </FONT>
<BR><FONT SIZE=2>> (working copy)</FONT>
<BR><FONT SIZE=2>> @@ -1547,7 +1547,7 @@</FONT>
<BR><FONT SIZE=2>> </FONT>
<BR><FONT SIZE=2>> /* parameters checks */</FONT>
<BR><FONT SIZE=2>> if (cq_p == NULL) {</FONT>
<BR><FONT SIZE=2>> - MTL_ERROR1("THHUL_cqm_peek_cq: NULL CQ handle.\n");</FONT>
<BR><FONT SIZE=2>> + MTL_ERROR1("THHUL_cqm_count_cqe: NULL CQ handle.\n");</FONT>
<BR><FONT SIZE=2>> return IB_INVALID_CQ_HANDLE;</FONT>
<BR><FONT SIZE=2>> }</FONT>
<BR><FONT SIZE=2>> </FONT>
<BR><FONT SIZE=2>> @@ -1608,6 +1608,29 @@</FONT>
<BR><FONT SIZE=2>> }</FONT>
<BR><FONT SIZE=2>> </FONT>
<BR><FONT SIZE=2>> </FONT>
<BR><FONT SIZE=2>> +HH_ret_t THHUL_cqm_query_cq(</FONT>
<BR><FONT SIZE=2>> + /*IN*/ HHUL_hca_hndl_t hca_hndl,</FONT>
<BR><FONT SIZE=2>> + /*IN*/ HHUL_cq_hndl_t cq,</FONT>
<BR><FONT SIZE=2>> + /*OUT*/ VAPI_cqe_num_t *num_o_cqes_p)</FONT>
<BR><FONT SIZE=2>> +{</FONT>
<BR><FONT SIZE=2>> + THHUL_cq_t *cq_p= (THHUL_cq_t*)cq;</FONT>
<BR><FONT SIZE=2>> + HH_ret_t ret=HH_OK;</FONT>
<BR><FONT SIZE=2>> +</FONT>
<BR><FONT SIZE=2>> + /* parameters checks */</FONT>
<BR><FONT SIZE=2>> + if (cq_p == NULL) {</FONT>
<BR><FONT SIZE=2>> + MTL_ERROR1("THHUL_cqm_query_cq: NULL CQ handle.\n");</FONT>
<BR><FONT SIZE=2>> + return HH_EINVAL_CQ_HNDL;</FONT>
<BR><FONT SIZE=2>> + }</FONT>
<BR><FONT SIZE=2>> +</FONT>
<BR><FONT SIZE=2>> + /* Find CQE and check ownership */ </FONT>
<BR><FONT SIZE=2>> + MOSAL_spinlock_dpc_lock(&(cq_p->cq_lock));</FONT>
<BR><FONT SIZE=2>> + *num_o_cqes_p= ((1U << cq_p->cur_buf.log2_num_o_cqes) -1 -</FONT>
<BR><FONT SIZE=2>> cq_p->cur_buf.spare_cqes) ;</FONT>
<BR><FONT SIZE=2>> + </FONT>
<BR><FONT SIZE=2>> + MOSAL_spinlock_unlock(&(cq_p->cq_lock)); </FONT>
<BR><FONT SIZE=2>> +</FONT>
<BR><FONT SIZE=2>> + return ret;</FONT>
<BR><FONT SIZE=2>> +}</FONT>
<BR><FONT SIZE=2>> +</FONT>
<BR><FONT SIZE=2>> static void rearm_cq(THHUL_cq_t *cq_p, MT_bool</FONT>
<BR><FONT SIZE=2>> solicitedNotification) {</FONT>
<BR><FONT SIZE=2>> volatile u_int32_t chimeWords[2];</FONT>
<BR><FONT SIZE=2>> THH_uar_t uar = cq_p->uar;</FONT>
<BR><FONT SIZE=2>> Index: hw/mt23108/vapi/Hca/hcahal/tavor/thhul_cqm/thhul_cqm.h</FONT>
<BR><FONT SIZE=2>> ===================================================================</FONT>
<BR><FONT SIZE=2>> --- hw/mt23108/vapi/Hca/hcahal/tavor/thhul_cqm/thhul_cqm.h </FONT>
<BR><FONT SIZE=2>> (revision 61)</FONT>
<BR><FONT SIZE=2>> +++ hw/mt23108/vapi/Hca/hcahal/tavor/thhul_cqm/thhul_cqm.h </FONT>
<BR><FONT SIZE=2>> (working copy)</FONT>
<BR><FONT SIZE=2>> @@ -110,6 +110,12 @@</FONT>
<BR><FONT SIZE=2>> OUT uint32_t* const</FONT>
<BR><FONT SIZE=2>> p_n_cqes );</FONT>
<BR><FONT SIZE=2>> #endif</FONT>
<BR><FONT SIZE=2>> </FONT>
<BR><FONT SIZE=2>> +DLL_API HH_ret_t THHUL_cqm_query_cq(</FONT>
<BR><FONT SIZE=2>> + /*IN*/ HHUL_hca_hndl_t hca_hndl,</FONT>
<BR><FONT SIZE=2>> + /*IN*/ HHUL_cq_hndl_t cq,</FONT>
<BR><FONT SIZE=2>> + /*OUT*/ VAPI_cqe_num_t *num_o_cqes_p</FONT>
<BR><FONT SIZE=2>> +);</FONT>
<BR><FONT SIZE=2>> +</FONT>
<BR><FONT SIZE=2>> DLL_API HH_ret_t THHUL_cqm_peek_cq( </FONT>
<BR><FONT SIZE=2>> /*IN*/ HHUL_hca_hndl_t hca_hndl, </FONT>
<BR><FONT SIZE=2>> /*IN*/ HHUL_cq_hndl_t cq,</FONT>
<BR><FONT SIZE=2>> Index: hw/mt23108/kernel/hca_verbs.c</FONT>
<BR><FONT SIZE=2>> ===================================================================</FONT>
<BR><FONT SIZE=2>> --- hw/mt23108/kernel/hca_verbs.c (revision 61)</FONT>
<BR><FONT SIZE=2>> +++ hw/mt23108/kernel/hca_verbs.c (working copy)</FONT>
<BR><FONT SIZE=2>> @@ -2130,6 +2130,14 @@</FONT>
<BR><FONT SIZE=2>> status = IB_INVALID_PARAMETER;</FONT>
<BR><FONT SIZE=2>> goto cleanup;</FONT>
<BR><FONT SIZE=2>> }</FONT>
<BR><FONT SIZE=2>> +</FONT>
<BR><FONT SIZE=2>> + /* Query is fully handled in user-mode. */</FONT>
<BR><FONT SIZE=2>> + if( p_umv_buf && p_umv_buf->command )</FONT>
<BR><FONT SIZE=2>> + {</FONT>
<BR><FONT SIZE=2>> + status = IB_INVALID_CQ_HANDLE;</FONT>
<BR><FONT SIZE=2>> + goto cleanup;</FONT>
<BR><FONT SIZE=2>> + }</FONT>
<BR><FONT SIZE=2>> +</FONT>
<BR><FONT SIZE=2>> VALIDATE_INDEX(hca_idx, MLNX_MAX_HCA, </FONT>
<BR><FONT SIZE=2>> IB_INVALID_CQ_HANDLE, cleanup);</FONT>
<BR><FONT SIZE=2>> hobul_p = mlnx_hobul_array[hca_idx];</FONT>
<BR><FONT SIZE=2>> if (NULL == hobul_p) {</FONT>
<BR><FONT SIZE=2>> @@ -2147,19 +2155,13 @@</FONT>
<BR><FONT SIZE=2>> cl_mutex_acquire(&hobul_p->cq_info_tbl[cq_idx].mutex);</FONT>
<BR><FONT SIZE=2>> </FONT>
<BR><FONT SIZE=2>> hhul_cq_hndl = hobul_p->cq_info_tbl[cq_idx].hhul_cq_hndl;</FONT>
<BR><FONT SIZE=2>> -</FONT>
<BR><FONT SIZE=2>> - if (HH_OK != THH_hob_query_cq(hobul_p->hh_hndl, cq_num, </FONT>
<BR><FONT SIZE=2>> p_size)) {</FONT>
<BR><FONT SIZE=2>> + if (HH_OK != THHUL_cqm_query_cq(hobul_p->hhul_hndl,</FONT>
<BR><FONT SIZE=2>> hhul_cq_hndl,</FONT>
<BR><FONT SIZE=2>> p_size)){</FONT>
<BR><FONT SIZE=2>> status = IB_ERROR;</FONT>
<BR><FONT SIZE=2>> goto cleanup_locked;</FONT>
<BR><FONT SIZE=2>> }</FONT>
<BR><FONT SIZE=2>> </FONT>
<BR><FONT SIZE=2>> cl_mutex_release(&hobul_p->cq_info_tbl[cq_idx].mutex);</FONT>
<BR><FONT SIZE=2>> </FONT>
<BR><FONT SIZE=2>> - if( p_umv_buf && p_umv_buf->command )</FONT>
<BR><FONT SIZE=2>> - {</FONT>
<BR><FONT SIZE=2>> - p_umv_buf->output_size = 0;</FONT>
<BR><FONT SIZE=2>> - p_umv_buf->status = IB_SUCCESS;</FONT>
<BR><FONT SIZE=2>> - }</FONT>
<BR><FONT SIZE=2>> CL_EXIT(MLNX_DBG_TRACE, g_mlnx_dbg_lvl);</FONT>
<BR><FONT SIZE=2>> return IB_SUCCESS;</FONT>
<BR><FONT SIZE=2>> </FONT>
<BR><FONT SIZE=2>> Index: hw/mt23108/user/mlnx_ual_cq.c </FONT>
<BR><FONT SIZE=2>> ===================================================================</FONT>
<BR><FONT SIZE=2>> --- hw/mt23108/user/mlnx_ual_cq.c (revision 61)</FONT>
<BR><FONT SIZE=2>> +++ hw/mt23108/user/mlnx_ual_cq.c (working copy)</FONT>
<BR><FONT SIZE=2>> @@ -48,7 +48,7 @@</FONT>
<BR><FONT SIZE=2>> p_uvp->pre_create_cq = mlnx_pre_create_cq;</FONT>
<BR><FONT SIZE=2>> p_uvp->post_create_cq = mlnx_post_create_cq;</FONT>
<BR><FONT SIZE=2>> </FONT>
<BR><FONT SIZE=2>> - p_uvp->pre_query_cq = NULL;</FONT>
<BR><FONT SIZE=2>> + p_uvp->pre_query_cq = mlnx_pre_query_cq;</FONT>
<BR><FONT SIZE=2>> p_uvp->post_query_cq = NULL;</FONT>
<BR><FONT SIZE=2>> </FONT>
<BR><FONT SIZE=2>> p_uvp->pre_resize_cq = mlnx_pre_resize_cq;</FONT>
<BR><FONT SIZE=2>> @@ -434,26 +434,18 @@</FONT>
<BR><FONT SIZE=2>> </FONT>
<BR><FONT SIZE=2>> ib_api_status_t</FONT>
<BR><FONT SIZE=2>> mlnx_pre_query_cq (</FONT>
<BR><FONT SIZE=2>> - IN const ib_cq_handle_t h_uvp_cq,</FONT>
<BR><FONT SIZE=2>> - IN OUT ci_umv_buf_t *p_umv_buf)</FONT>
<BR><FONT SIZE=2>> + IN const ib_cq_handle_t h_uvp_cq,</FONT>
<BR><FONT SIZE=2>> + OUT uint32_t* const p_size,</FONT>
<BR><FONT SIZE=2>> + IN OUT ci_umv_buf_t </FONT>
<BR><FONT SIZE=2>> *p_umv_buf)</FONT>
<BR><FONT SIZE=2>> {</FONT>
<BR><FONT SIZE=2>> - FUNC_ENTER;</FONT>
<BR><FONT SIZE=2>> - CL_ASSERT(p_umv_buf);</FONT>
<BR><FONT SIZE=2>> - p_umv_buf->command = TRUE;</FONT>
<BR><FONT SIZE=2>> - FUNC_EXIT;</FONT>
<BR><FONT SIZE=2>> - return IB_SUCCESS;</FONT>
<BR><FONT SIZE=2>> -}</FONT>
<BR><FONT SIZE=2>> + mlnx_ual_cq_info_t *p_cq_info = (mlnx_ual_cq_info_t *)((void*)</FONT>
<BR><FONT SIZE=2>> h_uvp_cq);</FONT>
<BR><FONT SIZE=2>> </FONT>
<BR><FONT SIZE=2>> + FUNC_ENTER;</FONT>
<BR><FONT SIZE=2>> </FONT>
<BR><FONT SIZE=2>> -void</FONT>
<BR><FONT SIZE=2>> -mlnx_post_query_cq (</FONT>
<BR><FONT SIZE=2>> - IN const ib_cq_handle_t h_uvp_cq,</FONT>
<BR><FONT SIZE=2>> - IN ib_api_status_t ioctl_status,</FONT>
<BR><FONT SIZE=2>> - IN OUT ci_umv_buf_t *p_umv_buf)</FONT>
<BR><FONT SIZE=2>> -{</FONT>
<BR><FONT SIZE=2>> - FUNC_ENTER;</FONT>
<BR><FONT SIZE=2>> - FUNC_EXIT;</FONT>
<BR><FONT SIZE=2>> - return;</FONT>
<BR><FONT SIZE=2>> + *p_size = p_cq_info->cq_size;</FONT>
<BR><FONT SIZE=2>> +</FONT>
<BR><FONT SIZE=2>> + FUNC_EXIT;</FONT>
<BR><FONT SIZE=2>> + return IB_VERBS_PROCESSING_DONE;</FONT>
<BR><FONT SIZE=2>> }</FONT>
<BR><FONT SIZE=2>> </FONT>
<BR><FONT SIZE=2>> </FONT>
<BR><FONT SIZE=2>> Index: hw/mt23108/user/mlnx_ual_main.h </FONT>
<BR><FONT SIZE=2>> ===================================================================</FONT>
<BR><FONT SIZE=2>> --- hw/mt23108/user/mlnx_ual_main.h (revision 61)</FONT>
<BR><FONT SIZE=2>> +++ hw/mt23108/user/mlnx_ual_main.h (working copy)</FONT>
<BR><FONT SIZE=2>> @@ -250,15 +250,10 @@</FONT>
<BR><FONT SIZE=2>> </FONT>
<BR><FONT SIZE=2>> ib_api_status_t</FONT>
<BR><FONT SIZE=2>> mlnx_pre_query_cq (</FONT>
<BR><FONT SIZE=2>> - IN const ib_cq_handle_t h_uvp_cq,</FONT>
<BR><FONT SIZE=2>> - IN OUT ci_umv_buf_t *p_umv_buf);</FONT>
<BR><FONT SIZE=2>> + IN const ib_cq_handle_t h_uvp_cq,</FONT>
<BR><FONT SIZE=2>> + OUT uint32_t* const p_size,</FONT>
<BR><FONT SIZE=2>> + IN OUT ci_umv_buf_t </FONT>
<BR><FONT SIZE=2>> *p_umv_buf);</FONT>
<BR><FONT SIZE=2>> </FONT>
<BR><FONT SIZE=2>> -void</FONT>
<BR><FONT SIZE=2>> -mlnx_post_query_cq (</FONT>
<BR><FONT SIZE=2>> - IN const ib_cq_handle_t h_uvp_cq,</FONT>
<BR><FONT SIZE=2>> - IN ib_api_status_t </FONT>
<BR><FONT SIZE=2>> ioctl_status,</FONT>
<BR><FONT SIZE=2>> - IN OUT ci_umv_buf_t *p_umv_buf);</FONT>
<BR><FONT SIZE=2>> -</FONT>
<BR><FONT SIZE=2>> ib_api_status_t</FONT>
<BR><FONT SIZE=2>> mlnx_pre_destroy_cq (</FONT>
<BR><FONT SIZE=2>> IN const ib_cq_handle_t h_uvp_cq); </FONT>
<BR><FONT SIZE=2>> </FONT>
</P>
<P><FONT FACE="Arial" SIZE=2 COLOR="#000000"></FONT><FONT FACE="Arial" SIZE=2 COLOR="#000000"></FONT>
</BODY>
</HTML>