diff options
Diffstat (limited to 'include/linux/syscalls.h')
| -rw-r--r-- | include/linux/syscalls.h | 81 | 
1 files changed, 18 insertions, 63 deletions
diff --git a/include/linux/syscalls.h b/include/linux/syscalls.h index a990ace1a83..bc70c5810fe 100644 --- a/include/linux/syscalls.h +++ b/include/linux/syscalls.h @@ -25,6 +25,7 @@ struct linux_dirent64;  struct list_head;  struct msgbuf;  struct msghdr; +struct mmsghdr;  struct msqid_ds;  struct new_utsname;  struct nfsctl_arg; @@ -99,37 +100,16 @@ struct perf_event_attr;  #define __SC_TEST6(t6, a6, ...)	__SC_TEST(t6); __SC_TEST5(__VA_ARGS__)  #ifdef CONFIG_EVENT_PROFILE -#define TRACE_SYS_ENTER_PROFILE(sname)					       \ -static int prof_sysenter_enable_##sname(void)				       \ -{									       \ -	return reg_prof_syscall_enter("sys"#sname);			       \ -}									       \ -									       \ -static void prof_sysenter_disable_##sname(void)				       \ -{									       \ -	unreg_prof_syscall_enter("sys"#sname);				       \ -} - -#define TRACE_SYS_EXIT_PROFILE(sname)					       \ -static int prof_sysexit_enable_##sname(void)				       \ -{									       \ -	return reg_prof_syscall_exit("sys"#sname);			       \ -}									       \ -									       \ -static void prof_sysexit_disable_##sname(void)				       \ -{                                                                              \ -	unreg_prof_syscall_exit("sys"#sname);				       \ -}  #define TRACE_SYS_ENTER_PROFILE_INIT(sname)				       \  	.profile_count = ATOMIC_INIT(-1),				       \ -	.profile_enable = prof_sysenter_enable_##sname,			       \ -	.profile_disable = prof_sysenter_disable_##sname, +	.profile_enable = prof_sysenter_enable,				       \ +	.profile_disable = prof_sysenter_disable,  #define TRACE_SYS_EXIT_PROFILE_INIT(sname)				       \  	.profile_count = ATOMIC_INIT(-1),				       \ -	.profile_enable = prof_sysexit_enable_##sname,			       \ -	.profile_disable = prof_sysexit_disable_##sname, +	.profile_enable = prof_sysexit_enable,				       \ +	.profile_disable = prof_sysexit_disable,  #else  #define TRACE_SYS_ENTER_PROFILE(sname)  #define TRACE_SYS_ENTER_PROFILE_INIT(sname) @@ -153,74 +133,46 @@ static void prof_sysexit_disable_##sname(void)				       \  #define __SC_STR_TDECL6(t, a, ...)	#t, __SC_STR_TDECL5(__VA_ARGS__)  #define SYSCALL_TRACE_ENTER_EVENT(sname)				\ +	static const struct syscall_metadata __syscall_meta_##sname;	\  	static struct ftrace_event_call event_enter_##sname;		\ -	struct trace_event enter_syscall_print_##sname = {		\ +	static struct trace_event enter_syscall_print_##sname = {	\  		.trace                  = print_syscall_enter,		\  	};								\ -	static int init_enter_##sname(void)				\ -	{								\ -		int num, id;						\ -		num = syscall_name_to_nr("sys"#sname);			\ -		if (num < 0)						\ -			return -ENOSYS;					\ -		id = register_ftrace_event(&enter_syscall_print_##sname);\ -		if (!id)						\ -			return -ENODEV;					\ -		event_enter_##sname.id = id;				\ -		set_syscall_enter_id(num, id);				\ -		INIT_LIST_HEAD(&event_enter_##sname.fields);		\ -		return 0;						\ -	}								\ -	TRACE_SYS_ENTER_PROFILE(sname);					\  	static struct ftrace_event_call __used				\  	  __attribute__((__aligned__(4)))				\  	  __attribute__((section("_ftrace_events")))			\  	  event_enter_##sname = {					\  		.name                   = "sys_enter"#sname,		\  		.system                 = "syscalls",			\ -		.event                  = &event_syscall_enter,		\ -		.raw_init		= init_enter_##sname,		\ +		.event                  = &enter_syscall_print_##sname,	\ +		.raw_init		= init_syscall_trace,		\  		.show_format		= syscall_enter_format,		\  		.define_fields		= syscall_enter_define_fields,	\  		.regfunc		= reg_event_syscall_enter,	\  		.unregfunc		= unreg_event_syscall_enter,	\ -		.data			= "sys"#sname,			\ +		.data			= (void *)&__syscall_meta_##sname,\  		TRACE_SYS_ENTER_PROFILE_INIT(sname)			\  	}  #define SYSCALL_TRACE_EXIT_EVENT(sname)					\ +	static const struct syscall_metadata __syscall_meta_##sname;	\  	static struct ftrace_event_call event_exit_##sname;		\ -	struct trace_event exit_syscall_print_##sname = {		\ +	static struct trace_event exit_syscall_print_##sname = {	\  		.trace                  = print_syscall_exit,		\  	};								\ -	static int init_exit_##sname(void)				\ -	{								\ -		int num, id;						\ -		num = syscall_name_to_nr("sys"#sname);			\ -		if (num < 0)						\ -			return -ENOSYS;					\ -		id = register_ftrace_event(&exit_syscall_print_##sname);\ -		if (!id)						\ -			return -ENODEV;					\ -		event_exit_##sname.id = id;				\ -		set_syscall_exit_id(num, id);				\ -		INIT_LIST_HEAD(&event_exit_##sname.fields);		\ -		return 0;						\ -	}								\ -	TRACE_SYS_EXIT_PROFILE(sname);					\  	static struct ftrace_event_call __used				\  	  __attribute__((__aligned__(4)))				\  	  __attribute__((section("_ftrace_events")))			\  	  event_exit_##sname = {					\  		.name                   = "sys_exit"#sname,		\  		.system                 = "syscalls",			\ -		.event                  = &event_syscall_exit,		\ -		.raw_init		= init_exit_##sname,		\ +		.event                  = &exit_syscall_print_##sname,	\ +		.raw_init		= init_syscall_trace,		\  		.show_format		= syscall_exit_format,		\  		.define_fields		= syscall_exit_define_fields,	\  		.regfunc		= reg_event_syscall_exit,	\  		.unregfunc		= unreg_event_syscall_exit,	\ -		.data			= "sys"#sname,			\ +		.data			= (void *)&__syscall_meta_##sname,\  		TRACE_SYS_EXIT_PROFILE_INIT(sname)			\  	} @@ -677,6 +629,9 @@ asmlinkage long sys_recv(int, void __user *, size_t, unsigned);  asmlinkage long sys_recvfrom(int, void __user *, size_t, unsigned,  				struct sockaddr __user *, int __user *);  asmlinkage long sys_recvmsg(int fd, struct msghdr __user *msg, unsigned flags); +asmlinkage long sys_recvmmsg(int fd, struct mmsghdr __user *msg, +			     unsigned int vlen, unsigned flags, +			     struct timespec __user *timeout);  asmlinkage long sys_socket(int, int, int);  asmlinkage long sys_socketpair(int, int, int, int __user *);  asmlinkage long sys_socketcall(int call, unsigned long __user *args);  |