[ofa-general] ibcheckerrrors/perfquery failure

Hal Rosenstock hrosenstock at xsigo.com
Mon Oct 15 04:31:37 PDT 2007


On Fri, 2007-10-12 at 15:14 -0700, Hal Rosenstock wrote:
> On Fri, 2007-10-12 at 14:59 -0700, Hal Rosenstock wrote:
> > On Fri, 2007-10-12 at 14:47 -0700, Greg Kurtzer wrote:
> > > ibwarn: [25274] pma_query: lid 1 port 1
> > > ibwarn: [25274] mad_rpc: data offs 64 sz 192
> > > mad data
> > > 0101 0000 0000 0014 0000 0000 0000 0000
> > 
> > Thanks; AllPortSelect is off in CapabilityMask which is consistent with
> > the behavior. (It would be trivial for those HCA PMAs to indicate
> > AllPortSelect is supported (since it's the same as supporting one port)
> > and then all would be fine but that's not a requirement).
> > 
> > A check should be added in perfquery for this.I will generate a patch
> > for that but that won't fix the problem.
> 
> Actually, perfquery gets the number of ports and could do multiple
> PerfGets, one per port, and accumulate the "all" ports.
> 
> This approach may be better than dealing with the scripts.

Can you try this and let me know if this resolves your issue ? The patch
is against the master (OFED 1.3):

diff --git a/infiniband-diags/src/perfquery.c b/infiniband-diags/src/perfquery.c
index 148e452..c976fc5 100644
--- a/infiniband-diags/src/perfquery.c
+++ b/infiniband-diags/src/perfquery.c
@@ -1,5 +1,6 @@
 /*
  * Copyright (c) 2004-2007 Voltaire Inc.  All rights reserved.
+ * Copyright (c) 2007 Xsigo Systems Inc.  All rights reserved.
  *
  * This software is available to you under a choice of one of two
  * licenses.  You may choose to be licensed under the terms of the GNU
@@ -42,7 +43,7 @@
 #include <getopt.h>
 #include <netinet/in.h>
 
-#define __BUILD_VERSION_TAG__ 1.2.2
+#define __BUILD_VERSION_TAG__ 1.2.3
 #include <infiniband/common.h>
 #include <infiniband/umad.h>
 #include <infiniband/mad.h>
@@ -99,6 +100,9 @@ main(int argc, char **argv)
 	int ca_port = 0;
 	int extended = 0;
 	uint16_t cap_mask;
+	int allports = 0;
+	int node_type, num_ports;
+	uint8_t data[IB_SMP_DATA_SIZE];
 
 	static char const str_opts[] = "C:P:s:t:dGearRVhu";
 	static const struct option long_opts[] = {
@@ -191,6 +195,35 @@ main(int argc, char **argv)
 	/* PerfMgt ClassPortInfo is a required attribute */
 	if (!perf_classportinfo_query(pc, &portid, port, timeout))
 		IBERROR("classportinfo query");
+	/* ClassPortInfo should be supported as part of libibmad */
+	memcpy(&cap_mask, pc+2, sizeof(cap_mask));	/* CapabilityMask */
+	cap_mask = ntohs(cap_mask);
+	if (!(cap_mask & 0x100)) /* bit 8 is AllPortSelect */
+		if (port == 255) {
+			allports = 1;
+			IBWARN("AllPortSelect not supported");
+		}
+
+	if (allports == 1) {
+
+		/*
+		 * Simulate all ports support in PMA
+		 * Determine node type, number of (physical) ports,
+		 * and, if switch, whether SP0 is enhanced
+		 * to determine first and last port to query
+		 */
+
+		/* For now, support single port CAs */
+		if (smp_query(data, &portid, IB_ATTR_NODE_INFO, 0, 0) < 0)
+			IBERROR("smp query nodeinfo failed");
+		node_type = mad_get_field(data, 0, IB_NODE_TYPE_F);
+		if (node_type != IB_NODE_CA)    /* NodeType other than CA ? */
+			IBERROR("smp query nodeinfo: Node type not CA");
+		mad_decode_field(data, IB_NODE_NPORTS_F, &num_ports);
+		if (num_ports != 1)
+			IBERROR("smp query nodeinfo: %d ports; only 1 supported currently", num_ports);
+		port = num_ports;
+	}
 
 	if (reset_only)
 		goto do_reset;
@@ -201,9 +234,6 @@ main(int argc, char **argv)
 
 		mad_dump_perfcounters(buf, sizeof buf, pc, sizeof pc);
 	} else {
-		/* Should ClassPortInfo be implemented in libibmad ? */
-		memcpy(&cap_mask, pc+2, sizeof(cap_mask));	/* CapabilityMask */
-		cap_mask = ntohs(cap_mask);
 		if (!(cap_mask & 0x200)) /* 1.2 errata: bit 9 is extended counter support */
 			IBWARN("PerfMgt ClassPortInfo 0x%x extended counters not indicated\n", cap_mask);
 


> 
> -- Hal
> 
> > I will try to find time to look at the scripts and see what it will take
> > to fix this. Where AllPortSelect is not supported, they need to drop
> > back to individual ports.
> > 
> > -- Hal
> > _______________________________________________
> > general mailing list
> > general at lists.openfabrics.org
> > http://lists.openfabrics.org/cgi-bin/mailman/listinfo/general
> > 
> > To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general
> _______________________________________________
> general mailing list
> general at lists.openfabrics.org
> http://lists.openfabrics.org/cgi-bin/mailman/listinfo/general
> 
> To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general



More information about the general mailing list