tracing: Have the reg function allow to fail
Some tracepoints have a registration function that gets enabled when the tracepoint is enabled. There may be cases that the registraction function must fail (for example, can't allocate enough memory). In this case, the tracepoint should also fail to register, otherwise the user would not know why the tracepoint is not working. Cc: David Howells <dhowells@redhat.com> Cc: Seiji Aguchi <seiji.aguchi@hds.com> Cc: Anton Blanchard <anton@samba.org> Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com> Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
This commit is contained in:

committed by
Steven Rostedt

parent
38e11df134
commit
8cf868affd
@@ -54,7 +54,7 @@ DEFINE_EVENT(ppc64_interrupt_class, timer_interrupt_exit,
|
||||
);
|
||||
|
||||
#ifdef CONFIG_PPC_PSERIES
|
||||
extern void hcall_tracepoint_regfunc(void);
|
||||
extern int hcall_tracepoint_regfunc(void);
|
||||
extern void hcall_tracepoint_unregfunc(void);
|
||||
|
||||
TRACE_EVENT_FN_COND(hcall_entry,
|
||||
@@ -104,7 +104,7 @@ TRACE_EVENT_FN_COND(hcall_exit,
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_PPC_POWERNV
|
||||
extern void opal_tracepoint_regfunc(void);
|
||||
extern int opal_tracepoint_regfunc(void);
|
||||
extern void opal_tracepoint_unregfunc(void);
|
||||
|
||||
TRACE_EVENT_FN(opal_entry,
|
||||
|
@@ -6,9 +6,10 @@
|
||||
#ifdef HAVE_JUMP_LABEL
|
||||
struct static_key opal_tracepoint_key = STATIC_KEY_INIT;
|
||||
|
||||
void opal_tracepoint_regfunc(void)
|
||||
int opal_tracepoint_regfunc(void)
|
||||
{
|
||||
static_key_slow_inc(&opal_tracepoint_key);
|
||||
return 0;
|
||||
}
|
||||
|
||||
void opal_tracepoint_unregfunc(void)
|
||||
@@ -25,9 +26,10 @@ void opal_tracepoint_unregfunc(void)
|
||||
/* NB: reg/unreg are called while guarded with the tracepoints_mutex */
|
||||
extern long opal_tracepoint_refcount;
|
||||
|
||||
void opal_tracepoint_regfunc(void)
|
||||
int opal_tracepoint_regfunc(void)
|
||||
{
|
||||
opal_tracepoint_refcount++;
|
||||
return 0;
|
||||
}
|
||||
|
||||
void opal_tracepoint_unregfunc(void)
|
||||
|
@@ -661,9 +661,10 @@ EXPORT_SYMBOL(arch_free_page);
|
||||
#ifdef HAVE_JUMP_LABEL
|
||||
struct static_key hcall_tracepoint_key = STATIC_KEY_INIT;
|
||||
|
||||
void hcall_tracepoint_regfunc(void)
|
||||
int hcall_tracepoint_regfunc(void)
|
||||
{
|
||||
static_key_slow_inc(&hcall_tracepoint_key);
|
||||
return 0;
|
||||
}
|
||||
|
||||
void hcall_tracepoint_unregfunc(void)
|
||||
@@ -680,9 +681,10 @@ void hcall_tracepoint_unregfunc(void)
|
||||
/* NB: reg/unreg are called while guarded with the tracepoints_mutex */
|
||||
extern long hcall_tracepoint_refcount;
|
||||
|
||||
void hcall_tracepoint_regfunc(void)
|
||||
int hcall_tracepoint_regfunc(void)
|
||||
{
|
||||
hcall_tracepoint_refcount++;
|
||||
return 0;
|
||||
}
|
||||
|
||||
void hcall_tracepoint_unregfunc(void)
|
||||
|
@@ -6,7 +6,7 @@
|
||||
|
||||
#include <linux/tracepoint.h>
|
||||
|
||||
extern void trace_irq_vector_regfunc(void);
|
||||
extern int trace_irq_vector_regfunc(void);
|
||||
extern void trace_irq_vector_unregfunc(void);
|
||||
|
||||
DECLARE_EVENT_CLASS(x86_exceptions,
|
||||
|
@@ -6,7 +6,7 @@
|
||||
|
||||
#include <linux/tracepoint.h>
|
||||
|
||||
extern void trace_irq_vector_regfunc(void);
|
||||
extern int trace_irq_vector_regfunc(void);
|
||||
extern void trace_irq_vector_unregfunc(void);
|
||||
|
||||
DECLARE_EVENT_CLASS(x86_irq_vector,
|
||||
|
@@ -34,7 +34,7 @@ static void switch_idt(void *arg)
|
||||
local_irq_restore(flags);
|
||||
}
|
||||
|
||||
void trace_irq_vector_regfunc(void)
|
||||
int trace_irq_vector_regfunc(void)
|
||||
{
|
||||
mutex_lock(&irq_vector_mutex);
|
||||
if (!trace_irq_vector_refcount) {
|
||||
@@ -44,6 +44,7 @@ void trace_irq_vector_regfunc(void)
|
||||
}
|
||||
trace_irq_vector_refcount++;
|
||||
mutex_unlock(&irq_vector_mutex);
|
||||
return 0;
|
||||
}
|
||||
|
||||
void trace_irq_vector_unregfunc(void)
|
||||
|
Reference in New Issue
Block a user