Yes, the patch fixes perfquery so now it supports the "-a" option properly but I had to make some minor tweaks as I am running the released 1.3.2 version.

I also disabled the IBWARN and also tweaked ibcheckerrs just enough so that ibcheckerrors is reporting properly now.

Attached is the patch that includes both of the above modifications and integrates properly against the 1.3.2 released tree.

Again, thank you. :)

Greg



Attachment: infiniband-diags-1.3.2-allports_workaround.patch
Description: Binary data





On Oct 15, 2007, at 4:31 AM, Hal Rosenstock wrote:

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
[email protected]
http://lists.openfabrics.org/cgi-bin/mailman/listinfo/general

To unsubscribe, please visit http://openib.org/mailman/listinfo/ openib-general
_______________________________________________
general mailing list
[email protected]
http://lists.openfabrics.org/cgi-bin/mailman/listinfo/general

To unsubscribe, please visit http://openib.org/mailman/listinfo/ openib-general

--
Greg Kurtzer
[EMAIL PROTECTED]



_______________________________________________
general mailing list
[email protected]
http://lists.openfabrics.org/cgi-bin/mailman/listinfo/general

To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general

Reply via email to