hc
2024-01-03 2f7c68cb55ecb7331f2381deb497c27155f32faf
kernel/drivers/infiniband/hw/hfi1/trace.c
....@@ -1,5 +1,5 @@
11 /*
2
- * Copyright(c) 2015 - 2018 Intel Corporation.
2
+ * Copyright(c) 2015 - 2020 Intel Corporation.
33 *
44 * This file is provided under a dual BSD/GPLv2 license. When using or
55 * redistributing this file, you may do so under either license.
....@@ -46,6 +46,8 @@
4646 */
4747 #define CREATE_TRACE_POINTS
4848 #include "trace.h"
49
+#include "exp_rcv.h"
50
+#include "ipoib.h"
4951
5052 static u8 __get_ib_hdr_len(struct ib_header *hdr)
5153 {
....@@ -125,9 +127,19 @@
125127 #define RETH_PRN "reth vaddr:0x%.16llx rkey:0x%.8x dlen:0x%.8x"
126128 #define AETH_PRN "aeth syn:0x%.2x %s msn:0x%.8x"
127129 #define DETH_PRN "deth qkey:0x%.8x sqpn:0x%.6x"
130
+#define DETH_ENTROPY_PRN "deth qkey:0x%.8x sqpn:0x%.6x entropy:0x%.2x"
128131 #define IETH_PRN "ieth rkey:0x%.8x"
129132 #define ATOMICACKETH_PRN "origdata:%llx"
130133 #define ATOMICETH_PRN "vaddr:0x%llx rkey:0x%.8x sdata:%llx cdata:%llx"
134
+#define TID_RDMA_KDETH "kdeth0 0x%x kdeth1 0x%x"
135
+#define TID_RDMA_KDETH_DATA "kdeth0 0x%x: kver %u sh %u intr %u tidctrl %u tid %x offset %x kdeth1 0x%x: jkey %x"
136
+#define TID_READ_REQ_PRN "tid_flow_psn 0x%x tid_flow_qp 0x%x verbs_qp 0x%x"
137
+#define TID_READ_RSP_PRN "verbs_qp 0x%x"
138
+#define TID_WRITE_REQ_PRN "original_qp 0x%x"
139
+#define TID_WRITE_RSP_PRN "tid_flow_psn 0x%x tid_flow_qp 0x%x verbs_qp 0x%x"
140
+#define TID_WRITE_DATA_PRN "verbs_qp 0x%x"
141
+#define TID_ACK_PRN "tid_flow_psn 0x%x verbs_psn 0x%x tid_flow_qp 0x%x verbs_qp 0x%x"
142
+#define TID_RESYNC_PRN "verbs_qp 0x%x"
131143
132144 #define OP(transport, op) IB_OPCODE_## transport ## _ ## op
133145
....@@ -322,6 +334,99 @@
322334 parse_syndrome(be32_to_cpu(eh->aeth) >> 24),
323335 be32_to_cpu(eh->aeth) & IB_MSN_MASK);
324336 break;
337
+ case OP(TID_RDMA, WRITE_REQ):
338
+ trace_seq_printf(p, TID_RDMA_KDETH " " RETH_PRN " "
339
+ TID_WRITE_REQ_PRN,
340
+ le32_to_cpu(eh->tid_rdma.w_req.kdeth0),
341
+ le32_to_cpu(eh->tid_rdma.w_req.kdeth1),
342
+ ib_u64_get(&eh->tid_rdma.w_req.reth.vaddr),
343
+ be32_to_cpu(eh->tid_rdma.w_req.reth.rkey),
344
+ be32_to_cpu(eh->tid_rdma.w_req.reth.length),
345
+ be32_to_cpu(eh->tid_rdma.w_req.verbs_qp));
346
+ break;
347
+ case OP(TID_RDMA, WRITE_RESP):
348
+ trace_seq_printf(p, TID_RDMA_KDETH " " AETH_PRN " "
349
+ TID_WRITE_RSP_PRN,
350
+ le32_to_cpu(eh->tid_rdma.w_rsp.kdeth0),
351
+ le32_to_cpu(eh->tid_rdma.w_rsp.kdeth1),
352
+ be32_to_cpu(eh->tid_rdma.w_rsp.aeth) >> 24,
353
+ parse_syndrome(/* aeth */
354
+ be32_to_cpu(eh->tid_rdma.w_rsp.aeth)
355
+ >> 24),
356
+ (be32_to_cpu(eh->tid_rdma.w_rsp.aeth) &
357
+ IB_MSN_MASK),
358
+ be32_to_cpu(eh->tid_rdma.w_rsp.tid_flow_psn),
359
+ be32_to_cpu(eh->tid_rdma.w_rsp.tid_flow_qp),
360
+ be32_to_cpu(eh->tid_rdma.w_rsp.verbs_qp));
361
+ break;
362
+ case OP(TID_RDMA, WRITE_DATA_LAST):
363
+ case OP(TID_RDMA, WRITE_DATA):
364
+ trace_seq_printf(p, TID_RDMA_KDETH_DATA " " TID_WRITE_DATA_PRN,
365
+ le32_to_cpu(eh->tid_rdma.w_data.kdeth0),
366
+ KDETH_GET(eh->tid_rdma.w_data.kdeth0, KVER),
367
+ KDETH_GET(eh->tid_rdma.w_data.kdeth0, SH),
368
+ KDETH_GET(eh->tid_rdma.w_data.kdeth0, INTR),
369
+ KDETH_GET(eh->tid_rdma.w_data.kdeth0, TIDCTRL),
370
+ KDETH_GET(eh->tid_rdma.w_data.kdeth0, TID),
371
+ KDETH_GET(eh->tid_rdma.w_data.kdeth0, OFFSET),
372
+ le32_to_cpu(eh->tid_rdma.w_data.kdeth1),
373
+ KDETH_GET(eh->tid_rdma.w_data.kdeth1, JKEY),
374
+ be32_to_cpu(eh->tid_rdma.w_data.verbs_qp));
375
+ break;
376
+ case OP(TID_RDMA, READ_REQ):
377
+ trace_seq_printf(p, TID_RDMA_KDETH " " RETH_PRN " "
378
+ TID_READ_REQ_PRN,
379
+ le32_to_cpu(eh->tid_rdma.r_req.kdeth0),
380
+ le32_to_cpu(eh->tid_rdma.r_req.kdeth1),
381
+ ib_u64_get(&eh->tid_rdma.r_req.reth.vaddr),
382
+ be32_to_cpu(eh->tid_rdma.r_req.reth.rkey),
383
+ be32_to_cpu(eh->tid_rdma.r_req.reth.length),
384
+ be32_to_cpu(eh->tid_rdma.r_req.tid_flow_psn),
385
+ be32_to_cpu(eh->tid_rdma.r_req.tid_flow_qp),
386
+ be32_to_cpu(eh->tid_rdma.r_req.verbs_qp));
387
+ break;
388
+ case OP(TID_RDMA, READ_RESP):
389
+ trace_seq_printf(p, TID_RDMA_KDETH_DATA " " AETH_PRN " "
390
+ TID_READ_RSP_PRN,
391
+ le32_to_cpu(eh->tid_rdma.r_rsp.kdeth0),
392
+ KDETH_GET(eh->tid_rdma.r_rsp.kdeth0, KVER),
393
+ KDETH_GET(eh->tid_rdma.r_rsp.kdeth0, SH),
394
+ KDETH_GET(eh->tid_rdma.r_rsp.kdeth0, INTR),
395
+ KDETH_GET(eh->tid_rdma.r_rsp.kdeth0, TIDCTRL),
396
+ KDETH_GET(eh->tid_rdma.r_rsp.kdeth0, TID),
397
+ KDETH_GET(eh->tid_rdma.r_rsp.kdeth0, OFFSET),
398
+ le32_to_cpu(eh->tid_rdma.r_rsp.kdeth1),
399
+ KDETH_GET(eh->tid_rdma.r_rsp.kdeth1, JKEY),
400
+ be32_to_cpu(eh->tid_rdma.r_rsp.aeth) >> 24,
401
+ parse_syndrome(/* aeth */
402
+ be32_to_cpu(eh->tid_rdma.r_rsp.aeth)
403
+ >> 24),
404
+ (be32_to_cpu(eh->tid_rdma.r_rsp.aeth) &
405
+ IB_MSN_MASK),
406
+ be32_to_cpu(eh->tid_rdma.r_rsp.verbs_qp));
407
+ break;
408
+ case OP(TID_RDMA, ACK):
409
+ trace_seq_printf(p, TID_RDMA_KDETH " " AETH_PRN " "
410
+ TID_ACK_PRN,
411
+ le32_to_cpu(eh->tid_rdma.ack.kdeth0),
412
+ le32_to_cpu(eh->tid_rdma.ack.kdeth1),
413
+ be32_to_cpu(eh->tid_rdma.ack.aeth) >> 24,
414
+ parse_syndrome(/* aeth */
415
+ be32_to_cpu(eh->tid_rdma.ack.aeth)
416
+ >> 24),
417
+ (be32_to_cpu(eh->tid_rdma.ack.aeth) &
418
+ IB_MSN_MASK),
419
+ be32_to_cpu(eh->tid_rdma.ack.tid_flow_psn),
420
+ be32_to_cpu(eh->tid_rdma.ack.verbs_psn),
421
+ be32_to_cpu(eh->tid_rdma.ack.tid_flow_qp),
422
+ be32_to_cpu(eh->tid_rdma.ack.verbs_qp));
423
+ break;
424
+ case OP(TID_RDMA, RESYNC):
425
+ trace_seq_printf(p, TID_RDMA_KDETH " " TID_RESYNC_PRN,
426
+ le32_to_cpu(eh->tid_rdma.resync.kdeth0),
427
+ le32_to_cpu(eh->tid_rdma.resync.kdeth1),
428
+ be32_to_cpu(eh->tid_rdma.resync.verbs_qp));
429
+ break;
325430 /* aeth + atomicacketh */
326431 case OP(RC, ATOMIC_ACKNOWLEDGE):
327432 trace_seq_printf(p, AETH_PRN " " ATOMICACKETH_PRN,
....@@ -341,6 +446,12 @@
341446 break;
342447 /* deth */
343448 case OP(UD, SEND_ONLY):
449
+ trace_seq_printf(p, DETH_ENTROPY_PRN,
450
+ be32_to_cpu(eh->ud.deth[0]),
451
+ be32_to_cpu(eh->ud.deth[1]) & RVT_QPN_MASK,
452
+ be32_to_cpu(eh->ud.deth[1]) >>
453
+ HFI1_IPOIB_ENTROPY_SHIFT);
454
+ break;
344455 case OP(UD, SEND_ONLY_WITH_IMMEDIATE):
345456 trace_seq_printf(p, DETH_PRN,
346457 be32_to_cpu(eh->ud.deth[0]),
....@@ -394,6 +505,53 @@
394505 return ret;
395506 }
396507
508
+u8 hfi1_trace_get_tid_ctrl(u32 ent)
509
+{
510
+ return EXP_TID_GET(ent, CTRL);
511
+}
512
+
513
+u16 hfi1_trace_get_tid_len(u32 ent)
514
+{
515
+ return EXP_TID_GET(ent, LEN);
516
+}
517
+
518
+u16 hfi1_trace_get_tid_idx(u32 ent)
519
+{
520
+ return EXP_TID_GET(ent, IDX);
521
+}
522
+
523
+struct hfi1_ctxt_hist {
524
+ atomic_t count;
525
+ atomic_t data[255];
526
+};
527
+
528
+struct hfi1_ctxt_hist hist = {
529
+ .count = ATOMIC_INIT(0)
530
+};
531
+
532
+const char *hfi1_trace_print_rsm_hist(struct trace_seq *p, unsigned int ctxt)
533
+{
534
+ int i, len = ARRAY_SIZE(hist.data);
535
+ const char *ret = trace_seq_buffer_ptr(p);
536
+ unsigned long packet_count = atomic_fetch_inc(&hist.count);
537
+
538
+ trace_seq_printf(p, "packet[%lu]", packet_count);
539
+ for (i = 0; i < len; ++i) {
540
+ unsigned long val;
541
+ atomic_t *count = &hist.data[i];
542
+
543
+ if (ctxt == i)
544
+ val = atomic_fetch_inc(count);
545
+ else
546
+ val = atomic_read(count);
547
+
548
+ if (val)
549
+ trace_seq_printf(p, "(%d:%lu)", i, val);
550
+ }
551
+ trace_seq_putc(p, 0);
552
+ return ret;
553
+}
554
+
397555 __hfi1_trace_fn(AFFINITY);
398556 __hfi1_trace_fn(PKT);
399557 __hfi1_trace_fn(PROC);