|
@@ -23,8 +23,10 @@
|
|
|
* function and thus become accesible via perf.
|
|
|
*/
|
|
|
#undef FTRACE_ENTRY_REG
|
|
|
-#define FTRACE_ENTRY_REG(name, struct_name, id, tstruct, print, regfn) \
|
|
|
- FTRACE_ENTRY(name, struct_name, id, PARAMS(tstruct), PARAMS(print))
|
|
|
+#define FTRACE_ENTRY_REG(name, struct_name, id, tstruct, print, \
|
|
|
+ filter, regfn) \
|
|
|
+ FTRACE_ENTRY(name, struct_name, id, PARAMS(tstruct), PARAMS(print), \
|
|
|
+ filter)
|
|
|
|
|
|
/* not needed for this file */
|
|
|
#undef __field_struct
|
|
@@ -52,21 +54,22 @@
|
|
|
#define F_printk(fmt, args...) fmt, args
|
|
|
|
|
|
#undef FTRACE_ENTRY
|
|
|
-#define FTRACE_ENTRY(name, struct_name, id, tstruct, print) \
|
|
|
-struct ____ftrace_##name { \
|
|
|
- tstruct \
|
|
|
-}; \
|
|
|
-static void __always_unused ____ftrace_check_##name(void) \
|
|
|
-{ \
|
|
|
- struct ____ftrace_##name *__entry = NULL; \
|
|
|
- \
|
|
|
- /* force compile-time check on F_printk() */ \
|
|
|
- printk(print); \
|
|
|
+#define FTRACE_ENTRY(name, struct_name, id, tstruct, print, filter) \
|
|
|
+struct ____ftrace_##name { \
|
|
|
+ tstruct \
|
|
|
+}; \
|
|
|
+static void __always_unused ____ftrace_check_##name(void) \
|
|
|
+{ \
|
|
|
+ struct ____ftrace_##name *__entry = NULL; \
|
|
|
+ \
|
|
|
+ /* force compile-time check on F_printk() */ \
|
|
|
+ printk(print); \
|
|
|
}
|
|
|
|
|
|
#undef FTRACE_ENTRY_DUP
|
|
|
-#define FTRACE_ENTRY_DUP(name, struct_name, id, tstruct, print) \
|
|
|
- FTRACE_ENTRY(name, struct_name, id, PARAMS(tstruct), PARAMS(print))
|
|
|
+#define FTRACE_ENTRY_DUP(name, struct_name, id, tstruct, print, filter) \
|
|
|
+ FTRACE_ENTRY(name, struct_name, id, PARAMS(tstruct), PARAMS(print), \
|
|
|
+ filter)
|
|
|
|
|
|
#include "trace_entries.h"
|
|
|
|
|
@@ -75,7 +78,7 @@ static void __always_unused ____ftrace_check_##name(void) \
|
|
|
ret = trace_define_field(event_call, #type, #item, \
|
|
|
offsetof(typeof(field), item), \
|
|
|
sizeof(field.item), \
|
|
|
- is_signed_type(type), FILTER_OTHER); \
|
|
|
+ is_signed_type(type), filter_type); \
|
|
|
if (ret) \
|
|
|
return ret;
|
|
|
|
|
@@ -85,7 +88,7 @@ static void __always_unused ____ftrace_check_##name(void) \
|
|
|
offsetof(typeof(field), \
|
|
|
container.item), \
|
|
|
sizeof(field.container.item), \
|
|
|
- is_signed_type(type), FILTER_OTHER); \
|
|
|
+ is_signed_type(type), filter_type); \
|
|
|
if (ret) \
|
|
|
return ret;
|
|
|
|
|
@@ -99,7 +102,7 @@ static void __always_unused ____ftrace_check_##name(void) \
|
|
|
ret = trace_define_field(event_call, event_storage, #item, \
|
|
|
offsetof(typeof(field), item), \
|
|
|
sizeof(field.item), \
|
|
|
- is_signed_type(type), FILTER_OTHER); \
|
|
|
+ is_signed_type(type), filter_type); \
|
|
|
mutex_unlock(&event_storage_mutex); \
|
|
|
if (ret) \
|
|
|
return ret; \
|
|
@@ -112,7 +115,7 @@ static void __always_unused ____ftrace_check_##name(void) \
|
|
|
offsetof(typeof(field), \
|
|
|
container.item), \
|
|
|
sizeof(field.container.item), \
|
|
|
- is_signed_type(type), FILTER_OTHER); \
|
|
|
+ is_signed_type(type), filter_type); \
|
|
|
if (ret) \
|
|
|
return ret;
|
|
|
|
|
@@ -120,17 +123,18 @@ static void __always_unused ____ftrace_check_##name(void) \
|
|
|
#define __dynamic_array(type, item) \
|
|
|
ret = trace_define_field(event_call, #type, #item, \
|
|
|
offsetof(typeof(field), item), \
|
|
|
- 0, is_signed_type(type), FILTER_OTHER);\
|
|
|
+ 0, is_signed_type(type), filter_type);\
|
|
|
if (ret) \
|
|
|
return ret;
|
|
|
|
|
|
#undef FTRACE_ENTRY
|
|
|
-#define FTRACE_ENTRY(name, struct_name, id, tstruct, print) \
|
|
|
+#define FTRACE_ENTRY(name, struct_name, id, tstruct, print, filter) \
|
|
|
int \
|
|
|
ftrace_define_fields_##name(struct ftrace_event_call *event_call) \
|
|
|
{ \
|
|
|
struct struct_name field; \
|
|
|
int ret; \
|
|
|
+ int filter_type = filter; \
|
|
|
\
|
|
|
tstruct; \
|
|
|
\
|
|
@@ -161,7 +165,8 @@ ftrace_define_fields_##name(struct ftrace_event_call *event_call) \
|
|
|
#define F_printk(fmt, args...) #fmt ", " __stringify(args)
|
|
|
|
|
|
#undef FTRACE_ENTRY_REG
|
|
|
-#define FTRACE_ENTRY_REG(call, struct_name, etype, tstruct, print, regfn)\
|
|
|
+#define FTRACE_ENTRY_REG(call, struct_name, etype, tstruct, print, filter,\
|
|
|
+ regfn) \
|
|
|
\
|
|
|
struct ftrace_event_class event_class_ftrace_##call = { \
|
|
|
.system = __stringify(TRACE_SYSTEM), \
|
|
@@ -180,9 +185,9 @@ struct ftrace_event_call __used \
|
|
|
__attribute__((section("_ftrace_events"))) *__event_##call = &event_##call;
|
|
|
|
|
|
#undef FTRACE_ENTRY
|
|
|
-#define FTRACE_ENTRY(call, struct_name, etype, tstruct, print) \
|
|
|
+#define FTRACE_ENTRY(call, struct_name, etype, tstruct, print, filter) \
|
|
|
FTRACE_ENTRY_REG(call, struct_name, etype, \
|
|
|
- PARAMS(tstruct), PARAMS(print), NULL)
|
|
|
+ PARAMS(tstruct), PARAMS(print), filter, NULL)
|
|
|
|
|
|
int ftrace_event_is_function(struct ftrace_event_call *call)
|
|
|
{
|