staging/rdma/hfi1: Add aeth name syndrome decode
authorDean Luick <dean.luick@intel.com>
Tue, 1 Dec 2015 20:38:12 +0000 (15:38 -0500)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 21 Dec 2015 21:51:50 +0000 (13:51 -0800)
Add aeth name syndrome decode to enhance debugging.

The IBTA RC ACK contains an ACK extended transport header.

Part of that header is the syndrome field that qualifies the RC ACK as an
ACK, NAK, or RNR NAK.

Without the patch here is the syndrome decode:
aeth syn 0x00

Here is the decode with the fix:
aeth syn 0x00 ACK

Reviewed-by: Mike Marciniszyn <mike.marciniszyn@intel.com>
Signed-off-by: Dean Luick <dean.luick@intel.com>
Signed-off-by: Jubin John <jubin.john@intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/rdma/hfi1/trace.c

index f55b75194847db4edf09e738d301a22d942eecb0..10122e84cb2fa3198a9af6a3bf31645a43d11a33 100644 (file)
@@ -67,7 +67,7 @@ u8 ibhdr_exhdr_len(struct hfi1_ib_header *hdr)
 
 #define IMM_PRN  "imm %d"
 #define RETH_PRN "reth vaddr 0x%.16llx rkey 0x%.8x dlen 0x%.8x"
-#define AETH_PRN "aeth syn 0x%.2x msn 0x%.8x"
+#define AETH_PRN "aeth syn 0x%.2x %s msn 0x%.8x"
 #define DETH_PRN "deth qkey 0x%.8x sqpn 0x%.6x"
 #define ATOMICACKETH_PRN "origdata %lld"
 #define ATOMICETH_PRN "vaddr 0x%llx rkey 0x%.8x sdata %lld cdata %lld"
@@ -79,6 +79,19 @@ static u64 ib_u64_get(__be32 *p)
        return ((u64)be32_to_cpu(p[0]) << 32) | be32_to_cpu(p[1]);
 }
 
+static const char *parse_syndrome(u8 syndrome)
+{
+       switch (syndrome >> 5) {
+       case 0:
+               return "ACK";
+       case 1:
+               return "RNRNAK";
+       case 3:
+               return "NAK";
+       }
+       return "";
+}
+
 const char *parse_everbs_hdrs(
        struct trace_seq *p,
        u8 opcode,
@@ -124,16 +137,18 @@ const char *parse_everbs_hdrs(
        case OP(RC, RDMA_READ_RESPONSE_LAST):
        case OP(RC, RDMA_READ_RESPONSE_ONLY):
        case OP(RC, ACKNOWLEDGE):
-               trace_seq_printf(p, AETH_PRN,
-                       be32_to_cpu(eh->aeth) >> 24,
-                       be32_to_cpu(eh->aeth) & HFI1_MSN_MASK);
+               trace_seq_printf(p, AETH_PRN, be32_to_cpu(eh->aeth) >> 24,
+                                parse_syndrome(be32_to_cpu(eh->aeth) >> 24),
+                                be32_to_cpu(eh->aeth) & HFI1_MSN_MASK);
                break;
        /* aeth + atomicacketh */
        case OP(RC, ATOMIC_ACKNOWLEDGE):
                trace_seq_printf(p, AETH_PRN " " ATOMICACKETH_PRN,
-                       (be32_to_cpu(eh->at.aeth) >> 24) & 0xff,
-                       be32_to_cpu(eh->at.aeth) & HFI1_MSN_MASK,
-                       (unsigned long long)ib_u64_get(eh->at.atomic_ack_eth));
+                                be32_to_cpu(eh->at.aeth) >> 24,
+                                parse_syndrome(be32_to_cpu(eh->at.aeth) >> 24),
+                                be32_to_cpu(eh->at.aeth) & HFI1_MSN_MASK,
+                                (unsigned long long)
+                                ib_u64_get(eh->at.atomic_ack_eth));
                break;
        /* atomiceth */
        case OP(RC, COMPARE_SWAP):