^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) /*
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2) * Copyright(c) 2015 - 2020 Intel Corporation.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) * This file is provided under a dual BSD/GPLv2 license. When using or
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) * redistributing this file, you may do so under either license.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) * GPL LICENSE SUMMARY
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9) * This program is free software; you can redistribute it and/or modify
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) * it under the terms of version 2 of the GNU General Public License as
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) * published by the Free Software Foundation.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13) * This program is distributed in the hope that it will be useful, but
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) * WITHOUT ANY WARRANTY; without even the implied warranty of
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) * General Public License for more details.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) * BSD LICENSE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) * Redistribution and use in source and binary forms, with or without
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) * modification, are permitted provided that the following conditions
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) * are met:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) * - Redistributions of source code must retain the above copyright
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) * notice, this list of conditions and the following disclaimer.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) * - Redistributions in binary form must reproduce the above copyright
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) * notice, this list of conditions and the following disclaimer in
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) * the documentation and/or other materials provided with the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) * distribution.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) * - Neither the name of Intel Corporation nor the names of its
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) * contributors may be used to endorse or promote products derived
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) * from this software without specific prior written permission.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) #define CREATE_TRACE_POINTS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) #include "trace.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) #include "exp_rcv.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) #include "ipoib.h"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) static u8 __get_ib_hdr_len(struct ib_header *hdr)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) struct ib_other_headers *ohdr;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) u8 opcode;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) if (ib_get_lnh(hdr) == HFI1_LRH_BTH)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) ohdr = &hdr->u.oth;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) ohdr = &hdr->u.l.oth;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) opcode = ib_bth_get_opcode(ohdr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) return hdr_len_by_opcode[opcode] == 0 ?
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) 0 : hdr_len_by_opcode[opcode] - (12 + 8);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) static u8 __get_16b_hdr_len(struct hfi1_16b_header *hdr)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) struct ib_other_headers *ohdr = NULL;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) u8 opcode;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70) u8 l4 = hfi1_16B_get_l4(hdr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) if (l4 == OPA_16B_L4_FM) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73) opcode = IB_OPCODE_UD_SEND_ONLY;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) return (8 + 8); /* No BTH */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) if (l4 == OPA_16B_L4_IB_LOCAL)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78) ohdr = &hdr->u.oth;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) ohdr = &hdr->u.l.oth;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) opcode = ib_bth_get_opcode(ohdr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) return hdr_len_by_opcode[opcode] == 0 ?
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84) 0 : hdr_len_by_opcode[opcode] - (12 + 8 + 8);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87) u8 hfi1_trace_packet_hdr_len(struct hfi1_packet *packet)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) if (packet->etype != RHF_RCV_TYPE_BYPASS)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90) return __get_ib_hdr_len(packet->hdr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91) else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) return __get_16b_hdr_len(packet->hdr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95) u8 hfi1_trace_opa_hdr_len(struct hfi1_opa_header *opa_hdr)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97) if (!opa_hdr->hdr_type)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98) return __get_ib_hdr_len(&opa_hdr->ibh);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99) else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) return __get_16b_hdr_len(&opa_hdr->opah);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) const char *hfi1_trace_get_packet_l4_str(u8 l4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) if (l4)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) return "16B";
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) return "9B";
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) const char *hfi1_trace_get_packet_l2_str(u8 l2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) switch (l2) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) case 0:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) return "0";
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) case 1:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) return "1";
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) case 2:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) return "16B";
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) case 3:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) return "9B";
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) return "";
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) #define IMM_PRN "imm:%d"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) #define RETH_PRN "reth vaddr:0x%.16llx rkey:0x%.8x dlen:0x%.8x"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) #define AETH_PRN "aeth syn:0x%.2x %s msn:0x%.8x"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) #define DETH_PRN "deth qkey:0x%.8x sqpn:0x%.6x"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) #define DETH_ENTROPY_PRN "deth qkey:0x%.8x sqpn:0x%.6x entropy:0x%.2x"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) #define IETH_PRN "ieth rkey:0x%.8x"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) #define ATOMICACKETH_PRN "origdata:%llx"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) #define ATOMICETH_PRN "vaddr:0x%llx rkey:0x%.8x sdata:%llx cdata:%llx"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) #define TID_RDMA_KDETH "kdeth0 0x%x kdeth1 0x%x"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 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"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) #define TID_READ_REQ_PRN "tid_flow_psn 0x%x tid_flow_qp 0x%x verbs_qp 0x%x"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) #define TID_READ_RSP_PRN "verbs_qp 0x%x"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) #define TID_WRITE_REQ_PRN "original_qp 0x%x"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) #define TID_WRITE_RSP_PRN "tid_flow_psn 0x%x tid_flow_qp 0x%x verbs_qp 0x%x"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) #define TID_WRITE_DATA_PRN "verbs_qp 0x%x"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) #define TID_ACK_PRN "tid_flow_psn 0x%x verbs_psn 0x%x tid_flow_qp 0x%x verbs_qp 0x%x"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) #define TID_RESYNC_PRN "verbs_qp 0x%x"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) #define OP(transport, op) IB_OPCODE_## transport ## _ ## op
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) static const char *parse_syndrome(u8 syndrome)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) switch (syndrome >> 5) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) case 0:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) return "ACK";
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) case 1:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) return "RNRNAK";
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153) case 3:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) return "NAK";
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) return "";
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) void hfi1_trace_parse_9b_bth(struct ib_other_headers *ohdr,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160) u8 *ack, bool *becn, bool *fecn, u8 *mig,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) u8 *se, u8 *pad, u8 *opcode, u8 *tver,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) u16 *pkey, u32 *psn, u32 *qpn)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) *ack = ib_bth_get_ackreq(ohdr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) *becn = ib_bth_get_becn(ohdr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166) *fecn = ib_bth_get_fecn(ohdr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) *mig = ib_bth_get_migreq(ohdr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) *se = ib_bth_get_se(ohdr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169) *pad = ib_bth_get_pad(ohdr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) *opcode = ib_bth_get_opcode(ohdr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) *tver = ib_bth_get_tver(ohdr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172) *pkey = ib_bth_get_pkey(ohdr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) *psn = mask_psn(ib_bth_get_psn(ohdr));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) *qpn = ib_bth_get_qpn(ohdr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) void hfi1_trace_parse_16b_bth(struct ib_other_headers *ohdr,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) u8 *ack, u8 *mig, u8 *opcode,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179) u8 *pad, u8 *se, u8 *tver,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) u32 *psn, u32 *qpn)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) *ack = ib_bth_get_ackreq(ohdr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183) *mig = ib_bth_get_migreq(ohdr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) *opcode = ib_bth_get_opcode(ohdr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) *pad = ib_bth_get_pad(ohdr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) *se = ib_bth_get_se(ohdr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187) *tver = ib_bth_get_tver(ohdr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) *psn = mask_psn(ib_bth_get_psn(ohdr));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) *qpn = ib_bth_get_qpn(ohdr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) void hfi1_trace_parse_9b_hdr(struct ib_header *hdr, bool sc5,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) u8 *lnh, u8 *lver, u8 *sl, u8 *sc,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194) u16 *len, u32 *dlid, u32 *slid)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) *lnh = ib_get_lnh(hdr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) *lver = ib_get_lver(hdr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) *sl = ib_get_sl(hdr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) *sc = ib_get_sc(hdr) | (sc5 << 4);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200) *len = ib_get_len(hdr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) *dlid = ib_get_dlid(hdr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) *slid = ib_get_slid(hdr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205) void hfi1_trace_parse_16b_hdr(struct hfi1_16b_header *hdr,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206) u8 *age, bool *becn, bool *fecn,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207) u8 *l4, u8 *rc, u8 *sc,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) u16 *entropy, u16 *len, u16 *pkey,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) u32 *dlid, u32 *slid)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211) *age = hfi1_16B_get_age(hdr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212) *becn = hfi1_16B_get_becn(hdr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213) *fecn = hfi1_16B_get_fecn(hdr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214) *l4 = hfi1_16B_get_l4(hdr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215) *rc = hfi1_16B_get_rc(hdr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216) *sc = hfi1_16B_get_sc(hdr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217) *entropy = hfi1_16B_get_entropy(hdr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218) *len = hfi1_16B_get_len(hdr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219) *pkey = hfi1_16B_get_pkey(hdr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220) *dlid = hfi1_16B_get_dlid(hdr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221) *slid = hfi1_16B_get_slid(hdr);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224) #define LRH_PRN "len:%d sc:%d dlid:0x%.4x slid:0x%.4x "
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225) #define LRH_9B_PRN "lnh:%d,%s lver:%d sl:%d"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226) #define LRH_16B_PRN "age:%d becn:%d fecn:%d l4:%d " \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227) "rc:%d sc:%d pkey:0x%.4x entropy:0x%.4x"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228) const char *hfi1_trace_fmt_lrh(struct trace_seq *p, bool bypass,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229) u8 age, bool becn, bool fecn, u8 l4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230) u8 lnh, const char *lnh_name, u8 lver,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231) u8 rc, u8 sc, u8 sl, u16 entropy,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 232) u16 len, u16 pkey, u32 dlid, u32 slid)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 233) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 234) const char *ret = trace_seq_buffer_ptr(p);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 235)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 236) trace_seq_printf(p, LRH_PRN, len, sc, dlid, slid);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 237)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 238) if (bypass)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 239) trace_seq_printf(p, LRH_16B_PRN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 240) age, becn, fecn, l4, rc, sc, pkey, entropy);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 241)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 242) else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 243) trace_seq_printf(p, LRH_9B_PRN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 244) lnh, lnh_name, lver, sl);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 245) trace_seq_putc(p, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 246)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 247) return ret;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 248) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 249)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 250) #define BTH_9B_PRN \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 251) "op:0x%.2x,%s se:%d m:%d pad:%d tver:%d pkey:0x%.4x " \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 252) "f:%d b:%d qpn:0x%.6x a:%d psn:0x%.8x"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 253) #define BTH_16B_PRN \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 254) "op:0x%.2x,%s se:%d m:%d pad:%d tver:%d " \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 255) "qpn:0x%.6x a:%d psn:0x%.8x"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 256) #define L4_FM_16B_PRN \
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 257) "op:0x%.2x,%s dest_qpn:0x%.6x src_qpn:0x%.6x"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 258) const char *hfi1_trace_fmt_rest(struct trace_seq *p, bool bypass, u8 l4,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 259) u8 ack, bool becn, bool fecn, u8 mig,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 260) u8 se, u8 pad, u8 opcode, const char *opname,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 261) u8 tver, u16 pkey, u32 psn, u32 qpn,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 262) u32 dest_qpn, u32 src_qpn)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 263) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 264) const char *ret = trace_seq_buffer_ptr(p);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 265)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 266) if (bypass)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 267) if (l4 == OPA_16B_L4_FM)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 268) trace_seq_printf(p, L4_FM_16B_PRN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 269) opcode, opname, dest_qpn, src_qpn);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 270) else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 271) trace_seq_printf(p, BTH_16B_PRN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 272) opcode, opname,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 273) se, mig, pad, tver, qpn, ack, psn);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 274)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 275) else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 276) trace_seq_printf(p, BTH_9B_PRN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 277) opcode, opname,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 278) se, mig, pad, tver, pkey, fecn, becn,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 279) qpn, ack, psn);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 280) trace_seq_putc(p, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 281)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 282) return ret;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 283) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 284)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 285) const char *parse_everbs_hdrs(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 286) struct trace_seq *p,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 287) u8 opcode, u8 l4, u32 dest_qpn, u32 src_qpn,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 288) void *ehdrs)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 289) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 290) union ib_ehdrs *eh = ehdrs;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 291) const char *ret = trace_seq_buffer_ptr(p);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 292)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 293) if (l4 == OPA_16B_L4_FM) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 294) trace_seq_printf(p, "mgmt pkt");
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 295) goto out;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 296) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 297)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 298) switch (opcode) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 299) /* imm */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 300) case OP(RC, SEND_LAST_WITH_IMMEDIATE):
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 301) case OP(UC, SEND_LAST_WITH_IMMEDIATE):
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 302) case OP(RC, SEND_ONLY_WITH_IMMEDIATE):
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 303) case OP(UC, SEND_ONLY_WITH_IMMEDIATE):
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 304) case OP(RC, RDMA_WRITE_LAST_WITH_IMMEDIATE):
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 305) case OP(UC, RDMA_WRITE_LAST_WITH_IMMEDIATE):
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 306) trace_seq_printf(p, IMM_PRN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 307) be32_to_cpu(eh->imm_data));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 308) break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 309) /* reth + imm */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 310) case OP(RC, RDMA_WRITE_ONLY_WITH_IMMEDIATE):
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 311) case OP(UC, RDMA_WRITE_ONLY_WITH_IMMEDIATE):
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 312) trace_seq_printf(p, RETH_PRN " " IMM_PRN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 313) get_ib_reth_vaddr(&eh->rc.reth),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 314) be32_to_cpu(eh->rc.reth.rkey),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 315) be32_to_cpu(eh->rc.reth.length),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 316) be32_to_cpu(eh->rc.imm_data));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 317) break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 318) /* reth */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 319) case OP(RC, RDMA_READ_REQUEST):
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 320) case OP(RC, RDMA_WRITE_FIRST):
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 321) case OP(UC, RDMA_WRITE_FIRST):
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 322) case OP(RC, RDMA_WRITE_ONLY):
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 323) case OP(UC, RDMA_WRITE_ONLY):
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 324) trace_seq_printf(p, RETH_PRN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 325) get_ib_reth_vaddr(&eh->rc.reth),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 326) be32_to_cpu(eh->rc.reth.rkey),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 327) be32_to_cpu(eh->rc.reth.length));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 328) break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 329) case OP(RC, RDMA_READ_RESPONSE_FIRST):
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 330) case OP(RC, RDMA_READ_RESPONSE_LAST):
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 331) case OP(RC, RDMA_READ_RESPONSE_ONLY):
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 332) case OP(RC, ACKNOWLEDGE):
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 333) trace_seq_printf(p, AETH_PRN, be32_to_cpu(eh->aeth) >> 24,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 334) parse_syndrome(be32_to_cpu(eh->aeth) >> 24),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 335) be32_to_cpu(eh->aeth) & IB_MSN_MASK);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 336) break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 337) case OP(TID_RDMA, WRITE_REQ):
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 338) trace_seq_printf(p, TID_RDMA_KDETH " " RETH_PRN " "
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 339) TID_WRITE_REQ_PRN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 340) le32_to_cpu(eh->tid_rdma.w_req.kdeth0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 341) le32_to_cpu(eh->tid_rdma.w_req.kdeth1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 342) ib_u64_get(&eh->tid_rdma.w_req.reth.vaddr),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 343) be32_to_cpu(eh->tid_rdma.w_req.reth.rkey),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 344) be32_to_cpu(eh->tid_rdma.w_req.reth.length),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 345) be32_to_cpu(eh->tid_rdma.w_req.verbs_qp));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 346) break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 347) case OP(TID_RDMA, WRITE_RESP):
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 348) trace_seq_printf(p, TID_RDMA_KDETH " " AETH_PRN " "
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 349) TID_WRITE_RSP_PRN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 350) le32_to_cpu(eh->tid_rdma.w_rsp.kdeth0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 351) le32_to_cpu(eh->tid_rdma.w_rsp.kdeth1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 352) be32_to_cpu(eh->tid_rdma.w_rsp.aeth) >> 24,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 353) parse_syndrome(/* aeth */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 354) be32_to_cpu(eh->tid_rdma.w_rsp.aeth)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 355) >> 24),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 356) (be32_to_cpu(eh->tid_rdma.w_rsp.aeth) &
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 357) IB_MSN_MASK),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 358) be32_to_cpu(eh->tid_rdma.w_rsp.tid_flow_psn),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 359) be32_to_cpu(eh->tid_rdma.w_rsp.tid_flow_qp),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 360) be32_to_cpu(eh->tid_rdma.w_rsp.verbs_qp));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 361) break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 362) case OP(TID_RDMA, WRITE_DATA_LAST):
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 363) case OP(TID_RDMA, WRITE_DATA):
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 364) trace_seq_printf(p, TID_RDMA_KDETH_DATA " " TID_WRITE_DATA_PRN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 365) le32_to_cpu(eh->tid_rdma.w_data.kdeth0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 366) KDETH_GET(eh->tid_rdma.w_data.kdeth0, KVER),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 367) KDETH_GET(eh->tid_rdma.w_data.kdeth0, SH),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 368) KDETH_GET(eh->tid_rdma.w_data.kdeth0, INTR),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 369) KDETH_GET(eh->tid_rdma.w_data.kdeth0, TIDCTRL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 370) KDETH_GET(eh->tid_rdma.w_data.kdeth0, TID),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 371) KDETH_GET(eh->tid_rdma.w_data.kdeth0, OFFSET),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 372) le32_to_cpu(eh->tid_rdma.w_data.kdeth1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 373) KDETH_GET(eh->tid_rdma.w_data.kdeth1, JKEY),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 374) be32_to_cpu(eh->tid_rdma.w_data.verbs_qp));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 375) break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 376) case OP(TID_RDMA, READ_REQ):
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 377) trace_seq_printf(p, TID_RDMA_KDETH " " RETH_PRN " "
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 378) TID_READ_REQ_PRN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 379) le32_to_cpu(eh->tid_rdma.r_req.kdeth0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 380) le32_to_cpu(eh->tid_rdma.r_req.kdeth1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 381) ib_u64_get(&eh->tid_rdma.r_req.reth.vaddr),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 382) be32_to_cpu(eh->tid_rdma.r_req.reth.rkey),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 383) be32_to_cpu(eh->tid_rdma.r_req.reth.length),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 384) be32_to_cpu(eh->tid_rdma.r_req.tid_flow_psn),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 385) be32_to_cpu(eh->tid_rdma.r_req.tid_flow_qp),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 386) be32_to_cpu(eh->tid_rdma.r_req.verbs_qp));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 387) break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 388) case OP(TID_RDMA, READ_RESP):
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 389) trace_seq_printf(p, TID_RDMA_KDETH_DATA " " AETH_PRN " "
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 390) TID_READ_RSP_PRN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 391) le32_to_cpu(eh->tid_rdma.r_rsp.kdeth0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 392) KDETH_GET(eh->tid_rdma.r_rsp.kdeth0, KVER),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 393) KDETH_GET(eh->tid_rdma.r_rsp.kdeth0, SH),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 394) KDETH_GET(eh->tid_rdma.r_rsp.kdeth0, INTR),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 395) KDETH_GET(eh->tid_rdma.r_rsp.kdeth0, TIDCTRL),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 396) KDETH_GET(eh->tid_rdma.r_rsp.kdeth0, TID),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 397) KDETH_GET(eh->tid_rdma.r_rsp.kdeth0, OFFSET),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 398) le32_to_cpu(eh->tid_rdma.r_rsp.kdeth1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 399) KDETH_GET(eh->tid_rdma.r_rsp.kdeth1, JKEY),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 400) be32_to_cpu(eh->tid_rdma.r_rsp.aeth) >> 24,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 401) parse_syndrome(/* aeth */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 402) be32_to_cpu(eh->tid_rdma.r_rsp.aeth)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 403) >> 24),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 404) (be32_to_cpu(eh->tid_rdma.r_rsp.aeth) &
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 405) IB_MSN_MASK),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 406) be32_to_cpu(eh->tid_rdma.r_rsp.verbs_qp));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 407) break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 408) case OP(TID_RDMA, ACK):
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 409) trace_seq_printf(p, TID_RDMA_KDETH " " AETH_PRN " "
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 410) TID_ACK_PRN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 411) le32_to_cpu(eh->tid_rdma.ack.kdeth0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 412) le32_to_cpu(eh->tid_rdma.ack.kdeth1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 413) be32_to_cpu(eh->tid_rdma.ack.aeth) >> 24,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 414) parse_syndrome(/* aeth */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 415) be32_to_cpu(eh->tid_rdma.ack.aeth)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 416) >> 24),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 417) (be32_to_cpu(eh->tid_rdma.ack.aeth) &
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 418) IB_MSN_MASK),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 419) be32_to_cpu(eh->tid_rdma.ack.tid_flow_psn),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 420) be32_to_cpu(eh->tid_rdma.ack.verbs_psn),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 421) be32_to_cpu(eh->tid_rdma.ack.tid_flow_qp),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 422) be32_to_cpu(eh->tid_rdma.ack.verbs_qp));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 423) break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 424) case OP(TID_RDMA, RESYNC):
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 425) trace_seq_printf(p, TID_RDMA_KDETH " " TID_RESYNC_PRN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 426) le32_to_cpu(eh->tid_rdma.resync.kdeth0),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 427) le32_to_cpu(eh->tid_rdma.resync.kdeth1),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 428) be32_to_cpu(eh->tid_rdma.resync.verbs_qp));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 429) break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 430) /* aeth + atomicacketh */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 431) case OP(RC, ATOMIC_ACKNOWLEDGE):
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 432) trace_seq_printf(p, AETH_PRN " " ATOMICACKETH_PRN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 433) be32_to_cpu(eh->at.aeth) >> 24,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 434) parse_syndrome(be32_to_cpu(eh->at.aeth) >> 24),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 435) be32_to_cpu(eh->at.aeth) & IB_MSN_MASK,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 436) ib_u64_get(&eh->at.atomic_ack_eth));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 437) break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 438) /* atomiceth */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 439) case OP(RC, COMPARE_SWAP):
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 440) case OP(RC, FETCH_ADD):
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 441) trace_seq_printf(p, ATOMICETH_PRN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 442) get_ib_ateth_vaddr(&eh->atomic_eth),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 443) eh->atomic_eth.rkey,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 444) get_ib_ateth_swap(&eh->atomic_eth),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 445) get_ib_ateth_compare(&eh->atomic_eth));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 446) break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 447) /* deth */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 448) case OP(UD, SEND_ONLY):
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 449) trace_seq_printf(p, DETH_ENTROPY_PRN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 450) be32_to_cpu(eh->ud.deth[0]),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 451) be32_to_cpu(eh->ud.deth[1]) & RVT_QPN_MASK,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 452) be32_to_cpu(eh->ud.deth[1]) >>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 453) HFI1_IPOIB_ENTROPY_SHIFT);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 454) break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 455) case OP(UD, SEND_ONLY_WITH_IMMEDIATE):
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 456) trace_seq_printf(p, DETH_PRN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 457) be32_to_cpu(eh->ud.deth[0]),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 458) be32_to_cpu(eh->ud.deth[1]) & RVT_QPN_MASK);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 459) break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 460) /* ieth */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 461) case OP(RC, SEND_LAST_WITH_INVALIDATE):
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 462) case OP(RC, SEND_ONLY_WITH_INVALIDATE):
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 463) trace_seq_printf(p, IETH_PRN,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 464) be32_to_cpu(eh->ieth));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 465) break;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 466) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 467) out:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 468) trace_seq_putc(p, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 469) return ret;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 470) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 471)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 472) const char *parse_sdma_flags(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 473) struct trace_seq *p,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 474) u64 desc0, u64 desc1)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 475) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 476) const char *ret = trace_seq_buffer_ptr(p);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 477) char flags[5] = { 'x', 'x', 'x', 'x', 0 };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 478)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 479) flags[0] = (desc1 & SDMA_DESC1_INT_REQ_FLAG) ? 'I' : '-';
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 480) flags[1] = (desc1 & SDMA_DESC1_HEAD_TO_HOST_FLAG) ? 'H' : '-';
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 481) flags[2] = (desc0 & SDMA_DESC0_FIRST_DESC_FLAG) ? 'F' : '-';
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 482) flags[3] = (desc0 & SDMA_DESC0_LAST_DESC_FLAG) ? 'L' : '-';
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 483) trace_seq_printf(p, "%s", flags);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 484) if (desc0 & SDMA_DESC0_FIRST_DESC_FLAG)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 485) trace_seq_printf(p, " amode:%u aidx:%u alen:%u",
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 486) (u8)((desc1 >> SDMA_DESC1_HEADER_MODE_SHIFT) &
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 487) SDMA_DESC1_HEADER_MODE_MASK),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 488) (u8)((desc1 >> SDMA_DESC1_HEADER_INDEX_SHIFT) &
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 489) SDMA_DESC1_HEADER_INDEX_MASK),
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 490) (u8)((desc1 >> SDMA_DESC1_HEADER_DWS_SHIFT) &
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 491) SDMA_DESC1_HEADER_DWS_MASK));
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 492) return ret;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 493) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 494)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 495) const char *print_u32_array(
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 496) struct trace_seq *p,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 497) u32 *arr, int len)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 498) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 499) int i;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 500) const char *ret = trace_seq_buffer_ptr(p);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 501)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 502) for (i = 0; i < len ; i++)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 503) trace_seq_printf(p, "%s%#x", i == 0 ? "" : " ", arr[i]);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 504) trace_seq_putc(p, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 505) return ret;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 506) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 507)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 508) u8 hfi1_trace_get_tid_ctrl(u32 ent)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 509) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 510) return EXP_TID_GET(ent, CTRL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 511) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 512)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 513) u16 hfi1_trace_get_tid_len(u32 ent)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 514) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 515) return EXP_TID_GET(ent, LEN);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 516) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 517)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 518) u16 hfi1_trace_get_tid_idx(u32 ent)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 519) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 520) return EXP_TID_GET(ent, IDX);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 521) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 522)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 523) struct hfi1_ctxt_hist {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 524) atomic_t count;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 525) atomic_t data[255];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 526) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 527)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 528) struct hfi1_ctxt_hist hist = {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 529) .count = ATOMIC_INIT(0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 530) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 531)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 532) const char *hfi1_trace_print_rsm_hist(struct trace_seq *p, unsigned int ctxt)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 533) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 534) int i, len = ARRAY_SIZE(hist.data);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 535) const char *ret = trace_seq_buffer_ptr(p);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 536) unsigned long packet_count = atomic_fetch_inc(&hist.count);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 537)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 538) trace_seq_printf(p, "packet[%lu]", packet_count);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 539) for (i = 0; i < len; ++i) {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 540) unsigned long val;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 541) atomic_t *count = &hist.data[i];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 542)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 543) if (ctxt == i)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 544) val = atomic_fetch_inc(count);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 545) else
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 546) val = atomic_read(count);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 547)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 548) if (val)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 549) trace_seq_printf(p, "(%d:%lu)", i, val);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 550) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 551) trace_seq_putc(p, 0);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 552) return ret;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 553) }
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 554)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 555) __hfi1_trace_fn(AFFINITY);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 556) __hfi1_trace_fn(PKT);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 557) __hfi1_trace_fn(PROC);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 558) __hfi1_trace_fn(SDMA);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 559) __hfi1_trace_fn(LINKVERB);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 560) __hfi1_trace_fn(DEBUG);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 561) __hfi1_trace_fn(SNOOP);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 562) __hfi1_trace_fn(CNTR);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 563) __hfi1_trace_fn(PIO);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 564) __hfi1_trace_fn(DC8051);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 565) __hfi1_trace_fn(FIRMWARE);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 566) __hfi1_trace_fn(RCVCTRL);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 567) __hfi1_trace_fn(TID);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 568) __hfi1_trace_fn(MMU);
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 569) __hfi1_trace_fn(IOCTL);