aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/syscalls.h
diff options
context:
space:
mode:
authorAnton Vorontsov <avorontsov@ru.mvista.com>2009-09-22 19:49:27 -0400
committerAnton Vorontsov <avorontsov@ru.mvista.com>2009-09-22 19:49:27 -0400
commitf056878332a91ed984a116bad4e7d49aefff9e6e (patch)
tree572f4757c8e7811d45e0be0c2ae529c78fb63441 /include/linux/syscalls.h
parent3961f7c3cf247eee5df7fabadc7a40f2deeb98f3 (diff)
parent7fa07729e439a6184bd824746d06a49cca553f15 (diff)
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6
Conflicts: drivers/power/wm97xx_battery.c
Diffstat (limited to 'include/linux/syscalls.h')
-rw-r--r--include/linux/syscalls.h131
1 files changed, 126 insertions, 5 deletions
diff --git a/include/linux/syscalls.h b/include/linux/syscalls.h
index fa4242cdade8..8d8285a10db9 100644
--- a/include/linux/syscalls.h
+++ b/include/linux/syscalls.h
@@ -55,7 +55,7 @@ struct compat_timeval;
55struct robust_list_head; 55struct robust_list_head;
56struct getcpu_cache; 56struct getcpu_cache;
57struct old_linux_dirent; 57struct old_linux_dirent;
58struct perf_counter_attr; 58struct perf_event_attr;
59 59
60#include <linux/types.h> 60#include <linux/types.h>
61#include <linux/aio_abi.h> 61#include <linux/aio_abi.h>
@@ -64,6 +64,7 @@ struct perf_counter_attr;
64#include <linux/sem.h> 64#include <linux/sem.h>
65#include <asm/siginfo.h> 65#include <asm/siginfo.h>
66#include <asm/signal.h> 66#include <asm/signal.h>
67#include <linux/unistd.h>
67#include <linux/quota.h> 68#include <linux/quota.h>
68#include <linux/key.h> 69#include <linux/key.h>
69#include <trace/syscall.h> 70#include <trace/syscall.h>
@@ -97,6 +98,45 @@ struct perf_counter_attr;
97#define __SC_TEST5(t5, a5, ...) __SC_TEST(t5); __SC_TEST4(__VA_ARGS__) 98#define __SC_TEST5(t5, a5, ...) __SC_TEST(t5); __SC_TEST4(__VA_ARGS__)
98#define __SC_TEST6(t6, a6, ...) __SC_TEST(t6); __SC_TEST5(__VA_ARGS__) 99#define __SC_TEST6(t6, a6, ...) __SC_TEST(t6); __SC_TEST5(__VA_ARGS__)
99 100
101#ifdef CONFIG_EVENT_PROFILE
102#define TRACE_SYS_ENTER_PROFILE(sname) \
103static int prof_sysenter_enable_##sname(void) \
104{ \
105 return reg_prof_syscall_enter("sys"#sname); \
106} \
107 \
108static void prof_sysenter_disable_##sname(void) \
109{ \
110 unreg_prof_syscall_enter("sys"#sname); \
111}
112
113#define TRACE_SYS_EXIT_PROFILE(sname) \
114static int prof_sysexit_enable_##sname(void) \
115{ \
116 return reg_prof_syscall_exit("sys"#sname); \
117} \
118 \
119static void prof_sysexit_disable_##sname(void) \
120{ \
121 unreg_prof_syscall_exit("sys"#sname); \
122}
123
124#define TRACE_SYS_ENTER_PROFILE_INIT(sname) \
125 .profile_count = ATOMIC_INIT(-1), \
126 .profile_enable = prof_sysenter_enable_##sname, \
127 .profile_disable = prof_sysenter_disable_##sname,
128
129#define TRACE_SYS_EXIT_PROFILE_INIT(sname) \
130 .profile_count = ATOMIC_INIT(-1), \
131 .profile_enable = prof_sysexit_enable_##sname, \
132 .profile_disable = prof_sysexit_disable_##sname,
133#else
134#define TRACE_SYS_ENTER_PROFILE(sname)
135#define TRACE_SYS_ENTER_PROFILE_INIT(sname)
136#define TRACE_SYS_EXIT_PROFILE(sname)
137#define TRACE_SYS_EXIT_PROFILE_INIT(sname)
138#endif
139
100#ifdef CONFIG_FTRACE_SYSCALLS 140#ifdef CONFIG_FTRACE_SYSCALLS
101#define __SC_STR_ADECL1(t, a) #a 141#define __SC_STR_ADECL1(t, a) #a
102#define __SC_STR_ADECL2(t, a, ...) #a, __SC_STR_ADECL1(__VA_ARGS__) 142#define __SC_STR_ADECL2(t, a, ...) #a, __SC_STR_ADECL1(__VA_ARGS__)
@@ -112,7 +152,81 @@ struct perf_counter_attr;
112#define __SC_STR_TDECL5(t, a, ...) #t, __SC_STR_TDECL4(__VA_ARGS__) 152#define __SC_STR_TDECL5(t, a, ...) #t, __SC_STR_TDECL4(__VA_ARGS__)
113#define __SC_STR_TDECL6(t, a, ...) #t, __SC_STR_TDECL5(__VA_ARGS__) 153#define __SC_STR_TDECL6(t, a, ...) #t, __SC_STR_TDECL5(__VA_ARGS__)
114 154
155#define SYSCALL_TRACE_ENTER_EVENT(sname) \
156 static struct ftrace_event_call event_enter_##sname; \
157 struct trace_event enter_syscall_print_##sname = { \
158 .trace = print_syscall_enter, \
159 }; \
160 static int init_enter_##sname(void) \
161 { \
162 int num, id; \
163 num = syscall_name_to_nr("sys"#sname); \
164 if (num < 0) \
165 return -ENOSYS; \
166 id = register_ftrace_event(&enter_syscall_print_##sname);\
167 if (!id) \
168 return -ENODEV; \
169 event_enter_##sname.id = id; \
170 set_syscall_enter_id(num, id); \
171 INIT_LIST_HEAD(&event_enter_##sname.fields); \
172 return 0; \
173 } \
174 TRACE_SYS_ENTER_PROFILE(sname); \
175 static struct ftrace_event_call __used \
176 __attribute__((__aligned__(4))) \
177 __attribute__((section("_ftrace_events"))) \
178 event_enter_##sname = { \
179 .name = "sys_enter"#sname, \
180 .system = "syscalls", \
181 .event = &event_syscall_enter, \
182 .raw_init = init_enter_##sname, \
183 .show_format = syscall_enter_format, \
184 .define_fields = syscall_enter_define_fields, \
185 .regfunc = reg_event_syscall_enter, \
186 .unregfunc = unreg_event_syscall_enter, \
187 .data = "sys"#sname, \
188 TRACE_SYS_ENTER_PROFILE_INIT(sname) \
189 }
190
191#define SYSCALL_TRACE_EXIT_EVENT(sname) \
192 static struct ftrace_event_call event_exit_##sname; \
193 struct trace_event exit_syscall_print_##sname = { \
194 .trace = print_syscall_exit, \
195 }; \
196 static int init_exit_##sname(void) \
197 { \
198 int num, id; \
199 num = syscall_name_to_nr("sys"#sname); \
200 if (num < 0) \
201 return -ENOSYS; \
202 id = register_ftrace_event(&exit_syscall_print_##sname);\
203 if (!id) \
204 return -ENODEV; \
205 event_exit_##sname.id = id; \
206 set_syscall_exit_id(num, id); \
207 INIT_LIST_HEAD(&event_exit_##sname.fields); \
208 return 0; \
209 } \
210 TRACE_SYS_EXIT_PROFILE(sname); \
211 static struct ftrace_event_call __used \
212 __attribute__((__aligned__(4))) \
213 __attribute__((section("_ftrace_events"))) \
214 event_exit_##sname = { \
215 .name = "sys_exit"#sname, \
216 .system = "syscalls", \
217 .event = &event_syscall_exit, \
218 .raw_init = init_exit_##sname, \
219 .show_format = syscall_exit_format, \
220 .define_fields = syscall_exit_define_fields, \
221 .regfunc = reg_event_syscall_exit, \
222 .unregfunc = unreg_event_syscall_exit, \
223 .data = "sys"#sname, \
224 TRACE_SYS_EXIT_PROFILE_INIT(sname) \
225 }
226
115#define SYSCALL_METADATA(sname, nb) \ 227#define SYSCALL_METADATA(sname, nb) \
228 SYSCALL_TRACE_ENTER_EVENT(sname); \
229 SYSCALL_TRACE_EXIT_EVENT(sname); \
116 static const struct syscall_metadata __used \ 230 static const struct syscall_metadata __used \
117 __attribute__((__aligned__(4))) \ 231 __attribute__((__aligned__(4))) \
118 __attribute__((section("__syscalls_metadata"))) \ 232 __attribute__((section("__syscalls_metadata"))) \
@@ -121,18 +235,23 @@ struct perf_counter_attr;
121 .nb_args = nb, \ 235 .nb_args = nb, \
122 .types = types_##sname, \ 236 .types = types_##sname, \
123 .args = args_##sname, \ 237 .args = args_##sname, \
124 } 238 .enter_event = &event_enter_##sname, \
239 .exit_event = &event_exit_##sname, \
240 };
125 241
126#define SYSCALL_DEFINE0(sname) \ 242#define SYSCALL_DEFINE0(sname) \
243 SYSCALL_TRACE_ENTER_EVENT(_##sname); \
244 SYSCALL_TRACE_EXIT_EVENT(_##sname); \
127 static const struct syscall_metadata __used \ 245 static const struct syscall_metadata __used \
128 __attribute__((__aligned__(4))) \ 246 __attribute__((__aligned__(4))) \
129 __attribute__((section("__syscalls_metadata"))) \ 247 __attribute__((section("__syscalls_metadata"))) \
130 __syscall_meta_##sname = { \ 248 __syscall_meta_##sname = { \
131 .name = "sys_"#sname, \ 249 .name = "sys_"#sname, \
132 .nb_args = 0, \ 250 .nb_args = 0, \
251 .enter_event = &event_enter__##sname, \
252 .exit_event = &event_exit__##sname, \
133 }; \ 253 }; \
134 asmlinkage long sys_##sname(void) 254 asmlinkage long sys_##sname(void)
135
136#else 255#else
137#define SYSCALL_DEFINE0(name) asmlinkage long sys_##name(void) 256#define SYSCALL_DEFINE0(name) asmlinkage long sys_##name(void)
138#endif 257#endif
@@ -321,6 +440,8 @@ asmlinkage long sys_rt_sigtimedwait(const sigset_t __user *uthese,
321 siginfo_t __user *uinfo, 440 siginfo_t __user *uinfo,
322 const struct timespec __user *uts, 441 const struct timespec __user *uts,
323 size_t sigsetsize); 442 size_t sigsetsize);
443asmlinkage long sys_rt_tgsigqueueinfo(pid_t tgid, pid_t pid, int sig,
444 siginfo_t __user *uinfo);
324asmlinkage long sys_kill(int pid, int sig); 445asmlinkage long sys_kill(int pid, int sig);
325asmlinkage long sys_tgkill(int tgid, int pid, int sig); 446asmlinkage long sys_tgkill(int tgid, int pid, int sig);
326asmlinkage long sys_tkill(int pid, int sig); 447asmlinkage long sys_tkill(int pid, int sig);
@@ -756,7 +877,7 @@ asmlinkage long sys_ppoll(struct pollfd __user *, unsigned int,
756int kernel_execve(const char *filename, char *const argv[], char *const envp[]); 877int kernel_execve(const char *filename, char *const argv[], char *const envp[]);
757 878
758 879
759asmlinkage long sys_perf_counter_open( 880asmlinkage long sys_perf_event_open(
760 struct perf_counter_attr __user *attr_uptr, 881 struct perf_event_attr __user *attr_uptr,
761 pid_t pid, int cpu, int group_fd, unsigned long flags); 882 pid_t pid, int cpu, int group_fd, unsigned long flags);
762#endif 883#endif