1
linux/drivers/misc/cxl/trace.h
Thomas Gleixner 2874c5fd28 treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 152
Based on 1 normalized pattern(s):

  this program is free software you can redistribute it and or modify
  it under the terms of the gnu general public license as published by
  the free software foundation either version 2 of the license or at
  your option any later version

extracted by the scancode license scanner the SPDX license identifier

  GPL-2.0-or-later

has been chosen to replace the boilerplate/reference in 3029 file(s).

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Reviewed-by: Allison Randal <allison@lohutok.net>
Cc: linux-spdx@vger.kernel.org
Link: https://lkml.kernel.org/r/20190527070032.746973796@linutronix.de
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2019-05-30 11:26:32 -07:00

692 lines
14 KiB
C

/* SPDX-License-Identifier: GPL-2.0-or-later */
/*
* Copyright 2015 IBM Corp.
*/
#undef TRACE_SYSTEM
#define TRACE_SYSTEM cxl
#if !defined(_CXL_TRACE_H) || defined(TRACE_HEADER_MULTI_READ)
#define _CXL_TRACE_H
#include <linux/tracepoint.h>
#include "cxl.h"
#define dsisr_psl9_flags(flags) \
__print_flags(flags, "|", \
{ CXL_PSL9_DSISR_An_CO_MASK, "FR" }, \
{ CXL_PSL9_DSISR_An_TF, "TF" }, \
{ CXL_PSL9_DSISR_An_PE, "PE" }, \
{ CXL_PSL9_DSISR_An_AE, "AE" }, \
{ CXL_PSL9_DSISR_An_OC, "OC" }, \
{ CXL_PSL9_DSISR_An_S, "S" })
#define DSISR_FLAGS \
{ CXL_PSL_DSISR_An_DS, "DS" }, \
{ CXL_PSL_DSISR_An_DM, "DM" }, \
{ CXL_PSL_DSISR_An_ST, "ST" }, \
{ CXL_PSL_DSISR_An_UR, "UR" }, \
{ CXL_PSL_DSISR_An_PE, "PE" }, \
{ CXL_PSL_DSISR_An_AE, "AE" }, \
{ CXL_PSL_DSISR_An_OC, "OC" }, \
{ CXL_PSL_DSISR_An_M, "M" }, \
{ CXL_PSL_DSISR_An_P, "P" }, \
{ CXL_PSL_DSISR_An_A, "A" }, \
{ CXL_PSL_DSISR_An_S, "S" }, \
{ CXL_PSL_DSISR_An_K, "K" }
#define TFC_FLAGS \
{ CXL_PSL_TFC_An_A, "A" }, \
{ CXL_PSL_TFC_An_C, "C" }, \
{ CXL_PSL_TFC_An_AE, "AE" }, \
{ CXL_PSL_TFC_An_R, "R" }
#define LLCMD_NAMES \
{ CXL_SPA_SW_CMD_TERMINATE, "TERMINATE" }, \
{ CXL_SPA_SW_CMD_REMOVE, "REMOVE" }, \
{ CXL_SPA_SW_CMD_SUSPEND, "SUSPEND" }, \
{ CXL_SPA_SW_CMD_RESUME, "RESUME" }, \
{ CXL_SPA_SW_CMD_ADD, "ADD" }, \
{ CXL_SPA_SW_CMD_UPDATE, "UPDATE" }
#define AFU_COMMANDS \
{ 0, "DISABLE" }, \
{ CXL_AFU_Cntl_An_E, "ENABLE" }, \
{ CXL_AFU_Cntl_An_RA, "RESET" }
#define PSL_COMMANDS \
{ CXL_PSL_SCNTL_An_Pc, "PURGE" }, \
{ CXL_PSL_SCNTL_An_Sc, "SUSPEND" }
DECLARE_EVENT_CLASS(cxl_pe_class,
TP_PROTO(struct cxl_context *ctx),
TP_ARGS(ctx),
TP_STRUCT__entry(
__field(u8, card)
__field(u8, afu)
__field(u16, pe)
),
TP_fast_assign(
__entry->card = ctx->afu->adapter->adapter_num;
__entry->afu = ctx->afu->slice;
__entry->pe = ctx->pe;
),
TP_printk("afu%i.%i pe=%i",
__entry->card,
__entry->afu,
__entry->pe
)
);
TRACE_EVENT(cxl_attach,
TP_PROTO(struct cxl_context *ctx, u64 wed, s16 num_interrupts, u64 amr),
TP_ARGS(ctx, wed, num_interrupts, amr),
TP_STRUCT__entry(
__field(u8, card)
__field(u8, afu)
__field(u16, pe)
__field(pid_t, pid)
__field(u64, wed)
__field(u64, amr)
__field(s16, num_interrupts)
),
TP_fast_assign(
__entry->card = ctx->afu->adapter->adapter_num;
__entry->afu = ctx->afu->slice;
__entry->pe = ctx->pe;
__entry->pid = pid_nr(ctx->pid);
__entry->wed = wed;
__entry->amr = amr;
__entry->num_interrupts = num_interrupts;
),
TP_printk("afu%i.%i pid=%i pe=%i wed=0x%016llx irqs=%i amr=0x%llx",
__entry->card,
__entry->afu,
__entry->pid,
__entry->pe,
__entry->wed,
__entry->num_interrupts,
__entry->amr
)
);
DEFINE_EVENT(cxl_pe_class, cxl_detach,
TP_PROTO(struct cxl_context *ctx),
TP_ARGS(ctx)
);
TRACE_EVENT(cxl_afu_irq,
TP_PROTO(struct cxl_context *ctx, int afu_irq, int virq, irq_hw_number_t hwirq),
TP_ARGS(ctx, afu_irq, virq, hwirq),
TP_STRUCT__entry(
__field(u8, card)
__field(u8, afu)
__field(u16, pe)
__field(u16, afu_irq)
__field(int, virq)
__field(irq_hw_number_t, hwirq)
),
TP_fast_assign(
__entry->card = ctx->afu->adapter->adapter_num;
__entry->afu = ctx->afu->slice;
__entry->pe = ctx->pe;
__entry->afu_irq = afu_irq;
__entry->virq = virq;
__entry->hwirq = hwirq;
),
TP_printk("afu%i.%i pe=%i afu_irq=%i virq=%i hwirq=0x%lx",
__entry->card,
__entry->afu,
__entry->pe,
__entry->afu_irq,
__entry->virq,
__entry->hwirq
)
);
TRACE_EVENT(cxl_psl9_irq,
TP_PROTO(struct cxl_context *ctx, int irq, u64 dsisr, u64 dar),
TP_ARGS(ctx, irq, dsisr, dar),
TP_STRUCT__entry(
__field(u8, card)
__field(u8, afu)
__field(u16, pe)
__field(int, irq)
__field(u64, dsisr)
__field(u64, dar)
),
TP_fast_assign(
__entry->card = ctx->afu->adapter->adapter_num;
__entry->afu = ctx->afu->slice;
__entry->pe = ctx->pe;
__entry->irq = irq;
__entry->dsisr = dsisr;
__entry->dar = dar;
),
TP_printk("afu%i.%i pe=%i irq=%i dsisr=0x%016llx dsisr=%s dar=0x%016llx",
__entry->card,
__entry->afu,
__entry->pe,
__entry->irq,
__entry->dsisr,
dsisr_psl9_flags(__entry->dsisr),
__entry->dar
)
);
TRACE_EVENT(cxl_psl_irq,
TP_PROTO(struct cxl_context *ctx, int irq, u64 dsisr, u64 dar),
TP_ARGS(ctx, irq, dsisr, dar),
TP_STRUCT__entry(
__field(u8, card)
__field(u8, afu)
__field(u16, pe)
__field(int, irq)
__field(u64, dsisr)
__field(u64, dar)
),
TP_fast_assign(
__entry->card = ctx->afu->adapter->adapter_num;
__entry->afu = ctx->afu->slice;
__entry->pe = ctx->pe;
__entry->irq = irq;
__entry->dsisr = dsisr;
__entry->dar = dar;
),
TP_printk("afu%i.%i pe=%i irq=%i dsisr=%s dar=0x%016llx",
__entry->card,
__entry->afu,
__entry->pe,
__entry->irq,
__print_flags(__entry->dsisr, "|", DSISR_FLAGS),
__entry->dar
)
);
TRACE_EVENT(cxl_psl_irq_ack,
TP_PROTO(struct cxl_context *ctx, u64 tfc),
TP_ARGS(ctx, tfc),
TP_STRUCT__entry(
__field(u8, card)
__field(u8, afu)
__field(u16, pe)
__field(u64, tfc)
),
TP_fast_assign(
__entry->card = ctx->afu->adapter->adapter_num;
__entry->afu = ctx->afu->slice;
__entry->pe = ctx->pe;
__entry->tfc = tfc;
),
TP_printk("afu%i.%i pe=%i tfc=%s",
__entry->card,
__entry->afu,
__entry->pe,
__print_flags(__entry->tfc, "|", TFC_FLAGS)
)
);
TRACE_EVENT(cxl_ste_miss,
TP_PROTO(struct cxl_context *ctx, u64 dar),
TP_ARGS(ctx, dar),
TP_STRUCT__entry(
__field(u8, card)
__field(u8, afu)
__field(u16, pe)
__field(u64, dar)
),
TP_fast_assign(
__entry->card = ctx->afu->adapter->adapter_num;
__entry->afu = ctx->afu->slice;
__entry->pe = ctx->pe;
__entry->dar = dar;
),
TP_printk("afu%i.%i pe=%i dar=0x%016llx",
__entry->card,
__entry->afu,
__entry->pe,
__entry->dar
)
);
TRACE_EVENT(cxl_ste_write,
TP_PROTO(struct cxl_context *ctx, unsigned int idx, u64 e, u64 v),
TP_ARGS(ctx, idx, e, v),
TP_STRUCT__entry(
__field(u8, card)
__field(u8, afu)
__field(u16, pe)
__field(unsigned int, idx)
__field(u64, e)
__field(u64, v)
),
TP_fast_assign(
__entry->card = ctx->afu->adapter->adapter_num;
__entry->afu = ctx->afu->slice;
__entry->pe = ctx->pe;
__entry->idx = idx;
__entry->e = e;
__entry->v = v;
),
TP_printk("afu%i.%i pe=%i SSTE[%i] E=0x%016llx V=0x%016llx",
__entry->card,
__entry->afu,
__entry->pe,
__entry->idx,
__entry->e,
__entry->v
)
);
TRACE_EVENT(cxl_pte_miss,
TP_PROTO(struct cxl_context *ctx, u64 dsisr, u64 dar),
TP_ARGS(ctx, dsisr, dar),
TP_STRUCT__entry(
__field(u8, card)
__field(u8, afu)
__field(u16, pe)
__field(u64, dsisr)
__field(u64, dar)
),
TP_fast_assign(
__entry->card = ctx->afu->adapter->adapter_num;
__entry->afu = ctx->afu->slice;
__entry->pe = ctx->pe;
__entry->dsisr = dsisr;
__entry->dar = dar;
),
TP_printk("afu%i.%i pe=%i dsisr=%s dar=0x%016llx",
__entry->card,
__entry->afu,
__entry->pe,
__print_flags(__entry->dsisr, "|", DSISR_FLAGS),
__entry->dar
)
);
TRACE_EVENT(cxl_llcmd,
TP_PROTO(struct cxl_context *ctx, u64 cmd),
TP_ARGS(ctx, cmd),
TP_STRUCT__entry(
__field(u8, card)
__field(u8, afu)
__field(u16, pe)
__field(u64, cmd)
),
TP_fast_assign(
__entry->card = ctx->afu->adapter->adapter_num;
__entry->afu = ctx->afu->slice;
__entry->pe = ctx->pe;
__entry->cmd = cmd;
),
TP_printk("afu%i.%i pe=%i cmd=%s",
__entry->card,
__entry->afu,
__entry->pe,
__print_symbolic_u64(__entry->cmd, LLCMD_NAMES)
)
);
TRACE_EVENT(cxl_llcmd_done,
TP_PROTO(struct cxl_context *ctx, u64 cmd, int rc),
TP_ARGS(ctx, cmd, rc),
TP_STRUCT__entry(
__field(u8, card)
__field(u8, afu)
__field(u16, pe)
__field(u64, cmd)
__field(int, rc)
),
TP_fast_assign(
__entry->card = ctx->afu->adapter->adapter_num;
__entry->afu = ctx->afu->slice;
__entry->pe = ctx->pe;
__entry->rc = rc;
__entry->cmd = cmd;
),
TP_printk("afu%i.%i pe=%i cmd=%s rc=%i",
__entry->card,
__entry->afu,
__entry->pe,
__print_symbolic_u64(__entry->cmd, LLCMD_NAMES),
__entry->rc
)
);
DECLARE_EVENT_CLASS(cxl_afu_psl_ctrl,
TP_PROTO(struct cxl_afu *afu, u64 cmd),
TP_ARGS(afu, cmd),
TP_STRUCT__entry(
__field(u8, card)
__field(u8, afu)
__field(u64, cmd)
),
TP_fast_assign(
__entry->card = afu->adapter->adapter_num;
__entry->afu = afu->slice;
__entry->cmd = cmd;
),
TP_printk("afu%i.%i cmd=%s",
__entry->card,
__entry->afu,
__print_symbolic_u64(__entry->cmd, AFU_COMMANDS)
)
);
DECLARE_EVENT_CLASS(cxl_afu_psl_ctrl_done,
TP_PROTO(struct cxl_afu *afu, u64 cmd, int rc),
TP_ARGS(afu, cmd, rc),
TP_STRUCT__entry(
__field(u8, card)
__field(u8, afu)
__field(u64, cmd)
__field(int, rc)
),
TP_fast_assign(
__entry->card = afu->adapter->adapter_num;
__entry->afu = afu->slice;
__entry->rc = rc;
__entry->cmd = cmd;
),
TP_printk("afu%i.%i cmd=%s rc=%i",
__entry->card,
__entry->afu,
__print_symbolic_u64(__entry->cmd, AFU_COMMANDS),
__entry->rc
)
);
DEFINE_EVENT(cxl_afu_psl_ctrl, cxl_afu_ctrl,
TP_PROTO(struct cxl_afu *afu, u64 cmd),
TP_ARGS(afu, cmd)
);
DEFINE_EVENT(cxl_afu_psl_ctrl_done, cxl_afu_ctrl_done,
TP_PROTO(struct cxl_afu *afu, u64 cmd, int rc),
TP_ARGS(afu, cmd, rc)
);
DEFINE_EVENT_PRINT(cxl_afu_psl_ctrl, cxl_psl_ctrl,
TP_PROTO(struct cxl_afu *afu, u64 cmd),
TP_ARGS(afu, cmd),
TP_printk("psl%i.%i cmd=%s",
__entry->card,
__entry->afu,
__print_symbolic_u64(__entry->cmd, PSL_COMMANDS)
)
);
DEFINE_EVENT_PRINT(cxl_afu_psl_ctrl_done, cxl_psl_ctrl_done,
TP_PROTO(struct cxl_afu *afu, u64 cmd, int rc),
TP_ARGS(afu, cmd, rc),
TP_printk("psl%i.%i cmd=%s rc=%i",
__entry->card,
__entry->afu,
__print_symbolic_u64(__entry->cmd, PSL_COMMANDS),
__entry->rc
)
);
DEFINE_EVENT(cxl_pe_class, cxl_slbia,
TP_PROTO(struct cxl_context *ctx),
TP_ARGS(ctx)
);
TRACE_EVENT(cxl_hcall,
TP_PROTO(u64 unit_address, u64 process_token, long rc),
TP_ARGS(unit_address, process_token, rc),
TP_STRUCT__entry(
__field(u64, unit_address)
__field(u64, process_token)
__field(long, rc)
),
TP_fast_assign(
__entry->unit_address = unit_address;
__entry->process_token = process_token;
__entry->rc = rc;
),
TP_printk("unit_address=0x%016llx process_token=0x%016llx rc=%li",
__entry->unit_address,
__entry->process_token,
__entry->rc
)
);
TRACE_EVENT(cxl_hcall_control,
TP_PROTO(u64 unit_address, char *fct, u64 p1, u64 p2, u64 p3,
u64 p4, unsigned long r4, long rc),
TP_ARGS(unit_address, fct, p1, p2, p3, p4, r4, rc),
TP_STRUCT__entry(
__field(u64, unit_address)
__field(char *, fct)
__field(u64, p1)
__field(u64, p2)
__field(u64, p3)
__field(u64, p4)
__field(unsigned long, r4)
__field(long, rc)
),
TP_fast_assign(
__entry->unit_address = unit_address;
__entry->fct = fct;
__entry->p1 = p1;
__entry->p2 = p2;
__entry->p3 = p3;
__entry->p4 = p4;
__entry->r4 = r4;
__entry->rc = rc;
),
TP_printk("unit_address=%#.16llx %s(%#llx, %#llx, %#llx, %#llx, R4: %#lx)): %li",
__entry->unit_address,
__entry->fct,
__entry->p1,
__entry->p2,
__entry->p3,
__entry->p4,
__entry->r4,
__entry->rc
)
);
TRACE_EVENT(cxl_hcall_attach,
TP_PROTO(u64 unit_address, u64 phys_addr, unsigned long process_token,
unsigned long mmio_addr, unsigned long mmio_size, long rc),
TP_ARGS(unit_address, phys_addr, process_token,
mmio_addr, mmio_size, rc),
TP_STRUCT__entry(
__field(u64, unit_address)
__field(u64, phys_addr)
__field(unsigned long, process_token)
__field(unsigned long, mmio_addr)
__field(unsigned long, mmio_size)
__field(long, rc)
),
TP_fast_assign(
__entry->unit_address = unit_address;
__entry->phys_addr = phys_addr;
__entry->process_token = process_token;
__entry->mmio_addr = mmio_addr;
__entry->mmio_size = mmio_size;
__entry->rc = rc;
),
TP_printk("unit_address=0x%016llx phys_addr=0x%016llx "
"token=0x%.8lx mmio_addr=0x%lx mmio_size=0x%lx rc=%li",
__entry->unit_address,
__entry->phys_addr,
__entry->process_token,
__entry->mmio_addr,
__entry->mmio_size,
__entry->rc
)
);
DEFINE_EVENT(cxl_hcall, cxl_hcall_detach,
TP_PROTO(u64 unit_address, u64 process_token, long rc),
TP_ARGS(unit_address, process_token, rc)
);
DEFINE_EVENT(cxl_hcall_control, cxl_hcall_control_function,
TP_PROTO(u64 unit_address, char *fct, u64 p1, u64 p2, u64 p3,
u64 p4, unsigned long r4, long rc),
TP_ARGS(unit_address, fct, p1, p2, p3, p4, r4, rc)
);
DEFINE_EVENT(cxl_hcall, cxl_hcall_collect_int_info,
TP_PROTO(u64 unit_address, u64 process_token, long rc),
TP_ARGS(unit_address, process_token, rc)
);
TRACE_EVENT(cxl_hcall_control_faults,
TP_PROTO(u64 unit_address, u64 process_token,
u64 control_mask, u64 reset_mask, unsigned long r4,
long rc),
TP_ARGS(unit_address, process_token,
control_mask, reset_mask, r4, rc),
TP_STRUCT__entry(
__field(u64, unit_address)
__field(u64, process_token)
__field(u64, control_mask)
__field(u64, reset_mask)
__field(unsigned long, r4)
__field(long, rc)
),
TP_fast_assign(
__entry->unit_address = unit_address;
__entry->process_token = process_token;
__entry->control_mask = control_mask;
__entry->reset_mask = reset_mask;
__entry->r4 = r4;
__entry->rc = rc;
),
TP_printk("unit_address=0x%016llx process_token=0x%llx "
"control_mask=%#llx reset_mask=%#llx r4=%#lx rc=%li",
__entry->unit_address,
__entry->process_token,
__entry->control_mask,
__entry->reset_mask,
__entry->r4,
__entry->rc
)
);
DEFINE_EVENT(cxl_hcall_control, cxl_hcall_control_facility,
TP_PROTO(u64 unit_address, char *fct, u64 p1, u64 p2, u64 p3,
u64 p4, unsigned long r4, long rc),
TP_ARGS(unit_address, fct, p1, p2, p3, p4, r4, rc)
);
TRACE_EVENT(cxl_hcall_download_facility,
TP_PROTO(u64 unit_address, char *fct, u64 list_address, u64 num,
unsigned long r4, long rc),
TP_ARGS(unit_address, fct, list_address, num, r4, rc),
TP_STRUCT__entry(
__field(u64, unit_address)
__field(char *, fct)
__field(u64, list_address)
__field(u64, num)
__field(unsigned long, r4)
__field(long, rc)
),
TP_fast_assign(
__entry->unit_address = unit_address;
__entry->fct = fct;
__entry->list_address = list_address;
__entry->num = num;
__entry->r4 = r4;
__entry->rc = rc;
),
TP_printk("%#.16llx, %s(%#llx, %#llx), %#lx): %li",
__entry->unit_address,
__entry->fct,
__entry->list_address,
__entry->num,
__entry->r4,
__entry->rc
)
);
#endif /* _CXL_TRACE_H */
/* This part must be outside protection */
#undef TRACE_INCLUDE_PATH
#define TRACE_INCLUDE_PATH .
#define TRACE_INCLUDE_FILE trace
#include <trace/define_trace.h>