cregit-Linux how code gets into the kernel

Release 4.11 drivers/misc/cxl/trace.h

Directory: drivers/misc/cxl
/*
 * Copyright 2015 IBM Corp.
 *
 * 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.
 */


#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_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_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>

Overall Contributors

PersonTokensPropCommitsCommitProp
Ian Munsie45766.33%133.33%
Christophe Lombard22732.95%133.33%
Rasmus Villemoes50.73%133.33%
Total689100.00%3100.00%
Directory: drivers/misc/cxl
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.
Created with cregit.