0001
0002 #undef TRACE_SYSTEM
0003 #define TRACE_SYSTEM powerpc
0004
0005 #if !defined(_TRACE_POWERPC_H) || defined(TRACE_HEADER_MULTI_READ)
0006 #define _TRACE_POWERPC_H
0007
0008 #include <linux/tracepoint.h>
0009
0010 struct pt_regs;
0011
0012 DECLARE_EVENT_CLASS(ppc64_interrupt_class,
0013
0014 TP_PROTO(struct pt_regs *regs),
0015
0016 TP_ARGS(regs),
0017
0018 TP_STRUCT__entry(
0019 __field(struct pt_regs *, regs)
0020 ),
0021
0022 TP_fast_assign(
0023 __entry->regs = regs;
0024 ),
0025
0026 TP_printk("pt_regs=%p", __entry->regs)
0027 );
0028
0029 DEFINE_EVENT(ppc64_interrupt_class, irq_entry,
0030
0031 TP_PROTO(struct pt_regs *regs),
0032
0033 TP_ARGS(regs)
0034 );
0035
0036 DEFINE_EVENT(ppc64_interrupt_class, irq_exit,
0037
0038 TP_PROTO(struct pt_regs *regs),
0039
0040 TP_ARGS(regs)
0041 );
0042
0043 DEFINE_EVENT(ppc64_interrupt_class, timer_interrupt_entry,
0044
0045 TP_PROTO(struct pt_regs *regs),
0046
0047 TP_ARGS(regs)
0048 );
0049
0050 DEFINE_EVENT(ppc64_interrupt_class, timer_interrupt_exit,
0051
0052 TP_PROTO(struct pt_regs *regs),
0053
0054 TP_ARGS(regs)
0055 );
0056
0057 #ifdef CONFIG_PPC_DOORBELL
0058 DEFINE_EVENT(ppc64_interrupt_class, doorbell_entry,
0059
0060 TP_PROTO(struct pt_regs *regs),
0061
0062 TP_ARGS(regs)
0063 );
0064
0065 DEFINE_EVENT(ppc64_interrupt_class, doorbell_exit,
0066
0067 TP_PROTO(struct pt_regs *regs),
0068
0069 TP_ARGS(regs)
0070 );
0071 #endif
0072
0073 #ifdef CONFIG_PPC_PSERIES
0074 extern int hcall_tracepoint_regfunc(void);
0075 extern void hcall_tracepoint_unregfunc(void);
0076
0077 TRACE_EVENT_FN_COND(hcall_entry,
0078
0079 TP_PROTO(unsigned long opcode, unsigned long *args),
0080
0081 TP_ARGS(opcode, args),
0082
0083 TP_CONDITION(cpu_online(raw_smp_processor_id())),
0084
0085 TP_STRUCT__entry(
0086 __field(unsigned long, opcode)
0087 ),
0088
0089 TP_fast_assign(
0090 __entry->opcode = opcode;
0091 ),
0092
0093 TP_printk("opcode=%lu", __entry->opcode),
0094
0095 hcall_tracepoint_regfunc, hcall_tracepoint_unregfunc
0096 );
0097
0098 TRACE_EVENT_FN_COND(hcall_exit,
0099
0100 TP_PROTO(unsigned long opcode, long retval, unsigned long *retbuf),
0101
0102 TP_ARGS(opcode, retval, retbuf),
0103
0104 TP_CONDITION(cpu_online(raw_smp_processor_id())),
0105
0106 TP_STRUCT__entry(
0107 __field(unsigned long, opcode)
0108 __field(long, retval)
0109 ),
0110
0111 TP_fast_assign(
0112 __entry->opcode = opcode;
0113 __entry->retval = retval;
0114 ),
0115
0116 TP_printk("opcode=%lu retval=%ld", __entry->opcode, __entry->retval),
0117
0118 hcall_tracepoint_regfunc, hcall_tracepoint_unregfunc
0119 );
0120 #endif
0121
0122 #ifdef CONFIG_PPC_POWERNV
0123 extern int opal_tracepoint_regfunc(void);
0124 extern void opal_tracepoint_unregfunc(void);
0125
0126 TRACE_EVENT_FN(opal_entry,
0127
0128 TP_PROTO(unsigned long opcode, unsigned long *args),
0129
0130 TP_ARGS(opcode, args),
0131
0132 TP_STRUCT__entry(
0133 __field(unsigned long, opcode)
0134 ),
0135
0136 TP_fast_assign(
0137 __entry->opcode = opcode;
0138 ),
0139
0140 TP_printk("opcode=%lu", __entry->opcode),
0141
0142 opal_tracepoint_regfunc, opal_tracepoint_unregfunc
0143 );
0144
0145 TRACE_EVENT_FN(opal_exit,
0146
0147 TP_PROTO(unsigned long opcode, unsigned long retval),
0148
0149 TP_ARGS(opcode, retval),
0150
0151 TP_STRUCT__entry(
0152 __field(unsigned long, opcode)
0153 __field(unsigned long, retval)
0154 ),
0155
0156 TP_fast_assign(
0157 __entry->opcode = opcode;
0158 __entry->retval = retval;
0159 ),
0160
0161 TP_printk("opcode=%lu retval=%lu", __entry->opcode, __entry->retval),
0162
0163 opal_tracepoint_regfunc, opal_tracepoint_unregfunc
0164 );
0165 #endif
0166
0167 TRACE_EVENT(hash_fault,
0168
0169 TP_PROTO(unsigned long addr, unsigned long access, unsigned long trap),
0170 TP_ARGS(addr, access, trap),
0171 TP_STRUCT__entry(
0172 __field(unsigned long, addr)
0173 __field(unsigned long, access)
0174 __field(unsigned long, trap)
0175 ),
0176
0177 TP_fast_assign(
0178 __entry->addr = addr;
0179 __entry->access = access;
0180 __entry->trap = trap;
0181 ),
0182
0183 TP_printk("hash fault with addr 0x%lx and access = 0x%lx trap = 0x%lx",
0184 __entry->addr, __entry->access, __entry->trap)
0185 );
0186
0187
0188 TRACE_EVENT(tlbie,
0189
0190 TP_PROTO(unsigned long lpid, unsigned long local, unsigned long rb,
0191 unsigned long rs, unsigned long ric, unsigned long prs,
0192 unsigned long r),
0193 TP_ARGS(lpid, local, rb, rs, ric, prs, r),
0194 TP_STRUCT__entry(
0195 __field(unsigned long, lpid)
0196 __field(unsigned long, local)
0197 __field(unsigned long, rb)
0198 __field(unsigned long, rs)
0199 __field(unsigned long, ric)
0200 __field(unsigned long, prs)
0201 __field(unsigned long, r)
0202 ),
0203
0204 TP_fast_assign(
0205 __entry->lpid = lpid;
0206 __entry->local = local;
0207 __entry->rb = rb;
0208 __entry->rs = rs;
0209 __entry->ric = ric;
0210 __entry->prs = prs;
0211 __entry->r = r;
0212 ),
0213
0214 TP_printk("lpid=%ld, local=%ld, rb=0x%lx, rs=0x%lx, ric=0x%lx, "
0215 "prs=0x%lx, r=0x%lx", __entry->lpid, __entry->local,
0216 __entry->rb, __entry->rs, __entry->ric, __entry->prs,
0217 __entry->r)
0218 );
0219
0220 TRACE_EVENT(tlbia,
0221
0222 TP_PROTO(unsigned long id),
0223 TP_ARGS(id),
0224 TP_STRUCT__entry(
0225 __field(unsigned long, id)
0226 ),
0227
0228 TP_fast_assign(
0229 __entry->id = id;
0230 ),
0231
0232 TP_printk("ctx.id=0x%lx", __entry->id)
0233 );
0234
0235 #endif
0236
0237 #undef TRACE_INCLUDE_PATH
0238 #undef TRACE_INCLUDE_FILE
0239
0240 #define TRACE_INCLUDE_PATH asm
0241 #define TRACE_INCLUDE_FILE trace
0242
0243 #include <trace/define_trace.h>