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>