<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=us-ascii">
<META content="MSHTML 6.00.2900.3132" name=GENERATOR></HEAD>
<BODY>
<DIV><SPAN class=105593516-18072007><FONT face="Palatino Linotype" 
color=#0000ff><STRONG>Thanks Hal. </STRONG></FONT></SPAN><SPAN 
class=105593516-18072007><STRONG><FONT face="Palatino Linotype" 
color=#0000ff>Good catch. Should have seen this.</FONT></STRONG></SPAN></DIV>
<DIV><SPAN class=105593516-18072007><STRONG><FONT face="Palatino Linotype" 
color=#0000ff>Sorry</FONT></STRONG></SPAN></DIV>
<DIV><STRONG><FONT face="Palatino Linotype" 
color=#0000ff></FONT></STRONG> </DIV>
<DIV><SPAN class=105593516-18072007><FONT face="Palatino Linotype" 
color=#0000ff><STRONG>Eitan</STRONG></FONT></SPAN></DIV><BR>
<BLOCKQUOTE 
style="PADDING-LEFT: 5px; MARGIN-LEFT: 5px; BORDER-LEFT: #0000ff 2px solid; MARGIN-RIGHT: 0px">
  <DIV class=OutlookMessageHeader lang=en-us dir=ltr align=left>
  <HR tabIndex=-1>
  <FONT face=Tahoma size=2><B>From:</B> Hal Rosenstock 
  [mailto:hal.rosenstock@gmail.com] <BR><B>Sent:</B> Wednesday, July 18, 2007 
  7:36 PM<BR><B>To:</B> Eitan Zahavi<BR><B>Cc:</B> OPENIB; sashak@voltaire.com; 
  Yevgeny Kliteynik<BR><B>Subject:</B> Re: [PATCH] opensm: Bug in coding of VL 
  Arbitration tables<BR></FONT><BR></DIV>
  <DIV></DIV>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="PADDING-LEFT: 1ex; MARGIN: 0pt 0pt 0pt 0.8ex; BORDER-LEFT: rgb(204,204,204) 1px solid">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="PADDING-LEFT: 1ex; MARGIN: 0pt 0pt 0pt 0.8ex; BORDER-LEFT: rgb(204,204,204) 1px solid">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></BLOCKQUOTE></BODY></HTML>