Merge commit 'tip/tracing/core' into oprofile/core
Conflicts: drivers/oprofile/cpu_buffer.c Signed-off-by: Robert Richter <robert.richter@amd.com>
This commit is contained in:
@@ -51,11 +51,14 @@ TRACE_EVENT(module_free,
|
||||
TP_printk("%s", __get_str(name))
|
||||
);
|
||||
|
||||
#ifdef CONFIG_MODULE_UNLOAD
|
||||
/* trace_module_get/put are only used if CONFIG_MODULE_UNLOAD is defined */
|
||||
|
||||
DECLARE_EVENT_CLASS(module_refcnt,
|
||||
|
||||
TP_PROTO(struct module *mod, unsigned long ip, int refcnt),
|
||||
TP_PROTO(struct module *mod, unsigned long ip),
|
||||
|
||||
TP_ARGS(mod, ip, refcnt),
|
||||
TP_ARGS(mod, ip),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field( unsigned long, ip )
|
||||
@@ -65,7 +68,7 @@ DECLARE_EVENT_CLASS(module_refcnt,
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->ip = ip;
|
||||
__entry->refcnt = refcnt;
|
||||
__entry->refcnt = __this_cpu_read(mod->refptr->incs) + __this_cpu_read(mod->refptr->decs);
|
||||
__assign_str(name, mod->name);
|
||||
),
|
||||
|
||||
@@ -75,17 +78,18 @@ DECLARE_EVENT_CLASS(module_refcnt,
|
||||
|
||||
DEFINE_EVENT(module_refcnt, module_get,
|
||||
|
||||
TP_PROTO(struct module *mod, unsigned long ip, int refcnt),
|
||||
TP_PROTO(struct module *mod, unsigned long ip),
|
||||
|
||||
TP_ARGS(mod, ip, refcnt)
|
||||
TP_ARGS(mod, ip)
|
||||
);
|
||||
|
||||
DEFINE_EVENT(module_refcnt, module_put,
|
||||
|
||||
TP_PROTO(struct module *mod, unsigned long ip, int refcnt),
|
||||
TP_PROTO(struct module *mod, unsigned long ip),
|
||||
|
||||
TP_ARGS(mod, ip, refcnt)
|
||||
TP_ARGS(mod, ip)
|
||||
);
|
||||
#endif /* CONFIG_MODULE_UNLOAD */
|
||||
|
||||
TRACE_EVENT(module_request,
|
||||
|
||||
|
||||
@@ -100,18 +100,7 @@ TRACE_EVENT(signal_deliver,
|
||||
__entry->sa_handler, __entry->sa_flags)
|
||||
);
|
||||
|
||||
/**
|
||||
* signal_overflow_fail - called when signal queue is overflow
|
||||
* @sig: signal number
|
||||
* @group: signal to process group or not (bool)
|
||||
* @info: pointer to struct siginfo
|
||||
*
|
||||
* Kernel fails to generate 'sig' signal with 'info' siginfo, because
|
||||
* siginfo queue is overflow, and the signal is dropped.
|
||||
* 'group' is not 0 if the signal will be sent to a process group.
|
||||
* 'sig' is always one of RT signals.
|
||||
*/
|
||||
TRACE_EVENT(signal_overflow_fail,
|
||||
DECLARE_EVENT_CLASS(signal_queue_overflow,
|
||||
|
||||
TP_PROTO(int sig, int group, struct siginfo *info),
|
||||
|
||||
@@ -134,6 +123,24 @@ TRACE_EVENT(signal_overflow_fail,
|
||||
__entry->sig, __entry->group, __entry->errno, __entry->code)
|
||||
);
|
||||
|
||||
/**
|
||||
* signal_overflow_fail - called when signal queue is overflow
|
||||
* @sig: signal number
|
||||
* @group: signal to process group or not (bool)
|
||||
* @info: pointer to struct siginfo
|
||||
*
|
||||
* Kernel fails to generate 'sig' signal with 'info' siginfo, because
|
||||
* siginfo queue is overflow, and the signal is dropped.
|
||||
* 'group' is not 0 if the signal will be sent to a process group.
|
||||
* 'sig' is always one of RT signals.
|
||||
*/
|
||||
DEFINE_EVENT(signal_queue_overflow, signal_overflow_fail,
|
||||
|
||||
TP_PROTO(int sig, int group, struct siginfo *info),
|
||||
|
||||
TP_ARGS(sig, group, info)
|
||||
);
|
||||
|
||||
/**
|
||||
* signal_lose_info - called when siginfo is lost
|
||||
* @sig: signal number
|
||||
@@ -145,28 +152,13 @@ TRACE_EVENT(signal_overflow_fail,
|
||||
* 'group' is not 0 if the signal will be sent to a process group.
|
||||
* 'sig' is always one of non-RT signals.
|
||||
*/
|
||||
TRACE_EVENT(signal_lose_info,
|
||||
DEFINE_EVENT(signal_queue_overflow, signal_lose_info,
|
||||
|
||||
TP_PROTO(int sig, int group, struct siginfo *info),
|
||||
|
||||
TP_ARGS(sig, group, info),
|
||||
|
||||
TP_STRUCT__entry(
|
||||
__field( int, sig )
|
||||
__field( int, group )
|
||||
__field( int, errno )
|
||||
__field( int, code )
|
||||
),
|
||||
|
||||
TP_fast_assign(
|
||||
__entry->sig = sig;
|
||||
__entry->group = group;
|
||||
TP_STORE_SIGINFO(__entry, info);
|
||||
),
|
||||
|
||||
TP_printk("sig=%d group=%d errno=%d code=%d",
|
||||
__entry->sig, __entry->group, __entry->errno, __entry->code)
|
||||
TP_ARGS(sig, group, info)
|
||||
);
|
||||
|
||||
#endif /* _TRACE_SIGNAL_H */
|
||||
|
||||
/* This part must be outside protection */
|
||||
|
||||
+19
-14
@@ -154,9 +154,11 @@
|
||||
*
|
||||
* field = (typeof(field))entry;
|
||||
*
|
||||
* p = get_cpu_var(ftrace_event_seq);
|
||||
* p = &get_cpu_var(ftrace_event_seq);
|
||||
* trace_seq_init(p);
|
||||
* ret = trace_seq_printf(s, <TP_printk> "\n");
|
||||
* ret = trace_seq_printf(s, "%s: ", <call>);
|
||||
* if (ret)
|
||||
* ret = trace_seq_printf(s, <TP_printk> "\n");
|
||||
* put_cpu();
|
||||
* if (!ret)
|
||||
* return TRACE_TYPE_PARTIAL_LINE;
|
||||
@@ -450,38 +452,38 @@ perf_trace_disable_##name(struct ftrace_event_call *unused) \
|
||||
*
|
||||
* static void ftrace_raw_event_<call>(proto)
|
||||
* {
|
||||
* struct ftrace_data_offsets_<call> __maybe_unused __data_offsets;
|
||||
* struct ring_buffer_event *event;
|
||||
* struct ftrace_raw_<call> *entry; <-- defined in stage 1
|
||||
* struct ring_buffer *buffer;
|
||||
* unsigned long irq_flags;
|
||||
* int __data_size;
|
||||
* int pc;
|
||||
*
|
||||
* local_save_flags(irq_flags);
|
||||
* pc = preempt_count();
|
||||
*
|
||||
* __data_size = ftrace_get_offsets_<call>(&__data_offsets, args);
|
||||
*
|
||||
* event = trace_current_buffer_lock_reserve(&buffer,
|
||||
* event_<call>.id,
|
||||
* sizeof(struct ftrace_raw_<call>),
|
||||
* sizeof(*entry) + __data_size,
|
||||
* irq_flags, pc);
|
||||
* if (!event)
|
||||
* return;
|
||||
* entry = ring_buffer_event_data(event);
|
||||
*
|
||||
* <assign>; <-- Here we assign the entries by the __field and
|
||||
* __array macros.
|
||||
* { <assign>; } <-- Here we assign the entries by the __field and
|
||||
* __array macros.
|
||||
*
|
||||
* trace_current_buffer_unlock_commit(buffer, event, irq_flags, pc);
|
||||
* if (!filter_current_check_discard(buffer, event_call, entry, event))
|
||||
* trace_current_buffer_unlock_commit(buffer,
|
||||
* event, irq_flags, pc);
|
||||
* }
|
||||
*
|
||||
* static int ftrace_raw_reg_event_<call>(struct ftrace_event_call *unused)
|
||||
* {
|
||||
* int ret;
|
||||
*
|
||||
* ret = register_trace_<call>(ftrace_raw_event_<call>);
|
||||
* if (!ret)
|
||||
* pr_info("event trace: Could not activate trace point "
|
||||
* "probe to <call>");
|
||||
* return ret;
|
||||
* return register_trace_<call>(ftrace_raw_event_<call>);
|
||||
* }
|
||||
*
|
||||
* static void ftrace_unreg_event_<call>(struct ftrace_event_call *unused)
|
||||
@@ -493,6 +495,8 @@ perf_trace_disable_##name(struct ftrace_event_call *unused) \
|
||||
* .trace = ftrace_raw_output_<call>, <-- stage 2
|
||||
* };
|
||||
*
|
||||
* static const char print_fmt_<call>[] = <TP_printk>;
|
||||
*
|
||||
* static struct ftrace_event_call __used
|
||||
* __attribute__((__aligned__(4)))
|
||||
* __attribute__((section("_ftrace_events"))) event_<call> = {
|
||||
@@ -501,6 +505,8 @@ perf_trace_disable_##name(struct ftrace_event_call *unused) \
|
||||
* .raw_init = trace_event_raw_init,
|
||||
* .regfunc = ftrace_reg_event_<call>,
|
||||
* .unregfunc = ftrace_unreg_event_<call>,
|
||||
* .print_fmt = print_fmt_<call>,
|
||||
* .define_fields = ftrace_define_fields_<call>,
|
||||
* }
|
||||
*
|
||||
*/
|
||||
@@ -569,7 +575,6 @@ ftrace_raw_event_id_##call(struct ftrace_event_call *event_call, \
|
||||
return; \
|
||||
entry = ring_buffer_event_data(event); \
|
||||
\
|
||||
\
|
||||
tstruct \
|
||||
\
|
||||
{ assign; } \
|
||||
|
||||
Reference in New Issue
Block a user