<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META content="text/html; charset=us-ascii" http-equiv=Content-Type>
<META name=GENERATOR content="MSHTML 8.00.6001.18702"></HEAD>
<BODY>
<DIV><FONT size=2 face=Arial><SPAN class=705463516-23092009>The bellow patch is 
needed in order to allow WSD to load alternate paths using the 
cm.</SPAN></FONT></DIV>
<DIV><FONT size=2 face=Arial><SPAN 
class=705463516-23092009></SPAN></FONT> </DIV>
<DIV><FONT size=2 face=Arial><SPAN class=705463516-23092009>It has a few trivial 
parts but two changes that I believe that need some attention from the 
community:</SPAN></FONT></DIV>
<DIV><FONT size=2 face=Arial><SPAN 
class=705463516-23092009></SPAN></FONT> </DIV>
<DIV><FONT size=2 face=Arial><SPAN class=705463516-23092009>1) It seems that on 
the QP the cid (that belongs to the cm) was never set. I now set it on the 
function al_cep_pre_req(). I'm not sure that this is the right place. Please 
note that if this value is not being set than on the function al_cep_migrate a 
cid of -1 is used (which actually means that the migration notification is 
lost).</SPAN></FONT><FONT size=2 face=Arial><SPAN 
class=705463516-23092009></SPAN></FONT></DIV>
<DIV><FONT size=2 face=Arial><SPAN class=705463516-23092009>Please also note 
that for the passive side this value is not currently set (yet things still seem 
to work ).</SPAN></FONT></DIV>
<DIV><FONT size=2 face=Arial><SPAN 
class=705463516-23092009></SPAN></FONT> </DIV>
<DIV><FONT size=2 face=Arial><SPAN class=705463516-23092009>2) when sending LAP, 
there are two parameters for the path record: one is the src port that is based 
on the av that I'm now loading. The second is the dest_lid which is based on the 
value that we have on our p_cep->av[p_cep->idx_primary]. I'm not sure if 
this is the design, or is this just a bug and the dest_lid should also be taken 
from the av that is currently being supplied.</SPAN></FONT></DIV>
<DIV><FONT size=2 face=Arial><SPAN 
class=705463516-23092009></SPAN></FONT> </DIV>
<DIV><FONT size=2 face=Arial><SPAN 
class=705463516-23092009>Thanks</SPAN></FONT></DIV>
<DIV><FONT size=2 face=Arial><SPAN 
class=705463516-23092009>Tzachi</SPAN></FONT></DIV>
<DIV><FONT size=2 face=Arial><SPAN 
class=705463516-23092009></SPAN></FONT> </DIV>
<DIV><FONT size=2 face=Arial></FONT> </DIV>
<DIV><FONT size=2 face=Arial></FONT> </DIV>
<DIV><FONT size=2 face=Arial>Index: 
al_cm_qp.c<BR>===================================================================<BR>--- 
al_cm_qp.c (revision 4841)<BR>+++ al_cm_qp.c (working copy)<BR>@@ 
-1034,6 +1034,8 @@<BR>   //p_conn->p_sync_event = p_sync_event 

&sync_event;<BR>  }<BR> <BR>+<BR>+//????????????<BR>  p_qp 
= (al_conn_qp_t*)p_cm_req->h_qp;<BR> <BR>  /* Get a CEP and 
bind it to the QP. */<BR>@@ -1309,7 +1311,7 @@<BR>  if( status != 
IB_SUCCESS )<BR>  {<BR>   AL_PRINT_EXIT( 
TRACE_LEVEL_ERROR, AL_DBG_ERROR,<BR>-   ("__cep_pre_req returned 
%s\n", ib_get_err_str(status)) );<BR>+   ("__cep_pre_rep returned 
%s\n", ib_get_err_str(status)) );<BR>   goto 
err;<BR>  }<BR> <BR>@@ -1749,6 +1751,12 
@@<BR>  }<BR>  <BR>  status = al_cep_send_apr( 
h_cm_lap.h_al, h_cm_lap.cid );<BR>+ if( status != IB_SUCCESS 
)<BR>+ {<BR>+  AL_PRINT_EXIT( TRACE_LEVEL_ERROR, 
AL_DBG_ERROR,<BR>+   ("al_cep_send_apr returned 
%s.\n",<BR>+   ib_get_err_str( status )) 
);<BR>+ }<BR> <BR>  AL_EXIT( AL_DBG_CM 
);<BR>  return status;<BR>Index: 
kernel/al_cm_cep.c<BR>===================================================================<BR>--- 
kernel/al_cm_cep.c (revision 4841)<BR>+++ kernel/al_cm_cep.c (working 
copy)<BR>@@ -1116,7 +1116,7 @@<BR>   /* Reject the request for 
insufficient resources. */<BR>   reason = 
IB_REJ_INSUF_RESOURCES;<BR>   AL_PRINT_EXIT( TRACE_LEVEL_ERROR, 
AL_DBG_ERROR,<BR>-   ("al_create_cep failed\nREJ sent for 
insufficient resources.\n") );<BR>+   ("__create_cep failed\nREJ 
sent for insufficient resources.\n") );<BR>   goto 
reject;<BR>  }<BR> <BR>@@ -4731,6 +4731,12 
@@<BR>    break;<BR>   }<BR> <BR>+  if(p_cm_req->h_qp->type 
== IB_QPT_RELIABLE_CONN) <BR>+  {<BR>+   ((al_conn_qp_t 
*)(p_cm_req->h_qp))->cid = 
cid;<BR>+  }<BR>+<BR>+<BR>   /* Format the INIT qp 
modify attributes. */<BR>   p_init->req_state = 
IB_QPS_INIT;<BR>   p_init->state.init.primary_port =<BR>@@ 
-5424,7 +5430,7 @@<BR> <BR>  __format_mad_hdr( 
p_mad->p_mad_buf, p_cep, CM_LAP_ATTR_ID 
);<BR> <BR>- __format_mad_av( p_mad, 
&p_cep->av[p_cep->idx_primary] );<BR>+ __format_mad_av( p_mad, 
&p_cep->av[((p_cep->idx_primary + 1) & 0x1)] 
);<BR> <BR>  p_lap = 
(mad_cm_lap_t*)p_mad->p_mad_buf;<BR> <BR>Index: 
kernel/al_proxy_cep.c<BR>===================================================================<BR>--- 
kernel/al_proxy_cep.c (revision 4841)<BR>+++ 
kernel/al_proxy_cep.c (working copy)<BR>@@ -641,8 +641,6 
@@<BR> <BR>  AL_ENTER( AL_DBG_CM 
);<BR> <BR>- UNUSED_PARAM( p_ret_bytes 
);<BR>-<BR>  p_context = 
(al_dev_open_context_t*)p_open_context;<BR> <BR>  /* Validate 
user parameters. */<BR>@@ -656,6 +654,8 
@@<BR>  (*(ib_api_status_t*)cl_ioctl_out_buf( h_ioctl )) = 
al_cep_send_apr(<BR>   p_context->h_al, 
*(net32_t*)cl_ioctl_in_buf( h_ioctl ) );<BR> <BR>+ *p_ret_bytes = 
sizeof(ib_api_status_t);<BR>+<BR>  AL_EXIT( AL_DBG_CM 
);<BR>  return CL_SUCCESS;<BR> }<BR></DIV></FONT></BODY></HTML>