Hey Hal,

Thanks for the nit-catches.  As for

> +     {32, 2, "PortVLXmitFlowCtlUpdateErrors0", mad_dump_uint},
> > +     {34, 2, "PortVLXmitFlowCtlUpdateErrors1", mad_dump_uint},
> > +     {36, 2, "PortVLXmitFlowCtlUpdateErrors2", mad_dump_uint},
> > +     {38, 2, "PortVLXmitFlowCtlUpdateErrors3", mad_dump_uint},
> > +     {40, 2, "PortVLXmitFlowCtlUpdateErrors4", mad_dump_uint},
> > +     {42, 2, "PortVLXmitFlowCtlUpdateErrors5", mad_dump_uint},
> > +     {44, 2, "PortVLXmitFlowCtlUpdateErrors6", mad_dump_uint},
> > +     {46, 2, "PortVLXmitFlowCtlUpdateErrors7", mad_dump_uint},
> > +     {48, 2, "PortVLXmitFlowCtlUpdateErrors8", mad_dump_uint},
> > +     {50, 2, "PortVLXmitFlowCtlUpdateErrors9", mad_dump_uint},
> > +     {52, 2, "PortVLXmitFlowCtlUpdateErrors10", mad_dump_uint},
> > +     {54, 2, "PortVLXmitFlowCtlUpdateErrors11", mad_dump_uint},
> > +     {56, 2, "PortVLXmitFlowCtlUpdateErrors12", mad_dump_uint},
> > +     {58, 2, "PortVLXmitFlowCtlUpdateErrors13", mad_dump_uint},
> > +     {60, 2, "PortVLXmitFlowCtlUpdateErrors14", mad_dump_uint},
> > +     {62, 2, "PortVLXmitFlowCtlUpdateErrors15", mad_dump_uint},
> 
> Don't these need to be BITSOFFS(nn, 2)  ?

Perhaps there's a subtlety I'm missing.  If these require BITSOFFS, then
wouldn't the 16 bit fields require them too?  There are many places
amongst the performance counters that BITSOFFS isn't used w/ 16 bit
fields.

Al

On Wed, 2011-07-20 at 06:45 -0700, Hal Rosenstock wrote:
> Hi Al,
> 
> On 2:59 PM, Albert L. Chu wrote:
> 
> Looks mostly good to me. Some nits/typos and one question below:
> > Signed-off-by: Albert L. Chu <ch...@llnl.gov>
> > ---
> >  include/infiniband/mad.h |  228 
> > +++++++++++++++++++++++++++++++++++++++++++++-
> >  src/dump.c               |  121 ++++++++++++++++++++++++
> >  src/fields.c             |  194 +++++++++++++++++++++++++++++++++++++++
> >  src/libibmad.map         |   12 +++
> >  4 files changed, 554 insertions(+), 1 deletions(-)
> >
> > diff --git a/include/infiniband/mad.h b/include/infiniband/mad.h
> > index f00bf7a..d748aec 100644
> > --- a/include/infiniband/mad.h
> > +++ b/include/infiniband/mad.h
> > @@ -174,8 +174,20 @@ enum GSI_ATTR_ID {
> >       IB_GSI_PORT_COUNTERS = 0x12,
> >       IB_GSI_PORT_RCV_ERROR_DETAILS = 0x15,
> >       IB_GSI_PORT_XMIT_DISCARD_DETAILS = 0x16,
> > +     IB_GIS_PORT_PORT_OP_RCV_COUNTERS = 0x17,
> > +     IB_GIS_PORT_PORT_FLOW_CTL_COUNTERS = 0x18,
> > +     IB_GIS_PORT_PORT_VL_OP_PACKETS = 0x19,
> > +     IB_GIS_PORT_PORT_VL_OP_DATA = 0x1A,
> > +     IB_GIS_PORT_PORT_VL_XMIT_FLOW_CTL_UPDATE_ERRORS = 0x1B,
> > +     IB_GIS_PORT_PORT_VL_XMIT_WAIT_COUNTERS = 0x1C,
> 
> typo: IB_GIS_xxx -> IB_GSI_xxx
> 
> >       IB_GSI_PORT_COUNTERS_EXT = 0x1D,
> >       IB_GSI_PORT_EXT_SPEEDS_COUNTERS = 0x1F,
> > +     IB_GSI_SW_PORT_VL_CONGESTION = 0x30,
> > +     IB_GSI_PORT_RCV_CON_CTRL = 0x31,
> > +     IB_GSI_PORT_SL_RCV_FECN = 0x32,
> > +     IB_GSI_PORT_SL_RCV_BECN = 0x33,
> > +     IB_GSI_PORT_XMIT_CON_CTRL = 0x34,
> > +     IB_GSI_PORT_VL_XMIT_TIME_CONG = 0x35,
> >       IB_GSI_PORT_XMIT_DATA_SL = 0x36,
> >       IB_GSI_PORT_RCV_DATA_SL = 0x37,
> >       IB_GSI_ATTR_LAST
> > @@ -805,6 +817,214 @@ enum MAD_FIELDS {
> >       IB_PESC_FEC_UNCORR_BLOCK_CTR_LANE11_F,
> >       IB_PESC_LAST_F,
> >
> > +     /*
> > +      * PortOpRcvCounters fields
> > +      */
> > +     IB_PC_PORT_OP_RCV_COUNTERS_FIRST_F,
> > +     IB_PC_PORT_OP_RCV_PKTS = IB_PC_PORT_OP_RCV_COUNTERS_FIRST_F,
> > +     IB_PC_PORT_OP_RCV_DATA,
> > +     IB_PC_PORT_OP_RCV_COUNTERS_LAST_F,
> > +
> > +     /*
> > +      * PortFlowCtlCounters fields
> > +      */
> > +     IB_PC_PORT_FLOW_CTL_COUNTERS_FIRST_F,
> > +     IB_PC_PORT_XMIT_FLOW_PKTS = IB_PC_PORT_FLOW_CTL_COUNTERS_FIRST_F,
> > +     IB_PC_PORT_RCV_FLOW_PKTS,
> > +     IB_PC_PORT_FLOW_CTL_COUNTERS_LAST_F,
> > +
> > +     /*
> > +      * PortVLOpPackets fields
> > +      */
> > +     IB_PC_PORT_VL_OP_PACKETS_FIRST_F,
> > +     IB_PC_PORT_VL_OP_PACKETS0 = IB_PC_PORT_VL_OP_PACKETS_FIRST_F,
> > +     IB_PC_PORT_VL_OP_PACKETS1,
> > +     IB_PC_PORT_VL_OP_PACKETS2,
> > +     IB_PC_PORT_VL_OP_PACKETS3,
> > +     IB_PC_PORT_VL_OP_PACKETS4,
> > +     IB_PC_PORT_VL_OP_PACKETS5,
> > +     IB_PC_PORT_VL_OP_PACKETS6,
> > +     IB_PC_PORT_VL_OP_PACKETS7,
> > +     IB_PC_PORT_VL_OP_PACKETS8,
> > +     IB_PC_PORT_VL_OP_PACKETS9,
> > +     IB_PC_PORT_VL_OP_PACKETS10,
> > +     IB_PC_PORT_VL_OP_PACKETS11,
> > +     IB_PC_PORT_VL_OP_PACKETS12,
> > +     IB_PC_PORT_VL_OP_PACKETS13,
> > +     IB_PC_PORT_VL_OP_PACKETS14,
> > +     IB_PC_PORT_VL_OP_PACKETS15,
> > +     IB_PC_PORT_VL_OP_PACKETS_LAST_F,
> > +
> > +     /*
> > +      * PortVLOpData fields
> > +      */
> > +     IB_PC_PORT_VL_OP_DATA_FIRST_F,
> > +     IB_PC_PORT_VL_OP_DATA0 = IB_PC_PORT_VL_OP_DATA_FIRST_F,
> > +     IB_PC_PORT_VL_OP_DATA1,
> > +     IB_PC_PORT_VL_OP_DATA2,
> > +     IB_PC_PORT_VL_OP_DATA3,
> > +     IB_PC_PORT_VL_OP_DATA4,
> > +     IB_PC_PORT_VL_OP_DATA5,
> > +     IB_PC_PORT_VL_OP_DATA6,
> > +     IB_PC_PORT_VL_OP_DATA7,
> > +     IB_PC_PORT_VL_OP_DATA8,
> > +     IB_PC_PORT_VL_OP_DATA9,
> > +     IB_PC_PORT_VL_OP_DATA10,
> > +     IB_PC_PORT_VL_OP_DATA11,
> > +     IB_PC_PORT_VL_OP_DATA12,
> > +     IB_PC_PORT_VL_OP_DATA13,
> > +     IB_PC_PORT_VL_OP_DATA14,
> > +     IB_PC_PORT_VL_OP_DATA15,
> > +     IB_PC_PORT_VL_OP_DATA_LAST_F,
> > +
> > +     /*
> > +      * PortVLXmitFlowCtlUpdateErrors fields
> > +      */
> > +     IB_PC_PORT_VL_XMIT_FLOW_CTL_UPDATE_ERRORS_FIRST_F,
> > +     IB_PC_PORT_VL_XMIT_FLOW_CTL_UPDATE_ERRORS0 = 
> > IB_PC_PORT_VL_XMIT_FLOW_CTL_UPDATE_ERRORS_FIRST_F,
> > +     IB_PC_PORT_VL_XMIT_FLOW_CTL_UPDATE_ERRORS1,
> > +     IB_PC_PORT_VL_XMIT_FLOW_CTL_UPDATE_ERRORS2,
> > +     IB_PC_PORT_VL_XMIT_FLOW_CTL_UPDATE_ERRORS3,
> > +     IB_PC_PORT_VL_XMIT_FLOW_CTL_UPDATE_ERRORS4,
> > +     IB_PC_PORT_VL_XMIT_FLOW_CTL_UPDATE_ERRORS5,
> > +     IB_PC_PORT_VL_XMIT_FLOW_CTL_UPDATE_ERRORS6,
> > +     IB_PC_PORT_VL_XMIT_FLOW_CTL_UPDATE_ERRORS7,
> > +     IB_PC_PORT_VL_XMIT_FLOW_CTL_UPDATE_ERRORS8,
> > +     IB_PC_PORT_VL_XMIT_FLOW_CTL_UPDATE_ERRORS9,
> > +     IB_PC_PORT_VL_XMIT_FLOW_CTL_UPDATE_ERRORS10,
> > +     IB_PC_PORT_VL_XMIT_FLOW_CTL_UPDATE_ERRORS11,
> > +     IB_PC_PORT_VL_XMIT_FLOW_CTL_UPDATE_ERRORS12,
> > +     IB_PC_PORT_VL_XMIT_FLOW_CTL_UPDATE_ERRORS13,
> > +     IB_PC_PORT_VL_XMIT_FLOW_CTL_UPDATE_ERRORS14,
> > +     IB_PC_PORT_VL_XMIT_FLOW_CTL_UPDATE_ERRORS15,
> > +        IB_PC_PORT_VL_XMIT_FLOW_CTL_UPDATE_ERRORS_LAST_F,
> > +
> > +     /*
> > +      * PortVLXmitWaitCounters fields
> > +      */
> > +     IB_PC_PORT_VL_XMIT_WAIT_COUNTERS_FIRST_F,
> > +     IB_PC_PORT_VL_XMIT_WAIT0 = IB_PC_PORT_VL_XMIT_WAIT_COUNTERS_FIRST_F,
> > +     IB_PC_PORT_VL_XMIT_WAIT1,
> > +     IB_PC_PORT_VL_XMIT_WAIT2,
> > +     IB_PC_PORT_VL_XMIT_WAIT3,
> > +     IB_PC_PORT_VL_XMIT_WAIT4,
> > +     IB_PC_PORT_VL_XMIT_WAIT5,
> > +     IB_PC_PORT_VL_XMIT_WAIT6,
> > +     IB_PC_PORT_VL_XMIT_WAIT7,
> > +     IB_PC_PORT_VL_XMIT_WAIT8,
> > +     IB_PC_PORT_VL_XMIT_WAIT9,
> > +     IB_PC_PORT_VL_XMIT_WAIT10,
> > +     IB_PC_PORT_VL_XMIT_WAIT11,
> > +     IB_PC_PORT_VL_XMIT_WAIT12,
> > +     IB_PC_PORT_VL_XMIT_WAIT13,
> > +     IB_PC_PORT_VL_XMIT_WAIT14,
> > +     IB_PC_PORT_VL_XMIT_WAIT15,
> > +     IB_PC_PORT_VL_XMIT_WAIT_COUNTERS_LAST_F,
> > +
> > +     /*
> > +      * SwPortVLCongestion fields
> > +      */
> > +
> 
> Nit... eliminate this blank line
> > +     IB_PC_SW_PORT_VL_CONGESTION_FIRST_F,
> > +     IB_PC_SW_PORT_VL_CONGESTION0 = IB_PC_SW_PORT_VL_CONGESTION_FIRST_F,
> > +     IB_PC_SW_PORT_VL_CONGESTION1,
> > +     IB_PC_SW_PORT_VL_CONGESTION2,
> > +     IB_PC_SW_PORT_VL_CONGESTION3,
> > +     IB_PC_SW_PORT_VL_CONGESTION4,
> > +     IB_PC_SW_PORT_VL_CONGESTION5,
> > +     IB_PC_SW_PORT_VL_CONGESTION6,
> > +     IB_PC_SW_PORT_VL_CONGESTION7,
> > +     IB_PC_SW_PORT_VL_CONGESTION8,
> > +     IB_PC_SW_PORT_VL_CONGESTION9,
> > +     IB_PC_SW_PORT_VL_CONGESTION10,
> > +     IB_PC_SW_PORT_VL_CONGESTION11,
> > +     IB_PC_SW_PORT_VL_CONGESTION12,
> > +     IB_PC_SW_PORT_VL_CONGESTION13,
> > +     IB_PC_SW_PORT_VL_CONGESTION14,
> > +     IB_PC_SW_PORT_VL_CONGESTION15,
> > +     IB_PC_SW_PORT_VL_CONGESTION_LAST_F,
> > +
> > +     /*
> > +      * PortRcvConCtrl fields
> > +      */
> > +
> Nit... eliminate this blank line
> > +     IB_PC_RCV_CON_CTRL_FIRST_F,
> > +     IB_PC_RCV_CON_CTRL_PKT_RCV_FECN = IB_PC_RCV_CON_CTRL_FIRST_F,
> > +     IB_PC_RCV_CON_CTRL_PKT_RCV_BECN,
> > +     IB_PC_RCV_CON_CTRL_LAST_F,
> > +
> > +     /*
> > +      * PortSLRcvFECN fields
> > +      */
> > +     IB_PC_SL_RCV_FECN_FIRST_F,
> > +     IB_PC_SL_RCV_FECN0 = IB_PC_SL_RCV_FECN_FIRST_F,
> > +     IB_PC_SL_RCV_FECN1,
> > +     IB_PC_SL_RCV_FECN2,
> > +     IB_PC_SL_RCV_FECN3,
> > +     IB_PC_SL_RCV_FECN4,
> > +     IB_PC_SL_RCV_FECN5,
> > +     IB_PC_SL_RCV_FECN6,
> > +     IB_PC_SL_RCV_FECN7,
> > +     IB_PC_SL_RCV_FECN8,
> > +     IB_PC_SL_RCV_FECN9,
> > +     IB_PC_SL_RCV_FECN10,
> > +     IB_PC_SL_RCV_FECN11,
> > +     IB_PC_SL_RCV_FECN12,
> > +     IB_PC_SL_RCV_FECN13,
> > +     IB_PC_SL_RCV_FECN14,
> > +     IB_PC_SL_RCV_FECN15,
> > +     IB_PC_SL_RCV_FECN_LAST_F,
> > +
> > +     /*
> > +      * PortSLRcvBECN fields
> > +      */
> > +     IB_PC_SL_RCV_BECN_FIRST_F,
> > +     IB_PC_SL_RCV_BECN0 = IB_PC_SL_RCV_BECN_FIRST_F,
> > +     IB_PC_SL_RCV_BECN1,
> > +     IB_PC_SL_RCV_BECN2,
> > +     IB_PC_SL_RCV_BECN3,
> > +     IB_PC_SL_RCV_BECN4,
> > +     IB_PC_SL_RCV_BECN5,
> > +     IB_PC_SL_RCV_BECN6,
> > +     IB_PC_SL_RCV_BECN7,
> > +     IB_PC_SL_RCV_BECN8,
> > +     IB_PC_SL_RCV_BECN9,
> > +     IB_PC_SL_RCV_BECN10,
> > +     IB_PC_SL_RCV_BECN11,
> > +     IB_PC_SL_RCV_BECN12,
> > +     IB_PC_SL_RCV_BECN13,
> > +     IB_PC_SL_RCV_BECN14,
> > +     IB_PC_SL_RCV_BECN15,
> > +     IB_PC_SL_RCV_BECN_LAST_F,
> > +
> > +     /*
> > +      * PortXmitConCtrl fields
> > +      */
> > +     IB_PC_XMIT_CON_CTRL_FIRST_F,
> > +     IB_PC_XMIT_CON_CTRL_TIME_CONG = IB_PC_XMIT_CON_CTRL_FIRST_F,
> > +     IB_PC_XMIT_CON_CTRL_LAST_F,
> > +
> > +     /*
> > +      * PortVLXmitTimeCong fields
> > +      */
> > +     IB_PC_VL_XMIT_TIME_CONG_FIRST_F,
> > +     IB_PC_VL_XMIT_TIME_CONG0 = IB_PC_VL_XMIT_TIME_CONG_FIRST_F,
> > +     IB_PC_VL_XMIT_TIME_CONG1,
> > +     IB_PC_VL_XMIT_TIME_CONG2,
> > +     IB_PC_VL_XMIT_TIME_CONG3,
> > +     IB_PC_VL_XMIT_TIME_CONG4,
> > +     IB_PC_VL_XMIT_TIME_CONG5,
> > +     IB_PC_VL_XMIT_TIME_CONG6,
> > +     IB_PC_VL_XMIT_TIME_CONG7,
> > +     IB_PC_VL_XMIT_TIME_CONG8,
> > +     IB_PC_VL_XMIT_TIME_CONG9,
> > +     IB_PC_VL_XMIT_TIME_CONG10,
> > +     IB_PC_VL_XMIT_TIME_CONG11,
> > +     IB_PC_VL_XMIT_TIME_CONG12,
> > +     IB_PC_VL_XMIT_TIME_CONG13,
> > +     IB_PC_VL_XMIT_TIME_CONG14,
> > +     IB_PC_VL_XMIT_TIME_CONG_LAST_F,
> > +
> >       IB_FIELD_LAST_          /* must be last */
> >  };
> >
> > @@ -1137,7 +1357,13 @@ MAD_EXPORT ib_mad_dump_fn
> >      mad_dump_switchinfo, mad_dump_perfcounters, mad_dump_perfcounters_ext,
> >      mad_dump_perfcounters_xmt_sl, mad_dump_perfcounters_rcv_sl,
> >      mad_dump_perfcounters_xmt_disc, mad_dump_perfcounters_rcv_err,
> > -    mad_dump_portsamples_control, mad_dump_port_ext_speeds_counters;
> > +    mad_dump_portsamples_control, mad_dump_port_ext_speeds_counters,
> > +    mad_dump_perfcounters_port_op_rcv_counters, 
> > mad_dump_perfcounters_port_flow_ctl_counters,
> > +    mad_dump_perfcounters_port_vl_op_packet, 
> > mad_dump_perfcounters_port_vl_op_data,
> > +    mad_dump_perfcounters_port_vl_xmit_flow_ctl_update_errors, 
> > mad_dump_perfcounters_port_vl_xmit_wait_counters,
> > +    mad_dump_perfcounters_sw_port_vl_congestion, 
> > mad_dump_perfcounters_rcv_con_ctrl,
> > +    mad_dump_perfcounters_sl_rcv_fecn, mad_dump_perfcounters_sl_rcv_becn,
> > +    mad_dump_perfcounters_xmit_con_ctrl, 
> > mad_dump_perfcounters_vl_xmit_time_cong;
> >
> >  MAD_EXPORT void mad_dump_fields(char *buf, int bufsz, void *val, int valsz,
> >                               int start, int end);
> > diff --git a/src/dump.c b/src/dump.c
> > index 4b4279d..52b2010 100644
> > --- a/src/dump.c
> > +++ b/src/dump.c
> > @@ -836,6 +836,127 @@ void mad_dump_port_ext_speeds_counters(char *buf, int 
> > bufsz, void *val, int vals
> >       _dump_fields(buf, bufsz, val, IB_PESC_PORT_SELECT_F, IB_PESC_LAST_F);
> >  }
> >
> > +void mad_dump_perfcounters_port_op_rcv_counters(char *buf, int bufsz, void 
> > *val, int valsz)
> > +{
> > +     int cnt;
> > +
> > +     cnt = _dump_fields(buf, bufsz, val, IB_PC_EXT_PORT_SELECT_F,
> > +                        IB_PC_EXT_XMT_BYTES_F);
> > +     _dump_fields(buf + cnt, bufsz - cnt, val, 
> > IB_PC_PORT_OP_RCV_COUNTERS_FIRST_F,
> > +                  IB_PC_PORT_OP_RCV_COUNTERS_LAST_F);
> > +}
> > +
> > +void mad_dump_perfcounters_port_flow_ctl_counters(char *buf, int bufsz, 
> > void *val, int valsz)
> > +{
> > +     int cnt;
> > +
> > +     cnt = _dump_fields(buf, bufsz, val, IB_PC_EXT_PORT_SELECT_F,
> > +                        IB_PC_EXT_XMT_BYTES_F);
> > +     _dump_fields(buf + cnt, bufsz - cnt, val, 
> > IB_PC_PORT_FLOW_CTL_COUNTERS_FIRST_F,
> > +                  IB_PC_PORT_FLOW_CTL_COUNTERS_LAST_F);
> > +}
> > +
> > +void mad_dump_perfcounters_port_vl_op_packet(char *buf, int bufsz, void 
> > *val, int valsz)
> > +{
> > +     int cnt;
> > +
> > +     cnt = _dump_fields(buf, bufsz, val, IB_PC_EXT_PORT_SELECT_F,
> > +                        IB_PC_EXT_XMT_BYTES_F);
> > +     _dump_fields(buf + cnt, bufsz - cnt, val, 
> > IB_PC_PORT_VL_OP_PACKETS_FIRST_F,
> > +                  IB_PC_PORT_VL_OP_PACKETS_LAST_F);
> > +}
> > +
> > +void mad_dump_perfcounters_port_vl_op_data(char *buf, int bufsz, void 
> > *val, int valsz)
> > +{
> > +     int cnt;
> > +
> > +     cnt = _dump_fields(buf, bufsz, val, IB_PC_EXT_PORT_SELECT_F,
> > +                        IB_PC_EXT_XMT_BYTES_F);
> > +     _dump_fields(buf + cnt, bufsz - cnt, val, 
> > IB_PC_PORT_VL_OP_DATA_FIRST_F,
> > +                  IB_PC_PORT_VL_OP_DATA_LAST_F);
> > +}
> > +
> > +void mad_dump_perfcounters_port_vl_xmit_flow_ctl_update_errors(char *buf, 
> > int bufsz, void *val, int valsz)
> > +{
> > +     int cnt;
> > +
> > +     cnt = _dump_fields(buf, bufsz, val, IB_PC_EXT_PORT_SELECT_F,
> > +                        IB_PC_EXT_XMT_BYTES_F);
> > +     _dump_fields(buf + cnt, bufsz - cnt, val, 
> > IB_PC_PORT_VL_XMIT_FLOW_CTL_UPDATE_ERRORS_FIRST_F,
> > +                  IB_PC_PORT_VL_XMIT_FLOW_CTL_UPDATE_ERRORS_LAST_F);
> > +}
> > +
> > +void mad_dump_perfcounters_port_vl_xmit_wait_counters(char *buf, int 
> > bufsz, void *val, int valsz)
> > +{
> > +     int cnt;
> > +
> > +     cnt = _dump_fields(buf, bufsz, val, IB_PC_EXT_PORT_SELECT_F,
> > +                        IB_PC_EXT_XMT_BYTES_F);
> > +     _dump_fields(buf + cnt, bufsz - cnt, val, 
> > IB_PC_PORT_VL_XMIT_WAIT_COUNTERS_FIRST_F,
> > +                  IB_PC_PORT_VL_XMIT_WAIT_COUNTERS_LAST_F);
> > +}
> > +
> > +void mad_dump_perfcounters_sw_port_vl_congestion(char *buf, int bufsz, 
> > void *val, int valsz)
> > +{
> > +     int cnt;
> > +
> > +     cnt = _dump_fields(buf, bufsz, val, IB_PC_EXT_PORT_SELECT_F,
> > +                        IB_PC_EXT_XMT_BYTES_F);
> > +     _dump_fields(buf + cnt, bufsz - cnt, val, 
> > IB_PC_SW_PORT_VL_CONGESTION_FIRST_F,
> > +                  IB_PC_SW_PORT_VL_CONGESTION_LAST_F);
> > +}
> > +
> > +void mad_dump_perfcounters_rcv_con_ctrl(char *buf, int bufsz, void *val, 
> > int valsz)
> > +{
> > +     int cnt;
> > +
> > +     cnt = _dump_fields(buf, bufsz, val, IB_PC_EXT_PORT_SELECT_F,
> > +                        IB_PC_EXT_XMT_BYTES_F);
> > +     _dump_fields(buf + cnt, bufsz - cnt, val, IB_PC_RCV_CON_CTRL_FIRST_F,
> > +                  IB_PC_RCV_CON_CTRL_LAST_F);
> > +}
> > +
> > +
> > +void mad_dump_perfcounters_sl_rcv_fecn(char *buf, int bufsz, void *val, 
> > int valsz)
> > +{
> > +     int cnt;
> > +
> > +     cnt = _dump_fields(buf, bufsz, val, IB_PC_EXT_PORT_SELECT_F,
> > +                        IB_PC_EXT_XMT_BYTES_F);
> > +     _dump_fields(buf + cnt, bufsz - cnt, val, IB_PC_SL_RCV_FECN_FIRST_F,
> > +                  IB_PC_SL_RCV_FECN_LAST_F);
> > +}
> > +
> > +void mad_dump_perfcounters_sl_rcv_becn(char *buf, int bufsz, void *val, 
> > int valsz)
> > +{
> > +     int cnt;
> > +
> > +     cnt = _dump_fields(buf, bufsz, val, IB_PC_EXT_PORT_SELECT_F,
> > +                        IB_PC_EXT_XMT_BYTES_F);
> > +     _dump_fields(buf + cnt, bufsz - cnt, val, IB_PC_SL_RCV_BECN_FIRST_F,
> > +                  IB_PC_SL_RCV_BECN_LAST_F);
> > +}
> > +
> > +void mad_dump_perfcounters_xmit_con_ctrl(char *buf, int bufsz, void *val, 
> > int valsz)
> > +{
> > +     int cnt;
> > +
> > +     cnt = _dump_fields(buf, bufsz, val, IB_PC_EXT_PORT_SELECT_F,
> > +                        IB_PC_EXT_XMT_BYTES_F);
> > +     _dump_fields(buf + cnt, bufsz - cnt, val, IB_PC_XMIT_CON_CTRL_FIRST_F,
> > +                  IB_PC_XMIT_CON_CTRL_LAST_F);
> > +}
> > +
> > +void mad_dump_perfcounters_vl_xmit_time_cong(char *buf, int bufsz, void 
> > *val, int valsz)
> > +{
> > +     int cnt;
> > +
> > +     cnt = _dump_fields(buf, bufsz, val, IB_PC_EXT_PORT_SELECT_F,
> > +                        IB_PC_EXT_XMT_BYTES_F);
> > +     _dump_fields(buf + cnt, bufsz - cnt, val, 
> > IB_PC_VL_XMIT_TIME_CONG_FIRST_F,
> > +                  IB_PC_VL_XMIT_TIME_CONG_LAST_F);
> > +}
> > +
> >  void xdump(FILE * file, char *msg, void *p, int size)
> >  {
> >  #define HEX(x)  ((x) < 10 ? '0' + (x) : 'a' + ((x) -10))
> > diff --git a/src/fields.c b/src/fields.c
> > index 8039882..83d5374 100644
> > --- a/src/fields.c
> > +++ b/src/fields.c
> > @@ -578,6 +578,200 @@ static const ib_field_t ib_mad_f[] = {
> >       {992, 32, "FECUncorrectableBlockCtrLane11", mad_dump_uint},
> >       {0, 0},                 /* IB_PESC_LAST_F */
> >
> > +     /*
> > +      * PortOpRcvCounters fields
> > +      */
> > +     {32, 32, "PortOpRcvPkts", mad_dump_uint},
> > +     {64, 32, "PortOpRcvData", mad_dump_uint},
> > +     {0, 0},                 /* IB_PC_PORT_OP_RCV_COUNTERS_LAST_F */
> > +
> > +     /*
> > +      * PortFlowCtlCounters fields
> > +      */
> > +     {32, 32, "PortXmitFlowPkts", mad_dump_uint},
> > +     {64, 32, "PortRcvFlowPkts", mad_dump_uint},
> > +     {0, 0},                 /* IB_PC_PORT_FLOW_CTL_COUNTERS_LAST_F */
> > +
> > +     /*
> > +      * PortVLOpPackets fields
> > +      */
> > +     {32, 16, "PortVLOpPackets0", mad_dump_uint},
> > +     {48, 16, "PortVLOpPackets1", mad_dump_uint},
> > +     {64, 16, "PortVLOpPackets2", mad_dump_uint},
> > +     {80, 16, "PortVLOpPackets3", mad_dump_uint},
> > +     {96, 16, "PortVLOpPackets4", mad_dump_uint},
> > +     {112, 16, "PortVLOpPackets5", mad_dump_uint},
> > +     {128, 16, "PortVLOpPackets6", mad_dump_uint},
> > +     {144, 16, "PortVLOpPackets7", mad_dump_uint},
> > +     {160, 16, "PortVLOpPackets8", mad_dump_uint},
> > +     {176, 16, "PortVLOpPackets9", mad_dump_uint},
> > +     {192, 16, "PortVLOpPackets10", mad_dump_uint},
> > +     {208, 16, "PortVLOpPackets11", mad_dump_uint},
> > +     {224, 16, "PortVLOpPackets12", mad_dump_uint},
> > +     {240, 16, "PortVLOpPackets13", mad_dump_uint},
> > +     {256, 16, "PortVLOpPackets14", mad_dump_uint},
> > +     {272, 16, "PortVLOpPackets15", mad_dump_uint},
> > +     {0, 0},                 /* IB_PC_PORT_VL_OP_PACKETS_LAST_F */
> > +
> > +     /*
> > +      * PortVLOpData fields
> > +      */
> > +     {32, 32, "PortVLOpData0", mad_dump_uint},
> > +     {64, 32, "PortVLOpData1", mad_dump_uint},
> > +     {96, 32, "PortVLOpData2", mad_dump_uint},
> > +     {128, 32, "PortVLOpData3", mad_dump_uint},
> > +     {160, 32, "PortVLOpData4", mad_dump_uint},
> > +     {192, 32, "PortVLOpData5", mad_dump_uint},
> > +     {224, 32, "PortVLOpData6", mad_dump_uint},
> > +     {256, 32, "PortVLOpData7", mad_dump_uint},
> > +     {288, 32, "PortVLOpData8", mad_dump_uint},
> > +     {320, 32, "PortVLOpData9", mad_dump_uint},
> > +     {352, 32, "PortVLOpData10", mad_dump_uint},
> > +     {384, 32, "PortVLOpData11", mad_dump_uint},
> > +     {416, 32, "PortVLOpData12", mad_dump_uint},
> > +     {448, 32, "PortVLOpData13", mad_dump_uint},
> > +     {480, 32, "PortVLOpData14", mad_dump_uint},
> > +     {512, 32, "PortVLOpData15", mad_dump_uint},
> > +     {0, 0},                 /* IB_PC_PORT_VL_OP_DATA_LAST_F */
> > +
> > +     /*
> > +      * PortVLXmitFlowCtlUpdateErrors fields
> > +      */
> > +     {32, 2, "PortVLXmitFlowCtlUpdateErrors0", mad_dump_uint},
> > +     {34, 2, "PortVLXmitFlowCtlUpdateErrors1", mad_dump_uint},
> > +     {36, 2, "PortVLXmitFlowCtlUpdateErrors2", mad_dump_uint},
> > +     {38, 2, "PortVLXmitFlowCtlUpdateErrors3", mad_dump_uint},
> > +     {40, 2, "PortVLXmitFlowCtlUpdateErrors4", mad_dump_uint},
> > +     {42, 2, "PortVLXmitFlowCtlUpdateErrors5", mad_dump_uint},
> > +     {44, 2, "PortVLXmitFlowCtlUpdateErrors6", mad_dump_uint},
> > +     {46, 2, "PortVLXmitFlowCtlUpdateErrors7", mad_dump_uint},
> > +     {48, 2, "PortVLXmitFlowCtlUpdateErrors8", mad_dump_uint},
> > +     {50, 2, "PortVLXmitFlowCtlUpdateErrors9", mad_dump_uint},
> > +     {52, 2, "PortVLXmitFlowCtlUpdateErrors10", mad_dump_uint},
> > +     {54, 2, "PortVLXmitFlowCtlUpdateErrors11", mad_dump_uint},
> > +     {56, 2, "PortVLXmitFlowCtlUpdateErrors12", mad_dump_uint},
> > +     {58, 2, "PortVLXmitFlowCtlUpdateErrors13", mad_dump_uint},
> > +     {60, 2, "PortVLXmitFlowCtlUpdateErrors14", mad_dump_uint},
> > +     {62, 2, "PortVLXmitFlowCtlUpdateErrors15", mad_dump_uint},
> 
> Don't these need to be BITSOFFS(nn, 2)  ?
> 
> -- Hal
> 
> > +     {0, 0},                 /* 
> > IB_PC_PORT_VL_XMIT_FLOW_CTL_UPDATE_ERRORS_LAST_F */
> > +
> > +     /*
> > +      * PortVLXmitWaitCounters fields
> > +      */
> > +     {32, 16, "PortVLXmitWait0", mad_dump_uint},
> > +     {48, 16, "PortVLXmitWait1", mad_dump_uint},
> > +     {64, 16, "PortVLXmitWait2", mad_dump_uint},
> > +     {80, 16, "PortVLXmitWait3", mad_dump_uint},
> > +     {96, 16, "PortVLXmitWait4", mad_dump_uint},
> > +     {112, 16, "PortVLXmitWait5", mad_dump_uint},
> > +     {128, 16, "PortVLXmitWait6", mad_dump_uint},
> > +     {144, 16, "PortVLXmitWait7", mad_dump_uint},
> > +     {160, 16, "PortVLXmitWait8", mad_dump_uint},
> > +     {176, 16, "PortVLXmitWait9", mad_dump_uint},
> > +     {192, 16, "PortVLXmitWait10", mad_dump_uint},
> > +     {208, 16, "PortVLXmitWait11", mad_dump_uint},
> > +     {224, 16, "PortVLXmitWait12", mad_dump_uint},
> > +     {240, 16, "PortVLXmitWait13", mad_dump_uint},
> > +     {256, 16, "PortVLXmitWait14", mad_dump_uint},
> > +     {272, 16, "PortVLXmitWait15", mad_dump_uint},
> > +     {0, 0},                 /* IB_PC_PORT_VL_XMIT_WAIT_COUNTERS_LAST_F */
> > +
> > +     /*
> > +      * SwPortVLCongestion fields
> > +      */
> > +     {32, 16, "SWPortVLCongestion0", mad_dump_uint},
> > +     {48, 16, "SWPortVLCongestion1", mad_dump_uint},
> > +     {64, 16, "SWPortVLCongestion2", mad_dump_uint},
> > +     {80, 16, "SWPortVLCongestion3", mad_dump_uint},
> > +     {96, 16, "SWPortVLCongestion4", mad_dump_uint},
> > +     {112, 16, "SWPortVLCongestion5", mad_dump_uint},
> > +     {128, 16, "SWPortVLCongestion6", mad_dump_uint},
> > +     {144, 16, "SWPortVLCongestion7", mad_dump_uint},
> > +     {160, 16, "SWPortVLCongestion8", mad_dump_uint},
> > +     {176, 16, "SWPortVLCongestion9", mad_dump_uint},
> > +     {192, 16, "SWPortVLCongestion10", mad_dump_uint},
> > +     {208, 16, "SWPortVLCongestion11", mad_dump_uint},
> > +     {224, 16, "SWPortVLCongestion12", mad_dump_uint},
> > +     {240, 16, "SWPortVLCongestion13", mad_dump_uint},
> > +     {256, 16, "SWPortVLCongestion14", mad_dump_uint},
> > +     {272, 16, "SWPortVLCongestion15", mad_dump_uint},
> > +     {0, 0},                 /* IB_PC_SW_PORT_VL_CONGESTION_LAST_F */
> > +
> > +     /*
> > +      * PortRcvConCtrl fields
> > +      */
> > +     {32, 32, "PortPktRcvFECN", mad_dump_uint},
> > +     {64, 32, "PortPktRcvBECN", mad_dump_uint},
> > +     {0, 0},                 /* IB_PC_RCV_CON_CTRL_LAST_F */
> > +
> > +     /*
> > +      * PortSLRcvFECN fields
> > +      */
> > +     {32, 32, "PortSLRcvFECN0", mad_dump_uint},
> > +     {64, 32, "PortSLRcvFECN1", mad_dump_uint},
> > +     {96, 32, "PortSLRcvFECN2", mad_dump_uint},
> > +     {128, 32, "PortSLRcvFECN3", mad_dump_uint},
> > +     {160, 32, "PortSLRcvFECN4", mad_dump_uint},
> > +     {192, 32, "PortSLRcvFECN5", mad_dump_uint},
> > +     {224, 32, "PortSLRcvFECN6", mad_dump_uint},
> > +     {256, 32, "PortSLRcvFECN7", mad_dump_uint},
> > +     {288, 32, "PortSLRcvFECN8", mad_dump_uint},
> > +     {320, 32, "PortSLRcvFECN9", mad_dump_uint},
> > +     {352, 32, "PortSLRcvFECN10", mad_dump_uint},
> > +     {384, 32, "PortSLRcvFECN11", mad_dump_uint},
> > +     {416, 32, "PortSLRcvFECN12", mad_dump_uint},
> > +     {448, 32, "PortSLRcvFECN13", mad_dump_uint},
> > +     {480, 32, "PortSLRcvFECN14", mad_dump_uint},
> > +     {512, 32, "PortSLRcvFECN15", mad_dump_uint},
> > +     {0, 0},                 /* IB_PC_SL_RCV_FECN_LAST_F */
> > +
> > +     /*
> > +      * PortSLRcvBECN fields
> > +      */
> > +     {32, 32, "PortSLRcvBECN0", mad_dump_uint},
> > +     {64, 32, "PortSLRcvBECN1", mad_dump_uint},
> > +     {96, 32, "PortSLRcvBECN2", mad_dump_uint},
> > +     {128, 32, "PortSLRcvBECN3", mad_dump_uint},
> > +     {160, 32, "PortSLRcvBECN4", mad_dump_uint},
> > +     {192, 32, "PortSLRcvBECN5", mad_dump_uint},
> > +     {224, 32, "PortSLRcvBECN6", mad_dump_uint},
> > +     {256, 32, "PortSLRcvBECN7", mad_dump_uint},
> > +     {288, 32, "PortSLRcvBECN8", mad_dump_uint},
> > +     {320, 32, "PortSLRcvBECN9", mad_dump_uint},
> > +     {352, 32, "PortSLRcvBECN10", mad_dump_uint},
> > +     {384, 32, "PortSLRcvBECN11", mad_dump_uint},
> > +     {416, 32, "PortSLRcvBECN12", mad_dump_uint},
> > +     {448, 32, "PortSLRcvBECN13", mad_dump_uint},
> > +     {480, 32, "PortSLRcvBECN14", mad_dump_uint},
> > +     {512, 32, "PortSLRcvBECN15", mad_dump_uint},
> > +     {0, 0},                 /* IB_PC_SL_RCV_BECN_LAST_F */
> > +
> > +     /*
> > +      * PortXmitConCtrl fields
> > +      */
> > +     {32, 32, "PortXmitTimeCong", mad_dump_uint},
> > +     {0, 0},                 /* IB_PC_XMIT_CON_CTRL_LAST_F */
> > +
> > +     /*
> > +      * PortVLXmitTimeCong fields
> > +      */
> > +     {32, 32, "PortVLXmitTimeCong0", mad_dump_uint},
> > +     {64, 32, "PortVLXmitTimeCong1", mad_dump_uint},
> > +     {96, 32, "PortVLXmitTimeCong2", mad_dump_uint},
> > +     {128, 32, "PortVLXmitTimeCong3", mad_dump_uint},
> > +     {160, 32, "PortVLXmitTimeCong4", mad_dump_uint},
> > +     {192, 32, "PortVLXmitTimeCong5", mad_dump_uint},
> > +     {224, 32, "PortVLXmitTimeCong6", mad_dump_uint},
> > +     {256, 32, "PortVLXmitTimeCong7", mad_dump_uint},
> > +     {288, 32, "PortVLXmitTimeCong8", mad_dump_uint},
> > +     {320, 32, "PortVLXmitTimeCong9", mad_dump_uint},
> > +     {352, 32, "PortVLXmitTimeCong10", mad_dump_uint},
> > +     {384, 32, "PortVLXmitTimeCong11", mad_dump_uint},
> > +     {416, 32, "PortVLXmitTimeCong12", mad_dump_uint},
> > +     {448, 32, "PortVLXmitTimeCong13", mad_dump_uint},
> > +     {480, 32, "PortVLXmitTimeCong14", mad_dump_uint},
> > +     {0, 0},                 /* IB_PC_VL_XMIT_TIME_CONG_LAST_F */
> > +
> >       {0, 0}                  /* IB_FIELD_LAST_ */
> >
> >  };
> > diff --git a/src/libibmad.map b/src/libibmad.map
> > index 457ec86..f0b42a5 100644
> > --- a/src/libibmad.map
> > +++ b/src/libibmad.map
> > @@ -34,6 +34,18 @@ IBMAD_1.3 {
> >               mad_dump_portcapmask;
> >               mad_dump_portinfo;
> >               mad_dump_portsamples_control;
> > +             mad_dump_perfcounters_port_op_rcv_counters;
> > +             mad_dump_perfcounters_port_flow_ctl_counters;
> > +             mad_dump_perfcounters_port_vl_op_packet;
> > +             mad_dump_perfcounters_port_vl_op_data;
> > +             mad_dump_perfcounters_port_vl_xmit_flow_ctl_update_errors;
> > +             mad_dump_perfcounters_port_vl_xmit_wait_counters;
> > +             mad_dump_perfcounters_sw_port_vl_congestion;
> > +             mad_dump_perfcounters_rcv_con_ctrl;
> > +             mad_dump_perfcounters_sl_rcv_fecn;
> > +             mad_dump_perfcounters_sl_rcv_becn;
> > +             mad_dump_perfcounters_xmit_con_ctrl;
> > +             mad_dump_perfcounters_vl_xmit_time_cong;
> >               mad_dump_portstates;
> >               mad_dump_portstate;
> >               mad_dump_rhex;
> 
-- 
Albert Chu
ch...@llnl.gov
Computer Scientist
High Performance Systems Division
Lawrence Livermore National Laboratory


--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to