Hi Eitan,<br><br><div><span class="gmail_quote">On 7/18/07, <b class="gmail_sendername">Eitan Zahavi</b> <<a href="mailto:eitan@mellanox.co.il">eitan@mellanox.co.il</a>> wrote:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Hi Sasha<br><br>Discovered a bug in coding of the VL Arbitration table "index".<br>According to spec should be:<br> 1 for low part of low table<br> 2 for high part of low table<br> 3 for low part of high table<br>
4 for high part of high table<br><br>the patch below fixes it:<br><br>Eitan<br><br>Signed-off-by: Eitan Zahavi <<a href="mailto:eitan@mellanox.co.il">eitan@mellanox.co.il</a>><br><br>diff --git a/opensm/opensm/osm_qos.c b/opensm/opensm/osm_qos.c
<br>index bbb1608..413e200 100644<br>--- a/opensm/opensm/osm_qos.c<br>+++ b/opensm/opensm/osm_qos.c<br>@@ -116,14 +116,14 @@ static ib_api_status_t vlarb_update(osm_req_t * p_req,<br> p_pi->vl_arb_low_cap
: IB_NUM_VL_ARB_ELEMENTS_IN_BLOCK;<br> if
((status = vlarb_update_table_block(p_req, p, port_num,<br>
&qcfg->vlarb_low[0],<br>- len,
0)) != IB_SUCCESS)<br>+ len,
1)) != IB_SUCCESS)<br> return
status;<br> }<br> if (p_pi->vl_arb_low_cap > IB_NUM_VL_ARB_ELEMENTS_IN_BLOCK) {<br> len
= p_pi->vl_arb_low_cap % IB_NUM_VL_ARB_ELEMENTS_IN_BLOCK;<br> if
((status = vlarb_update_table_block(p_req, p, port_num,<br>
&qcfg->vlarb_low[1],<br>- len,
1)) != IB_SUCCESS)<br>+ len,
2)) != IB_SUCCESS)<br> return
status;<br> }<br> if (p_pi->vl_arb_high_cap > 0) {<br>@@ -131,14 +131,14 @@ static ib_api_status_t vlarb_update(osm_req_t * p_req,<br> p_pi->vl_arb_high_cap
: IB_NUM_VL_ARB_ELEMENTS_IN_BLOCK;<br> if
((status = vlarb_update_table_block(p_req, p, port_num,<br>
&qcfg->vlarb_high[0],<br>- len,
2)) != IB_SUCCESS)<br>+ len,
3)) != IB_SUCCESS)<br> return
status;<br> }<br> if (p_pi->vl_arb_high_cap > IB_NUM_VL_ARB_ELEMENTS_IN_BLOCK) {<br> len
= p_pi->vl_arb_high_cap % IB_NUM_VL_ARB_ELEMENTS_IN_BLOCK;<br> if
((status = vlarb_update_table_block(p_req, p, port_num,<br>
&qcfg->vlarb_high[1],<br>- len,
3)) != IB_SUCCESS)<br>+ len,
4)) != IB_SUCCESS)<br> return
status;<br> }</blockquote><div><br>
<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">Are you sure ? It looks to me like this is already handled in vlarb_update_table_block as follows:
<br></blockquote>
<br>
if (!memcmp(&p->vl_arb[block_num], &block,<br>
block_length * sizeof(block.vl_entry[0])))<br>
return IB_SUCCESS;<br>
<br>
but<br>
<br>
attr_mod = ((block_num + 1) << 16) | port_num;<br>
<br>
return osm_req_set(p_req, osm_physp_get_dr_path_ptr(p),<br>
(uint8_t *) & block, sizeof(block),<br>
IB_MAD_ATTR_VL_ARBITRATION,<br>
cl_hton32(attr_mod), CL_DISP_MSGID_NONE, &context);<br>
<br>
-- Hal </div><br></div><br>