diff options
Diffstat (limited to 'kernel/trace/trace_export.c')
| -rw-r--r-- | kernel/trace/trace_export.c | 106 | 
1 files changed, 39 insertions, 67 deletions
diff --git a/kernel/trace/trace_export.c b/kernel/trace/trace_export.c index 2e6d2e9741cc..77ce5a3b6773 100644 --- a/kernel/trace/trace_export.c +++ b/kernel/trace/trace_export.c @@ -29,10 +29,8 @@ static int ftrace_event_register(struct trace_event_call *call,   * function and thus become accesible via perf.   */  #undef FTRACE_ENTRY_REG -#define FTRACE_ENTRY_REG(name, struct_name, id, tstruct, print, \ -			 filter, regfn) \ -	FTRACE_ENTRY(name, struct_name, id, PARAMS(tstruct), PARAMS(print), \ -		     filter) +#define FTRACE_ENTRY_REG(name, struct_name, id, tstruct, print, regfn) \ +	FTRACE_ENTRY(name, struct_name, id, PARAMS(tstruct), PARAMS(print))  /* not needed for this file */  #undef __field_struct @@ -41,6 +39,9 @@ static int ftrace_event_register(struct trace_event_call *call,  #undef __field  #define __field(type, item)				type item; +#undef __field_fn +#define __field_fn(type, item)				type item; +  #undef __field_desc  #define __field_desc(type, container, item)		type item; @@ -60,7 +61,7 @@ static int ftrace_event_register(struct trace_event_call *call,  #define F_printk(fmt, args...) fmt, args  #undef FTRACE_ENTRY -#define FTRACE_ENTRY(name, struct_name, id, tstruct, print, filter)	\ +#define FTRACE_ENTRY(name, struct_name, id, tstruct, print)		\  struct ____ftrace_##name {						\  	tstruct								\  };									\ @@ -73,76 +74,46 @@ static void __always_unused ____ftrace_check_##name(void)		\  }  #undef FTRACE_ENTRY_DUP -#define FTRACE_ENTRY_DUP(name, struct_name, id, tstruct, print, filter)	\ -	FTRACE_ENTRY(name, struct_name, id, PARAMS(tstruct), PARAMS(print), \ -		     filter) +#define FTRACE_ENTRY_DUP(name, struct_name, id, tstruct, print)		\ +	FTRACE_ENTRY(name, struct_name, id, PARAMS(tstruct), PARAMS(print))  #include "trace_entries.h" +#undef __field_ext +#define __field_ext(_type, _item, _filter_type) {			\ +	.type = #_type, .name = #_item,					\ +	.size = sizeof(_type), .align = __alignof__(_type),		\ +	is_signed_type(_type), .filter_type = _filter_type }, +  #undef __field -#define __field(type, item)						\ -	ret = trace_define_field(event_call, #type, #item,		\ -				 offsetof(typeof(field), item),		\ -				 sizeof(field.item),			\ -				 is_signed_type(type), filter_type);	\ -	if (ret)							\ -		return ret; +#define __field(_type, _item) __field_ext(_type, _item, FILTER_OTHER) + +#undef __field_fn +#define __field_fn(_type, _item) __field_ext(_type, _item, FILTER_TRACE_FN)  #undef __field_desc -#define __field_desc(type, container, item)	\ -	ret = trace_define_field(event_call, #type, #item,		\ -				 offsetof(typeof(field),		\ -					  container.item),		\ -				 sizeof(field.container.item),		\ -				 is_signed_type(type), filter_type);	\ -	if (ret)							\ -		return ret; +#define __field_desc(_type, _container, _item) __field_ext(_type, _item, FILTER_OTHER)  #undef __array -#define __array(type, item, len)					\ -	do {								\ -		char *type_str = #type"["__stringify(len)"]";		\ -		BUILD_BUG_ON(len > MAX_FILTER_STR_VAL);			\ -		ret = trace_define_field(event_call, type_str, #item,	\ -				 offsetof(typeof(field), item),		\ -				 sizeof(field.item),			\ -				 is_signed_type(type), filter_type);	\ -		if (ret)						\ -			return ret;					\ -	} while (0); +#define __array(_type, _item, _len) {					\ +	.type = #_type"["__stringify(_len)"]", .name = #_item,		\ +	.size = sizeof(_type[_len]), .align = __alignof__(_type),	\ +	is_signed_type(_type), .filter_type = FILTER_OTHER },  #undef __array_desc -#define __array_desc(type, container, item, len)			\ -	BUILD_BUG_ON(len > MAX_FILTER_STR_VAL);				\ -	ret = trace_define_field(event_call, #type "[" #len "]", #item,	\ -				 offsetof(typeof(field),		\ -					  container.item),		\ -				 sizeof(field.container.item),		\ -				 is_signed_type(type), filter_type);	\ -	if (ret)							\ -		return ret; +#define __array_desc(_type, _container, _item, _len) __array(_type, _item, _len)  #undef __dynamic_array -#define __dynamic_array(type, item)					\ -	ret = trace_define_field(event_call, #type "[]", #item,  \ -				 offsetof(typeof(field), item),		\ -				 0, is_signed_type(type), filter_type);\ -	if (ret)							\ -		return ret; +#define __dynamic_array(_type, _item) {					\ +	.type = #_type "[]", .name = #_item,				\ +	.size = 0, .align = __alignof__(_type),				\ +	is_signed_type(_type), .filter_type = FILTER_OTHER },  #undef FTRACE_ENTRY -#define FTRACE_ENTRY(name, struct_name, id, tstruct, print, filter)	\ -static int __init							\ -ftrace_define_fields_##name(struct trace_event_call *event_call)	\ -{									\ -	struct struct_name field;					\ -	int ret;							\ -	int filter_type = filter;					\ -									\ -	tstruct;							\ -									\ -	return ret;							\ -} +#define FTRACE_ENTRY(name, struct_name, id, tstruct, print)		\ +static struct trace_event_fields ftrace_event_fields_##name[] = {	\ +	tstruct								\ +	{} };  #include "trace_entries.h" @@ -152,6 +123,9 @@ ftrace_define_fields_##name(struct trace_event_call *event_call)	\  #undef __field  #define __field(type, item) +#undef __field_fn +#define __field_fn(type, item) +  #undef __field_desc  #define __field_desc(type, container, item) @@ -168,12 +142,10 @@ ftrace_define_fields_##name(struct trace_event_call *event_call)	\  #define F_printk(fmt, args...) __stringify(fmt) ", "  __stringify(args)  #undef FTRACE_ENTRY_REG -#define FTRACE_ENTRY_REG(call, struct_name, etype, tstruct, print, filter,\ -			 regfn)						\ -									\ +#define FTRACE_ENTRY_REG(call, struct_name, etype, tstruct, print, regfn) \  static struct trace_event_class __refdata event_class_ftrace_##call = {	\  	.system			= __stringify(TRACE_SYSTEM),		\ -	.define_fields		= ftrace_define_fields_##call,		\ +	.fields_array		= ftrace_event_fields_##call,		\  	.fields			= LIST_HEAD_INIT(event_class_ftrace_##call.fields),\  	.reg			= regfn,				\  };									\ @@ -191,9 +163,9 @@ static struct trace_event_call __used						\  __attribute__((section("_ftrace_events"))) *__event_##call = &event_##call;  #undef FTRACE_ENTRY -#define FTRACE_ENTRY(call, struct_name, etype, tstruct, print, filter)	\ +#define FTRACE_ENTRY(call, struct_name, etype, tstruct, print)		\  	FTRACE_ENTRY_REG(call, struct_name, etype,			\ -			 PARAMS(tstruct), PARAMS(print), filter, NULL) +			 PARAMS(tstruct), PARAMS(print), NULL)  bool ftrace_event_is_function(struct trace_event_call *call)  {  |