cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

ib_mad.h (12960B)


      1/* SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB */
      2
      3/*
      4 * Copyright (c) 2018 Intel Corporation.  All rights reserved.
      5 */
      6
      7#undef TRACE_SYSTEM
      8#define TRACE_SYSTEM ib_mad
      9
     10#if !defined(_TRACE_IB_MAD_H) || defined(TRACE_HEADER_MULTI_READ)
     11#define _TRACE_IB_MAD_H
     12
     13#include <linux/tracepoint.h>
     14#include <rdma/ib_mad.h>
     15
     16#ifdef CONFIG_TRACEPOINTS
     17struct trace_event_raw_ib_mad_send_template;
     18static void create_mad_addr_info(struct ib_mad_send_wr_private *mad_send_wr,
     19			  struct ib_mad_qp_info *qp_info,
     20			  struct trace_event_raw_ib_mad_send_template *entry);
     21#endif
     22
     23DECLARE_EVENT_CLASS(ib_mad_send_template,
     24	TP_PROTO(struct ib_mad_send_wr_private *wr,
     25		 struct ib_mad_qp_info *qp_info),
     26	TP_ARGS(wr, qp_info),
     27
     28	TP_STRUCT__entry(
     29		__field(u8,             base_version)
     30		__field(u8,             mgmt_class)
     31		__field(u8,             class_version)
     32		__field(u8,             port_num)
     33		__field(u32,            qp_num)
     34		__field(u8,             method)
     35		__field(u8,             sl)
     36		__field(u16,            attr_id)
     37		__field(u32,            attr_mod)
     38		__field(u64,            wrtid)
     39		__field(u64,            tid)
     40		__field(u16,            status)
     41		__field(u16,            class_specific)
     42		__field(u32,            length)
     43		__field(u32,            dlid)
     44		__field(u32,            rqpn)
     45		__field(u32,            rqkey)
     46		__field(u32,            dev_index)
     47		__field(void *,         agent_priv)
     48		__field(unsigned long,  timeout)
     49		__field(int,            retries_left)
     50		__field(int,            max_retries)
     51		__field(int,            retry)
     52		__field(u16,            pkey)
     53	),
     54
     55	TP_fast_assign(
     56		__entry->dev_index = wr->mad_agent_priv->agent.device->index;
     57		__entry->port_num = wr->mad_agent_priv->agent.port_num;
     58		__entry->qp_num = wr->mad_agent_priv->qp_info->qp->qp_num;
     59		__entry->agent_priv = wr->mad_agent_priv;
     60		__entry->wrtid = wr->tid;
     61		__entry->max_retries = wr->max_retries;
     62		__entry->retries_left = wr->retries_left;
     63		__entry->retry = wr->retry;
     64		__entry->timeout = wr->timeout;
     65		__entry->length = wr->send_buf.hdr_len +
     66				  wr->send_buf.data_len;
     67		__entry->base_version =
     68			((struct ib_mad_hdr *)wr->send_buf.mad)->base_version;
     69		__entry->mgmt_class =
     70			((struct ib_mad_hdr *)wr->send_buf.mad)->mgmt_class;
     71		__entry->class_version =
     72			((struct ib_mad_hdr *)wr->send_buf.mad)->class_version;
     73		__entry->method =
     74			((struct ib_mad_hdr *)wr->send_buf.mad)->method;
     75		__entry->status =
     76			((struct ib_mad_hdr *)wr->send_buf.mad)->status;
     77		__entry->class_specific =
     78			((struct ib_mad_hdr *)wr->send_buf.mad)->class_specific;
     79		__entry->tid = ((struct ib_mad_hdr *)wr->send_buf.mad)->tid;
     80		__entry->attr_id =
     81			((struct ib_mad_hdr *)wr->send_buf.mad)->attr_id;
     82		__entry->attr_mod =
     83			((struct ib_mad_hdr *)wr->send_buf.mad)->attr_mod;
     84		create_mad_addr_info(wr, qp_info, __entry);
     85	),
     86
     87	TP_printk("%d:%d QP%d agent %p: " \
     88		  "wrtid 0x%llx; %d/%d retries(%d); timeout %lu length %d : " \
     89		  "hdr : base_ver 0x%x class 0x%x class_ver 0x%x " \
     90		  "method 0x%x status 0x%x class_specific 0x%x tid 0x%llx " \
     91		  "attr_id 0x%x attr_mod 0x%x  => dlid 0x%08x sl %d "\
     92		  "pkey 0x%x rpqn 0x%x rqpkey 0x%x",
     93		__entry->dev_index, __entry->port_num, __entry->qp_num,
     94		__entry->agent_priv, be64_to_cpu(__entry->wrtid),
     95		__entry->retries_left, __entry->max_retries,
     96		__entry->retry, __entry->timeout, __entry->length,
     97		__entry->base_version, __entry->mgmt_class,
     98		__entry->class_version,
     99		__entry->method, be16_to_cpu(__entry->status),
    100		be16_to_cpu(__entry->class_specific),
    101		be64_to_cpu(__entry->tid), be16_to_cpu(__entry->attr_id),
    102		be32_to_cpu(__entry->attr_mod),
    103		be32_to_cpu(__entry->dlid), __entry->sl, __entry->pkey,
    104		__entry->rqpn, __entry->rqkey
    105	)
    106);
    107
    108DEFINE_EVENT(ib_mad_send_template, ib_mad_error_handler,
    109	TP_PROTO(struct ib_mad_send_wr_private *wr,
    110		 struct ib_mad_qp_info *qp_info),
    111	TP_ARGS(wr, qp_info));
    112DEFINE_EVENT(ib_mad_send_template, ib_mad_ib_send_mad,
    113	TP_PROTO(struct ib_mad_send_wr_private *wr,
    114		 struct ib_mad_qp_info *qp_info),
    115	TP_ARGS(wr, qp_info));
    116DEFINE_EVENT(ib_mad_send_template, ib_mad_send_done_resend,
    117	TP_PROTO(struct ib_mad_send_wr_private *wr,
    118		 struct ib_mad_qp_info *qp_info),
    119	TP_ARGS(wr, qp_info));
    120
    121TRACE_EVENT(ib_mad_send_done_handler,
    122	TP_PROTO(struct ib_mad_send_wr_private *wr, struct ib_wc *wc),
    123	TP_ARGS(wr, wc),
    124
    125	TP_STRUCT__entry(
    126		__field(u8,             port_num)
    127		__field(u8,             base_version)
    128		__field(u8,             mgmt_class)
    129		__field(u8,             class_version)
    130		__field(u32,            qp_num)
    131		__field(u64,            wrtid)
    132		__field(u16,            status)
    133		__field(u16,            wc_status)
    134		__field(u32,            length)
    135		__field(void *,         agent_priv)
    136		__field(unsigned long,  timeout)
    137		__field(u32,            dev_index)
    138		__field(int,            retries_left)
    139		__field(int,            max_retries)
    140		__field(int,            retry)
    141		__field(u8,             method)
    142	),
    143
    144	TP_fast_assign(
    145		__entry->dev_index = wr->mad_agent_priv->agent.device->index;
    146		__entry->port_num = wr->mad_agent_priv->agent.port_num;
    147		__entry->qp_num = wr->mad_agent_priv->qp_info->qp->qp_num;
    148		__entry->agent_priv = wr->mad_agent_priv;
    149		__entry->wrtid = wr->tid;
    150		__entry->max_retries = wr->max_retries;
    151		__entry->retries_left = wr->retries_left;
    152		__entry->retry = wr->retry;
    153		__entry->timeout = wr->timeout;
    154		__entry->base_version =
    155			((struct ib_mad_hdr *)wr->send_buf.mad)->base_version;
    156		__entry->mgmt_class =
    157			((struct ib_mad_hdr *)wr->send_buf.mad)->mgmt_class;
    158		__entry->class_version =
    159			((struct ib_mad_hdr *)wr->send_buf.mad)->class_version;
    160		__entry->method =
    161			((struct ib_mad_hdr *)wr->send_buf.mad)->method;
    162		__entry->status =
    163			((struct ib_mad_hdr *)wr->send_buf.mad)->status;
    164		__entry->wc_status = wc->status;
    165		__entry->length = wc->byte_len;
    166	),
    167
    168	TP_printk("%d:%d QP%d : SEND WC Status %d : agent %p: " \
    169		  "wrtid 0x%llx %d/%d retries(%d) timeout %lu length %d: " \
    170		  "hdr : base_ver 0x%x class 0x%x class_ver 0x%x " \
    171		  "method 0x%x status 0x%x",
    172		__entry->dev_index, __entry->port_num, __entry->qp_num,
    173		__entry->wc_status,
    174		__entry->agent_priv, be64_to_cpu(__entry->wrtid),
    175		__entry->retries_left, __entry->max_retries,
    176		__entry->retry, __entry->timeout,
    177		__entry->length,
    178		__entry->base_version, __entry->mgmt_class,
    179		__entry->class_version, __entry->method,
    180		be16_to_cpu(__entry->status)
    181	)
    182);
    183
    184TRACE_EVENT(ib_mad_recv_done_handler,
    185	TP_PROTO(struct ib_mad_qp_info *qp_info, struct ib_wc *wc,
    186		 struct ib_mad_hdr *mad_hdr),
    187	TP_ARGS(qp_info, wc, mad_hdr),
    188
    189	TP_STRUCT__entry(
    190		__field(u8,             base_version)
    191		__field(u8,             mgmt_class)
    192		__field(u8,             class_version)
    193		__field(u8,             port_num)
    194		__field(u32,            qp_num)
    195		__field(u16,            status)
    196		__field(u16,            class_specific)
    197		__field(u32,            length)
    198		__field(u64,            tid)
    199		__field(u8,             method)
    200		__field(u8,             sl)
    201		__field(u16,            attr_id)
    202		__field(u32,            attr_mod)
    203		__field(u16,            src_qp)
    204		__field(u16,            wc_status)
    205		__field(u32,            slid)
    206		__field(u32,            dev_index)
    207		__field(u16,            pkey)
    208	),
    209
    210	TP_fast_assign(
    211		__entry->dev_index = qp_info->port_priv->device->index;
    212		__entry->port_num = qp_info->port_priv->port_num;
    213		__entry->qp_num = qp_info->qp->qp_num;
    214		__entry->length = wc->byte_len;
    215		__entry->base_version = mad_hdr->base_version;
    216		__entry->mgmt_class = mad_hdr->mgmt_class;
    217		__entry->class_version = mad_hdr->class_version;
    218		__entry->method = mad_hdr->method;
    219		__entry->status = mad_hdr->status;
    220		__entry->class_specific = mad_hdr->class_specific;
    221		__entry->tid = mad_hdr->tid;
    222		__entry->attr_id = mad_hdr->attr_id;
    223		__entry->attr_mod = mad_hdr->attr_mod;
    224		__entry->slid = wc->slid;
    225		__entry->src_qp = wc->src_qp;
    226		__entry->sl = wc->sl;
    227		ib_query_pkey(qp_info->port_priv->device,
    228			      qp_info->port_priv->port_num,
    229			      wc->pkey_index, &__entry->pkey);
    230		__entry->wc_status = wc->status;
    231	),
    232
    233	TP_printk("%d:%d QP%d : RECV WC Status %d : length %d : hdr : " \
    234		  "base_ver 0x%02x class 0x%02x class_ver 0x%02x " \
    235		  "method 0x%02x status 0x%04x class_specific 0x%04x " \
    236		  "tid 0x%016llx attr_id 0x%04x attr_mod 0x%08x " \
    237		  "slid 0x%08x src QP%d, sl %d pkey 0x%04x",
    238		__entry->dev_index, __entry->port_num, __entry->qp_num,
    239		__entry->wc_status,
    240		__entry->length,
    241		__entry->base_version, __entry->mgmt_class,
    242		__entry->class_version, __entry->method,
    243		be16_to_cpu(__entry->status),
    244		be16_to_cpu(__entry->class_specific),
    245		be64_to_cpu(__entry->tid), be16_to_cpu(__entry->attr_id),
    246		be32_to_cpu(__entry->attr_mod),
    247		__entry->slid, __entry->src_qp, __entry->sl, __entry->pkey
    248	)
    249);
    250
    251DECLARE_EVENT_CLASS(ib_mad_agent_template,
    252	TP_PROTO(struct ib_mad_agent_private *agent),
    253	TP_ARGS(agent),
    254
    255	TP_STRUCT__entry(
    256		__field(u32,            dev_index)
    257		__field(u32,            hi_tid)
    258		__field(u8,             port_num)
    259		__field(u8,             mgmt_class)
    260		__field(u8,             mgmt_class_version)
    261	),
    262
    263	TP_fast_assign(
    264		__entry->dev_index = agent->agent.device->index;
    265		__entry->port_num = agent->agent.port_num;
    266		__entry->hi_tid = agent->agent.hi_tid;
    267
    268		if (agent->reg_req) {
    269			__entry->mgmt_class = agent->reg_req->mgmt_class;
    270			__entry->mgmt_class_version =
    271				agent->reg_req->mgmt_class_version;
    272		} else {
    273			__entry->mgmt_class = 0;
    274			__entry->mgmt_class_version = 0;
    275		}
    276	),
    277
    278	TP_printk("%d:%d mad agent : hi_tid 0x%08x class 0x%02x class_ver 0x%02x",
    279		__entry->dev_index, __entry->port_num,
    280		__entry->hi_tid, __entry->mgmt_class,
    281		__entry->mgmt_class_version
    282	)
    283);
    284DEFINE_EVENT(ib_mad_agent_template, ib_mad_recv_done_agent,
    285	TP_PROTO(struct ib_mad_agent_private *agent),
    286	TP_ARGS(agent));
    287DEFINE_EVENT(ib_mad_agent_template, ib_mad_send_done_agent,
    288	TP_PROTO(struct ib_mad_agent_private *agent),
    289	TP_ARGS(agent));
    290DEFINE_EVENT(ib_mad_agent_template, ib_mad_create_agent,
    291	TP_PROTO(struct ib_mad_agent_private *agent),
    292	TP_ARGS(agent));
    293DEFINE_EVENT(ib_mad_agent_template, ib_mad_unregister_agent,
    294	TP_PROTO(struct ib_mad_agent_private *agent),
    295	TP_ARGS(agent));
    296
    297
    298
    299DECLARE_EVENT_CLASS(ib_mad_opa_smi_template,
    300	TP_PROTO(struct opa_smp *smp),
    301	TP_ARGS(smp),
    302
    303	TP_STRUCT__entry(
    304		__field(u64,            mkey)
    305		__field(u32,            dr_slid)
    306		__field(u32,            dr_dlid)
    307		__field(u8,             hop_ptr)
    308		__field(u8,             hop_cnt)
    309		__array(u8,             initial_path, OPA_SMP_MAX_PATH_HOPS)
    310		__array(u8,             return_path, OPA_SMP_MAX_PATH_HOPS)
    311	),
    312
    313	TP_fast_assign(
    314		__entry->hop_ptr = smp->hop_ptr;
    315		__entry->hop_cnt = smp->hop_cnt;
    316		__entry->mkey = smp->mkey;
    317		__entry->dr_slid = smp->route.dr.dr_slid;
    318		__entry->dr_dlid = smp->route.dr.dr_dlid;
    319		memcpy(__entry->initial_path, smp->route.dr.initial_path,
    320			OPA_SMP_MAX_PATH_HOPS);
    321		memcpy(__entry->return_path, smp->route.dr.return_path,
    322			OPA_SMP_MAX_PATH_HOPS);
    323	),
    324
    325	TP_printk("OPA SMP: hop_ptr %d hop_cnt %d " \
    326		  "mkey 0x%016llx dr_slid 0x%08x dr_dlid 0x%08x " \
    327		  "initial_path %*ph return_path %*ph ",
    328		__entry->hop_ptr, __entry->hop_cnt,
    329		be64_to_cpu(__entry->mkey), be32_to_cpu(__entry->dr_slid),
    330		be32_to_cpu(__entry->dr_dlid),
    331		OPA_SMP_MAX_PATH_HOPS, __entry->initial_path,
    332		OPA_SMP_MAX_PATH_HOPS, __entry->return_path
    333	)
    334);
    335
    336DEFINE_EVENT(ib_mad_opa_smi_template, ib_mad_handle_opa_smi,
    337	TP_PROTO(struct opa_smp *smp),
    338	TP_ARGS(smp));
    339DEFINE_EVENT(ib_mad_opa_smi_template, ib_mad_handle_out_opa_smi,
    340	TP_PROTO(struct opa_smp *smp),
    341	TP_ARGS(smp));
    342
    343
    344DECLARE_EVENT_CLASS(ib_mad_opa_ib_template,
    345	TP_PROTO(struct ib_smp *smp),
    346	TP_ARGS(smp),
    347
    348	TP_STRUCT__entry(
    349		__field(u64,            mkey)
    350		__field(u32,            dr_slid)
    351		__field(u32,            dr_dlid)
    352		__field(u8,             hop_ptr)
    353		__field(u8,             hop_cnt)
    354		__array(u8,             initial_path, IB_SMP_MAX_PATH_HOPS)
    355		__array(u8,             return_path, IB_SMP_MAX_PATH_HOPS)
    356	),
    357
    358	TP_fast_assign(
    359		__entry->hop_ptr = smp->hop_ptr;
    360		__entry->hop_cnt = smp->hop_cnt;
    361		__entry->mkey = smp->mkey;
    362		__entry->dr_slid = smp->dr_slid;
    363		__entry->dr_dlid = smp->dr_dlid;
    364		memcpy(__entry->initial_path, smp->initial_path,
    365			IB_SMP_MAX_PATH_HOPS);
    366		memcpy(__entry->return_path, smp->return_path,
    367			IB_SMP_MAX_PATH_HOPS);
    368	),
    369
    370	TP_printk("OPA SMP: hop_ptr %d hop_cnt %d " \
    371		  "mkey 0x%016llx dr_slid 0x%04x dr_dlid 0x%04x " \
    372		  "initial_path %*ph return_path %*ph ",
    373		__entry->hop_ptr, __entry->hop_cnt,
    374		be64_to_cpu(__entry->mkey), be16_to_cpu(__entry->dr_slid),
    375		be16_to_cpu(__entry->dr_dlid),
    376		IB_SMP_MAX_PATH_HOPS, __entry->initial_path,
    377		IB_SMP_MAX_PATH_HOPS, __entry->return_path
    378	)
    379);
    380
    381DEFINE_EVENT(ib_mad_opa_ib_template, ib_mad_handle_ib_smi,
    382	TP_PROTO(struct ib_smp *smp),
    383	TP_ARGS(smp));
    384DEFINE_EVENT(ib_mad_opa_ib_template, ib_mad_handle_out_ib_smi,
    385	TP_PROTO(struct ib_smp *smp),
    386	TP_ARGS(smp));
    387
    388#endif /* _TRACE_IB_MAD_H */
    389
    390#include <trace/define_trace.h>