forked from mirrors/linux
		
	Using initcall_t in the __field macro generates the following warning
with clang version 6.0:
include/trace/events/initcall.h:34:3: warning: ordered comparison of
function pointers ('initcall_t' (aka 'int (*)(void)') and 'initcall_t')
__field macro expands to __field_ext macro which does is_signed_type
check on the type argument. Since initcall_t is defined as a function
pointer, using it as the type in the __field macro, leads to an ordered
comparison of function pointer warning, inside the check. Using
__field_struct macro avoids the issue.
Link: http://lkml.kernel.org/r/1524699755-29388-1-git-send-email-rishabhb@codeaurora.org
Signed-off-by: Rishabh Bhatnagar <rishabhb@codeaurora.org>
[ Added comment to why we are using field_struct() ]
Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
		
	
			
		
			
				
	
	
		
			74 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			74 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/* SPDX-License-Identifier: GPL-2.0 */
 | 
						|
#undef TRACE_SYSTEM
 | 
						|
#define TRACE_SYSTEM initcall
 | 
						|
 | 
						|
#if !defined(_TRACE_INITCALL_H) || defined(TRACE_HEADER_MULTI_READ)
 | 
						|
#define _TRACE_INITCALL_H
 | 
						|
 | 
						|
#include <linux/tracepoint.h>
 | 
						|
 | 
						|
TRACE_EVENT(initcall_level,
 | 
						|
 | 
						|
	TP_PROTO(const char *level),
 | 
						|
 | 
						|
	TP_ARGS(level),
 | 
						|
 | 
						|
	TP_STRUCT__entry(
 | 
						|
		__string(level, level)
 | 
						|
	),
 | 
						|
 | 
						|
	TP_fast_assign(
 | 
						|
		__assign_str(level, level);
 | 
						|
	),
 | 
						|
 | 
						|
	TP_printk("level=%s", __get_str(level))
 | 
						|
);
 | 
						|
 | 
						|
TRACE_EVENT(initcall_start,
 | 
						|
 | 
						|
	TP_PROTO(initcall_t func),
 | 
						|
 | 
						|
	TP_ARGS(func),
 | 
						|
 | 
						|
	TP_STRUCT__entry(
 | 
						|
		/*
 | 
						|
		 * Use field_struct to avoid is_signed_type()
 | 
						|
		 * comparison of a function pointer
 | 
						|
		 */
 | 
						|
		__field_struct(initcall_t, func)
 | 
						|
	),
 | 
						|
 | 
						|
	TP_fast_assign(
 | 
						|
		__entry->func = func;
 | 
						|
	),
 | 
						|
 | 
						|
	TP_printk("func=%pS", __entry->func)
 | 
						|
);
 | 
						|
 | 
						|
TRACE_EVENT(initcall_finish,
 | 
						|
 | 
						|
	TP_PROTO(initcall_t func, int ret),
 | 
						|
 | 
						|
	TP_ARGS(func, ret),
 | 
						|
 | 
						|
	TP_STRUCT__entry(
 | 
						|
		/*
 | 
						|
		 * Use field_struct to avoid is_signed_type()
 | 
						|
		 * comparison of a function pointer
 | 
						|
		 */
 | 
						|
		__field_struct(initcall_t,	func)
 | 
						|
		__field(int,			ret)
 | 
						|
	),
 | 
						|
 | 
						|
	TP_fast_assign(
 | 
						|
		__entry->func = func;
 | 
						|
		__entry->ret = ret;
 | 
						|
	),
 | 
						|
 | 
						|
	TP_printk("func=%pS ret=%d", __entry->func, __entry->ret)
 | 
						|
);
 | 
						|
 | 
						|
#endif /* if !defined(_TRACE_GPIO_H) || defined(TRACE_HEADER_MULTI_READ) */
 | 
						|
 | 
						|
/* This part must be outside protection */
 | 
						|
#include <trace/define_trace.h>
 |