--- /home/mheinz/work/OFED_SRC/infiniband-diags-1.5.5/src/perfquery.c	2009-12-15 09:03:16.000000000 -0500
+++ perfquery.c	2010-03-01 11:45:06.441217000 -0500
@@ -282,6 +282,25 @@
 	       ALL_PORTS, buf);
 }
 
+static int dump_fields(char *buf, int bufsz, void *data, int start, int end)
+{
+	char val[64];
+	char *s = buf;
+	int n, field;
+	for (field = start; field <= end && bufsz > 0; field++) {
+		mad_decode_field(data, field, val);
+		if (!mad_dump_field(field, s, bufsz, val))
+			return -1;
+		n = strlen(s);
+		s += n;
+		*s++ = '\n';
+		*s = 0;
+		n++;
+		bufsz -= n;
+	}
+	return (int)(s - buf);
+}
+
 static void dump_perfcounters(int extended, int timeout, uint16_t cap_mask,
 			      ib_portid_t * portid, int port, int aggregate)
 {
@@ -293,8 +312,7 @@
 			IBERROR("perfquery");
 		if (!(cap_mask & 0x1000)) {
 			/* if PortCounters:PortXmitWait not supported clear this counter */
-			IBWARN
-			    ("PortXmitWait not indicated so ignore this counter");
+			VERBOSE("PortXmitWait not indicated so ignore this counter");
 			perf_count.xmtwait = 0;
 			mad_encode_field(pc, IB_PC_XMT_WAIT_F,
 					 &perf_count.xmtwait);
@@ -302,7 +320,8 @@
 		if (aggregate)
 			aggregate_perfcounters();
 		else
-			mad_dump_perfcounters(buf, sizeof buf, pc, sizeof pc);
+			dump_fields(buf, sizeof buf, pc, IB_PC_FIRST_F,
+				(cap_mask & 0x1000)?IB_PC_LAST_F:IB_PC_RCV_PKTS_F);
 	} else {
 		if (!(cap_mask & 0x200))	/* 1.2 errata: bit 9 is extended counter support */
 			IBWARN
