From patchwork Thu Dec 31 16:58:34 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hal Rosenstock X-Patchwork-Id: 70413 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by demeter.kernel.org (8.14.3/8.14.2) with ESMTP id nBVH1nFO025504 for ; Thu, 31 Dec 2009 17:01:49 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752722AbZLaRBs (ORCPT ); Thu, 31 Dec 2009 12:01:48 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1752753AbZLaRBs (ORCPT ); Thu, 31 Dec 2009 12:01:48 -0500 Received: from qmta05.westchester.pa.mail.comcast.net ([76.96.62.48]:45233 "EHLO QMTA05.westchester.pa.mail.comcast.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752722AbZLaRBr (ORCPT ); Thu, 31 Dec 2009 12:01:47 -0500 Received: from OMTA20.westchester.pa.mail.comcast.net ([76.96.62.71]) by QMTA05.westchester.pa.mail.comcast.net with comcast id PoBK1d0031YDfWL55t1nbu; Thu, 31 Dec 2009 17:01:47 +0000 Received: from hal.comcast.net ([75.69.247.31]) by OMTA20.westchester.pa.mail.comcast.net with comcast id Pt2q1d00X0hNrtn3gt2qWg; Thu, 31 Dec 2009 17:02:51 +0000 Received: from hal.comcast.net (localhost.localdomain [127.0.0.1]) by hal.comcast.net (8.14.3/8.14.3) with ESMTP id nBVGx3EA009166; Thu, 31 Dec 2009 11:59:09 -0500 Received: (from hnrose@localhost) by hal.comcast.net (8.14.3/8.14.3/Submit) id nBVGwYY5009135; Thu, 31 Dec 2009 11:58:34 -0500 Date: Thu, 31 Dec 2009 11:58:34 -0500 From: Hal Rosenstock To: sashak@voltaire.com Cc: linux-rdma@vger.kernel.org Subject: [PATCH] infiniband-diags/perfquery: Add support for optional PortRcvErrorDetails counter Message-ID: <20091231165834.GB9123@comcast.net> MIME-Version: 1.0 Content-Disposition: inline User-Agent: Mutt/1.5.19 (2009-01-05) Sender: linux-rdma-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-rdma@vger.kernel.org diff --git a/infiniband-diags/man/perfquery.8 b/infiniband-diags/man/perfquery.8 index 4510e7d..56615b9 100644 --- a/infiniband-diags/man/perfquery.8 +++ b/infiniband-diags/man/perfquery.8 @@ -1,4 +1,4 @@ -.TH PERFQUERY 8 "September 21, 2009" "OpenIB" "OpenIB Diagnostics" +.TH PERFQUERY 8 "Dec 31, 2009" "OpenIB" "OpenIB Diagnostics" .SH NAME perfquery \- query InfiniBand port counters @@ -6,7 +6,7 @@ perfquery \- query InfiniBand port counters .SH SYNOPSIS .B perfquery [\-d(ebug)] [\-G(uid)] [\-x|\-\-extended] [\-X|\-\-xmtsl] [\-S|\-\-rcvsl] -[\-D|\-\-xmtdisc] +[\-D|\-\-xmtdisc] [\-E|\-\-rcverr] [-a(ll_ports)] [-l(oop_ports)] [-r(eset_after_read)] [-R(eset_only)] [\-C ca_name] [\-P ca_port] [\-t(imeout) timeout_ms] [\-V(ersion)] [\-h(elp)] [ [[port] [reset_mask]]] @@ -42,6 +42,9 @@ show receive data SL counter. This is an optional counter for QoS. \fB\-D\fR, \fB\-\-xmtdisc\fR show transmit discard details. This is an optional counter. .TP +\fB\-E\fR, \fB\-\-rcverr\fR +show receive error details. This is an optional counter. +.TP \fB\-a\fR, \fB\-\-all_ports\fR show aggregated counters for all ports of the destination lid or reset all counters for all ports. If the destination lid diff --git a/infiniband-diags/src/perfquery.c b/infiniband-diags/src/perfquery.c index e659189..2a48c6f 100644 --- a/infiniband-diags/src/perfquery.c +++ b/infiniband-diags/src/perfquery.c @@ -344,7 +344,7 @@ static void reset_counters(int extended, int timeout, int mask, } static int reset, reset_only, all_ports, loop_ports, port, extended, xmt_sl, - rcv_sl, xmt_disc; + rcv_sl, xmt_disc, rcv_err; static void common_func(ib_portid_t *portid, int port_num, int mask, unsigned query, unsigned reset, @@ -390,6 +390,13 @@ static void xmt_disc_query(ib_portid_t * portid, int port, int mask) mad_dump_perfcounters_xmt_disc); } +static void rcv_err_query(ib_portid_t * portid, int port, int mask) +{ + common_func(portid, port, mask, !reset_only, (reset_only || reset), + "PortRcvErrorDetails", IB_GSI_PORT_RCV_ERROR_DETAILS, + mad_dump_perfcounters_rcv_err); +} + static int process_opt(void *context, int ch, char *optarg) { switch (ch) { @@ -405,6 +412,9 @@ static int process_opt(void *context, int ch, char *optarg) case 'D': xmt_disc = 1; break; + case 'E': + rcv_err = 1; + break; case 'a': all_ports++; port = ALL_PORTS; @@ -444,6 +454,7 @@ int main(int argc, char **argv) {"xmtsl", 'X', 0, NULL, "show Xmt SL port counters"}, {"rcvsl", 'S', 0, NULL, "show Rcv SL port counters"}, {"xmtdisc", 'D', 0, NULL, "show Xmt Discard Details"}, + {"rcverr", 'E', 0, NULL, "show Rcv Error Details"}, {"all_ports", 'a', 0, NULL, "show aggregated counters"}, {"loop_ports", 'l', 0, NULL, "iterate through each port"}, {"reset_after_read", 'r', 0, NULL, "reset counters after read"}, @@ -519,6 +530,11 @@ int main(int argc, char **argv) goto done; } + if (rcv_err) { + rcv_err_query(&portid, port, mask); + goto done; + } + if (all_ports_loop || (loop_ports && (all_ports || port == ALL_PORTS))) { if (smp_query_via(data, &portid, IB_ATTR_NODE_INFO, 0, 0, srcport) < 0)