<!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>