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