<!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>[PATCH] modify QP</TITLE>
</HEAD>
<BODY>

<P><FONT SIZE=2>Fab</FONT>
</P>

<P><FONT SIZE=2>We found that few fields were not set in the HW while transition from INIT2RTR and RTR2RTS</FONT>
<BR><FONT SIZE=2>The issue was that the THH layer check mask even on mandatory fields (for example ack_timeout see vapi2qpc_modify function) so even that the user set the value the actual value left unchanged (left 0).</FONT></P>

<P><FONT SIZE=2>This patch fix this issue by setting the mask to VAPI on each transition even on mandatory fields.</FONT>
<BR><FONT SIZE=2>This bug may cause  deadlock in a lot of scenario because timeout 0 in Tavor/Arbel Hw is mean ignore timeout, so if you lost 1 packet the QP will never retry or generate CQE with error so you left waiting forever.</FONT></P>

<P><FONT SIZE=2>pls review and apply</FONT>
</P>

<P><FONT SIZE=2>BTW:</FONT>
<BR><FONT SIZE=2>There might be other fields that were not set ,I will cont. to review this farther this week.</FONT>
</P>

<P><FONT SIZE=2>10x</FONT>
<BR><FONT SIZE=2>Yossi </FONT>
</P>

<P><FONT SIZE=2>Index: hw/mt23108/kernel/hca_data.c</FONT>
<BR><FONT SIZE=2>===================================================================</FONT>
<BR><FONT SIZE=2>--- hw/mt23108/kernel/hca_data.c        (revision 564)</FONT>
<BR><FONT SIZE=2>+++ hw/mt23108/kernel/hca_data.c        (working copy)</FONT>
<BR><FONT SIZE=2>@@ -1794,6 +1794,7 @@</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>                if (modify_attr_p->state.rtr.opts & IB_MOD_QP_RNR_NAK_TIMEOUT)</FONT>
<BR><FONT SIZE=2>                {</FONT>
<BR><FONT SIZE=2>+                       *attr_mask_p |= QP_ATTR_MIN_RNR_TIMER;</FONT>
<BR><FONT SIZE=2>                        qp_attr_p->min_rnr_timer   = modify_attr_p->state.rtr.rnr_nak_timeout;</FONT>
<BR><FONT SIZE=2>                } else</FONT>
<BR><FONT SIZE=2>                {</FONT>
<BR><FONT SIZE=2>@@ -1814,9 +1815,11 @@</FONT>
<BR><FONT SIZE=2>                {</FONT>
<BR><FONT SIZE=2>                        *attr_mask_p |= QP_ATTR_PATH_MTU;</FONT>
<BR><FONT SIZE=2>                        qp_attr_p->path_mtu     = modify_attr_p->state.rtr.primary_av.conn.path_mtu; // MTU</FONT>
<BR><FONT SIZE=2>-</FONT>
<BR><FONT SIZE=2>+                       *attr_mask_p |= QP_ATTR_TIMEOUT;</FONT>
<BR><FONT SIZE=2>                        qp_attr_p->timeout     = modify_attr_p->state.rtr.primary_av.conn.local_ack_timeout; // XXX: conv</FONT></P>

<P><FONT SIZE=2>+                       *attr_mask_p |= QP_ATTR_RETRY_COUNT;</FONT>
<BR><FONT SIZE=2>                        qp_attr_p->retry_count = modify_attr_p->state.rtr.primary_av.conn.seq_err_retry_cnt;</FONT>
<BR><FONT SIZE=2>+                       *attr_mask_p |= QP_ATTR_RNR_RETRY;</FONT>
<BR><FONT SIZE=2>                        qp_attr_p->rnr_retry   = modify_attr_p->state.rtr.primary_av.conn.rnr_retry_cnt;</FONT>
<BR><FONT SIZE=2>                }</FONT>
<BR><FONT SIZE=2> </FONT>
<BR><FONT SIZE=2>@@ -1858,6 +1861,7 @@</FONT>
<BR><FONT SIZE=2>                *attr_mask_p |= QP_ATTR_SQ_PSN |</FONT>
<BR><FONT SIZE=2>                        QP_ATTR_RETRY_COUNT |</FONT>
<BR><FONT SIZE=2>                        QP_ATTR_RNR_RETRY |</FONT>
<BR><FONT SIZE=2>+                       QP_ATTR_TIMEOUT|</FONT>
<BR><FONT SIZE=2>                        QP_ATTR_OUS_DST_RD_ATOM |</FONT>
<BR><FONT SIZE=2>                        QP_ATTR_MIN_RNR_TIMER;</FONT>
<BR><FONT SIZE=2> </FONT>
</P>

<P><FONT FACE="Arial" SIZE=2 COLOR="#000000"></FONT> 

</BODY>
</HTML>