<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=us-ascii">
<META content="MSHTML 6.00.2900.3243" name=GENERATOR></HEAD>
<BODY>
<DIV><FONT size=2><FONT size=1>
<P><FONT face=Arial><FONT size=2>HCA API of modify_qp contains an optional 
parameter of qp_attr.<SPAN class=796305413-17062009> </SPAN></FONT></FONT></P>
<P><FONT face=Arial><FONT size=2><SPAN 
class=796305413-17062009></SPAN></FONT></FONT><FONT face=Arial size=2>If it is 
coded, modify_qp makes internally a query_qp request to low-level driver and 
returns QP attributes.</FONT></P>
<P><FONT face=Arial size=2>IBAL codes this parameter, but do not use the 
returned QP attributes.</FONT></P>
<P><FONT face=Arial size=2>It causes unnecessary query_qp request to low-level 
driver and possible racy scenarios.</FONT></P></FONT></FONT></DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2></FONT> </DIV>
<DIV><FONT face=Arial size=2>Index: 
core/al/al_qp.c<BR>===================================================================<BR>--- 
core/al/al_qp.c (revision 2256)<BR>+++ core/al/al_qp.c (working 
copy)<BR>@@ -1332,7 +1332,6 
@@<BR>  IN OUT   ci_umv_buf_t* 
const   p_umv_buf 
)<BR> {<BR>  ib_api_status_t   status;<BR>- ib_qp_attr_t   qp_attr;<BR> <BR>  CL_ASSERT( 
h_qp );<BR> <BR>@@ -1350,7 +1349,7 @@<BR> #endif /* CL_KERNEL 
*/<BR> <BR>  /* Modify the actual QP attributes. 
*/<BR>- status = verbs_modify_qp( h_qp, p_qp_mod, qp_attr 
);<BR>+ status = verbs_modify_qp( h_qp, p_qp_mod, NULL 
);<BR> <BR>  /* Record the QP state if the modify was successful. 
*/<BR>  if( status == IB_SUCCESS )<BR>Index: 
core/al/al_verbs.h<BR>===================================================================<BR>--- 
core/al/al_verbs.h (revision 2256)<BR>+++ core/al/al_verbs.h (working 
copy)<BR>@@ -333,9 +333,9 
@@<BR>  h_qp->obj.p_ci_ca->verbs.query_qp( 
h_qp->h_ci_qp,\<BR>   p_qp_attr, p_umv_buf 
)<BR> <BR>-#define verbs_modify_qp(h_qp, p_qp_mod, qp_attr) \<BR>+#define 
verbs_modify_qp(h_qp, p_qp_mod, p_qp_attr) 
\<BR>  h_qp->obj.p_ci_ca->verbs.modify_qp( 
h_qp->h_ci_qp,\<BR>-  p_qp_mod, &qp_attr, p_umv_buf 
)<BR>+  p_qp_mod, p_qp_attr, p_umv_buf )<BR> <BR> #define 
verbs_ndi_modify_qp(h_qp, p_qp_mod, qp_attr, buf_size, p_buf) 
\<BR>   h_qp->obj.p_ci_ca->verbs.ndi_modify_qp( 
h_qp->h_ci_qp,\<BR>@@ -593,8 +593,8 @@<BR>  ual_query_qp(h_qp, 
p_qp_attr); \<BR>  UNUSED_PARAM( p_umv_buf );<BR> <BR>-#define 
verbs_modify_qp(h_qp, p_qp_mod, qp_attr) \<BR>- ual_modify_qp(h_qp, 
p_qp_mod, &qp_attr); \<BR>+#define verbs_modify_qp(h_qp, p_qp_mod, 
p_qp_attr) \<BR>+ ual_modify_qp(h_qp, p_qp_mod, p_qp_attr); 
\<BR>  UNUSED_PARAM( p_umv_buf );<BR> <BR> #define 
verbs_post_send(h_qp, p_send_wr, pp_send_failure) 
\<BR></FONT></DIV></BODY></HTML>