Contents of /trunk/kernel26-alx/patches-2.6.27-r3/0111-2.6.27.12-all-fixes.patch
Parent Directory | Revision Log
Revision 1176 -
(show annotations)
(download)
Thu Oct 14 15:11:06 2010 UTC (13 years, 11 months ago) by niro
File size: 225444 byte(s)
Thu Oct 14 15:11:06 2010 UTC (13 years, 11 months ago) by niro
File size: 225444 byte(s)
-2.6.27-alx-r3: new magellan 0.5.2 kernel
1 | diff --git a/arch/Kconfig b/arch/Kconfig |
2 | index 364c6da..1d07625 100644 |
3 | --- a/arch/Kconfig |
4 | +++ b/arch/Kconfig |
5 | @@ -46,6 +46,9 @@ config HAVE_EFFICIENT_UNALIGNED_ACCESS |
6 | See Documentation/unaligned-memory-access.txt for more |
7 | information on the topic of unaligned memory accesses. |
8 | |
9 | +config HAVE_SYSCALL_WRAPPERS |
10 | + bool |
11 | + |
12 | config KRETPROBES |
13 | def_bool y |
14 | depends on KPROBES && HAVE_KRETPROBES |
15 | diff --git a/arch/alpha/kernel/entry.S b/arch/alpha/kernel/entry.S |
16 | index 5fc61e2..36a93f8 100644 |
17 | --- a/arch/alpha/kernel/entry.S |
18 | +++ b/arch/alpha/kernel/entry.S |
19 | @@ -894,9 +894,9 @@ sys_getxpid: |
20 | .end sys_getxpid |
21 | |
22 | .align 4 |
23 | - .globl sys_pipe |
24 | - .ent sys_pipe |
25 | -sys_pipe: |
26 | + .globl sys_alpha_pipe |
27 | + .ent sys_alpha_pipe |
28 | +sys_alpha_pipe: |
29 | lda $sp, -16($sp) |
30 | stq $26, 0($sp) |
31 | .prologue 0 |
32 | @@ -914,7 +914,7 @@ sys_pipe: |
33 | stq $1, 80+16($sp) |
34 | 1: lda $sp, 16($sp) |
35 | ret |
36 | -.end sys_pipe |
37 | +.end sys_alpha_pipe |
38 | |
39 | .align 4 |
40 | .globl sys_execve |
41 | diff --git a/arch/alpha/kernel/systbls.S b/arch/alpha/kernel/systbls.S |
42 | index ba914af..9d9e3a9 100644 |
43 | --- a/arch/alpha/kernel/systbls.S |
44 | +++ b/arch/alpha/kernel/systbls.S |
45 | @@ -52,7 +52,7 @@ sys_call_table: |
46 | .quad sys_setpgid |
47 | .quad alpha_ni_syscall /* 40 */ |
48 | .quad sys_dup |
49 | - .quad sys_pipe |
50 | + .quad sys_alpha_pipe |
51 | .quad osf_set_program_attributes |
52 | .quad alpha_ni_syscall |
53 | .quad sys_open /* 45 */ |
54 | diff --git a/arch/arm/kernel/calls.S b/arch/arm/kernel/calls.S |
55 | index 09a061c..9ca8d13 100644 |
56 | --- a/arch/arm/kernel/calls.S |
57 | +++ b/arch/arm/kernel/calls.S |
58 | @@ -98,7 +98,7 @@ |
59 | CALL(sys_uselib) |
60 | CALL(sys_swapon) |
61 | CALL(sys_reboot) |
62 | - CALL(OBSOLETE(old_readdir)) /* used by libc4 */ |
63 | + CALL(OBSOLETE(sys_old_readdir)) /* used by libc4 */ |
64 | /* 90 */ CALL(OBSOLETE(old_mmap)) /* used by libc4 */ |
65 | CALL(sys_munmap) |
66 | CALL(sys_truncate) |
67 | diff --git a/arch/cris/arch-v10/kernel/entry.S b/arch/cris/arch-v10/kernel/entry.S |
68 | index 3a65f32..2485b3e 100644 |
69 | --- a/arch/cris/arch-v10/kernel/entry.S |
70 | +++ b/arch/cris/arch-v10/kernel/entry.S |
71 | @@ -691,7 +691,7 @@ sys_call_table: |
72 | .long sys_uselib |
73 | .long sys_swapon |
74 | .long sys_reboot |
75 | - .long old_readdir |
76 | + .long sys_old_readdir |
77 | .long old_mmap /* 90 */ |
78 | .long sys_munmap |
79 | .long sys_truncate |
80 | diff --git a/arch/cris/arch-v32/kernel/entry.S b/arch/cris/arch-v32/kernel/entry.S |
81 | index eebbaba..149430c 100644 |
82 | --- a/arch/cris/arch-v32/kernel/entry.S |
83 | +++ b/arch/cris/arch-v32/kernel/entry.S |
84 | @@ -614,7 +614,7 @@ sys_call_table: |
85 | .long sys_uselib |
86 | .long sys_swapon |
87 | .long sys_reboot |
88 | - .long old_readdir |
89 | + .long sys_old_readdir |
90 | .long old_mmap /* 90 */ |
91 | .long sys_munmap |
92 | .long sys_truncate |
93 | diff --git a/arch/h8300/kernel/syscalls.S b/arch/h8300/kernel/syscalls.S |
94 | index 54e21c3..4eb67fa 100644 |
95 | --- a/arch/h8300/kernel/syscalls.S |
96 | +++ b/arch/h8300/kernel/syscalls.S |
97 | @@ -103,7 +103,7 @@ SYMBOL_NAME_LABEL(sys_call_table) |
98 | .long SYMBOL_NAME(sys_uselib) |
99 | .long SYMBOL_NAME(sys_swapon) |
100 | .long SYMBOL_NAME(sys_reboot) |
101 | - .long SYMBOL_NAME(old_readdir) |
102 | + .long SYMBOL_NAME(sys_old_readdir) |
103 | .long SYMBOL_NAME(old_mmap) /* 90 */ |
104 | .long SYMBOL_NAME(sys_munmap) |
105 | .long SYMBOL_NAME(sys_truncate) |
106 | diff --git a/arch/ia64/ia32/ia32_entry.S b/arch/ia64/ia32/ia32_entry.S |
107 | index ff88c48..0a67464 100644 |
108 | --- a/arch/ia64/ia32/ia32_entry.S |
109 | +++ b/arch/ia64/ia32/ia32_entry.S |
110 | @@ -215,7 +215,7 @@ ia32_syscall_table: |
111 | data8 sys_mkdir |
112 | data8 sys_rmdir /* 40 */ |
113 | data8 sys_dup |
114 | - data8 sys32_pipe |
115 | + data8 sys_ia64_pipe |
116 | data8 compat_sys_times |
117 | data8 sys_ni_syscall /* old prof syscall holder */ |
118 | data8 sys32_brk /* 45 */ |
119 | diff --git a/arch/ia64/include/asm/unistd.h b/arch/ia64/include/asm/unistd.h |
120 | index d535833..206d5d8 100644 |
121 | --- a/arch/ia64/include/asm/unistd.h |
122 | +++ b/arch/ia64/include/asm/unistd.h |
123 | @@ -363,7 +363,7 @@ struct pt_regs; |
124 | struct sigaction; |
125 | long sys_execve(char __user *filename, char __user * __user *argv, |
126 | char __user * __user *envp, struct pt_regs *regs); |
127 | -asmlinkage long sys_pipe(void); |
128 | +asmlinkage long sys_ia64_pipe(void); |
129 | asmlinkage long sys_rt_sigaction(int sig, |
130 | const struct sigaction __user *act, |
131 | struct sigaction __user *oact, |
132 | diff --git a/arch/ia64/kernel/entry.S b/arch/ia64/kernel/entry.S |
133 | index 0dd6c14..f6e8b63 100644 |
134 | --- a/arch/ia64/kernel/entry.S |
135 | +++ b/arch/ia64/kernel/entry.S |
136 | @@ -1436,7 +1436,7 @@ sys_call_table: |
137 | data8 sys_mkdir // 1055 |
138 | data8 sys_rmdir |
139 | data8 sys_dup |
140 | - data8 sys_pipe |
141 | + data8 sys_ia64_pipe |
142 | data8 sys_times |
143 | data8 ia64_brk // 1060 |
144 | data8 sys_setgid |
145 | diff --git a/arch/ia64/kernel/sys_ia64.c b/arch/ia64/kernel/sys_ia64.c |
146 | index bcbb6d8..92ed83f 100644 |
147 | --- a/arch/ia64/kernel/sys_ia64.c |
148 | +++ b/arch/ia64/kernel/sys_ia64.c |
149 | @@ -154,7 +154,7 @@ out: |
150 | * and r9) as this is faster than doing a copy_to_user(). |
151 | */ |
152 | asmlinkage long |
153 | -sys_pipe (void) |
154 | +sys_ia64_pipe (void) |
155 | { |
156 | struct pt_regs *regs = task_pt_regs(current); |
157 | int fd[2]; |
158 | diff --git a/arch/m68k/kernel/entry.S b/arch/m68k/kernel/entry.S |
159 | index f28404d..25b2176 100644 |
160 | --- a/arch/m68k/kernel/entry.S |
161 | +++ b/arch/m68k/kernel/entry.S |
162 | @@ -513,7 +513,7 @@ sys_call_table: |
163 | .long sys_uselib |
164 | .long sys_swapon |
165 | .long sys_reboot |
166 | - .long old_readdir |
167 | + .long sys_old_readdir |
168 | .long old_mmap /* 90 */ |
169 | .long sys_munmap |
170 | .long sys_truncate |
171 | diff --git a/arch/m68knommu/kernel/syscalltable.S b/arch/m68knommu/kernel/syscalltable.S |
172 | index 812f8d8..5c3e3f6 100644 |
173 | --- a/arch/m68knommu/kernel/syscalltable.S |
174 | +++ b/arch/m68knommu/kernel/syscalltable.S |
175 | @@ -107,7 +107,7 @@ ENTRY(sys_call_table) |
176 | .long sys_uselib |
177 | .long sys_ni_syscall /* sys_swapon */ |
178 | .long sys_reboot |
179 | - .long old_readdir |
180 | + .long sys_old_readdir |
181 | .long old_mmap /* 90 */ |
182 | .long sys_munmap |
183 | .long sys_truncate |
184 | diff --git a/arch/mips/kernel/scall32-o32.S b/arch/mips/kernel/scall32-o32.S |
185 | index 5e75a31..61906f6 100644 |
186 | --- a/arch/mips/kernel/scall32-o32.S |
187 | +++ b/arch/mips/kernel/scall32-o32.S |
188 | @@ -401,7 +401,7 @@ einval: li v0, -EINVAL |
189 | sys sys_uselib 1 |
190 | sys sys_swapon 2 |
191 | sys sys_reboot 3 |
192 | - sys old_readdir 3 |
193 | + sys sys_old_readdir 3 |
194 | sys old_mmap 6 /* 4090 */ |
195 | sys sys_munmap 2 |
196 | sys sys_truncate 2 |
197 | diff --git a/arch/mn10300/kernel/entry.S b/arch/mn10300/kernel/entry.S |
198 | index b7cbb14..7fc6aba 100644 |
199 | --- a/arch/mn10300/kernel/entry.S |
200 | +++ b/arch/mn10300/kernel/entry.S |
201 | @@ -477,7 +477,7 @@ ENTRY(sys_call_table) |
202 | .long sys_uselib |
203 | .long sys_swapon |
204 | .long sys_reboot |
205 | - .long old_readdir |
206 | + .long sys_old_readdir |
207 | .long old_mmap /* 90 */ |
208 | .long sys_munmap |
209 | .long sys_truncate |
210 | diff --git a/arch/powerpc/Kconfig b/arch/powerpc/Kconfig |
211 | index 587da5e..a2b228f 100644 |
212 | --- a/arch/powerpc/Kconfig |
213 | +++ b/arch/powerpc/Kconfig |
214 | @@ -122,6 +122,7 @@ config PPC |
215 | select HAVE_DMA_ATTRS if PPC64 |
216 | select USE_GENERIC_SMP_HELPERS if SMP |
217 | select HAVE_OPROFILE |
218 | + select HAVE_SYSCALL_WRAPPERS if PPC64 |
219 | |
220 | config EARLY_PRINTK |
221 | bool |
222 | diff --git a/arch/powerpc/include/asm/systbl.h b/arch/powerpc/include/asm/systbl.h |
223 | index f6cc7a4..180d5ea 100644 |
224 | --- a/arch/powerpc/include/asm/systbl.h |
225 | +++ b/arch/powerpc/include/asm/systbl.h |
226 | @@ -92,7 +92,7 @@ COMPAT_SYS_SPU(readlink) |
227 | SYSCALL(uselib) |
228 | SYSCALL(swapon) |
229 | SYSCALL(reboot) |
230 | -SYSX(sys_ni_syscall,compat_sys_old_readdir,old_readdir) |
231 | +SYSX(sys_ni_syscall,compat_sys_old_readdir,sys_old_readdir) |
232 | SYSCALL_SPU(mmap) |
233 | SYSCALL_SPU(munmap) |
234 | SYSCALL_SPU(truncate) |
235 | diff --git a/arch/powerpc/platforms/pseries/Kconfig b/arch/powerpc/platforms/pseries/Kconfig |
236 | index 97619fd..ddc2a30 100644 |
237 | --- a/arch/powerpc/platforms/pseries/Kconfig |
238 | +++ b/arch/powerpc/platforms/pseries/Kconfig |
239 | @@ -54,7 +54,7 @@ config PPC_SMLPAR |
240 | |
241 | config CMM |
242 | tristate "Collaborative memory management" |
243 | - depends on PPC_SMLPAR |
244 | + depends on PPC_SMLPAR && !CRASH_DUMP |
245 | default y |
246 | help |
247 | Select this option, if you want to enable the kernel interface |
248 | diff --git a/arch/s390/Kconfig b/arch/s390/Kconfig |
249 | index 8d41908..f9b3dcd 100644 |
250 | --- a/arch/s390/Kconfig |
251 | +++ b/arch/s390/Kconfig |
252 | @@ -70,6 +70,7 @@ mainmenu "Linux Kernel Configuration" |
253 | |
254 | config S390 |
255 | def_bool y |
256 | + select HAVE_SYSCALL_WRAPPERS |
257 | select HAVE_OPROFILE |
258 | select HAVE_KPROBES |
259 | select HAVE_KRETPROBES |
260 | diff --git a/arch/s390/kernel/compat_wrapper.S b/arch/s390/kernel/compat_wrapper.S |
261 | index 328a20e..93a5c96 100644 |
262 | --- a/arch/s390/kernel/compat_wrapper.S |
263 | +++ b/arch/s390/kernel/compat_wrapper.S |
264 | @@ -549,7 +549,7 @@ sys32_setdomainname_wrapper: |
265 | .globl sys32_newuname_wrapper |
266 | sys32_newuname_wrapper: |
267 | llgtr %r2,%r2 # struct new_utsname * |
268 | - jg s390x_newuname # branch to system call |
269 | + jg sys_s390_newuname # branch to system call |
270 | |
271 | .globl compat_sys_adjtimex_wrapper |
272 | compat_sys_adjtimex_wrapper: |
273 | @@ -617,7 +617,7 @@ sys32_sysfs_wrapper: |
274 | .globl sys32_personality_wrapper |
275 | sys32_personality_wrapper: |
276 | llgfr %r2,%r2 # unsigned long |
277 | - jg s390x_personality # branch to system call |
278 | + jg sys_s390_personality # branch to system call |
279 | |
280 | .globl sys32_setfsuid16_wrapper |
281 | sys32_setfsuid16_wrapper: |
282 | diff --git a/arch/s390/kernel/entry.h b/arch/s390/kernel/entry.h |
283 | index 6b18963..df0a813 100644 |
284 | --- a/arch/s390/kernel/entry.h |
285 | +++ b/arch/s390/kernel/entry.h |
286 | @@ -30,23 +30,23 @@ struct fadvise64_64_args; |
287 | struct old_sigaction; |
288 | struct sel_arg_struct; |
289 | |
290 | -long sys_pipe(unsigned long __user *fildes); |
291 | long sys_mmap2(struct mmap_arg_struct __user *arg); |
292 | -long old_mmap(struct mmap_arg_struct __user *arg); |
293 | +long sys_s390_old_mmap(struct mmap_arg_struct __user *arg); |
294 | long sys_ipc(uint call, int first, unsigned long second, |
295 | unsigned long third, void __user *ptr); |
296 | -long s390x_newuname(struct new_utsname __user *name); |
297 | -long s390x_personality(unsigned long personality); |
298 | -long s390_fadvise64(int fd, u32 offset_high, u32 offset_low, |
299 | +long sys_s390_newuname(struct new_utsname __user *name); |
300 | +long sys_s390_personality(unsigned long personality); |
301 | +long sys_s390_fadvise64(int fd, u32 offset_high, u32 offset_low, |
302 | size_t len, int advice); |
303 | -long s390_fadvise64_64(struct fadvise64_64_args __user *args); |
304 | -long s390_fallocate(int fd, int mode, loff_t offset, u32 len_high, u32 len_low); |
305 | +long sys_s390_fadvise64_64(struct fadvise64_64_args __user *args); |
306 | +long sys_s390_fallocate(int fd, int mode, loff_t offset, u32 len_high, |
307 | + u32 len_low); |
308 | long sys_fork(void); |
309 | long sys_clone(void); |
310 | long sys_vfork(void); |
311 | void execve_tail(void); |
312 | long sys_execve(void); |
313 | -int sys_sigsuspend(int history0, int history1, old_sigset_t mask); |
314 | +long sys_sigsuspend(int history0, int history1, old_sigset_t mask); |
315 | long sys_sigaction(int sig, const struct old_sigaction __user *act, |
316 | struct old_sigaction __user *oact); |
317 | long sys_sigaltstack(const stack_t __user *uss, stack_t __user *uoss); |
318 | diff --git a/arch/s390/kernel/process.c b/arch/s390/kernel/process.c |
319 | index 3e2c05c..c8cb494 100644 |
320 | --- a/arch/s390/kernel/process.c |
321 | +++ b/arch/s390/kernel/process.c |
322 | @@ -38,6 +38,7 @@ |
323 | #include <linux/utsname.h> |
324 | #include <linux/tick.h> |
325 | #include <linux/elfcore.h> |
326 | +#include <linux/syscalls.h> |
327 | #include <asm/uaccess.h> |
328 | #include <asm/pgtable.h> |
329 | #include <asm/system.h> |
330 | @@ -257,13 +258,13 @@ int copy_thread(int nr, unsigned long clone_flags, unsigned long new_stackp, |
331 | return 0; |
332 | } |
333 | |
334 | -asmlinkage long sys_fork(void) |
335 | +SYSCALL_DEFINE0(fork) |
336 | { |
337 | struct pt_regs *regs = task_pt_regs(current); |
338 | return do_fork(SIGCHLD, regs->gprs[15], regs, 0, NULL, NULL); |
339 | } |
340 | |
341 | -asmlinkage long sys_clone(void) |
342 | +SYSCALL_DEFINE0(clone) |
343 | { |
344 | struct pt_regs *regs = task_pt_regs(current); |
345 | unsigned long clone_flags; |
346 | @@ -290,7 +291,7 @@ asmlinkage long sys_clone(void) |
347 | * do not have enough call-clobbered registers to hold all |
348 | * the information you need. |
349 | */ |
350 | -asmlinkage long sys_vfork(void) |
351 | +SYSCALL_DEFINE0(vfork) |
352 | { |
353 | struct pt_regs *regs = task_pt_regs(current); |
354 | return do_fork(CLONE_VFORK | CLONE_VM | SIGCHLD, |
355 | @@ -310,7 +311,7 @@ asmlinkage void execve_tail(void) |
356 | /* |
357 | * sys_execve() executes a new program. |
358 | */ |
359 | -asmlinkage long sys_execve(void) |
360 | +SYSCALL_DEFINE0(execve) |
361 | { |
362 | struct pt_regs *regs = task_pt_regs(current); |
363 | char *filename; |
364 | diff --git a/arch/s390/kernel/signal.c b/arch/s390/kernel/signal.c |
365 | index b976820..68c61da 100644 |
366 | --- a/arch/s390/kernel/signal.c |
367 | +++ b/arch/s390/kernel/signal.c |
368 | @@ -24,6 +24,7 @@ |
369 | #include <linux/tty.h> |
370 | #include <linux/personality.h> |
371 | #include <linux/binfmts.h> |
372 | +#include <linux/syscalls.h> |
373 | #include <asm/ucontext.h> |
374 | #include <asm/uaccess.h> |
375 | #include <asm/lowcore.h> |
376 | @@ -52,8 +53,7 @@ typedef struct |
377 | /* |
378 | * Atomically swap in the new signal mask, and wait for a signal. |
379 | */ |
380 | -asmlinkage int |
381 | -sys_sigsuspend(int history0, int history1, old_sigset_t mask) |
382 | +SYSCALL_DEFINE3(sigsuspend, int, history0, int, history1, old_sigset_t, mask) |
383 | { |
384 | mask &= _BLOCKABLE; |
385 | spin_lock_irq(¤t->sighand->siglock); |
386 | @@ -69,9 +69,8 @@ sys_sigsuspend(int history0, int history1, old_sigset_t mask) |
387 | return -ERESTARTNOHAND; |
388 | } |
389 | |
390 | -asmlinkage long |
391 | -sys_sigaction(int sig, const struct old_sigaction __user *act, |
392 | - struct old_sigaction __user *oact) |
393 | +SYSCALL_DEFINE3(sigaction, int, sig, const struct old_sigaction __user *, act, |
394 | + struct old_sigaction __user *, oact) |
395 | { |
396 | struct k_sigaction new_ka, old_ka; |
397 | int ret; |
398 | @@ -101,15 +100,13 @@ sys_sigaction(int sig, const struct old_sigaction __user *act, |
399 | return ret; |
400 | } |
401 | |
402 | -asmlinkage long |
403 | -sys_sigaltstack(const stack_t __user *uss, stack_t __user *uoss) |
404 | +SYSCALL_DEFINE2(sigaltstack, const stack_t __user *, uss, |
405 | + stack_t __user *, uoss) |
406 | { |
407 | struct pt_regs *regs = task_pt_regs(current); |
408 | return do_sigaltstack(uss, uoss, regs->gprs[15]); |
409 | } |
410 | |
411 | - |
412 | - |
413 | /* Returns non-zero on fault. */ |
414 | static int save_sigregs(struct pt_regs *regs, _sigregs __user *sregs) |
415 | { |
416 | @@ -163,7 +160,7 @@ static int restore_sigregs(struct pt_regs *regs, _sigregs __user *sregs) |
417 | return 0; |
418 | } |
419 | |
420 | -asmlinkage long sys_sigreturn(void) |
421 | +SYSCALL_DEFINE0(sigreturn) |
422 | { |
423 | struct pt_regs *regs = task_pt_regs(current); |
424 | sigframe __user *frame = (sigframe __user *)regs->gprs[15]; |
425 | @@ -190,7 +187,7 @@ badframe: |
426 | return 0; |
427 | } |
428 | |
429 | -asmlinkage long sys_rt_sigreturn(void) |
430 | +SYSCALL_DEFINE0(rt_sigreturn) |
431 | { |
432 | struct pt_regs *regs = task_pt_regs(current); |
433 | rt_sigframe __user *frame = (rt_sigframe __user *)regs->gprs[15]; |
434 | diff --git a/arch/s390/kernel/sys_s390.c b/arch/s390/kernel/sys_s390.c |
435 | index 5fdb799..e001ac1 100644 |
436 | --- a/arch/s390/kernel/sys_s390.c |
437 | +++ b/arch/s390/kernel/sys_s390.c |
438 | @@ -29,6 +29,7 @@ |
439 | #include <linux/personality.h> |
440 | #include <linux/unistd.h> |
441 | #include <linux/ipc.h> |
442 | +#include <linux/syscalls.h> |
443 | #include <asm/uaccess.h> |
444 | #include "entry.h" |
445 | |
446 | @@ -74,7 +75,7 @@ struct mmap_arg_struct { |
447 | unsigned long offset; |
448 | }; |
449 | |
450 | -asmlinkage long sys_mmap2(struct mmap_arg_struct __user *arg) |
451 | +SYSCALL_DEFINE1(mmap2, struct mmap_arg_struct __user *, arg) |
452 | { |
453 | struct mmap_arg_struct a; |
454 | int error = -EFAULT; |
455 | @@ -86,7 +87,7 @@ out: |
456 | return error; |
457 | } |
458 | |
459 | -asmlinkage long old_mmap(struct mmap_arg_struct __user *arg) |
460 | +SYSCALL_DEFINE1(s390_old_mmap, struct mmap_arg_struct __user *, arg) |
461 | { |
462 | struct mmap_arg_struct a; |
463 | long error = -EFAULT; |
464 | @@ -127,8 +128,8 @@ asmlinkage long old_select(struct sel_arg_struct __user *arg) |
465 | * |
466 | * This is really horribly ugly. |
467 | */ |
468 | -asmlinkage long sys_ipc(uint call, int first, unsigned long second, |
469 | - unsigned long third, void __user *ptr) |
470 | +SYSCALL_DEFINE5(ipc, uint, call, int, first, unsigned long, second, |
471 | + unsigned long, third, void __user *, ptr) |
472 | { |
473 | struct ipc_kludge tmp; |
474 | int ret; |
475 | @@ -194,7 +195,7 @@ asmlinkage long sys_ipc(uint call, int first, unsigned long second, |
476 | } |
477 | |
478 | #ifdef CONFIG_64BIT |
479 | -asmlinkage long s390x_newuname(struct new_utsname __user *name) |
480 | +SYSCALL_DEFINE1(s390_newuname, struct new_utsname __user *, name) |
481 | { |
482 | int ret = sys_newuname(name); |
483 | |
484 | @@ -205,7 +206,7 @@ asmlinkage long s390x_newuname(struct new_utsname __user *name) |
485 | return ret; |
486 | } |
487 | |
488 | -asmlinkage long s390x_personality(unsigned long personality) |
489 | +SYSCALL_DEFINE1(s390_personality, unsigned long, personality) |
490 | { |
491 | int ret; |
492 | |
493 | @@ -224,15 +225,13 @@ asmlinkage long s390x_personality(unsigned long personality) |
494 | */ |
495 | #ifndef CONFIG_64BIT |
496 | |
497 | -asmlinkage long |
498 | -s390_fadvise64(int fd, u32 offset_high, u32 offset_low, size_t len, int advice) |
499 | +SYSCALL_DEFINE5(s390_fadvise64, int, fd, u32, offset_high, u32, offset_low, |
500 | + size_t, len, int, advice) |
501 | { |
502 | return sys_fadvise64(fd, (u64) offset_high << 32 | offset_low, |
503 | len, advice); |
504 | } |
505 | |
506 | -#endif |
507 | - |
508 | struct fadvise64_64_args { |
509 | int fd; |
510 | long long offset; |
511 | @@ -240,8 +239,7 @@ struct fadvise64_64_args { |
512 | int advice; |
513 | }; |
514 | |
515 | -asmlinkage long |
516 | -s390_fadvise64_64(struct fadvise64_64_args __user *args) |
517 | +SYSCALL_DEFINE1(s390_fadvise64_64, struct fadvise64_64_args __user *, args) |
518 | { |
519 | struct fadvise64_64_args a; |
520 | |
521 | @@ -250,7 +248,6 @@ s390_fadvise64_64(struct fadvise64_64_args __user *args) |
522 | return sys_fadvise64_64(a.fd, a.offset, a.len, a.advice); |
523 | } |
524 | |
525 | -#ifndef CONFIG_64BIT |
526 | /* |
527 | * This is a wrapper to call sys_fallocate(). For 31 bit s390 the last |
528 | * 64 bit argument "len" is split into the upper and lower 32 bits. The |
529 | @@ -263,9 +260,19 @@ s390_fadvise64_64(struct fadvise64_64_args __user *args) |
530 | * to |
531 | * %r2: fd, %r3: mode, %r4/%r5: offset, 96(%r15)-103(%r15): len |
532 | */ |
533 | -asmlinkage long s390_fallocate(int fd, int mode, loff_t offset, |
534 | +SYSCALL_DEFINE(s390_fallocate)(int fd, int mode, loff_t offset, |
535 | u32 len_high, u32 len_low) |
536 | { |
537 | return sys_fallocate(fd, mode, offset, ((u64)len_high << 32) | len_low); |
538 | } |
539 | +#ifdef CONFIG_HAVE_SYSCALL_WRAPPERS |
540 | +asmlinkage long SyS_s390_fallocate(long fd, long mode, loff_t offset, |
541 | + long len_high, long len_low) |
542 | +{ |
543 | + return SYSC_s390_fallocate((int) fd, (int) mode, offset, |
544 | + (u32) len_high, (u32) len_low); |
545 | +} |
546 | +SYSCALL_ALIAS(sys_s390_fallocate, SyS_s390_fallocate); |
547 | +#endif |
548 | + |
549 | #endif |
550 | diff --git a/arch/s390/kernel/syscalls.S b/arch/s390/kernel/syscalls.S |
551 | index c66d35e..2a3abd4 100644 |
552 | --- a/arch/s390/kernel/syscalls.S |
553 | +++ b/arch/s390/kernel/syscalls.S |
554 | @@ -98,7 +98,7 @@ SYSCALL(sys_uselib,sys_uselib,sys32_uselib_wrapper) |
555 | SYSCALL(sys_swapon,sys_swapon,sys32_swapon_wrapper) |
556 | SYSCALL(sys_reboot,sys_reboot,sys32_reboot_wrapper) |
557 | SYSCALL(sys_ni_syscall,sys_ni_syscall,old32_readdir_wrapper) /* old readdir syscall */ |
558 | -SYSCALL(old_mmap,old_mmap,old32_mmap_wrapper) /* 90 */ |
559 | +SYSCALL(sys_s390_old_mmap,sys_s390_old_mmap,old32_mmap_wrapper) /* 90 */ |
560 | SYSCALL(sys_munmap,sys_munmap,sys32_munmap_wrapper) |
561 | SYSCALL(sys_truncate,sys_truncate,sys32_truncate_wrapper) |
562 | SYSCALL(sys_ftruncate,sys_ftruncate,sys32_ftruncate_wrapper) |
563 | @@ -130,7 +130,7 @@ SYSCALL(sys_fsync,sys_fsync,sys32_fsync_wrapper) |
564 | SYSCALL(sys_sigreturn,sys_sigreturn,sys32_sigreturn) |
565 | SYSCALL(sys_clone,sys_clone,sys32_clone) /* 120 */ |
566 | SYSCALL(sys_setdomainname,sys_setdomainname,sys32_setdomainname_wrapper) |
567 | -SYSCALL(sys_newuname,s390x_newuname,sys32_newuname_wrapper) |
568 | +SYSCALL(sys_newuname,sys_s390_newuname,sys32_newuname_wrapper) |
569 | NI_SYSCALL /* modify_ldt for i386 */ |
570 | SYSCALL(sys_adjtimex,sys_adjtimex,compat_sys_adjtimex_wrapper) |
571 | SYSCALL(sys_mprotect,sys_mprotect,sys32_mprotect_wrapper) /* 125 */ |
572 | @@ -144,7 +144,7 @@ SYSCALL(sys_getpgid,sys_getpgid,sys32_getpgid_wrapper) |
573 | SYSCALL(sys_fchdir,sys_fchdir,sys32_fchdir_wrapper) |
574 | SYSCALL(sys_bdflush,sys_bdflush,sys32_bdflush_wrapper) |
575 | SYSCALL(sys_sysfs,sys_sysfs,sys32_sysfs_wrapper) /* 135 */ |
576 | -SYSCALL(sys_personality,s390x_personality,sys32_personality_wrapper) |
577 | +SYSCALL(sys_personality,sys_s390_personality,sys32_personality_wrapper) |
578 | NI_SYSCALL /* for afs_syscall */ |
579 | SYSCALL(sys_setfsuid16,sys_ni_syscall,sys32_setfsuid16_wrapper) /* old setfsuid16 syscall */ |
580 | SYSCALL(sys_setfsgid16,sys_ni_syscall,sys32_setfsgid16_wrapper) /* old setfsgid16 syscall */ |
581 | @@ -261,7 +261,7 @@ SYSCALL(sys_epoll_create,sys_epoll_create,sys_epoll_create_wrapper) |
582 | SYSCALL(sys_epoll_ctl,sys_epoll_ctl,sys_epoll_ctl_wrapper) /* 250 */ |
583 | SYSCALL(sys_epoll_wait,sys_epoll_wait,sys_epoll_wait_wrapper) |
584 | SYSCALL(sys_set_tid_address,sys_set_tid_address,sys32_set_tid_address_wrapper) |
585 | -SYSCALL(s390_fadvise64,sys_fadvise64_64,sys32_fadvise64_wrapper) |
586 | +SYSCALL(sys_s390_fadvise64,sys_fadvise64_64,sys32_fadvise64_wrapper) |
587 | SYSCALL(sys_timer_create,sys_timer_create,sys32_timer_create_wrapper) |
588 | SYSCALL(sys_timer_settime,sys_timer_settime,sys32_timer_settime_wrapper) /* 255 */ |
589 | SYSCALL(sys_timer_gettime,sys_timer_gettime,sys32_timer_gettime_wrapper) |
590 | @@ -272,7 +272,7 @@ SYSCALL(sys_clock_gettime,sys_clock_gettime,sys32_clock_gettime_wrapper) /* 260 |
591 | SYSCALL(sys_clock_getres,sys_clock_getres,sys32_clock_getres_wrapper) |
592 | SYSCALL(sys_clock_nanosleep,sys_clock_nanosleep,sys32_clock_nanosleep_wrapper) |
593 | NI_SYSCALL /* reserved for vserver */ |
594 | -SYSCALL(s390_fadvise64_64,sys_ni_syscall,sys32_fadvise64_64_wrapper) |
595 | +SYSCALL(sys_s390_fadvise64_64,sys_ni_syscall,sys32_fadvise64_64_wrapper) |
596 | SYSCALL(sys_statfs64,sys_statfs64,compat_sys_statfs64_wrapper) |
597 | SYSCALL(sys_fstatfs64,sys_fstatfs64,compat_sys_fstatfs64_wrapper) |
598 | SYSCALL(sys_remap_file_pages,sys_remap_file_pages,sys32_remap_file_pages_wrapper) |
599 | @@ -322,7 +322,7 @@ NI_SYSCALL /* 310 sys_move_pages */ |
600 | SYSCALL(sys_getcpu,sys_getcpu,sys_getcpu_wrapper) |
601 | SYSCALL(sys_epoll_pwait,sys_epoll_pwait,compat_sys_epoll_pwait_wrapper) |
602 | SYSCALL(sys_utimes,sys_utimes,compat_sys_utimes_wrapper) |
603 | -SYSCALL(s390_fallocate,sys_fallocate,sys_fallocate_wrapper) |
604 | +SYSCALL(sys_s390_fallocate,sys_fallocate,sys_fallocate_wrapper) |
605 | SYSCALL(sys_utimensat,sys_utimensat,compat_sys_utimensat_wrapper) /* 315 */ |
606 | SYSCALL(sys_signalfd,sys_signalfd,compat_sys_signalfd_wrapper) |
607 | NI_SYSCALL /* 317 old sys_timer_fd */ |
608 | diff --git a/arch/sh/kernel/sys_sh32.c b/arch/sh/kernel/sys_sh32.c |
609 | index f0aa5c3..c907f8c 100644 |
610 | --- a/arch/sh/kernel/sys_sh32.c |
611 | +++ b/arch/sh/kernel/sys_sh32.c |
612 | @@ -21,7 +21,7 @@ |
613 | * sys_pipe() is the normal C calling standard for creating |
614 | * a pipe. It's not the way Unix traditionally does this, though. |
615 | */ |
616 | -asmlinkage int sys_pipe(unsigned long r4, unsigned long r5, |
617 | +asmlinkage int sys_sh_pipe(unsigned long r4, unsigned long r5, |
618 | unsigned long r6, unsigned long r7, |
619 | struct pt_regs __regs) |
620 | { |
621 | diff --git a/arch/sh/kernel/syscalls_32.S b/arch/sh/kernel/syscalls_32.S |
622 | index 0af693e..e67c173 100644 |
623 | --- a/arch/sh/kernel/syscalls_32.S |
624 | +++ b/arch/sh/kernel/syscalls_32.S |
625 | @@ -58,7 +58,7 @@ ENTRY(sys_call_table) |
626 | .long sys_mkdir |
627 | .long sys_rmdir /* 40 */ |
628 | .long sys_dup |
629 | - .long sys_pipe |
630 | + .long sys_sh_pipe |
631 | .long sys_times |
632 | .long sys_ni_syscall /* old prof syscall holder */ |
633 | .long sys_brk /* 45 */ |
634 | @@ -105,7 +105,7 @@ ENTRY(sys_call_table) |
635 | .long sys_uselib |
636 | .long sys_swapon |
637 | .long sys_reboot |
638 | - .long old_readdir |
639 | + .long sys_old_readdir |
640 | .long old_mmap /* 90 */ |
641 | .long sys_munmap |
642 | .long sys_truncate |
643 | diff --git a/arch/sh/kernel/syscalls_64.S b/arch/sh/kernel/syscalls_64.S |
644 | index 0b436aa..557cb91 100644 |
645 | --- a/arch/sh/kernel/syscalls_64.S |
646 | +++ b/arch/sh/kernel/syscalls_64.S |
647 | @@ -109,7 +109,7 @@ sys_call_table: |
648 | .long sys_uselib |
649 | .long sys_swapon |
650 | .long sys_reboot |
651 | - .long old_readdir |
652 | + .long sys_old_readdir |
653 | .long old_mmap /* 90 */ |
654 | .long sys_munmap |
655 | .long sys_truncate |
656 | diff --git a/arch/sparc/kernel/entry.S b/arch/sparc/kernel/entry.S |
657 | index e8cdf71..e3b7ed0 100644 |
658 | --- a/arch/sparc/kernel/entry.S |
659 | +++ b/arch/sparc/kernel/entry.S |
660 | @@ -1142,8 +1142,8 @@ sunos_execv: |
661 | ld [%sp + STACKFRAME_SZ + PT_I0], %o0 |
662 | |
663 | .align 4 |
664 | - .globl sys_pipe |
665 | -sys_pipe: |
666 | + .globl sys_sparc_pipe |
667 | +sys_sparc_pipe: |
668 | mov %o7, %l5 |
669 | add %sp, STACKFRAME_SZ, %o0 ! pt_regs *regs arg |
670 | call sparc_pipe |
671 | diff --git a/arch/sparc/kernel/systbls.S b/arch/sparc/kernel/systbls.S |
672 | index e1b9233..6a62545 100644 |
673 | --- a/arch/sparc/kernel/systbls.S |
674 | +++ b/arch/sparc/kernel/systbls.S |
675 | @@ -24,7 +24,7 @@ sys_call_table: |
676 | /*25*/ .long sys_vmsplice, sys_ptrace, sys_alarm, sys_sigaltstack, sys_pause |
677 | /*30*/ .long sys_utime, sys_lchown, sys_fchown, sys_access, sys_nice |
678 | /*35*/ .long sys_chown, sys_sync, sys_kill, sys_newstat, sys_sendfile |
679 | -/*40*/ .long sys_newlstat, sys_dup, sys_pipe, sys_times, sys_getuid |
680 | +/*40*/ .long sys_newlstat, sys_dup, sys_sparc_pipe, sys_times, sys_getuid |
681 | /*45*/ .long sys_umount, sys_setgid16, sys_getgid16, sys_signal, sys_geteuid16 |
682 | /*50*/ .long sys_getegid16, sys_acct, sys_nis_syscall, sys_getgid, sys_ioctl |
683 | /*55*/ .long sys_reboot, sys_mmap2, sys_symlink, sys_readlink, sys_execve |
684 | @@ -56,7 +56,7 @@ sys_call_table: |
685 | /*185*/ .long sys_setpgid, sys_fremovexattr, sys_tkill, sys_exit_group, sys_newuname |
686 | /*190*/ .long sys_init_module, sys_personality, sparc_remap_file_pages, sys_epoll_create, sys_epoll_ctl |
687 | /*195*/ .long sys_epoll_wait, sys_ioprio_set, sys_getppid, sparc_sigaction, sys_sgetmask |
688 | -/*200*/ .long sys_ssetmask, sys_sigsuspend, sys_newlstat, sys_uselib, old_readdir |
689 | +/*200*/ .long sys_ssetmask, sys_sigsuspend, sys_newlstat, sys_uselib, sys_old_readdir |
690 | /*205*/ .long sys_readahead, sys_socketcall, sys_syslog, sys_lookup_dcookie, sys_fadvise64 |
691 | /*210*/ .long sys_fadvise64_64, sys_tgkill, sys_waitpid, sys_swapoff, sys_sysinfo |
692 | /*215*/ .long sys_ipc, sys_sigreturn, sys_clone, sys_ioprio_get, sys_adjtimex |
693 | diff --git a/arch/sparc64/kernel/syscalls.S b/arch/sparc64/kernel/syscalls.S |
694 | index a2f2427..cd2d333 100644 |
695 | --- a/arch/sparc64/kernel/syscalls.S |
696 | +++ b/arch/sparc64/kernel/syscalls.S |
697 | @@ -20,7 +20,7 @@ execve_merge: |
698 | add %sp, PTREGS_OFF, %o0 |
699 | |
700 | .align 32 |
701 | -sys_pipe: |
702 | +sys_sparc_pipe: |
703 | ba,pt %xcc, sparc_pipe |
704 | add %sp, PTREGS_OFF, %o0 |
705 | sys_nis_syscall: |
706 | diff --git a/arch/sparc64/kernel/systbls.S b/arch/sparc64/kernel/systbls.S |
707 | index 0fdbf3b..26b39de 100644 |
708 | --- a/arch/sparc64/kernel/systbls.S |
709 | +++ b/arch/sparc64/kernel/systbls.S |
710 | @@ -26,7 +26,7 @@ sys_call_table32: |
711 | /*25*/ .word sys32_vmsplice, compat_sys_ptrace, sys_alarm, sys32_sigaltstack, sys32_pause |
712 | /*30*/ .word compat_sys_utime, sys_lchown, sys_fchown, sys32_access, sys32_nice |
713 | .word sys_chown, sys_sync, sys32_kill, compat_sys_newstat, sys32_sendfile |
714 | -/*40*/ .word compat_sys_newlstat, sys_dup, sys_pipe, compat_sys_times, sys_getuid |
715 | +/*40*/ .word compat_sys_newlstat, sys_dup, sys_sparc_pipe, compat_sys_times, sys_getuid |
716 | .word sys32_umount, sys_setgid16, sys_getgid16, sys32_signal, sys_geteuid16 |
717 | /*50*/ .word sys_getegid16, sys_acct, sys_nis_syscall, sys_getgid, compat_sys_ioctl |
718 | .word sys32_reboot, sys32_mmap2, sys_symlink, sys32_readlink, sys32_execve |
719 | @@ -100,7 +100,7 @@ sys_call_table: |
720 | /*25*/ .word sys_vmsplice, sys_ptrace, sys_alarm, sys_sigaltstack, sys_nis_syscall |
721 | /*30*/ .word sys_utime, sys_nis_syscall, sys_nis_syscall, sys_access, sys_nice |
722 | .word sys_nis_syscall, sys_sync, sys_kill, sys_newstat, sys_sendfile64 |
723 | -/*40*/ .word sys_newlstat, sys_dup, sys_pipe, sys_times, sys_nis_syscall |
724 | +/*40*/ .word sys_newlstat, sys_dup, sys_sparc_pipe, sys_times, sys_nis_syscall |
725 | .word sys_umount, sys_setgid, sys_getgid, sys_signal, sys_geteuid |
726 | /*50*/ .word sys_getegid, sys_acct, sys_memory_ordering, sys_nis_syscall, sys_ioctl |
727 | .word sys_reboot, sys_nis_syscall, sys_symlink, sys_readlink, sys_execve |
728 | diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig |
729 | index 552d2b7..388bae2 100644 |
730 | --- a/arch/x86/Kconfig |
731 | +++ b/arch/x86/Kconfig |
732 | @@ -567,7 +567,7 @@ config AMD_IOMMU |
733 | |
734 | # need this always selected by IOMMU for the VIA workaround |
735 | config SWIOTLB |
736 | - bool |
737 | + def_bool y if X86_64 |
738 | help |
739 | Support for software bounce buffers used on x86-64 systems |
740 | which don't have a hardware IOMMU (e.g. the current generation |
741 | diff --git a/arch/x86/kernel/head64.c b/arch/x86/kernel/head64.c |
742 | index 9bfc4d7..290cb54 100644 |
743 | --- a/arch/x86/kernel/head64.c |
744 | +++ b/arch/x86/kernel/head64.c |
745 | @@ -26,7 +26,7 @@ |
746 | #include <asm/bios_ebda.h> |
747 | |
748 | /* boot cpu pda */ |
749 | -static struct x8664_pda _boot_cpu_pda __read_mostly; |
750 | +static struct x8664_pda _boot_cpu_pda; |
751 | |
752 | #ifdef CONFIG_SMP |
753 | /* |
754 | diff --git a/arch/x86/kernel/head_64.S b/arch/x86/kernel/head_64.S |
755 | index db3280a..872d9d0 100644 |
756 | --- a/arch/x86/kernel/head_64.S |
757 | +++ b/arch/x86/kernel/head_64.S |
758 | @@ -305,7 +305,7 @@ ENTRY(early_idt_handler) |
759 | call dump_stack |
760 | #ifdef CONFIG_KALLSYMS |
761 | leaq early_idt_ripmsg(%rip),%rdi |
762 | - movq 8(%rsp),%rsi # get rip again |
763 | + movq 0(%rsp),%rsi # get rip again |
764 | call __print_symbol |
765 | #endif |
766 | #endif /* EARLY_PRINTK */ |
767 | diff --git a/arch/x86/kernel/syscall_table_32.S b/arch/x86/kernel/syscall_table_32.S |
768 | index d44395f..e2e86a0 100644 |
769 | --- a/arch/x86/kernel/syscall_table_32.S |
770 | +++ b/arch/x86/kernel/syscall_table_32.S |
771 | @@ -88,7 +88,7 @@ ENTRY(sys_call_table) |
772 | .long sys_uselib |
773 | .long sys_swapon |
774 | .long sys_reboot |
775 | - .long old_readdir |
776 | + .long sys_old_readdir |
777 | .long old_mmap /* 90 */ |
778 | .long sys_munmap |
779 | .long sys_truncate |
780 | diff --git a/arch/x86/kernel/tlb_uv.c b/arch/x86/kernel/tlb_uv.c |
781 | index 8b8c0d6..2fc8b6a 100644 |
782 | --- a/arch/x86/kernel/tlb_uv.c |
783 | +++ b/arch/x86/kernel/tlb_uv.c |
784 | @@ -586,7 +586,6 @@ static int __init uv_ptc_init(void) |
785 | static struct bau_control * __init uv_table_bases_init(int blade, int node) |
786 | { |
787 | int i; |
788 | - int *ip; |
789 | struct bau_msg_status *msp; |
790 | struct bau_control *bau_tabp; |
791 | |
792 | @@ -603,13 +602,6 @@ static struct bau_control * __init uv_table_bases_init(int blade, int node) |
793 | bau_cpubits_clear(&msp->seen_by, (int) |
794 | uv_blade_nr_possible_cpus(blade)); |
795 | |
796 | - bau_tabp->watching = |
797 | - kmalloc_node(sizeof(int) * DEST_NUM_RESOURCES, GFP_KERNEL, node); |
798 | - BUG_ON(!bau_tabp->watching); |
799 | - |
800 | - for (i = 0, ip = bau_tabp->watching; i < DEST_Q_SIZE; i++, ip++) |
801 | - *ip = 0; |
802 | - |
803 | uv_bau_table_bases[blade] = bau_tabp; |
804 | |
805 | return bau_tabp; |
806 | @@ -632,7 +624,6 @@ uv_table_bases_finish(int blade, int node, int cur_cpu, |
807 | bcp->bau_msg_head = bau_tablesp->va_queue_first; |
808 | bcp->va_queue_first = bau_tablesp->va_queue_first; |
809 | bcp->va_queue_last = bau_tablesp->va_queue_last; |
810 | - bcp->watching = bau_tablesp->watching; |
811 | bcp->msg_statuses = bau_tablesp->msg_statuses; |
812 | bcp->descriptor_base = adp; |
813 | } |
814 | diff --git a/arch/x86/mm/fault.c b/arch/x86/mm/fault.c |
815 | index 455f3fe..da1973b 100644 |
816 | --- a/arch/x86/mm/fault.c |
817 | +++ b/arch/x86/mm/fault.c |
818 | @@ -534,7 +534,7 @@ static int vmalloc_fault(unsigned long address) |
819 | happen within a race in page table update. In the later |
820 | case just flush. */ |
821 | |
822 | - pgd = pgd_offset(current->mm ?: &init_mm, address); |
823 | + pgd = pgd_offset(current->active_mm, address); |
824 | pgd_ref = pgd_offset_k(address); |
825 | if (pgd_none(*pgd_ref)) |
826 | return -1; |
827 | diff --git a/arch/x86/mm/init_32.c b/arch/x86/mm/init_32.c |
828 | index 60ec1d0..62dc07c 100644 |
829 | --- a/arch/x86/mm/init_32.c |
830 | +++ b/arch/x86/mm/init_32.c |
831 | @@ -718,7 +718,7 @@ void __init setup_bootmem_allocator(void) |
832 | after_init_bootmem = 1; |
833 | } |
834 | |
835 | -static void __init find_early_table_space(unsigned long end) |
836 | +static void __init find_early_table_space(unsigned long end, int use_pse) |
837 | { |
838 | unsigned long puds, pmds, ptes, tables, start; |
839 | |
840 | @@ -728,7 +728,7 @@ static void __init find_early_table_space(unsigned long end) |
841 | pmds = (end + PMD_SIZE - 1) >> PMD_SHIFT; |
842 | tables += PAGE_ALIGN(pmds * sizeof(pmd_t)); |
843 | |
844 | - if (cpu_has_pse) { |
845 | + if (use_pse) { |
846 | unsigned long extra; |
847 | |
848 | extra = end - ((end>>PMD_SHIFT) << PMD_SHIFT); |
849 | @@ -768,12 +768,22 @@ unsigned long __init_refok init_memory_mapping(unsigned long start, |
850 | pgd_t *pgd_base = swapper_pg_dir; |
851 | unsigned long start_pfn, end_pfn; |
852 | unsigned long big_page_start; |
853 | +#ifdef CONFIG_DEBUG_PAGEALLOC |
854 | + /* |
855 | + * For CONFIG_DEBUG_PAGEALLOC, identity mapping will use small pages. |
856 | + * This will simplify cpa(), which otherwise needs to support splitting |
857 | + * large pages into small in interrupt context, etc. |
858 | + */ |
859 | + int use_pse = 0; |
860 | +#else |
861 | + int use_pse = cpu_has_pse; |
862 | +#endif |
863 | |
864 | /* |
865 | * Find space for the kernel direct mapping tables. |
866 | */ |
867 | if (!after_init_bootmem) |
868 | - find_early_table_space(end); |
869 | + find_early_table_space(end, use_pse); |
870 | |
871 | #ifdef CONFIG_X86_PAE |
872 | set_nx(); |
873 | @@ -819,7 +829,7 @@ unsigned long __init_refok init_memory_mapping(unsigned long start, |
874 | end_pfn = (end>>PMD_SHIFT) << (PMD_SHIFT - PAGE_SHIFT); |
875 | if (start_pfn < end_pfn) |
876 | kernel_physical_mapping_init(pgd_base, start_pfn, end_pfn, |
877 | - cpu_has_pse); |
878 | + use_pse); |
879 | |
880 | /* tail is not big page alignment ? */ |
881 | start_pfn = end_pfn; |
882 | diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c |
883 | index 1adbb3e..753ea12 100644 |
884 | --- a/arch/x86/mm/init_64.c |
885 | +++ b/arch/x86/mm/init_64.c |
886 | @@ -446,13 +446,14 @@ phys_pud_update(pgd_t *pgd, unsigned long addr, unsigned long end, |
887 | return phys_pud_init(pud, addr, end, page_size_mask); |
888 | } |
889 | |
890 | -static void __init find_early_table_space(unsigned long end) |
891 | +static void __init find_early_table_space(unsigned long end, int use_pse, |
892 | + int use_gbpages) |
893 | { |
894 | unsigned long puds, pmds, ptes, tables, start; |
895 | |
896 | puds = (end + PUD_SIZE - 1) >> PUD_SHIFT; |
897 | tables = round_up(puds * sizeof(pud_t), PAGE_SIZE); |
898 | - if (direct_gbpages) { |
899 | + if (use_gbpages) { |
900 | unsigned long extra; |
901 | extra = end - ((end>>PUD_SHIFT) << PUD_SHIFT); |
902 | pmds = (extra + PMD_SIZE - 1) >> PMD_SHIFT; |
903 | @@ -460,7 +461,7 @@ static void __init find_early_table_space(unsigned long end) |
904 | pmds = (end + PMD_SIZE - 1) >> PMD_SHIFT; |
905 | tables += round_up(pmds * sizeof(pmd_t), PAGE_SIZE); |
906 | |
907 | - if (cpu_has_pse) { |
908 | + if (use_pse) { |
909 | unsigned long extra; |
910 | extra = end - ((end>>PMD_SHIFT) << PMD_SHIFT); |
911 | ptes = (extra + PAGE_SIZE - 1) >> PAGE_SHIFT; |
912 | @@ -571,6 +572,7 @@ unsigned long __init_refok init_memory_mapping(unsigned long start, |
913 | |
914 | struct map_range mr[NR_RANGE_MR]; |
915 | int nr_range, i; |
916 | + int use_pse, use_gbpages; |
917 | |
918 | printk(KERN_INFO "init_memory_mapping\n"); |
919 | |
920 | @@ -584,9 +586,21 @@ unsigned long __init_refok init_memory_mapping(unsigned long start, |
921 | if (!after_bootmem) |
922 | init_gbpages(); |
923 | |
924 | - if (direct_gbpages) |
925 | +#ifdef CONFIG_DEBUG_PAGEALLOC |
926 | + /* |
927 | + * For CONFIG_DEBUG_PAGEALLOC, identity mapping will use small pages. |
928 | + * This will simplify cpa(), which otherwise needs to support splitting |
929 | + * large pages into small in interrupt context, etc. |
930 | + */ |
931 | + use_pse = use_gbpages = 0; |
932 | +#else |
933 | + use_pse = cpu_has_pse; |
934 | + use_gbpages = direct_gbpages; |
935 | +#endif |
936 | + |
937 | + if (use_gbpages) |
938 | page_size_mask |= 1 << PG_LEVEL_1G; |
939 | - if (cpu_has_pse) |
940 | + if (use_pse) |
941 | page_size_mask |= 1 << PG_LEVEL_2M; |
942 | |
943 | memset(mr, 0, sizeof(mr)); |
944 | @@ -647,7 +661,7 @@ unsigned long __init_refok init_memory_mapping(unsigned long start, |
945 | (mr[i].page_size_mask & (1<<PG_LEVEL_2M))?"2M":"4k")); |
946 | |
947 | if (!after_bootmem) |
948 | - find_early_table_space(end); |
949 | + find_early_table_space(end, use_pse, use_gbpages); |
950 | |
951 | for (i = 0; i < nr_range; i++) |
952 | last_map_addr = kernel_physical_mapping_init( |
953 | diff --git a/drivers/dma/ioat_dma.c b/drivers/dma/ioat_dma.c |
954 | index 56790f8..d62311f 100644 |
955 | --- a/drivers/dma/ioat_dma.c |
956 | +++ b/drivers/dma/ioat_dma.c |
957 | @@ -1337,12 +1337,11 @@ static void ioat_dma_start_null_desc(struct ioat_dma_chan *ioat_chan) |
958 | */ |
959 | #define IOAT_TEST_SIZE 2000 |
960 | |
961 | -DECLARE_COMPLETION(test_completion); |
962 | static void ioat_dma_test_callback(void *dma_async_param) |
963 | { |
964 | - printk(KERN_ERR "ioatdma: ioat_dma_test_callback(%p)\n", |
965 | - dma_async_param); |
966 | - complete(&test_completion); |
967 | + struct completion *cmp = dma_async_param; |
968 | + |
969 | + complete(cmp); |
970 | } |
971 | |
972 | /** |
973 | @@ -1359,6 +1358,7 @@ static int ioat_dma_self_test(struct ioatdma_device *device) |
974 | dma_addr_t dma_dest, dma_src; |
975 | dma_cookie_t cookie; |
976 | int err = 0; |
977 | + struct completion cmp; |
978 | |
979 | src = kzalloc(sizeof(u8) * IOAT_TEST_SIZE, GFP_KERNEL); |
980 | if (!src) |
981 | @@ -1398,8 +1398,9 @@ static int ioat_dma_self_test(struct ioatdma_device *device) |
982 | } |
983 | |
984 | async_tx_ack(tx); |
985 | + init_completion(&cmp); |
986 | tx->callback = ioat_dma_test_callback; |
987 | - tx->callback_param = (void *)0x8086; |
988 | + tx->callback_param = &cmp; |
989 | cookie = tx->tx_submit(tx); |
990 | if (cookie < 0) { |
991 | dev_err(&device->pdev->dev, |
992 | @@ -1409,7 +1410,7 @@ static int ioat_dma_self_test(struct ioatdma_device *device) |
993 | } |
994 | device->common.device_issue_pending(dma_chan); |
995 | |
996 | - wait_for_completion_timeout(&test_completion, msecs_to_jiffies(3000)); |
997 | + wait_for_completion_timeout(&cmp, msecs_to_jiffies(3000)); |
998 | |
999 | if (device->common.device_is_tx_complete(dma_chan, cookie, NULL, NULL) |
1000 | != DMA_SUCCESS) { |
1001 | diff --git a/drivers/md/bitmap.c b/drivers/md/bitmap.c |
1002 | index ab7c8e4..666b7ba 100644 |
1003 | --- a/drivers/md/bitmap.c |
1004 | +++ b/drivers/md/bitmap.c |
1005 | @@ -964,9 +964,11 @@ static int bitmap_init_from_disk(struct bitmap *bitmap, sector_t start) |
1006 | */ |
1007 | page = bitmap->sb_page; |
1008 | offset = sizeof(bitmap_super_t); |
1009 | - read_sb_page(bitmap->mddev, bitmap->offset, |
1010 | - page, |
1011 | - index, count); |
1012 | + if (!file) |
1013 | + read_sb_page(bitmap->mddev, |
1014 | + bitmap->offset, |
1015 | + page, |
1016 | + index, count); |
1017 | } else if (file) { |
1018 | page = read_page(file, index, bitmap, count); |
1019 | offset = 0; |
1020 | diff --git a/drivers/md/dm-log.c b/drivers/md/dm-log.c |
1021 | index 5b48478..73b5ec1 100644 |
1022 | --- a/drivers/md/dm-log.c |
1023 | +++ b/drivers/md/dm-log.c |
1024 | @@ -467,6 +467,7 @@ static int create_log_context(struct dm_dirty_log *log, struct dm_target *ti, |
1025 | lc->disk_header = vmalloc(buf_size); |
1026 | if (!lc->disk_header) { |
1027 | DMWARN("couldn't allocate disk log buffer"); |
1028 | + dm_io_client_destroy(lc->io_req.client); |
1029 | kfree(lc); |
1030 | return -ENOMEM; |
1031 | } |
1032 | @@ -482,6 +483,8 @@ static int create_log_context(struct dm_dirty_log *log, struct dm_target *ti, |
1033 | DMWARN("couldn't allocate sync bitset"); |
1034 | if (!dev) |
1035 | vfree(lc->clean_bits); |
1036 | + else |
1037 | + dm_io_client_destroy(lc->io_req.client); |
1038 | vfree(lc->disk_header); |
1039 | kfree(lc); |
1040 | return -ENOMEM; |
1041 | @@ -495,6 +498,8 @@ static int create_log_context(struct dm_dirty_log *log, struct dm_target *ti, |
1042 | vfree(lc->sync_bits); |
1043 | if (!dev) |
1044 | vfree(lc->clean_bits); |
1045 | + else |
1046 | + dm_io_client_destroy(lc->io_req.client); |
1047 | vfree(lc->disk_header); |
1048 | kfree(lc); |
1049 | return -ENOMEM; |
1050 | diff --git a/drivers/md/dm-raid1.c b/drivers/md/dm-raid1.c |
1051 | index 97ef945..8fe418b 100644 |
1052 | --- a/drivers/md/dm-raid1.c |
1053 | +++ b/drivers/md/dm-raid1.c |
1054 | @@ -727,9 +727,6 @@ static void fail_mirror(struct mirror *m, enum dm_raid1_error error_type) |
1055 | struct mirror_set *ms = m->ms; |
1056 | struct mirror *new; |
1057 | |
1058 | - if (!errors_handled(ms)) |
1059 | - return; |
1060 | - |
1061 | /* |
1062 | * error_count is used for nothing more than a |
1063 | * simple way to tell if a device has encountered |
1064 | @@ -740,6 +737,9 @@ static void fail_mirror(struct mirror *m, enum dm_raid1_error error_type) |
1065 | if (test_and_set_bit(error_type, &m->error_type)) |
1066 | return; |
1067 | |
1068 | + if (!errors_handled(ms)) |
1069 | + return; |
1070 | + |
1071 | if (m != get_default_mirror(ms)) |
1072 | goto out; |
1073 | |
1074 | diff --git a/drivers/net/e1000e/e1000.h b/drivers/net/e1000e/e1000.h |
1075 | index 5ea6b60..4ee3d97 100644 |
1076 | --- a/drivers/net/e1000e/e1000.h |
1077 | +++ b/drivers/net/e1000e/e1000.h |
1078 | @@ -283,6 +283,7 @@ struct e1000_adapter { |
1079 | unsigned long led_status; |
1080 | |
1081 | unsigned int flags; |
1082 | + unsigned int flags2; |
1083 | struct work_struct downshift_task; |
1084 | struct work_struct update_phy_task; |
1085 | }; |
1086 | @@ -290,6 +291,7 @@ struct e1000_adapter { |
1087 | struct e1000_info { |
1088 | enum e1000_mac_type mac; |
1089 | unsigned int flags; |
1090 | + unsigned int flags2; |
1091 | u32 pba; |
1092 | s32 (*get_variants)(struct e1000_adapter *); |
1093 | struct e1000_mac_operations *mac_ops; |
1094 | @@ -330,6 +332,9 @@ struct e1000_info { |
1095 | #define FLAG_RX_RESTART_NOW (1 << 30) |
1096 | #define FLAG_MSI_TEST_FAILED (1 << 31) |
1097 | |
1098 | +/* CRC Stripping defines */ |
1099 | +#define FLAG2_CRC_STRIPPING (1 << 0) |
1100 | + |
1101 | #define E1000_RX_DESC_PS(R, i) \ |
1102 | (&(((union e1000_rx_desc_packet_split *)((R).desc))[i])) |
1103 | #define E1000_GET_DESC(R, i, type) (&(((struct type *)((R).desc))[i])) |
1104 | diff --git a/drivers/net/e1000e/netdev.c b/drivers/net/e1000e/netdev.c |
1105 | index 660c85a..c476982 100644 |
1106 | --- a/drivers/net/e1000e/netdev.c |
1107 | +++ b/drivers/net/e1000e/netdev.c |
1108 | @@ -497,6 +497,10 @@ static bool e1000_clean_rx_irq(struct e1000_adapter *adapter, |
1109 | goto next_desc; |
1110 | } |
1111 | |
1112 | + /* adjust length to remove Ethernet CRC */ |
1113 | + if (!(adapter->flags2 & FLAG2_CRC_STRIPPING)) |
1114 | + length -= 4; |
1115 | + |
1116 | total_rx_bytes += length; |
1117 | total_rx_packets++; |
1118 | |
1119 | @@ -802,6 +806,10 @@ static bool e1000_clean_rx_irq_ps(struct e1000_adapter *adapter, |
1120 | pci_dma_sync_single_for_device(pdev, ps_page->dma, |
1121 | PAGE_SIZE, PCI_DMA_FROMDEVICE); |
1122 | |
1123 | + /* remove the CRC */ |
1124 | + if (!(adapter->flags2 & FLAG2_CRC_STRIPPING)) |
1125 | + l1 -= 4; |
1126 | + |
1127 | skb_put(skb, l1); |
1128 | goto copydone; |
1129 | } /* if */ |
1130 | @@ -823,6 +831,12 @@ static bool e1000_clean_rx_irq_ps(struct e1000_adapter *adapter, |
1131 | skb->truesize += length; |
1132 | } |
1133 | |
1134 | + /* strip the ethernet crc, problem is we're using pages now so |
1135 | + * this whole operation can get a little cpu intensive |
1136 | + */ |
1137 | + if (!(adapter->flags2 & FLAG2_CRC_STRIPPING)) |
1138 | + pskb_trim(skb, skb->len - 4); |
1139 | + |
1140 | copydone: |
1141 | total_rx_bytes += skb->len; |
1142 | total_rx_packets++; |
1143 | @@ -1987,8 +2001,12 @@ static void e1000_setup_rctl(struct e1000_adapter *adapter) |
1144 | else |
1145 | rctl |= E1000_RCTL_LPE; |
1146 | |
1147 | - /* Enable hardware CRC frame stripping */ |
1148 | - rctl |= E1000_RCTL_SECRC; |
1149 | + /* Some systems expect that the CRC is included in SMBUS traffic. The |
1150 | + * hardware strips the CRC before sending to both SMBUS (BMC) and to |
1151 | + * host memory when this is enabled |
1152 | + */ |
1153 | + if (adapter->flags2 & FLAG2_CRC_STRIPPING) |
1154 | + rctl |= E1000_RCTL_SECRC; |
1155 | |
1156 | /* Setup buffer sizes */ |
1157 | rctl &= ~E1000_RCTL_SZ_4096; |
1158 | @@ -4412,6 +4430,7 @@ static int __devinit e1000_probe(struct pci_dev *pdev, |
1159 | adapter->ei = ei; |
1160 | adapter->pba = ei->pba; |
1161 | adapter->flags = ei->flags; |
1162 | + adapter->flags2 = ei->flags2; |
1163 | adapter->hw.adapter = adapter; |
1164 | adapter->hw.mac.type = ei->mac; |
1165 | adapter->msg_enable = (1 << NETIF_MSG_DRV | NETIF_MSG_PROBE) - 1; |
1166 | diff --git a/drivers/net/e1000e/param.c b/drivers/net/e1000e/param.c |
1167 | index d91dbf7..a7c8b99 100644 |
1168 | --- a/drivers/net/e1000e/param.c |
1169 | +++ b/drivers/net/e1000e/param.c |
1170 | @@ -142,6 +142,16 @@ E1000_PARAM(KumeranLockLoss, "Enable Kumeran lock loss workaround"); |
1171 | */ |
1172 | E1000_PARAM(WriteProtectNVM, "Write-protect NVM [WARNING: disabling this can lead to corrupted NVM]"); |
1173 | |
1174 | +/* |
1175 | + * Enable CRC Stripping |
1176 | + * |
1177 | + * Valid Range: 0, 1 |
1178 | + * |
1179 | + * Default Value: 1 (enabled) |
1180 | + */ |
1181 | +E1000_PARAM(CrcStripping, "Enable CRC Stripping, disable if your BMC needs " \ |
1182 | + "the CRC"); |
1183 | + |
1184 | struct e1000_option { |
1185 | enum { enable_option, range_option, list_option } type; |
1186 | const char *name; |
1187 | @@ -377,6 +387,21 @@ void __devinit e1000e_check_options(struct e1000_adapter *adapter) |
1188 | adapter->flags |= FLAG_SMART_POWER_DOWN; |
1189 | } |
1190 | } |
1191 | + { /* CRC Stripping */ |
1192 | + const struct e1000_option opt = { |
1193 | + .type = enable_option, |
1194 | + .name = "CRC Stripping", |
1195 | + .err = "defaulting to enabled", |
1196 | + .def = OPTION_ENABLED |
1197 | + }; |
1198 | + |
1199 | + if (num_CrcStripping > bd) { |
1200 | + unsigned int crc_stripping = CrcStripping[bd]; |
1201 | + e1000_validate_option(&crc_stripping, &opt, adapter); |
1202 | + if (crc_stripping == OPTION_ENABLED) |
1203 | + adapter->flags2 |= FLAG2_CRC_STRIPPING; |
1204 | + } |
1205 | + } |
1206 | { /* Kumeran Lock Loss Workaround */ |
1207 | const struct e1000_option opt = { |
1208 | .type = enable_option, |
1209 | diff --git a/drivers/net/wireless/iwlwifi/iwl-agn.c b/drivers/net/wireless/iwlwifi/iwl-agn.c |
1210 | index 79b7ae3..20ab0fd 100644 |
1211 | --- a/drivers/net/wireless/iwlwifi/iwl-agn.c |
1212 | +++ b/drivers/net/wireless/iwlwifi/iwl-agn.c |
1213 | @@ -1334,16 +1334,6 @@ static void iwl_setup_rx_handlers(struct iwl_priv *priv) |
1214 | priv->cfg->ops->lib->rx_handler_setup(priv); |
1215 | } |
1216 | |
1217 | -/* |
1218 | - * this should be called while priv->lock is locked |
1219 | -*/ |
1220 | -static void __iwl_rx_replenish(struct iwl_priv *priv) |
1221 | -{ |
1222 | - iwl_rx_allocate(priv); |
1223 | - iwl_rx_queue_restock(priv); |
1224 | -} |
1225 | - |
1226 | - |
1227 | /** |
1228 | * iwl_rx_handle - Main entry function for receiving responses from uCode |
1229 | * |
1230 | @@ -1449,7 +1439,7 @@ void iwl_rx_handle(struct iwl_priv *priv) |
1231 | count++; |
1232 | if (count >= 8) { |
1233 | priv->rxq.read = i; |
1234 | - __iwl_rx_replenish(priv); |
1235 | + iwl_rx_queue_restock(priv); |
1236 | count = 0; |
1237 | } |
1238 | } |
1239 | diff --git a/drivers/net/wireless/iwlwifi/iwl-rx.c b/drivers/net/wireless/iwlwifi/iwl-rx.c |
1240 | index ce25379..36391ef 100644 |
1241 | --- a/drivers/net/wireless/iwlwifi/iwl-rx.c |
1242 | +++ b/drivers/net/wireless/iwlwifi/iwl-rx.c |
1243 | @@ -245,25 +245,31 @@ void iwl_rx_allocate(struct iwl_priv *priv) |
1244 | struct list_head *element; |
1245 | struct iwl_rx_mem_buffer *rxb; |
1246 | unsigned long flags; |
1247 | - spin_lock_irqsave(&rxq->lock, flags); |
1248 | - while (!list_empty(&rxq->rx_used)) { |
1249 | + |
1250 | + while (1) { |
1251 | + spin_lock_irqsave(&rxq->lock, flags); |
1252 | + |
1253 | + if (list_empty(&rxq->rx_used)) { |
1254 | + spin_unlock_irqrestore(&rxq->lock, flags); |
1255 | + return; |
1256 | + } |
1257 | element = rxq->rx_used.next; |
1258 | rxb = list_entry(element, struct iwl_rx_mem_buffer, list); |
1259 | + list_del(element); |
1260 | + |
1261 | + spin_unlock_irqrestore(&rxq->lock, flags); |
1262 | |
1263 | /* Alloc a new receive buffer */ |
1264 | rxb->skb = alloc_skb(priv->hw_params.rx_buf_size + 256, |
1265 | - __GFP_NOWARN | GFP_ATOMIC); |
1266 | + GFP_KERNEL); |
1267 | if (!rxb->skb) { |
1268 | - if (net_ratelimit()) |
1269 | - printk(KERN_CRIT DRV_NAME |
1270 | - ": Can not allocate SKB buffers\n"); |
1271 | + printk(KERN_CRIT DRV_NAME |
1272 | + "Can not allocate SKB buffers\n"); |
1273 | /* We don't reschedule replenish work here -- we will |
1274 | * call the restock method and if it still needs |
1275 | * more buffers it will schedule replenish */ |
1276 | break; |
1277 | } |
1278 | - priv->alloc_rxb_skb++; |
1279 | - list_del(element); |
1280 | |
1281 | /* Get physical address of RB/SKB */ |
1282 | rxb->real_dma_addr = pci_map_single( |
1283 | @@ -277,12 +283,15 @@ void iwl_rx_allocate(struct iwl_priv *priv) |
1284 | rxb->aligned_dma_addr = ALIGN(rxb->real_dma_addr, 256); |
1285 | skb_reserve(rxb->skb, rxb->aligned_dma_addr - rxb->real_dma_addr); |
1286 | |
1287 | + spin_lock_irqsave(&rxq->lock, flags); |
1288 | + |
1289 | list_add_tail(&rxb->list, &rxq->rx_free); |
1290 | rxq->free_count++; |
1291 | + priv->alloc_rxb_skb++; |
1292 | + |
1293 | + spin_unlock_irqrestore(&rxq->lock, flags); |
1294 | } |
1295 | - spin_unlock_irqrestore(&rxq->lock, flags); |
1296 | } |
1297 | -EXPORT_SYMBOL(iwl_rx_allocate); |
1298 | |
1299 | void iwl_rx_replenish(struct iwl_priv *priv) |
1300 | { |
1301 | diff --git a/drivers/pci/pci-driver.c b/drivers/pci/pci-driver.c |
1302 | index a13f534..2d04b28 100644 |
1303 | --- a/drivers/pci/pci-driver.c |
1304 | +++ b/drivers/pci/pci-driver.c |
1305 | @@ -287,6 +287,14 @@ static void pci_device_shutdown(struct device *dev) |
1306 | |
1307 | #ifdef CONFIG_PM_SLEEP |
1308 | |
1309 | +static bool pci_has_legacy_pm_support(struct pci_dev *pci_dev) |
1310 | +{ |
1311 | + struct pci_driver *drv = pci_dev->driver; |
1312 | + |
1313 | + return drv && (drv->suspend || drv->suspend_late || drv->resume |
1314 | + || drv->resume_early); |
1315 | +} |
1316 | + |
1317 | /* |
1318 | * Default "suspend" method for devices that have no driver provided suspend, |
1319 | * or not even a driver at all. |
1320 | @@ -304,14 +312,22 @@ static void pci_default_pm_suspend(struct pci_dev *pci_dev) |
1321 | |
1322 | /* |
1323 | * Default "resume" method for devices that have no driver provided resume, |
1324 | - * or not even a driver at all. |
1325 | + * or not even a driver at all (first part). |
1326 | */ |
1327 | -static int pci_default_pm_resume(struct pci_dev *pci_dev) |
1328 | +static void pci_default_pm_resume_early(struct pci_dev *pci_dev) |
1329 | { |
1330 | - int retval = 0; |
1331 | - |
1332 | /* restore the PCI config space */ |
1333 | pci_restore_state(pci_dev); |
1334 | +} |
1335 | + |
1336 | +/* |
1337 | + * Default "resume" method for devices that have no driver provided resume, |
1338 | + * or not even a driver at all (second part). |
1339 | + */ |
1340 | +static int pci_default_pm_resume_late(struct pci_dev *pci_dev) |
1341 | +{ |
1342 | + int retval; |
1343 | + |
1344 | /* if the device was enabled before suspend, reenable */ |
1345 | retval = pci_reenable_device(pci_dev); |
1346 | /* |
1347 | @@ -358,10 +374,12 @@ static int pci_legacy_resume(struct device *dev) |
1348 | struct pci_dev * pci_dev = to_pci_dev(dev); |
1349 | struct pci_driver * drv = pci_dev->driver; |
1350 | |
1351 | - if (drv && drv->resume) |
1352 | + if (drv && drv->resume) { |
1353 | error = drv->resume(pci_dev); |
1354 | - else |
1355 | - error = pci_default_pm_resume(pci_dev); |
1356 | + } else { |
1357 | + pci_default_pm_resume_early(pci_dev); |
1358 | + error = pci_default_pm_resume_late(pci_dev); |
1359 | + } |
1360 | return error; |
1361 | } |
1362 | |
1363 | @@ -407,10 +425,8 @@ static int pci_pm_suspend(struct device *dev) |
1364 | if (drv->pm->suspend) { |
1365 | error = drv->pm->suspend(dev); |
1366 | suspend_report_result(drv->pm->suspend, error); |
1367 | - } else { |
1368 | - pci_default_pm_suspend(pci_dev); |
1369 | } |
1370 | - } else { |
1371 | + } else if (pci_has_legacy_pm_support(pci_dev)) { |
1372 | error = pci_legacy_suspend(dev, PMSG_SUSPEND); |
1373 | } |
1374 | pci_fixup_device(pci_fixup_suspend, pci_dev); |
1375 | @@ -429,8 +445,10 @@ static int pci_pm_suspend_noirq(struct device *dev) |
1376 | error = drv->pm->suspend_noirq(dev); |
1377 | suspend_report_result(drv->pm->suspend_noirq, error); |
1378 | } |
1379 | - } else { |
1380 | + } else if (pci_has_legacy_pm_support(pci_dev)) { |
1381 | error = pci_legacy_suspend_late(dev, PMSG_SUSPEND); |
1382 | + } else { |
1383 | + pci_default_pm_suspend(pci_dev); |
1384 | } |
1385 | |
1386 | return error; |
1387 | @@ -440,15 +458,17 @@ static int pci_pm_resume(struct device *dev) |
1388 | { |
1389 | struct pci_dev *pci_dev = to_pci_dev(dev); |
1390 | struct device_driver *drv = dev->driver; |
1391 | - int error; |
1392 | + int error = 0; |
1393 | |
1394 | pci_fixup_device(pci_fixup_resume, pci_dev); |
1395 | |
1396 | if (drv && drv->pm) { |
1397 | - error = drv->pm->resume ? drv->pm->resume(dev) : |
1398 | - pci_default_pm_resume(pci_dev); |
1399 | - } else { |
1400 | + if (drv->pm->resume) |
1401 | + error = drv->pm->resume(dev); |
1402 | + } else if (pci_has_legacy_pm_support(pci_dev)) { |
1403 | error = pci_legacy_resume(dev); |
1404 | + } else { |
1405 | + error = pci_default_pm_resume_late(pci_dev); |
1406 | } |
1407 | |
1408 | return error; |
1409 | @@ -465,8 +485,10 @@ static int pci_pm_resume_noirq(struct device *dev) |
1410 | if (drv && drv->pm) { |
1411 | if (drv->pm->resume_noirq) |
1412 | error = drv->pm->resume_noirq(dev); |
1413 | - } else { |
1414 | + } else if (pci_has_legacy_pm_support(pci_dev)) { |
1415 | error = pci_legacy_resume_early(dev); |
1416 | + } else { |
1417 | + pci_default_pm_resume_early(pci_dev); |
1418 | } |
1419 | |
1420 | return error; |
1421 | @@ -493,10 +515,8 @@ static int pci_pm_freeze(struct device *dev) |
1422 | if (drv->pm->freeze) { |
1423 | error = drv->pm->freeze(dev); |
1424 | suspend_report_result(drv->pm->freeze, error); |
1425 | - } else { |
1426 | - pci_default_pm_suspend(pci_dev); |
1427 | } |
1428 | - } else { |
1429 | + } else if (pci_has_legacy_pm_support(pci_dev)) { |
1430 | error = pci_legacy_suspend(dev, PMSG_FREEZE); |
1431 | pci_fixup_device(pci_fixup_suspend, pci_dev); |
1432 | } |
1433 | @@ -515,8 +535,10 @@ static int pci_pm_freeze_noirq(struct device *dev) |
1434 | error = drv->pm->freeze_noirq(dev); |
1435 | suspend_report_result(drv->pm->freeze_noirq, error); |
1436 | } |
1437 | - } else { |
1438 | + } else if (pci_has_legacy_pm_support(pci_dev)) { |
1439 | error = pci_legacy_suspend_late(dev, PMSG_FREEZE); |
1440 | + } else { |
1441 | + pci_default_pm_suspend(pci_dev); |
1442 | } |
1443 | |
1444 | return error; |
1445 | @@ -524,14 +546,15 @@ static int pci_pm_freeze_noirq(struct device *dev) |
1446 | |
1447 | static int pci_pm_thaw(struct device *dev) |
1448 | { |
1449 | + struct pci_dev *pci_dev = to_pci_dev(dev); |
1450 | struct device_driver *drv = dev->driver; |
1451 | int error = 0; |
1452 | |
1453 | if (drv && drv->pm) { |
1454 | if (drv->pm->thaw) |
1455 | error = drv->pm->thaw(dev); |
1456 | - } else { |
1457 | - pci_fixup_device(pci_fixup_resume, to_pci_dev(dev)); |
1458 | + } else if (pci_has_legacy_pm_support(pci_dev)) { |
1459 | + pci_fixup_device(pci_fixup_resume, pci_dev); |
1460 | error = pci_legacy_resume(dev); |
1461 | } |
1462 | |
1463 | @@ -547,7 +570,7 @@ static int pci_pm_thaw_noirq(struct device *dev) |
1464 | if (drv && drv->pm) { |
1465 | if (drv->pm->thaw_noirq) |
1466 | error = drv->pm->thaw_noirq(dev); |
1467 | - } else { |
1468 | + } else if (pci_has_legacy_pm_support(pci_dev)) { |
1469 | pci_fixup_device(pci_fixup_resume_early, pci_dev); |
1470 | error = pci_legacy_resume_early(dev); |
1471 | } |
1472 | @@ -557,17 +580,18 @@ static int pci_pm_thaw_noirq(struct device *dev) |
1473 | |
1474 | static int pci_pm_poweroff(struct device *dev) |
1475 | { |
1476 | + struct pci_dev *pci_dev = to_pci_dev(dev); |
1477 | struct device_driver *drv = dev->driver; |
1478 | int error = 0; |
1479 | |
1480 | - pci_fixup_device(pci_fixup_suspend, to_pci_dev(dev)); |
1481 | + pci_fixup_device(pci_fixup_suspend, pci_dev); |
1482 | |
1483 | if (drv && drv->pm) { |
1484 | if (drv->pm->poweroff) { |
1485 | error = drv->pm->poweroff(dev); |
1486 | suspend_report_result(drv->pm->poweroff, error); |
1487 | } |
1488 | - } else { |
1489 | + } else if (pci_has_legacy_pm_support(pci_dev)) { |
1490 | error = pci_legacy_suspend(dev, PMSG_HIBERNATE); |
1491 | } |
1492 | |
1493 | @@ -585,7 +609,7 @@ static int pci_pm_poweroff_noirq(struct device *dev) |
1494 | error = drv->pm->poweroff_noirq(dev); |
1495 | suspend_report_result(drv->pm->poweroff_noirq, error); |
1496 | } |
1497 | - } else { |
1498 | + } else if (pci_has_legacy_pm_support(to_pci_dev(dev))) { |
1499 | error = pci_legacy_suspend_late(dev, PMSG_HIBERNATE); |
1500 | } |
1501 | |
1502 | @@ -596,13 +620,15 @@ static int pci_pm_restore(struct device *dev) |
1503 | { |
1504 | struct pci_dev *pci_dev = to_pci_dev(dev); |
1505 | struct device_driver *drv = dev->driver; |
1506 | - int error; |
1507 | + int error = 0; |
1508 | |
1509 | if (drv && drv->pm) { |
1510 | - error = drv->pm->restore ? drv->pm->restore(dev) : |
1511 | - pci_default_pm_resume(pci_dev); |
1512 | - } else { |
1513 | + if (drv->pm->restore) |
1514 | + error = drv->pm->restore(dev); |
1515 | + } else if (pci_has_legacy_pm_support(pci_dev)) { |
1516 | error = pci_legacy_resume(dev); |
1517 | + } else { |
1518 | + error = pci_default_pm_resume_late(pci_dev); |
1519 | } |
1520 | pci_fixup_device(pci_fixup_resume, pci_dev); |
1521 | |
1522 | @@ -620,8 +646,10 @@ static int pci_pm_restore_noirq(struct device *dev) |
1523 | if (drv && drv->pm) { |
1524 | if (drv->pm->restore_noirq) |
1525 | error = drv->pm->restore_noirq(dev); |
1526 | - } else { |
1527 | + } else if (pci_has_legacy_pm_support(pci_dev)) { |
1528 | error = pci_legacy_resume_early(dev); |
1529 | + } else { |
1530 | + pci_default_pm_resume_early(pci_dev); |
1531 | } |
1532 | pci_fixup_device(pci_fixup_resume_early, pci_dev); |
1533 | |
1534 | diff --git a/drivers/pci/pci.c b/drivers/pci/pci.c |
1535 | index c9884bb..409e00e 100644 |
1536 | --- a/drivers/pci/pci.c |
1537 | +++ b/drivers/pci/pci.c |
1538 | @@ -636,19 +636,14 @@ static int pci_save_pcie_state(struct pci_dev *dev) |
1539 | int pos, i = 0; |
1540 | struct pci_cap_saved_state *save_state; |
1541 | u16 *cap; |
1542 | - int found = 0; |
1543 | |
1544 | pos = pci_find_capability(dev, PCI_CAP_ID_EXP); |
1545 | if (pos <= 0) |
1546 | return 0; |
1547 | |
1548 | save_state = pci_find_saved_cap(dev, PCI_CAP_ID_EXP); |
1549 | - if (!save_state) |
1550 | - save_state = kzalloc(sizeof(*save_state) + sizeof(u16) * 4, GFP_KERNEL); |
1551 | - else |
1552 | - found = 1; |
1553 | if (!save_state) { |
1554 | - dev_err(&dev->dev, "out of memory in pci_save_pcie_state\n"); |
1555 | + dev_err(&dev->dev, "buffer not found in %s\n", __FUNCTION__); |
1556 | return -ENOMEM; |
1557 | } |
1558 | cap = (u16 *)&save_state->data[0]; |
1559 | @@ -657,9 +652,7 @@ static int pci_save_pcie_state(struct pci_dev *dev) |
1560 | pci_read_config_word(dev, pos + PCI_EXP_LNKCTL, &cap[i++]); |
1561 | pci_read_config_word(dev, pos + PCI_EXP_SLTCTL, &cap[i++]); |
1562 | pci_read_config_word(dev, pos + PCI_EXP_RTCTL, &cap[i++]); |
1563 | - save_state->cap_nr = PCI_CAP_ID_EXP; |
1564 | - if (!found) |
1565 | - pci_add_saved_cap(dev, save_state); |
1566 | + |
1567 | return 0; |
1568 | } |
1569 | |
1570 | @@ -684,30 +677,21 @@ static void pci_restore_pcie_state(struct pci_dev *dev) |
1571 | |
1572 | static int pci_save_pcix_state(struct pci_dev *dev) |
1573 | { |
1574 | - int pos, i = 0; |
1575 | + int pos; |
1576 | struct pci_cap_saved_state *save_state; |
1577 | - u16 *cap; |
1578 | - int found = 0; |
1579 | |
1580 | pos = pci_find_capability(dev, PCI_CAP_ID_PCIX); |
1581 | if (pos <= 0) |
1582 | return 0; |
1583 | |
1584 | save_state = pci_find_saved_cap(dev, PCI_CAP_ID_PCIX); |
1585 | - if (!save_state) |
1586 | - save_state = kzalloc(sizeof(*save_state) + sizeof(u16), GFP_KERNEL); |
1587 | - else |
1588 | - found = 1; |
1589 | if (!save_state) { |
1590 | - dev_err(&dev->dev, "out of memory in pci_save_pcie_state\n"); |
1591 | + dev_err(&dev->dev, "buffer not found in %s\n", __FUNCTION__); |
1592 | return -ENOMEM; |
1593 | } |
1594 | - cap = (u16 *)&save_state->data[0]; |
1595 | |
1596 | - pci_read_config_word(dev, pos + PCI_X_CMD, &cap[i++]); |
1597 | - save_state->cap_nr = PCI_CAP_ID_PCIX; |
1598 | - if (!found) |
1599 | - pci_add_saved_cap(dev, save_state); |
1600 | + pci_read_config_word(dev, pos + PCI_X_CMD, (u16 *)save_state->data); |
1601 | + |
1602 | return 0; |
1603 | } |
1604 | |
1605 | @@ -726,6 +710,50 @@ static void pci_restore_pcix_state(struct pci_dev *dev) |
1606 | pci_write_config_word(dev, pos + PCI_X_CMD, cap[i++]); |
1607 | } |
1608 | |
1609 | + /** |
1610 | + * pci_add_save_buffer - allocate buffer for saving given capability registers |
1611 | + * @dev: the PCI device |
1612 | + * @cap: the capability to allocate the buffer for |
1613 | + * @size: requested size of the buffer |
1614 | + */ |
1615 | +static int pci_add_cap_save_buffer( |
1616 | + struct pci_dev *dev, char cap, unsigned int size) |
1617 | +{ |
1618 | + int pos; |
1619 | + struct pci_cap_saved_state *save_state; |
1620 | + |
1621 | + pos = pci_find_capability(dev, cap); |
1622 | + if (pos <= 0) |
1623 | + return 0; |
1624 | + |
1625 | + save_state = kzalloc(sizeof(*save_state) + size, GFP_KERNEL); |
1626 | + if (!save_state) |
1627 | + return -ENOMEM; |
1628 | + |
1629 | + save_state->cap_nr = cap; |
1630 | + pci_add_saved_cap(dev, save_state); |
1631 | + |
1632 | + return 0; |
1633 | +} |
1634 | + |
1635 | +/** |
1636 | + * pci_allocate_cap_save_buffers - allocate buffers for saving capabilities |
1637 | + * @dev: the PCI device |
1638 | + */ |
1639 | +void pci_allocate_cap_save_buffers(struct pci_dev *dev) |
1640 | +{ |
1641 | + int error; |
1642 | + |
1643 | + error = pci_add_cap_save_buffer(dev, PCI_CAP_ID_EXP, 4 * sizeof(u16)); |
1644 | + if (error) |
1645 | + dev_err(&dev->dev, |
1646 | + "unable to preallocate PCI Express save buffer\n"); |
1647 | + |
1648 | + error = pci_add_cap_save_buffer(dev, PCI_CAP_ID_PCIX, sizeof(u16)); |
1649 | + if (error) |
1650 | + dev_err(&dev->dev, |
1651 | + "unable to preallocate PCI-X save buffer\n"); |
1652 | +} |
1653 | |
1654 | /** |
1655 | * pci_save_state - save the PCI configuration space of a device before suspending |
1656 | diff --git a/drivers/pci/pci.h b/drivers/pci/pci.h |
1657 | index d807cd7..7b1efe9 100644 |
1658 | --- a/drivers/pci/pci.h |
1659 | +++ b/drivers/pci/pci.h |
1660 | @@ -35,6 +35,7 @@ struct pci_platform_pm_ops { |
1661 | |
1662 | extern int pci_set_platform_pm(struct pci_platform_pm_ops *ops); |
1663 | extern void pci_pm_init(struct pci_dev *dev); |
1664 | +extern void pci_allocate_cap_save_buffers(struct pci_dev *dev); |
1665 | |
1666 | extern int pci_user_read_config_byte(struct pci_dev *dev, int where, u8 *val); |
1667 | extern int pci_user_read_config_word(struct pci_dev *dev, int where, u16 *val); |
1668 | diff --git a/drivers/pci/pcie/portdrv_pci.c b/drivers/pci/pcie/portdrv_pci.c |
1669 | index 367c9c2..6abfafc 100644 |
1670 | --- a/drivers/pci/pcie/portdrv_pci.c |
1671 | +++ b/drivers/pci/pcie/portdrv_pci.c |
1672 | @@ -41,7 +41,6 @@ static int pcie_portdrv_restore_config(struct pci_dev *dev) |
1673 | { |
1674 | int retval; |
1675 | |
1676 | - pci_restore_state(dev); |
1677 | retval = pci_enable_device(dev); |
1678 | if (retval) |
1679 | return retval; |
1680 | @@ -52,11 +51,18 @@ static int pcie_portdrv_restore_config(struct pci_dev *dev) |
1681 | #ifdef CONFIG_PM |
1682 | static int pcie_portdrv_suspend(struct pci_dev *dev, pm_message_t state) |
1683 | { |
1684 | - int ret = pcie_port_device_suspend(dev, state); |
1685 | + return pcie_port_device_suspend(dev, state); |
1686 | |
1687 | - if (!ret) |
1688 | - ret = pcie_portdrv_save_config(dev); |
1689 | - return ret; |
1690 | +} |
1691 | + |
1692 | +static int pcie_portdrv_suspend_late(struct pci_dev *dev, pm_message_t state) |
1693 | +{ |
1694 | + return pci_save_state(dev); |
1695 | +} |
1696 | + |
1697 | +static int pcie_portdrv_resume_early(struct pci_dev *dev) |
1698 | +{ |
1699 | + return pci_restore_state(dev); |
1700 | } |
1701 | |
1702 | static int pcie_portdrv_resume(struct pci_dev *dev) |
1703 | @@ -66,6 +72,8 @@ static int pcie_portdrv_resume(struct pci_dev *dev) |
1704 | } |
1705 | #else |
1706 | #define pcie_portdrv_suspend NULL |
1707 | +#define pcie_portdrv_suspend_late NULL |
1708 | +#define pcie_portdrv_resume_early NULL |
1709 | #define pcie_portdrv_resume NULL |
1710 | #endif |
1711 | |
1712 | @@ -221,6 +229,7 @@ static pci_ers_result_t pcie_portdrv_slot_reset(struct pci_dev *dev) |
1713 | |
1714 | /* If fatal, restore cfg space for possible link reset at upstream */ |
1715 | if (dev->error_state == pci_channel_io_frozen) { |
1716 | + pci_restore_state(dev); |
1717 | pcie_portdrv_restore_config(dev); |
1718 | pci_enable_pcie_error_reporting(dev); |
1719 | } |
1720 | @@ -283,6 +292,8 @@ static struct pci_driver pcie_portdriver = { |
1721 | .remove = pcie_portdrv_remove, |
1722 | |
1723 | .suspend = pcie_portdrv_suspend, |
1724 | + .suspend_late = pcie_portdrv_suspend_late, |
1725 | + .resume_early = pcie_portdrv_resume_early, |
1726 | .resume = pcie_portdrv_resume, |
1727 | |
1728 | .err_handler = &pcie_portdrv_err_handler, |
1729 | diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c |
1730 | index bcafbd6..eb6c8d1 100644 |
1731 | --- a/drivers/pci/probe.c |
1732 | +++ b/drivers/pci/probe.c |
1733 | @@ -1028,6 +1028,9 @@ void pci_device_add(struct pci_dev *dev, struct pci_bus *bus) |
1734 | /* Fix up broken headers */ |
1735 | pci_fixup_device(pci_fixup_header, dev); |
1736 | |
1737 | + /* Buffers for saving PCIe and PCI-X capabilities */ |
1738 | + pci_allocate_cap_save_buffers(dev); |
1739 | + |
1740 | /* Initialize power management of the device */ |
1741 | pci_pm_init(dev); |
1742 | |
1743 | diff --git a/drivers/pci/syscall.c b/drivers/pci/syscall.c |
1744 | index 645d7a6..ec22284 100644 |
1745 | --- a/drivers/pci/syscall.c |
1746 | +++ b/drivers/pci/syscall.c |
1747 | @@ -14,10 +14,8 @@ |
1748 | #include <asm/uaccess.h> |
1749 | #include "pci.h" |
1750 | |
1751 | -asmlinkage long |
1752 | -sys_pciconfig_read(unsigned long bus, unsigned long dfn, |
1753 | - unsigned long off, unsigned long len, |
1754 | - void __user *buf) |
1755 | +SYSCALL_DEFINE5(pciconfig_read, unsigned long, bus, unsigned long, dfn, |
1756 | + unsigned long, off, unsigned long, len, void __user *, buf) |
1757 | { |
1758 | struct pci_dev *dev; |
1759 | u8 byte; |
1760 | @@ -86,10 +84,8 @@ error: |
1761 | return err; |
1762 | } |
1763 | |
1764 | -asmlinkage long |
1765 | -sys_pciconfig_write(unsigned long bus, unsigned long dfn, |
1766 | - unsigned long off, unsigned long len, |
1767 | - void __user *buf) |
1768 | +SYSCALL_DEFINE5(pciconfig_write, unsigned long, bus, unsigned long, dfn, |
1769 | + unsigned long, off, unsigned long, len, void __user *, buf) |
1770 | { |
1771 | struct pci_dev *dev; |
1772 | u8 byte; |
1773 | diff --git a/drivers/scsi/eata.c b/drivers/scsi/eata.c |
1774 | index a73a6bb..976cdd5 100644 |
1775 | --- a/drivers/scsi/eata.c |
1776 | +++ b/drivers/scsi/eata.c |
1777 | @@ -1626,8 +1626,15 @@ static void map_dma(unsigned int i, struct hostdata *ha) |
1778 | |
1779 | cpp->sense_len = SCSI_SENSE_BUFFERSIZE; |
1780 | |
1781 | - count = scsi_dma_map(SCpnt); |
1782 | - BUG_ON(count < 0); |
1783 | + if (!scsi_sg_count(SCpnt)) { |
1784 | + cpp->data_len = 0; |
1785 | + return; |
1786 | + } |
1787 | + |
1788 | + count = pci_map_sg(ha->pdev, scsi_sglist(SCpnt), scsi_sg_count(SCpnt), |
1789 | + pci_dir); |
1790 | + BUG_ON(!count); |
1791 | + |
1792 | scsi_for_each_sg(SCpnt, sg, count, k) { |
1793 | cpp->sglist[k].address = H2DEV(sg_dma_address(sg)); |
1794 | cpp->sglist[k].num_bytes = H2DEV(sg_dma_len(sg)); |
1795 | @@ -1655,7 +1662,9 @@ static void unmap_dma(unsigned int i, struct hostdata *ha) |
1796 | pci_unmap_single(ha->pdev, DEV2H(cpp->sense_addr), |
1797 | DEV2H(cpp->sense_len), PCI_DMA_FROMDEVICE); |
1798 | |
1799 | - scsi_dma_unmap(SCpnt); |
1800 | + if (scsi_sg_count(SCpnt)) |
1801 | + pci_unmap_sg(ha->pdev, scsi_sglist(SCpnt), scsi_sg_count(SCpnt), |
1802 | + pci_dir); |
1803 | |
1804 | if (!DEV2H(cpp->data_len)) |
1805 | pci_dir = PCI_DMA_BIDIRECTIONAL; |
1806 | diff --git a/drivers/scsi/ibmvscsi/ibmvfc.c b/drivers/scsi/ibmvscsi/ibmvfc.c |
1807 | index 4e0b7c8..2f114b4 100644 |
1808 | --- a/drivers/scsi/ibmvscsi/ibmvfc.c |
1809 | +++ b/drivers/scsi/ibmvscsi/ibmvfc.c |
1810 | @@ -566,7 +566,7 @@ static void ibmvfc_init_host(struct ibmvfc_host *vhost, int relogin) |
1811 | struct ibmvfc_target *tgt; |
1812 | |
1813 | if (vhost->action == IBMVFC_HOST_ACTION_INIT_WAIT) { |
1814 | - if (++vhost->init_retries > IBMVFC_MAX_INIT_RETRIES) { |
1815 | + if (++vhost->init_retries > IBMVFC_MAX_HOST_INIT_RETRIES) { |
1816 | dev_err(vhost->dev, |
1817 | "Host initialization retries exceeded. Taking adapter offline\n"); |
1818 | ibmvfc_link_down(vhost, IBMVFC_HOST_OFFLINE); |
1819 | @@ -847,11 +847,12 @@ static void ibmvfc_reset_host(struct ibmvfc_host *vhost) |
1820 | static void ibmvfc_retry_host_init(struct ibmvfc_host *vhost) |
1821 | { |
1822 | if (vhost->action == IBMVFC_HOST_ACTION_INIT_WAIT) { |
1823 | - if (++vhost->init_retries > IBMVFC_MAX_INIT_RETRIES) { |
1824 | + vhost->delay_init = 1; |
1825 | + if (++vhost->init_retries > IBMVFC_MAX_HOST_INIT_RETRIES) { |
1826 | dev_err(vhost->dev, |
1827 | "Host initialization retries exceeded. Taking adapter offline\n"); |
1828 | ibmvfc_link_down(vhost, IBMVFC_HOST_OFFLINE); |
1829 | - } else if (vhost->init_retries == IBMVFC_MAX_INIT_RETRIES) |
1830 | + } else if (vhost->init_retries == IBMVFC_MAX_HOST_INIT_RETRIES) |
1831 | __ibmvfc_reset_host(vhost); |
1832 | else |
1833 | ibmvfc_set_host_action(vhost, IBMVFC_HOST_ACTION_INIT); |
1834 | @@ -2091,15 +2092,17 @@ static void ibmvfc_handle_async(struct ibmvfc_async_crq *crq, |
1835 | case IBMVFC_AE_LINK_UP: |
1836 | case IBMVFC_AE_RESUME: |
1837 | vhost->events_to_log |= IBMVFC_AE_LINKUP; |
1838 | - ibmvfc_init_host(vhost, 1); |
1839 | + vhost->delay_init = 1; |
1840 | + __ibmvfc_reset_host(vhost); |
1841 | break; |
1842 | case IBMVFC_AE_SCN_FABRIC: |
1843 | + case IBMVFC_AE_SCN_DOMAIN: |
1844 | vhost->events_to_log |= IBMVFC_AE_RSCN; |
1845 | - ibmvfc_init_host(vhost, 1); |
1846 | + vhost->delay_init = 1; |
1847 | + __ibmvfc_reset_host(vhost); |
1848 | break; |
1849 | case IBMVFC_AE_SCN_NPORT: |
1850 | case IBMVFC_AE_SCN_GROUP: |
1851 | - case IBMVFC_AE_SCN_DOMAIN: |
1852 | vhost->events_to_log |= IBMVFC_AE_RSCN; |
1853 | case IBMVFC_AE_ELS_LOGO: |
1854 | case IBMVFC_AE_ELS_PRLO: |
1855 | @@ -2671,7 +2674,7 @@ static void ibmvfc_init_tgt(struct ibmvfc_target *tgt, |
1856 | static void ibmvfc_retry_tgt_init(struct ibmvfc_target *tgt, |
1857 | void (*job_step) (struct ibmvfc_target *)) |
1858 | { |
1859 | - if (++tgt->init_retries > IBMVFC_MAX_INIT_RETRIES) { |
1860 | + if (++tgt->init_retries > IBMVFC_MAX_TGT_INIT_RETRIES) { |
1861 | ibmvfc_set_tgt_action(tgt, IBMVFC_TGT_ACTION_DEL_RPORT); |
1862 | wake_up(&tgt->vhost->work_wait_q); |
1863 | } else |
1864 | @@ -3521,7 +3524,13 @@ static void ibmvfc_do_work(struct ibmvfc_host *vhost) |
1865 | break; |
1866 | case IBMVFC_HOST_ACTION_INIT: |
1867 | BUG_ON(vhost->state != IBMVFC_INITIALIZING); |
1868 | - vhost->job_step(vhost); |
1869 | + if (vhost->delay_init) { |
1870 | + vhost->delay_init = 0; |
1871 | + spin_unlock_irqrestore(vhost->host->host_lock, flags); |
1872 | + ssleep(15); |
1873 | + return; |
1874 | + } else |
1875 | + vhost->job_step(vhost); |
1876 | break; |
1877 | case IBMVFC_HOST_ACTION_QUERY: |
1878 | list_for_each_entry(tgt, &vhost->targets, queue) |
1879 | diff --git a/drivers/scsi/ibmvscsi/ibmvfc.h b/drivers/scsi/ibmvscsi/ibmvfc.h |
1880 | index fb3177a..d0e76d5 100644 |
1881 | --- a/drivers/scsi/ibmvscsi/ibmvfc.h |
1882 | +++ b/drivers/scsi/ibmvscsi/ibmvfc.h |
1883 | @@ -33,7 +33,7 @@ |
1884 | #define IBMVFC_DRIVER_DATE "(August 14, 2008)" |
1885 | |
1886 | #define IBMVFC_DEFAULT_TIMEOUT 15 |
1887 | -#define IBMVFC_INIT_TIMEOUT 30 |
1888 | +#define IBMVFC_INIT_TIMEOUT 120 |
1889 | #define IBMVFC_MAX_REQUESTS_DEFAULT 100 |
1890 | |
1891 | #define IBMVFC_DEBUG 0 |
1892 | @@ -43,7 +43,8 @@ |
1893 | #define IBMVFC_MAX_DISC_THREADS 4 |
1894 | #define IBMVFC_TGT_MEMPOOL_SZ 64 |
1895 | #define IBMVFC_MAX_CMDS_PER_LUN 64 |
1896 | -#define IBMVFC_MAX_INIT_RETRIES 3 |
1897 | +#define IBMVFC_MAX_HOST_INIT_RETRIES 6 |
1898 | +#define IBMVFC_MAX_TGT_INIT_RETRIES 3 |
1899 | #define IBMVFC_DEV_LOSS_TMO (5 * 60) |
1900 | #define IBMVFC_DEFAULT_LOG_LEVEL 2 |
1901 | #define IBMVFC_MAX_CDB_LEN 16 |
1902 | @@ -671,6 +672,7 @@ struct ibmvfc_host { |
1903 | int discovery_threads; |
1904 | int client_migrated; |
1905 | int reinit; |
1906 | + int delay_init; |
1907 | int events_to_log; |
1908 | #define IBMVFC_AE_LINKUP 0x0001 |
1909 | #define IBMVFC_AE_LINKDOWN 0x0002 |
1910 | diff --git a/drivers/scsi/mvsas.c b/drivers/scsi/mvsas.c |
1911 | index 1dd70d7..23e5a87 100644 |
1912 | --- a/drivers/scsi/mvsas.c |
1913 | +++ b/drivers/scsi/mvsas.c |
1914 | @@ -2959,7 +2959,7 @@ static int __devinit mvs_hw_init(struct mvs_info *mvi) |
1915 | |
1916 | /* enable auto port detection */ |
1917 | mw32(GBL_PORT_TYPE, MODE_AUTO_DET_EN); |
1918 | - msleep(100); |
1919 | + msleep(1100); |
1920 | /* init and reset phys */ |
1921 | for (i = 0; i < mvi->chip->n_phy; i++) { |
1922 | u32 lo = be32_to_cpu(*(u32 *)&mvi->sas_addr[4]); |
1923 | diff --git a/drivers/scsi/pcmcia/aha152x_stub.c b/drivers/scsi/pcmcia/aha152x_stub.c |
1924 | index 2dd0dc9..c2e2de3 100644 |
1925 | --- a/drivers/scsi/pcmcia/aha152x_stub.c |
1926 | +++ b/drivers/scsi/pcmcia/aha152x_stub.c |
1927 | @@ -114,7 +114,7 @@ static int aha152x_probe(struct pcmcia_device *link) |
1928 | link->io.NumPorts1 = 0x20; |
1929 | link->io.Attributes1 = IO_DATA_PATH_WIDTH_AUTO; |
1930 | link->io.IOAddrLines = 10; |
1931 | - link->irq.Attributes = IRQ_TYPE_EXCLUSIVE; |
1932 | + link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING; |
1933 | link->irq.IRQInfo1 = IRQ_LEVEL_ID; |
1934 | link->conf.Attributes = CONF_ENABLE_IRQ; |
1935 | link->conf.IntType = INT_MEMORY_AND_IO; |
1936 | diff --git a/drivers/usb/host/isp1760-if.c b/drivers/usb/host/isp1760-if.c |
1937 | index 78b8aaa..d8b0ba5 100644 |
1938 | --- a/drivers/usb/host/isp1760-if.c |
1939 | +++ b/drivers/usb/host/isp1760-if.c |
1940 | @@ -267,12 +267,16 @@ static void isp1761_pci_shutdown(struct pci_dev *dev) |
1941 | printk(KERN_ERR "ips1761_pci_shutdown\n"); |
1942 | } |
1943 | |
1944 | -static const struct pci_device_id isp1760_plx [] = { { |
1945 | - /* handle any USB 2.0 EHCI controller */ |
1946 | - PCI_DEVICE_CLASS(((PCI_CLASS_BRIDGE_OTHER << 8) | (0x06 << 16)), ~0), |
1947 | - .driver_data = 0, |
1948 | -}, |
1949 | -{ /* end: all zeroes */ } |
1950 | +static const struct pci_device_id isp1760_plx [] = { |
1951 | + { |
1952 | + .class = PCI_CLASS_BRIDGE_OTHER << 8, |
1953 | + .class_mask = ~0, |
1954 | + .vendor = PCI_VENDOR_ID_PLX, |
1955 | + .device = 0x5406, |
1956 | + .subvendor = PCI_VENDOR_ID_PLX, |
1957 | + .subdevice = 0x9054, |
1958 | + }, |
1959 | + { } |
1960 | }; |
1961 | MODULE_DEVICE_TABLE(pci, isp1760_plx); |
1962 | |
1963 | diff --git a/drivers/usb/misc/emi26.c b/drivers/usb/misc/emi26.c |
1964 | index 4b994a0..5cae8fd 100644 |
1965 | --- a/drivers/usb/misc/emi26.c |
1966 | +++ b/drivers/usb/misc/emi26.c |
1967 | @@ -157,7 +157,7 @@ static int emi26_load_firmware (struct usb_device *dev) |
1968 | err("%s - error loading firmware: error = %d", __func__, err); |
1969 | goto wraperr; |
1970 | } |
1971 | - } while (i > 0); |
1972 | + } while (rec); |
1973 | |
1974 | /* Assert reset (stop the CPU in the EMI) */ |
1975 | err = emi26_set_reset(dev,1); |
1976 | diff --git a/drivers/usb/storage/unusual_devs.h b/drivers/usb/storage/unusual_devs.h |
1977 | index e16d547..476da5d 100644 |
1978 | --- a/drivers/usb/storage/unusual_devs.h |
1979 | +++ b/drivers/usb/storage/unusual_devs.h |
1980 | @@ -246,6 +246,13 @@ UNUSUAL_DEV( 0x0421, 0x04b9, 0x0500, 0x0551, |
1981 | US_SC_DEVICE, US_PR_DEVICE, NULL, |
1982 | US_FL_FIX_CAPACITY ), |
1983 | |
1984 | +/* Reported by Paulo Fessel <pfessel@gmail.com> */ |
1985 | +UNUSUAL_DEV( 0x0421, 0x04bd, 0x0000, 0x9999, |
1986 | + "Nokia", |
1987 | + "5200", |
1988 | + US_SC_DEVICE, US_PR_DEVICE, NULL, |
1989 | + US_FL_FIX_CAPACITY ), |
1990 | + |
1991 | /* Reported by Richard Nauber <RichardNauber@web.de> */ |
1992 | UNUSUAL_DEV( 0x0421, 0x04fa, 0x0550, 0x0660, |
1993 | "Nokia", |
1994 | @@ -1040,7 +1047,7 @@ UNUSUAL_DEV( 0x067b, 0x2507, 0x0100, 0x0100, |
1995 | US_FL_FIX_CAPACITY | US_FL_GO_SLOW ), |
1996 | |
1997 | /* Reported by Alex Butcher <alex.butcher@assursys.co.uk> */ |
1998 | -UNUSUAL_DEV( 0x067b, 0x3507, 0x0001, 0x0001, |
1999 | +UNUSUAL_DEV( 0x067b, 0x3507, 0x0001, 0x0101, |
2000 | "Prolific Technology Inc.", |
2001 | "ATAPI-6 Bridge Controller", |
2002 | US_SC_DEVICE, US_PR_DEVICE, NULL, |
2003 | @@ -1320,6 +1327,13 @@ UNUSUAL_DEV( 0x0840, 0x0082, 0x0001, 0x0001, |
2004 | US_SC_DEVICE, US_PR_DEVICE, NULL, |
2005 | US_FL_FIX_CAPACITY), |
2006 | |
2007 | +/* Reported and patched by Nguyen Anh Quynh <aquynh@gmail.com> */ |
2008 | +UNUSUAL_DEV( 0x0840, 0x0084, 0x0001, 0x0001, |
2009 | + "Argosy", |
2010 | + "Storage", |
2011 | + US_SC_DEVICE, US_PR_DEVICE, NULL, |
2012 | + US_FL_FIX_CAPACITY), |
2013 | + |
2014 | /* Entry and supporting patch by Theodore Kilgore <kilgota@auburn.edu>. |
2015 | * Flag will support Bulk devices which use a standards-violating 32-byte |
2016 | * Command Block Wrapper. Here, the "DC2MEGA" cameras (several brands) with |
2017 | @@ -1425,6 +1439,13 @@ UNUSUAL_DEV( 0x0a17, 0x006, 0x0000, 0xffff, |
2018 | US_SC_DEVICE, US_PR_DEVICE, NULL, |
2019 | US_FL_FIX_INQUIRY ), |
2020 | |
2021 | +/* Reported by Jaak Ristioja <Ristioja@gmail.com> */ |
2022 | +UNUSUAL_DEV( 0x0a17, 0x006e, 0x0100, 0x0100, |
2023 | + "Pentax", |
2024 | + "K10D", |
2025 | + US_SC_DEVICE, US_PR_DEVICE, NULL, |
2026 | + US_FL_FIX_CAPACITY ), |
2027 | + |
2028 | /* These are virtual windows driver CDs, which the zd1211rw driver |
2029 | * automatically converts into WLAN devices. */ |
2030 | UNUSUAL_DEV( 0x0ace, 0x2011, 0x0101, 0x0101, |
2031 | diff --git a/fs/affs/file.c b/fs/affs/file.c |
2032 | index 1377b12..9246cb4 100644 |
2033 | --- a/fs/affs/file.c |
2034 | +++ b/fs/affs/file.c |
2035 | @@ -628,7 +628,7 @@ static int affs_write_begin_ofs(struct file *file, struct address_space *mapping |
2036 | } |
2037 | |
2038 | index = pos >> PAGE_CACHE_SHIFT; |
2039 | - page = __grab_cache_page(mapping, index); |
2040 | + page = grab_cache_page_write_begin(mapping, index, flags); |
2041 | if (!page) |
2042 | return -ENOMEM; |
2043 | *pagep = page; |
2044 | diff --git a/fs/aio.c b/fs/aio.c |
2045 | index f658441..048648d 100644 |
2046 | --- a/fs/aio.c |
2047 | +++ b/fs/aio.c |
2048 | @@ -1258,7 +1258,7 @@ static void io_destroy(struct kioctx *ioctx) |
2049 | * pointer is passed for ctxp. Will fail with -ENOSYS if not |
2050 | * implemented. |
2051 | */ |
2052 | -asmlinkage long sys_io_setup(unsigned nr_events, aio_context_t __user *ctxp) |
2053 | +SYSCALL_DEFINE2(io_setup, unsigned, nr_events, aio_context_t __user *, ctxp) |
2054 | { |
2055 | struct kioctx *ioctx = NULL; |
2056 | unsigned long ctx; |
2057 | @@ -1296,7 +1296,7 @@ out: |
2058 | * implemented. May fail with -EFAULT if the context pointed to |
2059 | * is invalid. |
2060 | */ |
2061 | -asmlinkage long sys_io_destroy(aio_context_t ctx) |
2062 | +SYSCALL_DEFINE1(io_destroy, aio_context_t, ctx) |
2063 | { |
2064 | struct kioctx *ioctx = lookup_ioctx(ctx); |
2065 | if (likely(NULL != ioctx)) { |
2066 | @@ -1650,8 +1650,8 @@ out_put_req: |
2067 | * are available to queue any iocbs. Will return 0 if nr is 0. Will |
2068 | * fail with -ENOSYS if not implemented. |
2069 | */ |
2070 | -asmlinkage long sys_io_submit(aio_context_t ctx_id, long nr, |
2071 | - struct iocb __user * __user *iocbpp) |
2072 | +SYSCALL_DEFINE3(io_submit, aio_context_t, ctx_id, long, nr, |
2073 | + struct iocb __user * __user *, iocbpp) |
2074 | { |
2075 | struct kioctx *ctx; |
2076 | long ret = 0; |
2077 | @@ -1725,8 +1725,8 @@ static struct kiocb *lookup_kiocb(struct kioctx *ctx, struct iocb __user *iocb, |
2078 | * invalid. May fail with -EAGAIN if the iocb specified was not |
2079 | * cancelled. Will fail with -ENOSYS if not implemented. |
2080 | */ |
2081 | -asmlinkage long sys_io_cancel(aio_context_t ctx_id, struct iocb __user *iocb, |
2082 | - struct io_event __user *result) |
2083 | +SYSCALL_DEFINE3(io_cancel, aio_context_t, ctx_id, struct iocb __user *, iocb, |
2084 | + struct io_event __user *, result) |
2085 | { |
2086 | int (*cancel)(struct kiocb *iocb, struct io_event *res); |
2087 | struct kioctx *ctx; |
2088 | @@ -1787,11 +1787,11 @@ asmlinkage long sys_io_cancel(aio_context_t ctx_id, struct iocb __user *iocb, |
2089 | * will be updated if not NULL and the operation blocks. Will fail |
2090 | * with -ENOSYS if not implemented. |
2091 | */ |
2092 | -asmlinkage long sys_io_getevents(aio_context_t ctx_id, |
2093 | - long min_nr, |
2094 | - long nr, |
2095 | - struct io_event __user *events, |
2096 | - struct timespec __user *timeout) |
2097 | +SYSCALL_DEFINE5(io_getevents, aio_context_t, ctx_id, |
2098 | + long, min_nr, |
2099 | + long, nr, |
2100 | + struct io_event __user *, events, |
2101 | + struct timespec __user *, timeout) |
2102 | { |
2103 | struct kioctx *ioctx = lookup_ioctx(ctx_id); |
2104 | long ret = -EINVAL; |
2105 | diff --git a/fs/buffer.c b/fs/buffer.c |
2106 | index ac78d4c..a542f97 100644 |
2107 | --- a/fs/buffer.c |
2108 | +++ b/fs/buffer.c |
2109 | @@ -1988,7 +1988,7 @@ int block_write_begin(struct file *file, struct address_space *mapping, |
2110 | page = *pagep; |
2111 | if (page == NULL) { |
2112 | ownpage = 1; |
2113 | - page = __grab_cache_page(mapping, index); |
2114 | + page = grab_cache_page_write_begin(mapping, index, flags); |
2115 | if (!page) { |
2116 | status = -ENOMEM; |
2117 | goto out; |
2118 | @@ -2494,7 +2494,7 @@ int nobh_write_begin(struct file *file, struct address_space *mapping, |
2119 | from = pos & (PAGE_CACHE_SIZE - 1); |
2120 | to = from + len; |
2121 | |
2122 | - page = __grab_cache_page(mapping, index); |
2123 | + page = grab_cache_page_write_begin(mapping, index, flags); |
2124 | if (!page) |
2125 | return -ENOMEM; |
2126 | *pagep = page; |
2127 | @@ -3177,7 +3177,7 @@ void block_sync_page(struct page *page) |
2128 | * Use of bdflush() is deprecated and will be removed in a future kernel. |
2129 | * The `pdflush' kernel threads fully replace bdflush daemons and this call. |
2130 | */ |
2131 | -asmlinkage long sys_bdflush(int func, long data) |
2132 | +SYSCALL_DEFINE2(bdflush, int, func, long, data) |
2133 | { |
2134 | static int msg_count; |
2135 | |
2136 | diff --git a/fs/compat.c b/fs/compat.c |
2137 | index 075d050..a76455b 100644 |
2138 | --- a/fs/compat.c |
2139 | +++ b/fs/compat.c |
2140 | @@ -1640,7 +1640,7 @@ sticky: |
2141 | } |
2142 | |
2143 | #ifdef HAVE_SET_RESTORE_SIGMASK |
2144 | -asmlinkage long compat_sys_pselect7(int n, compat_ulong_t __user *inp, |
2145 | +static long do_compat_pselect(int n, compat_ulong_t __user *inp, |
2146 | compat_ulong_t __user *outp, compat_ulong_t __user *exp, |
2147 | struct compat_timespec __user *tsp, compat_sigset_t __user *sigmask, |
2148 | compat_size_t sigsetsize) |
2149 | @@ -1748,8 +1748,8 @@ asmlinkage long compat_sys_pselect6(int n, compat_ulong_t __user *inp, |
2150 | (compat_size_t __user *)(sig+sizeof(up)))) |
2151 | return -EFAULT; |
2152 | } |
2153 | - return compat_sys_pselect7(n, inp, outp, exp, tsp, compat_ptr(up), |
2154 | - sigsetsize); |
2155 | + return do_compat_pselect(n, inp, outp, exp, tsp, compat_ptr(up), |
2156 | + sigsetsize); |
2157 | } |
2158 | |
2159 | asmlinkage long compat_sys_ppoll(struct pollfd __user *ufds, |
2160 | diff --git a/fs/dcache.c b/fs/dcache.c |
2161 | index e7a1a99..1c12fcc 100644 |
2162 | --- a/fs/dcache.c |
2163 | +++ b/fs/dcache.c |
2164 | @@ -1615,8 +1615,11 @@ static void switch_names(struct dentry *dentry, struct dentry *target) |
2165 | */ |
2166 | memcpy(dentry->d_iname, target->d_name.name, |
2167 | target->d_name.len + 1); |
2168 | + dentry->d_name.len = target->d_name.len; |
2169 | + return; |
2170 | } |
2171 | } |
2172 | + do_switch(dentry->d_name.len, target->d_name.len); |
2173 | } |
2174 | |
2175 | /* |
2176 | @@ -1676,7 +1679,6 @@ already_unhashed: |
2177 | |
2178 | /* Switch the names.. */ |
2179 | switch_names(dentry, target); |
2180 | - do_switch(dentry->d_name.len, target->d_name.len); |
2181 | do_switch(dentry->d_name.hash, target->d_name.hash); |
2182 | |
2183 | /* ... and switch the parents */ |
2184 | @@ -1781,7 +1783,6 @@ static void __d_materialise_dentry(struct dentry *dentry, struct dentry *anon) |
2185 | struct dentry *dparent, *aparent; |
2186 | |
2187 | switch_names(dentry, anon); |
2188 | - do_switch(dentry->d_name.len, anon->d_name.len); |
2189 | do_switch(dentry->d_name.hash, anon->d_name.hash); |
2190 | |
2191 | dparent = dentry->d_parent; |
2192 | @@ -2085,7 +2086,7 @@ Elong: |
2193 | * return NULL; |
2194 | * } |
2195 | */ |
2196 | -asmlinkage long sys_getcwd(char __user *buf, unsigned long size) |
2197 | +SYSCALL_DEFINE2(getcwd, char __user *, buf, unsigned long, size) |
2198 | { |
2199 | int error; |
2200 | struct path pwd, root; |
2201 | diff --git a/fs/dcookies.c b/fs/dcookies.c |
2202 | index 855d4b1..f0da95b 100644 |
2203 | --- a/fs/dcookies.c |
2204 | +++ b/fs/dcookies.c |
2205 | @@ -140,7 +140,7 @@ out: |
2206 | /* And here is where the userspace process can look up the cookie value |
2207 | * to retrieve the path. |
2208 | */ |
2209 | -asmlinkage long sys_lookup_dcookie(u64 cookie64, char __user * buf, size_t len) |
2210 | +SYSCALL_DEFINE(lookup_dcookie)(u64 cookie64, char __user * buf, size_t len) |
2211 | { |
2212 | unsigned long cookie = (unsigned long)cookie64; |
2213 | int err = -EINVAL; |
2214 | @@ -193,7 +193,13 @@ out: |
2215 | mutex_unlock(&dcookie_mutex); |
2216 | return err; |
2217 | } |
2218 | - |
2219 | +#ifdef CONFIG_HAVE_SYSCALL_WRAPPERS |
2220 | +asmlinkage long SyS_lookup_dcookie(u64 cookie64, long buf, long len) |
2221 | +{ |
2222 | + return SYSC_lookup_dcookie(cookie64, (char __user *) buf, (size_t) len); |
2223 | +} |
2224 | +SYSCALL_ALIAS(sys_lookup_dcookie, SyS_lookup_dcookie); |
2225 | +#endif |
2226 | |
2227 | static int dcookie_init(void) |
2228 | { |
2229 | diff --git a/fs/ecryptfs/inode.c b/fs/ecryptfs/inode.c |
2230 | index 89209f0..5e78fc1 100644 |
2231 | --- a/fs/ecryptfs/inode.c |
2232 | +++ b/fs/ecryptfs/inode.c |
2233 | @@ -673,10 +673,11 @@ static void *ecryptfs_follow_link(struct dentry *dentry, struct nameidata *nd) |
2234 | ecryptfs_printk(KERN_DEBUG, "Calling readlink w/ " |
2235 | "dentry->d_name.name = [%s]\n", dentry->d_name.name); |
2236 | rc = dentry->d_inode->i_op->readlink(dentry, (char __user *)buf, len); |
2237 | - buf[rc] = '\0'; |
2238 | set_fs(old_fs); |
2239 | if (rc < 0) |
2240 | goto out_free; |
2241 | + else |
2242 | + buf[rc] = '\0'; |
2243 | rc = 0; |
2244 | nd_set_link(nd, buf); |
2245 | goto out; |
2246 | diff --git a/fs/eventfd.c b/fs/eventfd.c |
2247 | index 08bf558..5de2c2d 100644 |
2248 | --- a/fs/eventfd.c |
2249 | +++ b/fs/eventfd.c |
2250 | @@ -198,7 +198,7 @@ struct file *eventfd_fget(int fd) |
2251 | return file; |
2252 | } |
2253 | |
2254 | -asmlinkage long sys_eventfd2(unsigned int count, int flags) |
2255 | +SYSCALL_DEFINE2(eventfd2, unsigned int, count, int, flags) |
2256 | { |
2257 | int fd; |
2258 | struct eventfd_ctx *ctx; |
2259 | @@ -228,8 +228,7 @@ asmlinkage long sys_eventfd2(unsigned int count, int flags) |
2260 | return fd; |
2261 | } |
2262 | |
2263 | -asmlinkage long sys_eventfd(unsigned int count) |
2264 | +SYSCALL_DEFINE1(eventfd, unsigned int, count) |
2265 | { |
2266 | return sys_eventfd2(count, 0); |
2267 | } |
2268 | - |
2269 | diff --git a/fs/eventpoll.c b/fs/eventpoll.c |
2270 | index c8cec49..cb60f92 100644 |
2271 | --- a/fs/eventpoll.c |
2272 | +++ b/fs/eventpoll.c |
2273 | @@ -1106,7 +1106,7 @@ retry: |
2274 | /* |
2275 | * Open an eventpoll file descriptor. |
2276 | */ |
2277 | -asmlinkage long sys_epoll_create1(int flags) |
2278 | +SYSCALL_DEFINE1(epoll_create1, int, flags) |
2279 | { |
2280 | int error, fd = -1; |
2281 | struct eventpoll *ep; |
2282 | @@ -1146,7 +1146,7 @@ error_return: |
2283 | return fd; |
2284 | } |
2285 | |
2286 | -asmlinkage long sys_epoll_create(int size) |
2287 | +SYSCALL_DEFINE1(epoll_create, int, size) |
2288 | { |
2289 | if (size < 0) |
2290 | return -EINVAL; |
2291 | @@ -1159,8 +1159,8 @@ asmlinkage long sys_epoll_create(int size) |
2292 | * the eventpoll file that enables the insertion/removal/change of |
2293 | * file descriptors inside the interest set. |
2294 | */ |
2295 | -asmlinkage long sys_epoll_ctl(int epfd, int op, int fd, |
2296 | - struct epoll_event __user *event) |
2297 | +SYSCALL_DEFINE4(epoll_ctl, int, epfd, int, op, int, fd, |
2298 | + struct epoll_event __user *, event) |
2299 | { |
2300 | int error; |
2301 | struct file *file, *tfile; |
2302 | @@ -1257,8 +1257,8 @@ error_return: |
2303 | * Implement the event wait interface for the eventpoll file. It is the kernel |
2304 | * part of the user space epoll_wait(2). |
2305 | */ |
2306 | -asmlinkage long sys_epoll_wait(int epfd, struct epoll_event __user *events, |
2307 | - int maxevents, int timeout) |
2308 | +SYSCALL_DEFINE4(epoll_wait, int, epfd, struct epoll_event __user *, events, |
2309 | + int, maxevents, int, timeout) |
2310 | { |
2311 | int error; |
2312 | struct file *file; |
2313 | @@ -1315,9 +1315,9 @@ error_return: |
2314 | * Implement the event wait interface for the eventpoll file. It is the kernel |
2315 | * part of the user space epoll_pwait(2). |
2316 | */ |
2317 | -asmlinkage long sys_epoll_pwait(int epfd, struct epoll_event __user *events, |
2318 | - int maxevents, int timeout, const sigset_t __user *sigmask, |
2319 | - size_t sigsetsize) |
2320 | +SYSCALL_DEFINE6(epoll_pwait, int, epfd, struct epoll_event __user *, events, |
2321 | + int, maxevents, int, timeout, const sigset_t __user *, sigmask, |
2322 | + size_t, sigsetsize) |
2323 | { |
2324 | int error; |
2325 | sigset_t ksigmask, sigsaved; |
2326 | diff --git a/fs/exec.c b/fs/exec.c |
2327 | index b266ace..5027d01 100644 |
2328 | --- a/fs/exec.c |
2329 | +++ b/fs/exec.c |
2330 | @@ -105,7 +105,7 @@ static inline void put_binfmt(struct linux_binfmt * fmt) |
2331 | * |
2332 | * Also note that we take the address to load from from the file itself. |
2333 | */ |
2334 | -asmlinkage long sys_uselib(const char __user * library) |
2335 | +SYSCALL_DEFINE1(uselib, const char __user *, library) |
2336 | { |
2337 | struct file *file; |
2338 | struct nameidata nd; |
2339 | diff --git a/fs/ext3/inode.c b/fs/ext3/inode.c |
2340 | index 507d868..c5f40a0 100644 |
2341 | --- a/fs/ext3/inode.c |
2342 | +++ b/fs/ext3/inode.c |
2343 | @@ -1152,7 +1152,7 @@ static int ext3_write_begin(struct file *file, struct address_space *mapping, |
2344 | to = from + len; |
2345 | |
2346 | retry: |
2347 | - page = __grab_cache_page(mapping, index); |
2348 | + page = grab_cache_page_write_begin(mapping, index, flags); |
2349 | if (!page) |
2350 | return -ENOMEM; |
2351 | *pagep = page; |
2352 | diff --git a/fs/ext3/namei.c b/fs/ext3/namei.c |
2353 | index de13e91..1f55382 100644 |
2354 | --- a/fs/ext3/namei.c |
2355 | +++ b/fs/ext3/namei.c |
2356 | @@ -2187,8 +2187,7 @@ retry: |
2357 | * We have a transaction open. All is sweetness. It also sets |
2358 | * i_size in generic_commit_write(). |
2359 | */ |
2360 | - err = __page_symlink(inode, symname, l, |
2361 | - mapping_gfp_mask(inode->i_mapping) & ~__GFP_FS); |
2362 | + err = __page_symlink(inode, symname, l, 1); |
2363 | if (err) { |
2364 | drop_nlink(inode); |
2365 | ext3_mark_inode_dirty(handle, inode); |
2366 | diff --git a/fs/ext4/inode.c b/fs/ext4/inode.c |
2367 | index 846a790..d77f674 100644 |
2368 | --- a/fs/ext4/inode.c |
2369 | +++ b/fs/ext4/inode.c |
2370 | @@ -1370,7 +1370,7 @@ retry: |
2371 | goto out; |
2372 | } |
2373 | |
2374 | - page = __grab_cache_page(mapping, index); |
2375 | + page = grab_cache_page_write_begin(mapping, index, flags); |
2376 | if (!page) { |
2377 | ext4_journal_stop(handle); |
2378 | ret = -ENOMEM; |
2379 | @@ -2421,7 +2421,7 @@ retry: |
2380 | goto out; |
2381 | } |
2382 | |
2383 | - page = __grab_cache_page(mapping, index); |
2384 | + page = grab_cache_page_write_begin(mapping, index, flags); |
2385 | if (!page) { |
2386 | ext4_journal_stop(handle); |
2387 | ret = -ENOMEM; |
2388 | diff --git a/fs/ext4/namei.c b/fs/ext4/namei.c |
2389 | index 387ad98..d626533 100644 |
2390 | --- a/fs/ext4/namei.c |
2391 | +++ b/fs/ext4/namei.c |
2392 | @@ -2216,8 +2216,7 @@ retry: |
2393 | * We have a transaction open. All is sweetness. It also sets |
2394 | * i_size in generic_commit_write(). |
2395 | */ |
2396 | - err = __page_symlink(inode, symname, l, |
2397 | - mapping_gfp_mask(inode->i_mapping) & ~__GFP_FS); |
2398 | + err = __page_symlink(inode, symname, l, 1); |
2399 | if (err) { |
2400 | clear_nlink(inode); |
2401 | ext4_mark_inode_dirty(handle, inode); |
2402 | diff --git a/fs/fcntl.c b/fs/fcntl.c |
2403 | index 549daf8..08a109b 100644 |
2404 | --- a/fs/fcntl.c |
2405 | +++ b/fs/fcntl.c |
2406 | @@ -50,7 +50,7 @@ static int get_close_on_exec(unsigned int fd) |
2407 | return res; |
2408 | } |
2409 | |
2410 | -asmlinkage long sys_dup3(unsigned int oldfd, unsigned int newfd, int flags) |
2411 | +SYSCALL_DEFINE3(dup3, unsigned int, oldfd, unsigned int, newfd, int, flags) |
2412 | { |
2413 | int err = -EBADF; |
2414 | struct file * file, *tofree; |
2415 | @@ -113,7 +113,7 @@ out_unlock: |
2416 | return err; |
2417 | } |
2418 | |
2419 | -asmlinkage long sys_dup2(unsigned int oldfd, unsigned int newfd) |
2420 | +SYSCALL_DEFINE2(dup2, unsigned int, oldfd, unsigned int, newfd) |
2421 | { |
2422 | if (unlikely(newfd == oldfd)) { /* corner case */ |
2423 | struct files_struct *files = current->files; |
2424 | @@ -126,7 +126,7 @@ asmlinkage long sys_dup2(unsigned int oldfd, unsigned int newfd) |
2425 | return sys_dup3(oldfd, newfd, 0); |
2426 | } |
2427 | |
2428 | -asmlinkage long sys_dup(unsigned int fildes) |
2429 | +SYSCALL_DEFINE1(dup, unsigned int, fildes) |
2430 | { |
2431 | int ret = -EBADF; |
2432 | struct file *file = fget(fildes); |
2433 | @@ -334,7 +334,7 @@ static long do_fcntl(int fd, unsigned int cmd, unsigned long arg, |
2434 | return err; |
2435 | } |
2436 | |
2437 | -asmlinkage long sys_fcntl(unsigned int fd, unsigned int cmd, unsigned long arg) |
2438 | +SYSCALL_DEFINE3(fcntl, unsigned int, fd, unsigned int, cmd, unsigned long, arg) |
2439 | { |
2440 | struct file *filp; |
2441 | long err = -EBADF; |
2442 | @@ -357,7 +357,8 @@ out: |
2443 | } |
2444 | |
2445 | #if BITS_PER_LONG == 32 |
2446 | -asmlinkage long sys_fcntl64(unsigned int fd, unsigned int cmd, unsigned long arg) |
2447 | +SYSCALL_DEFINE3(fcntl64, unsigned int, fd, unsigned int, cmd, |
2448 | + unsigned long, arg) |
2449 | { |
2450 | struct file * filp; |
2451 | long err; |
2452 | diff --git a/fs/filesystems.c b/fs/filesystems.c |
2453 | index f37f872..25f5b6a 100644 |
2454 | --- a/fs/filesystems.c |
2455 | +++ b/fs/filesystems.c |
2456 | @@ -177,7 +177,7 @@ static int fs_maxindex(void) |
2457 | /* |
2458 | * Whee.. Weird sysv syscall. |
2459 | */ |
2460 | -asmlinkage long sys_sysfs(int option, unsigned long arg1, unsigned long arg2) |
2461 | +SYSCALL_DEFINE3(sysfs, int, option, unsigned long, arg1, unsigned long, arg2) |
2462 | { |
2463 | int retval = -EINVAL; |
2464 | |
2465 | diff --git a/fs/fuse/file.c b/fs/fuse/file.c |
2466 | index 2bada6b..c8206db 100644 |
2467 | --- a/fs/fuse/file.c |
2468 | +++ b/fs/fuse/file.c |
2469 | @@ -644,7 +644,7 @@ static int fuse_write_begin(struct file *file, struct address_space *mapping, |
2470 | { |
2471 | pgoff_t index = pos >> PAGE_CACHE_SHIFT; |
2472 | |
2473 | - *pagep = __grab_cache_page(mapping, index); |
2474 | + *pagep = grab_cache_page_write_begin(mapping, index, flags); |
2475 | if (!*pagep) |
2476 | return -ENOMEM; |
2477 | return 0; |
2478 | @@ -777,7 +777,7 @@ static ssize_t fuse_fill_write_pages(struct fuse_req *req, |
2479 | break; |
2480 | |
2481 | err = -ENOMEM; |
2482 | - page = __grab_cache_page(mapping, index); |
2483 | + page = grab_cache_page_write_begin(mapping, index, 0); |
2484 | if (!page) |
2485 | break; |
2486 | |
2487 | diff --git a/fs/gfs2/ops_address.c b/fs/gfs2/ops_address.c |
2488 | index e64a1b0..c75df06 100644 |
2489 | --- a/fs/gfs2/ops_address.c |
2490 | +++ b/fs/gfs2/ops_address.c |
2491 | @@ -675,7 +675,7 @@ static int gfs2_write_begin(struct file *file, struct address_space *mapping, |
2492 | goto out_trans_fail; |
2493 | |
2494 | error = -ENOMEM; |
2495 | - page = __grab_cache_page(mapping, index); |
2496 | + page = grab_cache_page_write_begin(mapping, index, flags); |
2497 | *pagep = page; |
2498 | if (unlikely(!page)) |
2499 | goto out_endtrans; |
2500 | diff --git a/fs/hostfs/hostfs_kern.c b/fs/hostfs/hostfs_kern.c |
2501 | index d6ecabf..5e17cae 100644 |
2502 | --- a/fs/hostfs/hostfs_kern.c |
2503 | +++ b/fs/hostfs/hostfs_kern.c |
2504 | @@ -500,7 +500,7 @@ int hostfs_write_begin(struct file *file, struct address_space *mapping, |
2505 | { |
2506 | pgoff_t index = pos >> PAGE_CACHE_SHIFT; |
2507 | |
2508 | - *pagep = __grab_cache_page(mapping, index); |
2509 | + *pagep = grab_cache_page_write_begin(mapping, index, flags); |
2510 | if (!*pagep) |
2511 | return -ENOMEM; |
2512 | return 0; |
2513 | diff --git a/fs/inotify_user.c b/fs/inotify_user.c |
2514 | index d85c7d9..a13f487 100644 |
2515 | --- a/fs/inotify_user.c |
2516 | +++ b/fs/inotify_user.c |
2517 | @@ -579,7 +579,7 @@ static const struct inotify_operations inotify_user_ops = { |
2518 | .destroy_watch = free_inotify_user_watch, |
2519 | }; |
2520 | |
2521 | -asmlinkage long sys_inotify_init1(int flags) |
2522 | +SYSCALL_DEFINE1(inotify_init1, int, flags) |
2523 | { |
2524 | struct inotify_device *dev; |
2525 | struct inotify_handle *ih; |
2526 | @@ -658,12 +658,13 @@ out_put_fd: |
2527 | return ret; |
2528 | } |
2529 | |
2530 | -asmlinkage long sys_inotify_init(void) |
2531 | +SYSCALL_DEFINE0(inotify_init) |
2532 | { |
2533 | return sys_inotify_init1(0); |
2534 | } |
2535 | |
2536 | -asmlinkage long sys_inotify_add_watch(int fd, const char __user *pathname, u32 mask) |
2537 | +SYSCALL_DEFINE3(inotify_add_watch, int, fd, const char __user *, pathname, |
2538 | + u32, mask) |
2539 | { |
2540 | struct inode *inode; |
2541 | struct inotify_device *dev; |
2542 | @@ -707,7 +708,7 @@ fput_and_out: |
2543 | return ret; |
2544 | } |
2545 | |
2546 | -asmlinkage long sys_inotify_rm_watch(int fd, u32 wd) |
2547 | +SYSCALL_DEFINE2(inotify_rm_watch, int, fd, __s32, wd) |
2548 | { |
2549 | struct file *filp; |
2550 | struct inotify_device *dev; |
2551 | diff --git a/fs/ioctl.c b/fs/ioctl.c |
2552 | index 612e0b2..b9a59a4 100644 |
2553 | --- a/fs/ioctl.c |
2554 | +++ b/fs/ioctl.c |
2555 | @@ -195,7 +195,7 @@ int do_vfs_ioctl(struct file *filp, unsigned int fd, unsigned int cmd, |
2556 | return error; |
2557 | } |
2558 | |
2559 | -asmlinkage long sys_ioctl(unsigned int fd, unsigned int cmd, unsigned long arg) |
2560 | +SYSCALL_DEFINE3(ioctl, unsigned int, fd, unsigned int, cmd, unsigned long, arg) |
2561 | { |
2562 | struct file *filp; |
2563 | int error = -EBADF; |
2564 | diff --git a/fs/ioprio.c b/fs/ioprio.c |
2565 | index da3cc46..3715d7d 100644 |
2566 | --- a/fs/ioprio.c |
2567 | +++ b/fs/ioprio.c |
2568 | @@ -65,7 +65,7 @@ static int set_task_ioprio(struct task_struct *task, int ioprio) |
2569 | return err; |
2570 | } |
2571 | |
2572 | -asmlinkage long sys_ioprio_set(int which, int who, int ioprio) |
2573 | +SYSCALL_DEFINE3(ioprio_set, int, which, int, who, int, ioprio) |
2574 | { |
2575 | int class = IOPRIO_PRIO_CLASS(ioprio); |
2576 | int data = IOPRIO_PRIO_DATA(ioprio); |
2577 | @@ -181,7 +181,7 @@ int ioprio_best(unsigned short aprio, unsigned short bprio) |
2578 | return aprio; |
2579 | } |
2580 | |
2581 | -asmlinkage long sys_ioprio_get(int which, int who) |
2582 | +SYSCALL_DEFINE2(ioprio_get, int, which, int, who) |
2583 | { |
2584 | struct task_struct *g, *p; |
2585 | struct user_struct *user; |
2586 | @@ -245,4 +245,3 @@ asmlinkage long sys_ioprio_get(int which, int who) |
2587 | read_unlock(&tasklist_lock); |
2588 | return ret; |
2589 | } |
2590 | - |
2591 | diff --git a/fs/jffs2/file.c b/fs/jffs2/file.c |
2592 | index 5a98aa8..5edc2bf 100644 |
2593 | --- a/fs/jffs2/file.c |
2594 | +++ b/fs/jffs2/file.c |
2595 | @@ -132,7 +132,7 @@ static int jffs2_write_begin(struct file *filp, struct address_space *mapping, |
2596 | uint32_t pageofs = index << PAGE_CACHE_SHIFT; |
2597 | int ret = 0; |
2598 | |
2599 | - pg = __grab_cache_page(mapping, index); |
2600 | + pg = grab_cache_page_write_begin(mapping, index, flags); |
2601 | if (!pg) |
2602 | return -ENOMEM; |
2603 | *pagep = pg; |
2604 | diff --git a/fs/libfs.c b/fs/libfs.c |
2605 | index 1add676..8fc2407 100644 |
2606 | --- a/fs/libfs.c |
2607 | +++ b/fs/libfs.c |
2608 | @@ -360,7 +360,7 @@ int simple_write_begin(struct file *file, struct address_space *mapping, |
2609 | index = pos >> PAGE_CACHE_SHIFT; |
2610 | from = pos & (PAGE_CACHE_SIZE - 1); |
2611 | |
2612 | - page = __grab_cache_page(mapping, index); |
2613 | + page = grab_cache_page_write_begin(mapping, index, flags); |
2614 | if (!page) |
2615 | return -ENOMEM; |
2616 | |
2617 | diff --git a/fs/locks.c b/fs/locks.c |
2618 | index 5eb259e..5d39a43 100644 |
2619 | --- a/fs/locks.c |
2620 | +++ b/fs/locks.c |
2621 | @@ -1564,7 +1564,7 @@ EXPORT_SYMBOL(flock_lock_file_wait); |
2622 | * %LOCK_MAND can be combined with %LOCK_READ or %LOCK_WRITE to allow other |
2623 | * processes read and write access respectively. |
2624 | */ |
2625 | -asmlinkage long sys_flock(unsigned int fd, unsigned int cmd) |
2626 | +SYSCALL_DEFINE2(flock, unsigned int, fd, unsigned int, cmd) |
2627 | { |
2628 | struct file *filp; |
2629 | struct file_lock *lock; |
2630 | diff --git a/fs/minix/dir.c b/fs/minix/dir.c |
2631 | index f704338..d4946c4 100644 |
2632 | --- a/fs/minix/dir.c |
2633 | +++ b/fs/minix/dir.c |
2634 | @@ -280,7 +280,7 @@ int minix_add_link(struct dentry *dentry, struct inode *inode) |
2635 | return -EINVAL; |
2636 | |
2637 | got_it: |
2638 | - pos = (page->index >> PAGE_CACHE_SHIFT) + p - (char*)page_address(page); |
2639 | + pos = page_offset(page) + p - (char *)page_address(page); |
2640 | err = __minix_write_begin(NULL, page->mapping, pos, sbi->s_dirsize, |
2641 | AOP_FLAG_UNINTERRUPTIBLE, &page, NULL); |
2642 | if (err) |
2643 | diff --git a/fs/namei.c b/fs/namei.c |
2644 | index 4ea63ed..2259d21 100644 |
2645 | --- a/fs/namei.c |
2646 | +++ b/fs/namei.c |
2647 | @@ -1990,8 +1990,8 @@ static int may_mknod(mode_t mode) |
2648 | } |
2649 | } |
2650 | |
2651 | -asmlinkage long sys_mknodat(int dfd, const char __user *filename, int mode, |
2652 | - unsigned dev) |
2653 | +SYSCALL_DEFINE4(mknodat, int, dfd, const char __user *, filename, int, mode, |
2654 | + unsigned, dev) |
2655 | { |
2656 | int error; |
2657 | char *tmp; |
2658 | @@ -2041,7 +2041,7 @@ out_unlock: |
2659 | return error; |
2660 | } |
2661 | |
2662 | -asmlinkage long sys_mknod(const char __user *filename, int mode, unsigned dev) |
2663 | +SYSCALL_DEFINE3(mknod, const char __user *, filename, int, mode, unsigned, dev) |
2664 | { |
2665 | return sys_mknodat(AT_FDCWD, filename, mode, dev); |
2666 | } |
2667 | @@ -2068,7 +2068,7 @@ int vfs_mkdir(struct inode *dir, struct dentry *dentry, int mode) |
2668 | return error; |
2669 | } |
2670 | |
2671 | -asmlinkage long sys_mkdirat(int dfd, const char __user *pathname, int mode) |
2672 | +SYSCALL_DEFINE3(mkdirat, int, dfd, const char __user *, pathname, int, mode) |
2673 | { |
2674 | int error = 0; |
2675 | char * tmp; |
2676 | @@ -2101,7 +2101,7 @@ out_err: |
2677 | return error; |
2678 | } |
2679 | |
2680 | -asmlinkage long sys_mkdir(const char __user *pathname, int mode) |
2681 | +SYSCALL_DEFINE2(mkdir, const char __user *, pathname, int, mode) |
2682 | { |
2683 | return sys_mkdirat(AT_FDCWD, pathname, mode); |
2684 | } |
2685 | @@ -2208,7 +2208,7 @@ exit1: |
2686 | return error; |
2687 | } |
2688 | |
2689 | -asmlinkage long sys_rmdir(const char __user *pathname) |
2690 | +SYSCALL_DEFINE1(rmdir, const char __user *, pathname) |
2691 | { |
2692 | return do_rmdir(AT_FDCWD, pathname); |
2693 | } |
2694 | @@ -2297,7 +2297,7 @@ slashes: |
2695 | goto exit2; |
2696 | } |
2697 | |
2698 | -asmlinkage long sys_unlinkat(int dfd, const char __user *pathname, int flag) |
2699 | +SYSCALL_DEFINE3(unlinkat, int, dfd, const char __user *, pathname, int, flag) |
2700 | { |
2701 | if ((flag & ~AT_REMOVEDIR) != 0) |
2702 | return -EINVAL; |
2703 | @@ -2308,7 +2308,7 @@ asmlinkage long sys_unlinkat(int dfd, const char __user *pathname, int flag) |
2704 | return do_unlinkat(dfd, pathname); |
2705 | } |
2706 | |
2707 | -asmlinkage long sys_unlink(const char __user *pathname) |
2708 | +SYSCALL_DEFINE1(unlink, const char __user *, pathname) |
2709 | { |
2710 | return do_unlinkat(AT_FDCWD, pathname); |
2711 | } |
2712 | @@ -2334,8 +2334,8 @@ int vfs_symlink(struct inode *dir, struct dentry *dentry, const char *oldname) |
2713 | return error; |
2714 | } |
2715 | |
2716 | -asmlinkage long sys_symlinkat(const char __user *oldname, |
2717 | - int newdfd, const char __user *newname) |
2718 | +SYSCALL_DEFINE3(symlinkat, const char __user *, oldname, |
2719 | + int, newdfd, const char __user *, newname) |
2720 | { |
2721 | int error; |
2722 | char *from; |
2723 | @@ -2372,7 +2372,7 @@ out_putname: |
2724 | return error; |
2725 | } |
2726 | |
2727 | -asmlinkage long sys_symlink(const char __user *oldname, const char __user *newname) |
2728 | +SYSCALL_DEFINE2(symlink, const char __user *, oldname, const char __user *, newname) |
2729 | { |
2730 | return sys_symlinkat(oldname, AT_FDCWD, newname); |
2731 | } |
2732 | @@ -2424,9 +2424,8 @@ int vfs_link(struct dentry *old_dentry, struct inode *dir, struct dentry *new_de |
2733 | * with linux 2.0, and to avoid hard-linking to directories |
2734 | * and other special files. --ADM |
2735 | */ |
2736 | -asmlinkage long sys_linkat(int olddfd, const char __user *oldname, |
2737 | - int newdfd, const char __user *newname, |
2738 | - int flags) |
2739 | +SYSCALL_DEFINE5(linkat, int, olddfd, const char __user *, oldname, |
2740 | + int, newdfd, const char __user *, newname, int, flags) |
2741 | { |
2742 | struct dentry *new_dentry; |
2743 | struct nameidata nd; |
2744 | @@ -2471,7 +2470,7 @@ out: |
2745 | return error; |
2746 | } |
2747 | |
2748 | -asmlinkage long sys_link(const char __user *oldname, const char __user *newname) |
2749 | +SYSCALL_DEFINE2(link, const char __user *, oldname, const char __user *, newname) |
2750 | { |
2751 | return sys_linkat(AT_FDCWD, oldname, AT_FDCWD, newname, 0); |
2752 | } |
2753 | @@ -2622,8 +2621,8 @@ int vfs_rename(struct inode *old_dir, struct dentry *old_dentry, |
2754 | return error; |
2755 | } |
2756 | |
2757 | -asmlinkage long sys_renameat(int olddfd, const char __user *oldname, |
2758 | - int newdfd, const char __user *newname) |
2759 | +SYSCALL_DEFINE4(renameat, int, olddfd, const char __user *, oldname, |
2760 | + int, newdfd, const char __user *, newname) |
2761 | { |
2762 | struct dentry *old_dir, *new_dir; |
2763 | struct dentry *old_dentry, *new_dentry; |
2764 | @@ -2707,7 +2706,7 @@ exit: |
2765 | return error; |
2766 | } |
2767 | |
2768 | -asmlinkage long sys_rename(const char __user *oldname, const char __user *newname) |
2769 | +SYSCALL_DEFINE2(rename, const char __user *, oldname, const char __user *, newname) |
2770 | { |
2771 | return sys_renameat(AT_FDCWD, oldname, AT_FDCWD, newname); |
2772 | } |
2773 | @@ -2797,18 +2796,23 @@ void page_put_link(struct dentry *dentry, struct nameidata *nd, void *cookie) |
2774 | } |
2775 | } |
2776 | |
2777 | -int __page_symlink(struct inode *inode, const char *symname, int len, |
2778 | - gfp_t gfp_mask) |
2779 | +/* |
2780 | + * The nofs argument instructs pagecache_write_begin to pass AOP_FLAG_NOFS |
2781 | + */ |
2782 | +int __page_symlink(struct inode *inode, const char *symname, int len, int nofs) |
2783 | { |
2784 | struct address_space *mapping = inode->i_mapping; |
2785 | struct page *page; |
2786 | void *fsdata; |
2787 | int err; |
2788 | char *kaddr; |
2789 | + unsigned int flags = AOP_FLAG_UNINTERRUPTIBLE; |
2790 | + if (nofs) |
2791 | + flags |= AOP_FLAG_NOFS; |
2792 | |
2793 | retry: |
2794 | err = pagecache_write_begin(NULL, mapping, 0, len-1, |
2795 | - AOP_FLAG_UNINTERRUPTIBLE, &page, &fsdata); |
2796 | + flags, &page, &fsdata); |
2797 | if (err) |
2798 | goto fail; |
2799 | |
2800 | @@ -2832,7 +2836,7 @@ fail: |
2801 | int page_symlink(struct inode *inode, const char *symname, int len) |
2802 | { |
2803 | return __page_symlink(inode, symname, len, |
2804 | - mapping_gfp_mask(inode->i_mapping)); |
2805 | + !(mapping_gfp_mask(inode->i_mapping) & __GFP_FS)); |
2806 | } |
2807 | |
2808 | const struct inode_operations page_symlink_inode_operations = { |
2809 | diff --git a/fs/namespace.c b/fs/namespace.c |
2810 | index 1bd5ba2..efe0251 100644 |
2811 | --- a/fs/namespace.c |
2812 | +++ b/fs/namespace.c |
2813 | @@ -1128,7 +1128,7 @@ static int do_umount(struct vfsmount *mnt, int flags) |
2814 | * unixes. Our API is identical to OSF/1 to avoid making a mess of AMD |
2815 | */ |
2816 | |
2817 | -asmlinkage long sys_umount(char __user * name, int flags) |
2818 | +SYSCALL_DEFINE2(umount, char __user *, name, int, flags) |
2819 | { |
2820 | struct path path; |
2821 | int retval; |
2822 | @@ -1160,7 +1160,7 @@ out: |
2823 | /* |
2824 | * The 2.0 compatible umount. No flags. |
2825 | */ |
2826 | -asmlinkage long sys_oldumount(char __user * name) |
2827 | +SYSCALL_DEFINE1(oldumount, char __user *, name) |
2828 | { |
2829 | return sys_umount(name, 0); |
2830 | } |
2831 | @@ -2053,9 +2053,8 @@ struct mnt_namespace *copy_mnt_ns(unsigned long flags, struct mnt_namespace *ns, |
2832 | return new_ns; |
2833 | } |
2834 | |
2835 | -asmlinkage long sys_mount(char __user * dev_name, char __user * dir_name, |
2836 | - char __user * type, unsigned long flags, |
2837 | - void __user * data) |
2838 | +SYSCALL_DEFINE5(mount, char __user *, dev_name, char __user *, dir_name, |
2839 | + char __user *, type, unsigned long, flags, void __user *, data) |
2840 | { |
2841 | int retval; |
2842 | unsigned long data_page; |
2843 | @@ -2180,8 +2179,8 @@ static void chroot_fs_refs(struct path *old_root, struct path *new_root) |
2844 | * though, so you may need to say mount --bind /nfs/my_root /nfs/my_root |
2845 | * first. |
2846 | */ |
2847 | -asmlinkage long sys_pivot_root(const char __user * new_root, |
2848 | - const char __user * put_old) |
2849 | +SYSCALL_DEFINE2(pivot_root, const char __user *, new_root, |
2850 | + const char __user *, put_old) |
2851 | { |
2852 | struct vfsmount *tmp; |
2853 | struct path new, old, parent_path, root_parent, root; |
2854 | diff --git a/fs/nfs/file.c b/fs/nfs/file.c |
2855 | index 7846065..30541f0 100644 |
2856 | --- a/fs/nfs/file.c |
2857 | +++ b/fs/nfs/file.c |
2858 | @@ -351,7 +351,7 @@ static int nfs_write_begin(struct file *file, struct address_space *mapping, |
2859 | file->f_path.dentry->d_name.name, |
2860 | mapping->host->i_ino, len, (long long) pos); |
2861 | |
2862 | - page = __grab_cache_page(mapping, index); |
2863 | + page = grab_cache_page_write_begin(mapping, index, flags); |
2864 | if (!page) |
2865 | return -ENOMEM; |
2866 | *pagep = page; |
2867 | diff --git a/fs/nfs/read.c b/fs/nfs/read.c |
2868 | index 40d1798..f856004 100644 |
2869 | --- a/fs/nfs/read.c |
2870 | +++ b/fs/nfs/read.c |
2871 | @@ -533,12 +533,6 @@ readpage_async_filler(void *data, struct page *page) |
2872 | unsigned int len; |
2873 | int error; |
2874 | |
2875 | - error = nfs_wb_page(inode, page); |
2876 | - if (error) |
2877 | - goto out_unlock; |
2878 | - if (PageUptodate(page)) |
2879 | - goto out_unlock; |
2880 | - |
2881 | len = nfs_page_length(page); |
2882 | if (len == 0) |
2883 | return nfs_return_empty_page(page); |
2884 | diff --git a/fs/nfsctl.c b/fs/nfsctl.c |
2885 | index aed8145..bf2cbd9 100644 |
2886 | --- a/fs/nfsctl.c |
2887 | +++ b/fs/nfsctl.c |
2888 | @@ -82,8 +82,8 @@ static struct { |
2889 | }, |
2890 | }; |
2891 | |
2892 | -long |
2893 | -asmlinkage sys_nfsservctl(int cmd, struct nfsctl_arg __user *arg, void __user *res) |
2894 | +SYSCALL_DEFINE3(nfsservctl, int, cmd, struct nfsctl_arg __user *, arg, |
2895 | + void __user *, res) |
2896 | { |
2897 | struct file *file; |
2898 | void __user *p = &arg->u; |
2899 | diff --git a/fs/open.c b/fs/open.c |
2900 | index 07da935..975ce3e 100644 |
2901 | --- a/fs/open.c |
2902 | +++ b/fs/open.c |
2903 | @@ -122,7 +122,7 @@ static int vfs_statfs64(struct dentry *dentry, struct statfs64 *buf) |
2904 | return 0; |
2905 | } |
2906 | |
2907 | -asmlinkage long sys_statfs(const char __user *pathname, struct statfs __user * buf) |
2908 | +SYSCALL_DEFINE2(statfs, const char __user *, pathname, struct statfs __user *, buf) |
2909 | { |
2910 | struct path path; |
2911 | int error; |
2912 | @@ -138,8 +138,7 @@ asmlinkage long sys_statfs(const char __user *pathname, struct statfs __user * b |
2913 | return error; |
2914 | } |
2915 | |
2916 | - |
2917 | -asmlinkage long sys_statfs64(const char __user *pathname, size_t sz, struct statfs64 __user *buf) |
2918 | +SYSCALL_DEFINE3(statfs64, const char __user *, pathname, size_t, sz, struct statfs64 __user *, buf) |
2919 | { |
2920 | struct path path; |
2921 | long error; |
2922 | @@ -157,8 +156,7 @@ asmlinkage long sys_statfs64(const char __user *pathname, size_t sz, struct stat |
2923 | return error; |
2924 | } |
2925 | |
2926 | - |
2927 | -asmlinkage long sys_fstatfs(unsigned int fd, struct statfs __user * buf) |
2928 | +SYSCALL_DEFINE2(fstatfs, unsigned int, fd, struct statfs __user *, buf) |
2929 | { |
2930 | struct file * file; |
2931 | struct statfs tmp; |
2932 | @@ -176,7 +174,7 @@ out: |
2933 | return error; |
2934 | } |
2935 | |
2936 | -asmlinkage long sys_fstatfs64(unsigned int fd, size_t sz, struct statfs64 __user *buf) |
2937 | +SYSCALL_DEFINE3(fstatfs64, unsigned int, fd, size_t, sz, struct statfs64 __user *, buf) |
2938 | { |
2939 | struct file * file; |
2940 | struct statfs64 tmp; |
2941 | @@ -287,7 +285,7 @@ out: |
2942 | return error; |
2943 | } |
2944 | |
2945 | -asmlinkage long sys_truncate(const char __user * path, unsigned long length) |
2946 | +SYSCALL_DEFINE2(truncate, const char __user *, path, unsigned long, length) |
2947 | { |
2948 | /* on 32-bit boxen it will cut the range 2^31--2^32-1 off */ |
2949 | return do_sys_truncate(path, (long)length); |
2950 | @@ -336,7 +334,7 @@ out: |
2951 | return error; |
2952 | } |
2953 | |
2954 | -asmlinkage long sys_ftruncate(unsigned int fd, unsigned long length) |
2955 | +SYSCALL_DEFINE2(ftruncate, unsigned int, fd, unsigned long, length) |
2956 | { |
2957 | long ret = do_sys_ftruncate(fd, length, 1); |
2958 | /* avoid REGPARM breakage on x86: */ |
2959 | @@ -346,21 +344,35 @@ asmlinkage long sys_ftruncate(unsigned int fd, unsigned long length) |
2960 | |
2961 | /* LFS versions of truncate are only needed on 32 bit machines */ |
2962 | #if BITS_PER_LONG == 32 |
2963 | -asmlinkage long sys_truncate64(const char __user * path, loff_t length) |
2964 | +SYSCALL_DEFINE(truncate64)(const char __user * path, loff_t length) |
2965 | { |
2966 | return do_sys_truncate(path, length); |
2967 | } |
2968 | +#ifdef CONFIG_HAVE_SYSCALL_WRAPPERS |
2969 | +asmlinkage long SyS_truncate64(long path, loff_t length) |
2970 | +{ |
2971 | + return SYSC_truncate64((const char __user *) path, length); |
2972 | +} |
2973 | +SYSCALL_ALIAS(sys_truncate64, SyS_truncate64); |
2974 | +#endif |
2975 | |
2976 | -asmlinkage long sys_ftruncate64(unsigned int fd, loff_t length) |
2977 | +SYSCALL_DEFINE(ftruncate64)(unsigned int fd, loff_t length) |
2978 | { |
2979 | long ret = do_sys_ftruncate(fd, length, 0); |
2980 | /* avoid REGPARM breakage on x86: */ |
2981 | asmlinkage_protect(2, ret, fd, length); |
2982 | return ret; |
2983 | } |
2984 | +#ifdef CONFIG_HAVE_SYSCALL_WRAPPERS |
2985 | +asmlinkage long SyS_ftruncate64(long fd, loff_t length) |
2986 | +{ |
2987 | + return SYSC_ftruncate64((unsigned int) fd, length); |
2988 | +} |
2989 | +SYSCALL_ALIAS(sys_ftruncate64, SyS_ftruncate64); |
2990 | #endif |
2991 | +#endif /* BITS_PER_LONG == 32 */ |
2992 | |
2993 | -asmlinkage long sys_fallocate(int fd, int mode, loff_t offset, loff_t len) |
2994 | +SYSCALL_DEFINE(fallocate)(int fd, int mode, loff_t offset, loff_t len) |
2995 | { |
2996 | struct file *file; |
2997 | struct inode *inode; |
2998 | @@ -417,13 +429,20 @@ out_fput: |
2999 | out: |
3000 | return ret; |
3001 | } |
3002 | +#ifdef CONFIG_HAVE_SYSCALL_WRAPPERS |
3003 | +asmlinkage long SyS_fallocate(long fd, long mode, loff_t offset, loff_t len) |
3004 | +{ |
3005 | + return SYSC_fallocate((int)fd, (int)mode, offset, len); |
3006 | +} |
3007 | +SYSCALL_ALIAS(sys_fallocate, SyS_fallocate); |
3008 | +#endif |
3009 | |
3010 | /* |
3011 | * access() needs to use the real uid/gid, not the effective uid/gid. |
3012 | * We do this by temporarily clearing all FS-related capabilities and |
3013 | * switching the fsuid/fsgid around to the real ones. |
3014 | */ |
3015 | -asmlinkage long sys_faccessat(int dfd, const char __user *filename, int mode) |
3016 | +SYSCALL_DEFINE3(faccessat, int, dfd, const char __user *, filename, int, mode) |
3017 | { |
3018 | struct path path; |
3019 | struct inode *inode; |
3020 | @@ -503,12 +522,12 @@ out: |
3021 | return res; |
3022 | } |
3023 | |
3024 | -asmlinkage long sys_access(const char __user *filename, int mode) |
3025 | +SYSCALL_DEFINE2(access, const char __user *, filename, int, mode) |
3026 | { |
3027 | return sys_faccessat(AT_FDCWD, filename, mode); |
3028 | } |
3029 | |
3030 | -asmlinkage long sys_chdir(const char __user * filename) |
3031 | +SYSCALL_DEFINE1(chdir, const char __user *, filename) |
3032 | { |
3033 | struct path path; |
3034 | int error; |
3035 | @@ -529,7 +548,7 @@ out: |
3036 | return error; |
3037 | } |
3038 | |
3039 | -asmlinkage long sys_fchdir(unsigned int fd) |
3040 | +SYSCALL_DEFINE1(fchdir, unsigned int, fd) |
3041 | { |
3042 | struct file *file; |
3043 | struct inode *inode; |
3044 | @@ -555,7 +574,7 @@ out: |
3045 | return error; |
3046 | } |
3047 | |
3048 | -asmlinkage long sys_chroot(const char __user * filename) |
3049 | +SYSCALL_DEFINE1(chroot, const char __user *, filename) |
3050 | { |
3051 | struct path path; |
3052 | int error; |
3053 | @@ -580,7 +599,7 @@ out: |
3054 | return error; |
3055 | } |
3056 | |
3057 | -asmlinkage long sys_fchmod(unsigned int fd, mode_t mode) |
3058 | +SYSCALL_DEFINE2(fchmod, unsigned int, fd, mode_t, mode) |
3059 | { |
3060 | struct inode * inode; |
3061 | struct dentry * dentry; |
3062 | @@ -614,8 +633,7 @@ out: |
3063 | return err; |
3064 | } |
3065 | |
3066 | -asmlinkage long sys_fchmodat(int dfd, const char __user *filename, |
3067 | - mode_t mode) |
3068 | +SYSCALL_DEFINE3(fchmodat, int, dfd, const char __user *, filename, mode_t, mode) |
3069 | { |
3070 | struct path path; |
3071 | struct inode *inode; |
3072 | @@ -644,7 +662,7 @@ out: |
3073 | return error; |
3074 | } |
3075 | |
3076 | -asmlinkage long sys_chmod(const char __user *filename, mode_t mode) |
3077 | +SYSCALL_DEFINE2(chmod, const char __user *, filename, mode_t, mode) |
3078 | { |
3079 | return sys_fchmodat(AT_FDCWD, filename, mode); |
3080 | } |
3081 | @@ -674,7 +692,7 @@ static int chown_common(struct dentry * dentry, uid_t user, gid_t group) |
3082 | return error; |
3083 | } |
3084 | |
3085 | -asmlinkage long sys_chown(const char __user * filename, uid_t user, gid_t group) |
3086 | +SYSCALL_DEFINE3(chown, const char __user *, filename, uid_t, user, gid_t, group) |
3087 | { |
3088 | struct path path; |
3089 | int error; |
3090 | @@ -693,8 +711,8 @@ out: |
3091 | return error; |
3092 | } |
3093 | |
3094 | -asmlinkage long sys_fchownat(int dfd, const char __user *filename, uid_t user, |
3095 | - gid_t group, int flag) |
3096 | +SYSCALL_DEFINE5(fchownat, int, dfd, const char __user *, filename, uid_t, user, |
3097 | + gid_t, group, int, flag) |
3098 | { |
3099 | struct path path; |
3100 | int error = -EINVAL; |
3101 | @@ -718,7 +736,7 @@ out: |
3102 | return error; |
3103 | } |
3104 | |
3105 | -asmlinkage long sys_lchown(const char __user * filename, uid_t user, gid_t group) |
3106 | +SYSCALL_DEFINE3(lchown, const char __user *, filename, uid_t, user, gid_t, group) |
3107 | { |
3108 | struct path path; |
3109 | int error; |
3110 | @@ -737,8 +755,7 @@ out: |
3111 | return error; |
3112 | } |
3113 | |
3114 | - |
3115 | -asmlinkage long sys_fchown(unsigned int fd, uid_t user, gid_t group) |
3116 | +SYSCALL_DEFINE3(fchown, unsigned int, fd, uid_t, user, gid_t, group) |
3117 | { |
3118 | struct file * file; |
3119 | int error = -EBADF; |
3120 | @@ -1029,7 +1046,7 @@ long do_sys_open(int dfd, const char __user *filename, int flags, int mode) |
3121 | return fd; |
3122 | } |
3123 | |
3124 | -asmlinkage long sys_open(const char __user *filename, int flags, int mode) |
3125 | +SYSCALL_DEFINE3(open, const char __user *, filename, int, flags, int, mode) |
3126 | { |
3127 | long ret; |
3128 | |
3129 | @@ -1042,8 +1059,8 @@ asmlinkage long sys_open(const char __user *filename, int flags, int mode) |
3130 | return ret; |
3131 | } |
3132 | |
3133 | -asmlinkage long sys_openat(int dfd, const char __user *filename, int flags, |
3134 | - int mode) |
3135 | +SYSCALL_DEFINE4(openat, int, dfd, const char __user *, filename, int, flags, |
3136 | + int, mode) |
3137 | { |
3138 | long ret; |
3139 | |
3140 | @@ -1062,7 +1079,7 @@ asmlinkage long sys_openat(int dfd, const char __user *filename, int flags, |
3141 | * For backward compatibility? Maybe this should be moved |
3142 | * into arch/i386 instead? |
3143 | */ |
3144 | -asmlinkage long sys_creat(const char __user * pathname, int mode) |
3145 | +SYSCALL_DEFINE2(creat, const char __user *, pathname, int, mode) |
3146 | { |
3147 | return sys_open(pathname, O_CREAT | O_WRONLY | O_TRUNC, mode); |
3148 | } |
3149 | @@ -1098,7 +1115,7 @@ EXPORT_SYMBOL(filp_close); |
3150 | * releasing the fd. This ensures that one clone task can't release |
3151 | * an fd while another clone is opening it. |
3152 | */ |
3153 | -asmlinkage long sys_close(unsigned int fd) |
3154 | +SYSCALL_DEFINE1(close, unsigned int, fd) |
3155 | { |
3156 | struct file * filp; |
3157 | struct files_struct *files = current->files; |
3158 | @@ -1131,14 +1148,13 @@ out_unlock: |
3159 | spin_unlock(&files->file_lock); |
3160 | return -EBADF; |
3161 | } |
3162 | - |
3163 | EXPORT_SYMBOL(sys_close); |
3164 | |
3165 | /* |
3166 | * This routine simulates a hangup on the tty, to arrange that users |
3167 | * are given clean terminals at login time. |
3168 | */ |
3169 | -asmlinkage long sys_vhangup(void) |
3170 | +SYSCALL_DEFINE0(vhangup) |
3171 | { |
3172 | if (capable(CAP_SYS_TTY_CONFIG)) { |
3173 | /* XXX: this needs locking */ |
3174 | diff --git a/fs/pipe.c b/fs/pipe.c |
3175 | index fcba654..35d2cbb 100644 |
3176 | --- a/fs/pipe.c |
3177 | +++ b/fs/pipe.c |
3178 | @@ -1051,7 +1051,7 @@ int do_pipe(int *fd) |
3179 | * sys_pipe() is the normal C calling standard for creating |
3180 | * a pipe. It's not the way Unix traditionally does this, though. |
3181 | */ |
3182 | -asmlinkage long __weak sys_pipe2(int __user *fildes, int flags) |
3183 | +SYSCALL_DEFINE2(pipe2, int __user *, fildes, int, flags) |
3184 | { |
3185 | int fd[2]; |
3186 | int error; |
3187 | @@ -1067,7 +1067,7 @@ asmlinkage long __weak sys_pipe2(int __user *fildes, int flags) |
3188 | return error; |
3189 | } |
3190 | |
3191 | -asmlinkage long __weak sys_pipe(int __user *fildes) |
3192 | +SYSCALL_DEFINE1(pipe, int __user *, fildes) |
3193 | { |
3194 | return sys_pipe2(fildes, 0); |
3195 | } |
3196 | diff --git a/fs/quota.c b/fs/quota.c |
3197 | index 7f4386e..e9851af 100644 |
3198 | --- a/fs/quota.c |
3199 | +++ b/fs/quota.c |
3200 | @@ -368,7 +368,8 @@ static inline struct super_block *quotactl_block(const char __user *special) |
3201 | * calls. Maybe we need to add the process quotas etc. in the future, |
3202 | * but we probably should use rlimits for that. |
3203 | */ |
3204 | -asmlinkage long sys_quotactl(unsigned int cmd, const char __user *special, qid_t id, void __user *addr) |
3205 | +SYSCALL_DEFINE4(quotactl, unsigned int, cmd, const char __user *, special, |
3206 | + qid_t, id, void __user *, addr) |
3207 | { |
3208 | uint cmds, type; |
3209 | struct super_block *sb = NULL; |
3210 | diff --git a/fs/read_write.c b/fs/read_write.c |
3211 | index 9ba495d..0619b2a 100644 |
3212 | --- a/fs/read_write.c |
3213 | +++ b/fs/read_write.c |
3214 | @@ -112,7 +112,7 @@ loff_t vfs_llseek(struct file *file, loff_t offset, int origin) |
3215 | } |
3216 | EXPORT_SYMBOL(vfs_llseek); |
3217 | |
3218 | -asmlinkage off_t sys_lseek(unsigned int fd, off_t offset, unsigned int origin) |
3219 | +SYSCALL_DEFINE3(lseek, unsigned int, fd, off_t, offset, unsigned int, origin) |
3220 | { |
3221 | off_t retval; |
3222 | struct file * file; |
3223 | @@ -136,9 +136,9 @@ bad: |
3224 | } |
3225 | |
3226 | #ifdef __ARCH_WANT_SYS_LLSEEK |
3227 | -asmlinkage long sys_llseek(unsigned int fd, unsigned long offset_high, |
3228 | - unsigned long offset_low, loff_t __user * result, |
3229 | - unsigned int origin) |
3230 | +SYSCALL_DEFINE5(llseek, unsigned int, fd, unsigned long, offset_high, |
3231 | + unsigned long, offset_low, loff_t __user *, result, |
3232 | + unsigned int, origin) |
3233 | { |
3234 | int retval; |
3235 | struct file * file; |
3236 | @@ -334,7 +334,7 @@ static inline void file_pos_write(struct file *file, loff_t pos) |
3237 | file->f_pos = pos; |
3238 | } |
3239 | |
3240 | -asmlinkage ssize_t sys_read(unsigned int fd, char __user * buf, size_t count) |
3241 | +SYSCALL_DEFINE3(read, unsigned int, fd, char __user *, buf, size_t, count) |
3242 | { |
3243 | struct file *file; |
3244 | ssize_t ret = -EBADF; |
3245 | @@ -351,7 +351,8 @@ asmlinkage ssize_t sys_read(unsigned int fd, char __user * buf, size_t count) |
3246 | return ret; |
3247 | } |
3248 | |
3249 | -asmlinkage ssize_t sys_write(unsigned int fd, const char __user * buf, size_t count) |
3250 | +SYSCALL_DEFINE3(write, unsigned int, fd, const char __user *, buf, |
3251 | + size_t, count) |
3252 | { |
3253 | struct file *file; |
3254 | ssize_t ret = -EBADF; |
3255 | @@ -368,8 +369,8 @@ asmlinkage ssize_t sys_write(unsigned int fd, const char __user * buf, size_t co |
3256 | return ret; |
3257 | } |
3258 | |
3259 | -asmlinkage ssize_t sys_pread64(unsigned int fd, char __user *buf, |
3260 | - size_t count, loff_t pos) |
3261 | +SYSCALL_DEFINE(pread64)(unsigned int fd, char __user *buf, |
3262 | + size_t count, loff_t pos) |
3263 | { |
3264 | struct file *file; |
3265 | ssize_t ret = -EBADF; |
3266 | @@ -388,9 +389,17 @@ asmlinkage ssize_t sys_pread64(unsigned int fd, char __user *buf, |
3267 | |
3268 | return ret; |
3269 | } |
3270 | +#ifdef CONFIG_HAVE_SYSCALL_WRAPPERS |
3271 | +asmlinkage long SyS_pread64(long fd, long buf, long count, loff_t pos) |
3272 | +{ |
3273 | + return SYSC_pread64((unsigned int) fd, (char __user *) buf, |
3274 | + (size_t) count, pos); |
3275 | +} |
3276 | +SYSCALL_ALIAS(sys_pread64, SyS_pread64); |
3277 | +#endif |
3278 | |
3279 | -asmlinkage ssize_t sys_pwrite64(unsigned int fd, const char __user *buf, |
3280 | - size_t count, loff_t pos) |
3281 | +SYSCALL_DEFINE(pwrite64)(unsigned int fd, const char __user *buf, |
3282 | + size_t count, loff_t pos) |
3283 | { |
3284 | struct file *file; |
3285 | ssize_t ret = -EBADF; |
3286 | @@ -409,6 +418,14 @@ asmlinkage ssize_t sys_pwrite64(unsigned int fd, const char __user *buf, |
3287 | |
3288 | return ret; |
3289 | } |
3290 | +#ifdef CONFIG_HAVE_SYSCALL_WRAPPERS |
3291 | +asmlinkage long SyS_pwrite64(long fd, long buf, long count, loff_t pos) |
3292 | +{ |
3293 | + return SYSC_pwrite64((unsigned int) fd, (const char __user *) buf, |
3294 | + (size_t) count, pos); |
3295 | +} |
3296 | +SYSCALL_ALIAS(sys_pwrite64, SyS_pwrite64); |
3297 | +#endif |
3298 | |
3299 | /* |
3300 | * Reduce an iovec's length in-place. Return the resulting number of segments |
3301 | @@ -637,8 +654,8 @@ ssize_t vfs_writev(struct file *file, const struct iovec __user *vec, |
3302 | |
3303 | EXPORT_SYMBOL(vfs_writev); |
3304 | |
3305 | -asmlinkage ssize_t |
3306 | -sys_readv(unsigned long fd, const struct iovec __user *vec, unsigned long vlen) |
3307 | +SYSCALL_DEFINE3(readv, unsigned long, fd, const struct iovec __user *, vec, |
3308 | + unsigned long, vlen) |
3309 | { |
3310 | struct file *file; |
3311 | ssize_t ret = -EBADF; |
3312 | @@ -658,8 +675,8 @@ sys_readv(unsigned long fd, const struct iovec __user *vec, unsigned long vlen) |
3313 | return ret; |
3314 | } |
3315 | |
3316 | -asmlinkage ssize_t |
3317 | -sys_writev(unsigned long fd, const struct iovec __user *vec, unsigned long vlen) |
3318 | +SYSCALL_DEFINE3(writev, unsigned long, fd, const struct iovec __user *, vec, |
3319 | + unsigned long, vlen) |
3320 | { |
3321 | struct file *file; |
3322 | ssize_t ret = -EBADF; |
3323 | @@ -777,7 +794,7 @@ out: |
3324 | return retval; |
3325 | } |
3326 | |
3327 | -asmlinkage ssize_t sys_sendfile(int out_fd, int in_fd, off_t __user *offset, size_t count) |
3328 | +SYSCALL_DEFINE4(sendfile, int, out_fd, int, in_fd, off_t __user *, offset, size_t, count) |
3329 | { |
3330 | loff_t pos; |
3331 | off_t off; |
3332 | @@ -796,7 +813,7 @@ asmlinkage ssize_t sys_sendfile(int out_fd, int in_fd, off_t __user *offset, siz |
3333 | return do_sendfile(out_fd, in_fd, NULL, count, 0); |
3334 | } |
3335 | |
3336 | -asmlinkage ssize_t sys_sendfile64(int out_fd, int in_fd, loff_t __user *offset, size_t count) |
3337 | +SYSCALL_DEFINE4(sendfile64, int, out_fd, int, in_fd, loff_t __user *, offset, size_t, count) |
3338 | { |
3339 | loff_t pos; |
3340 | ssize_t ret; |
3341 | diff --git a/fs/readdir.c b/fs/readdir.c |
3342 | index 93a7559..d68ea47 100644 |
3343 | --- a/fs/readdir.c |
3344 | +++ b/fs/readdir.c |
3345 | @@ -102,7 +102,8 @@ efault: |
3346 | return -EFAULT; |
3347 | } |
3348 | |
3349 | -asmlinkage long old_readdir(unsigned int fd, struct old_linux_dirent __user * dirent, unsigned int count) |
3350 | +SYSCALL_DEFINE3(old_readdir, unsigned int, fd, |
3351 | + struct old_linux_dirent __user *, dirent, unsigned int, count) |
3352 | { |
3353 | int error; |
3354 | struct file * file; |
3355 | @@ -187,7 +188,8 @@ efault: |
3356 | return -EFAULT; |
3357 | } |
3358 | |
3359 | -asmlinkage long sys_getdents(unsigned int fd, struct linux_dirent __user * dirent, unsigned int count) |
3360 | +SYSCALL_DEFINE3(getdents, unsigned int, fd, |
3361 | + struct linux_dirent __user *, dirent, unsigned int, count) |
3362 | { |
3363 | struct file * file; |
3364 | struct linux_dirent __user * lastdirent; |
3365 | @@ -271,7 +273,8 @@ efault: |
3366 | return -EFAULT; |
3367 | } |
3368 | |
3369 | -asmlinkage long sys_getdents64(unsigned int fd, struct linux_dirent64 __user * dirent, unsigned int count) |
3370 | +SYSCALL_DEFINE3(getdents64, unsigned int, fd, |
3371 | + struct linux_dirent64 __user *, dirent, unsigned int, count) |
3372 | { |
3373 | struct file * file; |
3374 | struct linux_dirent64 __user * lastdirent; |
3375 | diff --git a/fs/reiserfs/inode.c b/fs/reiserfs/inode.c |
3376 | index 5699171..8c2615e 100644 |
3377 | --- a/fs/reiserfs/inode.c |
3378 | +++ b/fs/reiserfs/inode.c |
3379 | @@ -2565,7 +2565,7 @@ static int reiserfs_write_begin(struct file *file, |
3380 | } |
3381 | |
3382 | index = pos >> PAGE_CACHE_SHIFT; |
3383 | - page = __grab_cache_page(mapping, index); |
3384 | + page = grab_cache_page_write_begin(mapping, index, flags); |
3385 | if (!page) |
3386 | return -ENOMEM; |
3387 | *pagep = page; |
3388 | diff --git a/fs/select.c b/fs/select.c |
3389 | index da0e882..d575e4f 100644 |
3390 | --- a/fs/select.c |
3391 | +++ b/fs/select.c |
3392 | @@ -374,8 +374,8 @@ out_nofds: |
3393 | return ret; |
3394 | } |
3395 | |
3396 | -asmlinkage long sys_select(int n, fd_set __user *inp, fd_set __user *outp, |
3397 | - fd_set __user *exp, struct timeval __user *tvp) |
3398 | +SYSCALL_DEFINE5(select, int, n, fd_set __user *, inp, fd_set __user *, outp, |
3399 | + fd_set __user *, exp, struct timeval __user *, tvp) |
3400 | { |
3401 | s64 timeout = -1; |
3402 | struct timeval tv; |
3403 | @@ -427,9 +427,9 @@ sticky: |
3404 | } |
3405 | |
3406 | #ifdef HAVE_SET_RESTORE_SIGMASK |
3407 | -asmlinkage long sys_pselect7(int n, fd_set __user *inp, fd_set __user *outp, |
3408 | - fd_set __user *exp, struct timespec __user *tsp, |
3409 | - const sigset_t __user *sigmask, size_t sigsetsize) |
3410 | +static long do_pselect(int n, fd_set __user *inp, fd_set __user *outp, |
3411 | + fd_set __user *exp, struct timespec __user *tsp, |
3412 | + const sigset_t __user *sigmask, size_t sigsetsize) |
3413 | { |
3414 | s64 timeout = MAX_SCHEDULE_TIMEOUT; |
3415 | sigset_t ksigmask, sigsaved; |
3416 | @@ -513,8 +513,9 @@ sticky: |
3417 | * which has a pointer to the sigset_t itself followed by a size_t containing |
3418 | * the sigset size. |
3419 | */ |
3420 | -asmlinkage long sys_pselect6(int n, fd_set __user *inp, fd_set __user *outp, |
3421 | - fd_set __user *exp, struct timespec __user *tsp, void __user *sig) |
3422 | +SYSCALL_DEFINE6(pselect6, int, n, fd_set __user *, inp, fd_set __user *, outp, |
3423 | + fd_set __user *, exp, struct timespec __user *, tsp, |
3424 | + void __user *, sig) |
3425 | { |
3426 | size_t sigsetsize = 0; |
3427 | sigset_t __user *up = NULL; |
3428 | @@ -527,7 +528,7 @@ asmlinkage long sys_pselect6(int n, fd_set __user *inp, fd_set __user *outp, |
3429 | return -EFAULT; |
3430 | } |
3431 | |
3432 | - return sys_pselect7(n, inp, outp, exp, tsp, up, sigsetsize); |
3433 | + return do_pselect(n, inp, outp, exp, tsp, up, sigsetsize); |
3434 | } |
3435 | #endif /* HAVE_SET_RESTORE_SIGMASK */ |
3436 | |
3437 | @@ -727,8 +728,8 @@ static long do_restart_poll(struct restart_block *restart_block) |
3438 | return ret; |
3439 | } |
3440 | |
3441 | -asmlinkage long sys_poll(struct pollfd __user *ufds, unsigned int nfds, |
3442 | - long timeout_msecs) |
3443 | +SYSCALL_DEFINE3(poll, struct pollfd __user *, ufds, unsigned int, nfds, |
3444 | + long, timeout_msecs) |
3445 | { |
3446 | s64 timeout_jiffies; |
3447 | int ret; |
3448 | @@ -761,9 +762,9 @@ asmlinkage long sys_poll(struct pollfd __user *ufds, unsigned int nfds, |
3449 | } |
3450 | |
3451 | #ifdef HAVE_SET_RESTORE_SIGMASK |
3452 | -asmlinkage long sys_ppoll(struct pollfd __user *ufds, unsigned int nfds, |
3453 | - struct timespec __user *tsp, const sigset_t __user *sigmask, |
3454 | - size_t sigsetsize) |
3455 | +SYSCALL_DEFINE5(ppoll, struct pollfd __user *, ufds, unsigned int, nfds, |
3456 | + struct timespec __user *, tsp, const sigset_t __user *, sigmask, |
3457 | + size_t, sigsetsize) |
3458 | { |
3459 | sigset_t ksigmask, sigsaved; |
3460 | struct timespec ts; |
3461 | diff --git a/fs/signalfd.c b/fs/signalfd.c |
3462 | index 9c39bc7..b07565c 100644 |
3463 | --- a/fs/signalfd.c |
3464 | +++ b/fs/signalfd.c |
3465 | @@ -205,8 +205,8 @@ static const struct file_operations signalfd_fops = { |
3466 | .read = signalfd_read, |
3467 | }; |
3468 | |
3469 | -asmlinkage long sys_signalfd4(int ufd, sigset_t __user *user_mask, |
3470 | - size_t sizemask, int flags) |
3471 | +SYSCALL_DEFINE4(signalfd4, int, ufd, sigset_t __user *, user_mask, |
3472 | + size_t, sizemask, int, flags) |
3473 | { |
3474 | sigset_t sigmask; |
3475 | struct signalfd_ctx *ctx; |
3476 | @@ -259,8 +259,8 @@ asmlinkage long sys_signalfd4(int ufd, sigset_t __user *user_mask, |
3477 | return ufd; |
3478 | } |
3479 | |
3480 | -asmlinkage long sys_signalfd(int ufd, sigset_t __user *user_mask, |
3481 | - size_t sizemask) |
3482 | +SYSCALL_DEFINE3(signalfd, int, ufd, sigset_t __user *, user_mask, |
3483 | + size_t, sizemask) |
3484 | { |
3485 | return sys_signalfd4(ufd, user_mask, sizemask, 0); |
3486 | } |
3487 | diff --git a/fs/smbfs/file.c b/fs/smbfs/file.c |
3488 | index e4f8d51..92d5e8f 100644 |
3489 | --- a/fs/smbfs/file.c |
3490 | +++ b/fs/smbfs/file.c |
3491 | @@ -297,7 +297,7 @@ static int smb_write_begin(struct file *file, struct address_space *mapping, |
3492 | struct page **pagep, void **fsdata) |
3493 | { |
3494 | pgoff_t index = pos >> PAGE_CACHE_SHIFT; |
3495 | - *pagep = __grab_cache_page(mapping, index); |
3496 | + *pagep = grab_cache_page_write_begin(mapping, index, flags); |
3497 | if (!*pagep) |
3498 | return -ENOMEM; |
3499 | return 0; |
3500 | diff --git a/fs/splice.c b/fs/splice.c |
3501 | index a1e701c..6d310c7 100644 |
3502 | --- a/fs/splice.c |
3503 | +++ b/fs/splice.c |
3504 | @@ -1434,8 +1434,8 @@ static long vmsplice_to_pipe(struct file *file, const struct iovec __user *iov, |
3505 | * Currently we punt and implement it as a normal copy, see pipe_to_user(). |
3506 | * |
3507 | */ |
3508 | -asmlinkage long sys_vmsplice(int fd, const struct iovec __user *iov, |
3509 | - unsigned long nr_segs, unsigned int flags) |
3510 | +SYSCALL_DEFINE4(vmsplice, int, fd, const struct iovec __user *, iov, |
3511 | + unsigned long, nr_segs, unsigned int, flags) |
3512 | { |
3513 | struct file *file; |
3514 | long error; |
3515 | @@ -1460,9 +1460,9 @@ asmlinkage long sys_vmsplice(int fd, const struct iovec __user *iov, |
3516 | return error; |
3517 | } |
3518 | |
3519 | -asmlinkage long sys_splice(int fd_in, loff_t __user *off_in, |
3520 | - int fd_out, loff_t __user *off_out, |
3521 | - size_t len, unsigned int flags) |
3522 | +SYSCALL_DEFINE6(splice, int, fd_in, loff_t __user *, off_in, |
3523 | + int, fd_out, loff_t __user *, off_out, |
3524 | + size_t, len, unsigned int, flags) |
3525 | { |
3526 | long error; |
3527 | struct file *in, *out; |
3528 | @@ -1684,7 +1684,7 @@ static long do_tee(struct file *in, struct file *out, size_t len, |
3529 | return ret; |
3530 | } |
3531 | |
3532 | -asmlinkage long sys_tee(int fdin, int fdout, size_t len, unsigned int flags) |
3533 | +SYSCALL_DEFINE4(tee, int, fdin, int, fdout, size_t, len, unsigned int, flags) |
3534 | { |
3535 | struct file *in; |
3536 | int error, fput_in; |
3537 | diff --git a/fs/stat.c b/fs/stat.c |
3538 | index 7c46fbe..4bd85da 100644 |
3539 | --- a/fs/stat.c |
3540 | +++ b/fs/stat.c |
3541 | @@ -152,7 +152,7 @@ static int cp_old_stat(struct kstat *stat, struct __old_kernel_stat __user * sta |
3542 | return copy_to_user(statbuf,&tmp,sizeof(tmp)) ? -EFAULT : 0; |
3543 | } |
3544 | |
3545 | -asmlinkage long sys_stat(char __user * filename, struct __old_kernel_stat __user * statbuf) |
3546 | +SYSCALL_DEFINE2(stat, char __user *, filename, struct __old_kernel_stat __user *, statbuf) |
3547 | { |
3548 | struct kstat stat; |
3549 | int error = vfs_stat_fd(AT_FDCWD, filename, &stat); |
3550 | @@ -162,7 +162,8 @@ asmlinkage long sys_stat(char __user * filename, struct __old_kernel_stat __user |
3551 | |
3552 | return error; |
3553 | } |
3554 | -asmlinkage long sys_lstat(char __user * filename, struct __old_kernel_stat __user * statbuf) |
3555 | + |
3556 | +SYSCALL_DEFINE2(lstat, char __user *, filename, struct __old_kernel_stat __user *, statbuf) |
3557 | { |
3558 | struct kstat stat; |
3559 | int error = vfs_lstat_fd(AT_FDCWD, filename, &stat); |
3560 | @@ -172,7 +173,8 @@ asmlinkage long sys_lstat(char __user * filename, struct __old_kernel_stat __use |
3561 | |
3562 | return error; |
3563 | } |
3564 | -asmlinkage long sys_fstat(unsigned int fd, struct __old_kernel_stat __user * statbuf) |
3565 | + |
3566 | +SYSCALL_DEFINE2(fstat, unsigned int, fd, struct __old_kernel_stat __user *, statbuf) |
3567 | { |
3568 | struct kstat stat; |
3569 | int error = vfs_fstat(fd, &stat); |
3570 | @@ -235,7 +237,7 @@ static int cp_new_stat(struct kstat *stat, struct stat __user *statbuf) |
3571 | return copy_to_user(statbuf,&tmp,sizeof(tmp)) ? -EFAULT : 0; |
3572 | } |
3573 | |
3574 | -asmlinkage long sys_newstat(char __user *filename, struct stat __user *statbuf) |
3575 | +SYSCALL_DEFINE2(newstat, char __user *, filename, struct stat __user *, statbuf) |
3576 | { |
3577 | struct kstat stat; |
3578 | int error = vfs_stat_fd(AT_FDCWD, filename, &stat); |
3579 | @@ -246,7 +248,7 @@ asmlinkage long sys_newstat(char __user *filename, struct stat __user *statbuf) |
3580 | return error; |
3581 | } |
3582 | |
3583 | -asmlinkage long sys_newlstat(char __user *filename, struct stat __user *statbuf) |
3584 | +SYSCALL_DEFINE2(newlstat, char __user *, filename, struct stat __user *, statbuf) |
3585 | { |
3586 | struct kstat stat; |
3587 | int error = vfs_lstat_fd(AT_FDCWD, filename, &stat); |
3588 | @@ -258,8 +260,8 @@ asmlinkage long sys_newlstat(char __user *filename, struct stat __user *statbuf) |
3589 | } |
3590 | |
3591 | #if !defined(__ARCH_WANT_STAT64) || defined(__ARCH_WANT_SYS_NEWFSTATAT) |
3592 | -asmlinkage long sys_newfstatat(int dfd, char __user *filename, |
3593 | - struct stat __user *statbuf, int flag) |
3594 | +SYSCALL_DEFINE4(newfstatat, int, dfd, char __user *, filename, |
3595 | + struct stat __user *, statbuf, int, flag) |
3596 | { |
3597 | struct kstat stat; |
3598 | int error = -EINVAL; |
3599 | @@ -280,7 +282,7 @@ out: |
3600 | } |
3601 | #endif |
3602 | |
3603 | -asmlinkage long sys_newfstat(unsigned int fd, struct stat __user *statbuf) |
3604 | +SYSCALL_DEFINE2(newfstat, unsigned int, fd, struct stat __user *, statbuf) |
3605 | { |
3606 | struct kstat stat; |
3607 | int error = vfs_fstat(fd, &stat); |
3608 | @@ -291,8 +293,8 @@ asmlinkage long sys_newfstat(unsigned int fd, struct stat __user *statbuf) |
3609 | return error; |
3610 | } |
3611 | |
3612 | -asmlinkage long sys_readlinkat(int dfd, const char __user *pathname, |
3613 | - char __user *buf, int bufsiz) |
3614 | +SYSCALL_DEFINE4(readlinkat, int, dfd, const char __user *, pathname, |
3615 | + char __user *, buf, int, bufsiz) |
3616 | { |
3617 | struct path path; |
3618 | int error; |
3619 | @@ -318,8 +320,8 @@ asmlinkage long sys_readlinkat(int dfd, const char __user *pathname, |
3620 | return error; |
3621 | } |
3622 | |
3623 | -asmlinkage long sys_readlink(const char __user *path, char __user *buf, |
3624 | - int bufsiz) |
3625 | +SYSCALL_DEFINE3(readlink, const char __user *, path, char __user *, buf, |
3626 | + int, bufsiz) |
3627 | { |
3628 | return sys_readlinkat(AT_FDCWD, path, buf, bufsiz); |
3629 | } |
3630 | @@ -365,7 +367,7 @@ static long cp_new_stat64(struct kstat *stat, struct stat64 __user *statbuf) |
3631 | return copy_to_user(statbuf,&tmp,sizeof(tmp)) ? -EFAULT : 0; |
3632 | } |
3633 | |
3634 | -asmlinkage long sys_stat64(char __user * filename, struct stat64 __user * statbuf) |
3635 | +SYSCALL_DEFINE2(stat64, char __user *, filename, struct stat64 __user *, statbuf) |
3636 | { |
3637 | struct kstat stat; |
3638 | int error = vfs_stat(filename, &stat); |
3639 | @@ -375,7 +377,8 @@ asmlinkage long sys_stat64(char __user * filename, struct stat64 __user * statbu |
3640 | |
3641 | return error; |
3642 | } |
3643 | -asmlinkage long sys_lstat64(char __user * filename, struct stat64 __user * statbuf) |
3644 | + |
3645 | +SYSCALL_DEFINE2(lstat64, char __user *, filename, struct stat64 __user *, statbuf) |
3646 | { |
3647 | struct kstat stat; |
3648 | int error = vfs_lstat(filename, &stat); |
3649 | @@ -385,7 +388,8 @@ asmlinkage long sys_lstat64(char __user * filename, struct stat64 __user * statb |
3650 | |
3651 | return error; |
3652 | } |
3653 | -asmlinkage long sys_fstat64(unsigned long fd, struct stat64 __user * statbuf) |
3654 | + |
3655 | +SYSCALL_DEFINE2(fstat64, unsigned long, fd, struct stat64 __user *, statbuf) |
3656 | { |
3657 | struct kstat stat; |
3658 | int error = vfs_fstat(fd, &stat); |
3659 | @@ -396,8 +400,8 @@ asmlinkage long sys_fstat64(unsigned long fd, struct stat64 __user * statbuf) |
3660 | return error; |
3661 | } |
3662 | |
3663 | -asmlinkage long sys_fstatat64(int dfd, char __user *filename, |
3664 | - struct stat64 __user *statbuf, int flag) |
3665 | +SYSCALL_DEFINE4(fstatat64, int, dfd, char __user *, filename, |
3666 | + struct stat64 __user *, statbuf, int, flag) |
3667 | { |
3668 | struct kstat stat; |
3669 | int error = -EINVAL; |
3670 | diff --git a/fs/super.c b/fs/super.c |
3671 | index e931ae9..909fcb4 100644 |
3672 | --- a/fs/super.c |
3673 | +++ b/fs/super.c |
3674 | @@ -534,7 +534,7 @@ rescan: |
3675 | return NULL; |
3676 | } |
3677 | |
3678 | -asmlinkage long sys_ustat(unsigned dev, struct ustat __user * ubuf) |
3679 | +SYSCALL_DEFINE2(ustat, unsigned, dev, struct ustat __user *, ubuf) |
3680 | { |
3681 | struct super_block *s; |
3682 | struct ustat tmp; |
3683 | diff --git a/fs/sync.c b/fs/sync.c |
3684 | index 2967562..6cc8cb4 100644 |
3685 | --- a/fs/sync.c |
3686 | +++ b/fs/sync.c |
3687 | @@ -36,7 +36,7 @@ static void do_sync(unsigned long wait) |
3688 | laptop_sync_completion(); |
3689 | } |
3690 | |
3691 | -asmlinkage long sys_sync(void) |
3692 | +SYSCALL_DEFINE0(sync) |
3693 | { |
3694 | do_sync(1); |
3695 | return 0; |
3696 | @@ -118,12 +118,12 @@ static long __do_fsync(unsigned int fd, int datasync) |
3697 | return ret; |
3698 | } |
3699 | |
3700 | -asmlinkage long sys_fsync(unsigned int fd) |
3701 | +SYSCALL_DEFINE1(fsync, unsigned int, fd) |
3702 | { |
3703 | return __do_fsync(fd, 0); |
3704 | } |
3705 | |
3706 | -asmlinkage long sys_fdatasync(unsigned int fd) |
3707 | +SYSCALL_DEFINE1(fdatasync, unsigned int, fd) |
3708 | { |
3709 | return __do_fsync(fd, 1); |
3710 | } |
3711 | @@ -175,8 +175,8 @@ asmlinkage long sys_fdatasync(unsigned int fd) |
3712 | * already-instantiated disk blocks, there are no guarantees here that the data |
3713 | * will be available after a crash. |
3714 | */ |
3715 | -asmlinkage long sys_sync_file_range(int fd, loff_t offset, loff_t nbytes, |
3716 | - unsigned int flags) |
3717 | +SYSCALL_DEFINE(sync_file_range)(int fd, loff_t offset, loff_t nbytes, |
3718 | + unsigned int flags) |
3719 | { |
3720 | int ret; |
3721 | struct file *file; |
3722 | @@ -236,14 +236,32 @@ out_put: |
3723 | out: |
3724 | return ret; |
3725 | } |
3726 | +#ifdef CONFIG_HAVE_SYSCALL_WRAPPERS |
3727 | +asmlinkage long SyS_sync_file_range(long fd, loff_t offset, loff_t nbytes, |
3728 | + long flags) |
3729 | +{ |
3730 | + return SYSC_sync_file_range((int) fd, offset, nbytes, |
3731 | + (unsigned int) flags); |
3732 | +} |
3733 | +SYSCALL_ALIAS(sys_sync_file_range, SyS_sync_file_range); |
3734 | +#endif |
3735 | |
3736 | /* It would be nice if people remember that not all the world's an i386 |
3737 | when they introduce new system calls */ |
3738 | -asmlinkage long sys_sync_file_range2(int fd, unsigned int flags, |
3739 | - loff_t offset, loff_t nbytes) |
3740 | +SYSCALL_DEFINE(sync_file_range2)(int fd, unsigned int flags, |
3741 | + loff_t offset, loff_t nbytes) |
3742 | { |
3743 | return sys_sync_file_range(fd, offset, nbytes, flags); |
3744 | } |
3745 | +#ifdef CONFIG_HAVE_SYSCALL_WRAPPERS |
3746 | +asmlinkage long SyS_sync_file_range2(long fd, long flags, |
3747 | + loff_t offset, loff_t nbytes) |
3748 | +{ |
3749 | + return SYSC_sync_file_range2((int) fd, (unsigned int) flags, |
3750 | + offset, nbytes); |
3751 | +} |
3752 | +SYSCALL_ALIAS(sys_sync_file_range2, SyS_sync_file_range2); |
3753 | +#endif |
3754 | |
3755 | /* |
3756 | * `endbyte' is inclusive |
3757 | diff --git a/fs/timerfd.c b/fs/timerfd.c |
3758 | index c502c60..ee211df 100644 |
3759 | --- a/fs/timerfd.c |
3760 | +++ b/fs/timerfd.c |
3761 | @@ -179,7 +179,7 @@ static struct file *timerfd_fget(int fd) |
3762 | return file; |
3763 | } |
3764 | |
3765 | -asmlinkage long sys_timerfd_create(int clockid, int flags) |
3766 | +SYSCALL_DEFINE2(timerfd_create, int, clockid, int, flags) |
3767 | { |
3768 | int ufd; |
3769 | struct timerfd_ctx *ctx; |
3770 | @@ -210,9 +210,9 @@ asmlinkage long sys_timerfd_create(int clockid, int flags) |
3771 | return ufd; |
3772 | } |
3773 | |
3774 | -asmlinkage long sys_timerfd_settime(int ufd, int flags, |
3775 | - const struct itimerspec __user *utmr, |
3776 | - struct itimerspec __user *otmr) |
3777 | +SYSCALL_DEFINE4(timerfd_settime, int, ufd, int, flags, |
3778 | + const struct itimerspec __user *, utmr, |
3779 | + struct itimerspec __user *, otmr) |
3780 | { |
3781 | struct file *file; |
3782 | struct timerfd_ctx *ctx; |
3783 | @@ -267,7 +267,7 @@ asmlinkage long sys_timerfd_settime(int ufd, int flags, |
3784 | return 0; |
3785 | } |
3786 | |
3787 | -asmlinkage long sys_timerfd_gettime(int ufd, struct itimerspec __user *otmr) |
3788 | +SYSCALL_DEFINE2(timerfd_gettime, int, ufd, struct itimerspec __user *, otmr) |
3789 | { |
3790 | struct file *file; |
3791 | struct timerfd_ctx *ctx; |
3792 | diff --git a/fs/ubifs/file.c b/fs/ubifs/file.c |
3793 | index 3d698e2..40033dc 100644 |
3794 | --- a/fs/ubifs/file.c |
3795 | +++ b/fs/ubifs/file.c |
3796 | @@ -213,7 +213,8 @@ static void release_existing_page_budget(struct ubifs_info *c) |
3797 | } |
3798 | |
3799 | static int write_begin_slow(struct address_space *mapping, |
3800 | - loff_t pos, unsigned len, struct page **pagep) |
3801 | + loff_t pos, unsigned len, struct page **pagep, |
3802 | + unsigned flags) |
3803 | { |
3804 | struct inode *inode = mapping->host; |
3805 | struct ubifs_info *c = inode->i_sb->s_fs_info; |
3806 | @@ -241,7 +242,7 @@ static int write_begin_slow(struct address_space *mapping, |
3807 | if (unlikely(err)) |
3808 | return err; |
3809 | |
3810 | - page = __grab_cache_page(mapping, index); |
3811 | + page = grab_cache_page_write_begin(mapping, index, flags); |
3812 | if (unlikely(!page)) { |
3813 | ubifs_release_budget(c, &req); |
3814 | return -ENOMEM; |
3815 | @@ -432,7 +433,7 @@ static int ubifs_write_begin(struct file *file, struct address_space *mapping, |
3816 | return -EROFS; |
3817 | |
3818 | /* Try out the fast-path part first */ |
3819 | - page = __grab_cache_page(mapping, index); |
3820 | + page = grab_cache_page_write_begin(mapping, index, flags); |
3821 | if (unlikely(!page)) |
3822 | return -ENOMEM; |
3823 | |
3824 | @@ -477,7 +478,7 @@ static int ubifs_write_begin(struct file *file, struct address_space *mapping, |
3825 | unlock_page(page); |
3826 | page_cache_release(page); |
3827 | |
3828 | - return write_begin_slow(mapping, pos, len, pagep); |
3829 | + return write_begin_slow(mapping, pos, len, pagep, flags); |
3830 | } |
3831 | |
3832 | /* |
3833 | diff --git a/fs/utimes.c b/fs/utimes.c |
3834 | index 6929e3e..e4c75db 100644 |
3835 | --- a/fs/utimes.c |
3836 | +++ b/fs/utimes.c |
3837 | @@ -24,7 +24,7 @@ |
3838 | * must be owner or have write permission. |
3839 | * Else, update from *times, must be owner or super user. |
3840 | */ |
3841 | -asmlinkage long sys_utime(char __user *filename, struct utimbuf __user *times) |
3842 | +SYSCALL_DEFINE2(utime, char __user *, filename, struct utimbuf __user *, times) |
3843 | { |
3844 | struct timespec tv[2]; |
3845 | |
3846 | @@ -170,7 +170,8 @@ out: |
3847 | return error; |
3848 | } |
3849 | |
3850 | -asmlinkage long sys_utimensat(int dfd, char __user *filename, struct timespec __user *utimes, int flags) |
3851 | +SYSCALL_DEFINE4(utimensat, int, dfd, char __user *, filename, |
3852 | + struct timespec __user *, utimes, int, flags) |
3853 | { |
3854 | struct timespec tstimes[2]; |
3855 | |
3856 | @@ -187,7 +188,8 @@ asmlinkage long sys_utimensat(int dfd, char __user *filename, struct timespec __ |
3857 | return do_utimes(dfd, filename, utimes ? tstimes : NULL, flags); |
3858 | } |
3859 | |
3860 | -asmlinkage long sys_futimesat(int dfd, char __user *filename, struct timeval __user *utimes) |
3861 | +SYSCALL_DEFINE3(futimesat, int, dfd, char __user *, filename, |
3862 | + struct timeval __user *, utimes) |
3863 | { |
3864 | struct timeval times[2]; |
3865 | struct timespec tstimes[2]; |
3866 | @@ -214,7 +216,8 @@ asmlinkage long sys_futimesat(int dfd, char __user *filename, struct timeval __u |
3867 | return do_utimes(dfd, filename, utimes ? tstimes : NULL, 0); |
3868 | } |
3869 | |
3870 | -asmlinkage long sys_utimes(char __user *filename, struct timeval __user *utimes) |
3871 | +SYSCALL_DEFINE2(utimes, char __user *, filename, |
3872 | + struct timeval __user *, utimes) |
3873 | { |
3874 | return sys_futimesat(AT_FDCWD, filename, utimes); |
3875 | } |
3876 | diff --git a/fs/xattr.c b/fs/xattr.c |
3877 | index 468377e..086db06 100644 |
3878 | --- a/fs/xattr.c |
3879 | +++ b/fs/xattr.c |
3880 | @@ -251,9 +251,9 @@ setxattr(struct dentry *d, const char __user *name, const void __user *value, |
3881 | return error; |
3882 | } |
3883 | |
3884 | -asmlinkage long |
3885 | -sys_setxattr(const char __user *pathname, const char __user *name, |
3886 | - const void __user *value, size_t size, int flags) |
3887 | +SYSCALL_DEFINE5(setxattr, const char __user *, pathname, |
3888 | + const char __user *, name, const void __user *, value, |
3889 | + size_t, size, int, flags) |
3890 | { |
3891 | struct path path; |
3892 | int error; |
3893 | @@ -270,9 +270,9 @@ sys_setxattr(const char __user *pathname, const char __user *name, |
3894 | return error; |
3895 | } |
3896 | |
3897 | -asmlinkage long |
3898 | -sys_lsetxattr(const char __user *pathname, const char __user *name, |
3899 | - const void __user *value, size_t size, int flags) |
3900 | +SYSCALL_DEFINE5(lsetxattr, const char __user *, pathname, |
3901 | + const char __user *, name, const void __user *, value, |
3902 | + size_t, size, int, flags) |
3903 | { |
3904 | struct path path; |
3905 | int error; |
3906 | @@ -289,9 +289,8 @@ sys_lsetxattr(const char __user *pathname, const char __user *name, |
3907 | return error; |
3908 | } |
3909 | |
3910 | -asmlinkage long |
3911 | -sys_fsetxattr(int fd, const char __user *name, const void __user *value, |
3912 | - size_t size, int flags) |
3913 | +SYSCALL_DEFINE5(fsetxattr, int, fd, const char __user *, name, |
3914 | + const void __user *,value, size_t, size, int, flags) |
3915 | { |
3916 | struct file *f; |
3917 | struct dentry *dentry; |
3918 | @@ -349,9 +348,8 @@ getxattr(struct dentry *d, const char __user *name, void __user *value, |
3919 | return error; |
3920 | } |
3921 | |
3922 | -asmlinkage ssize_t |
3923 | -sys_getxattr(const char __user *pathname, const char __user *name, |
3924 | - void __user *value, size_t size) |
3925 | +SYSCALL_DEFINE4(getxattr, const char __user *, pathname, |
3926 | + const char __user *, name, void __user *, value, size_t, size) |
3927 | { |
3928 | struct path path; |
3929 | ssize_t error; |
3930 | @@ -364,9 +362,8 @@ sys_getxattr(const char __user *pathname, const char __user *name, |
3931 | return error; |
3932 | } |
3933 | |
3934 | -asmlinkage ssize_t |
3935 | -sys_lgetxattr(const char __user *pathname, const char __user *name, void __user *value, |
3936 | - size_t size) |
3937 | +SYSCALL_DEFINE4(lgetxattr, const char __user *, pathname, |
3938 | + const char __user *, name, void __user *, value, size_t, size) |
3939 | { |
3940 | struct path path; |
3941 | ssize_t error; |
3942 | @@ -379,8 +376,8 @@ sys_lgetxattr(const char __user *pathname, const char __user *name, void __user |
3943 | return error; |
3944 | } |
3945 | |
3946 | -asmlinkage ssize_t |
3947 | -sys_fgetxattr(int fd, const char __user *name, void __user *value, size_t size) |
3948 | +SYSCALL_DEFINE4(fgetxattr, int, fd, const char __user *, name, |
3949 | + void __user *, value, size_t, size) |
3950 | { |
3951 | struct file *f; |
3952 | ssize_t error = -EBADF; |
3953 | @@ -424,8 +421,8 @@ listxattr(struct dentry *d, char __user *list, size_t size) |
3954 | return error; |
3955 | } |
3956 | |
3957 | -asmlinkage ssize_t |
3958 | -sys_listxattr(const char __user *pathname, char __user *list, size_t size) |
3959 | +SYSCALL_DEFINE3(listxattr, const char __user *, pathname, char __user *, list, |
3960 | + size_t, size) |
3961 | { |
3962 | struct path path; |
3963 | ssize_t error; |
3964 | @@ -438,8 +435,8 @@ sys_listxattr(const char __user *pathname, char __user *list, size_t size) |
3965 | return error; |
3966 | } |
3967 | |
3968 | -asmlinkage ssize_t |
3969 | -sys_llistxattr(const char __user *pathname, char __user *list, size_t size) |
3970 | +SYSCALL_DEFINE3(llistxattr, const char __user *, pathname, char __user *, list, |
3971 | + size_t, size) |
3972 | { |
3973 | struct path path; |
3974 | ssize_t error; |
3975 | @@ -452,8 +449,7 @@ sys_llistxattr(const char __user *pathname, char __user *list, size_t size) |
3976 | return error; |
3977 | } |
3978 | |
3979 | -asmlinkage ssize_t |
3980 | -sys_flistxattr(int fd, char __user *list, size_t size) |
3981 | +SYSCALL_DEFINE3(flistxattr, int, fd, char __user *, list, size_t, size) |
3982 | { |
3983 | struct file *f; |
3984 | ssize_t error = -EBADF; |
3985 | @@ -485,8 +481,8 @@ removexattr(struct dentry *d, const char __user *name) |
3986 | return vfs_removexattr(d, kname); |
3987 | } |
3988 | |
3989 | -asmlinkage long |
3990 | -sys_removexattr(const char __user *pathname, const char __user *name) |
3991 | +SYSCALL_DEFINE2(removexattr, const char __user *, pathname, |
3992 | + const char __user *, name) |
3993 | { |
3994 | struct path path; |
3995 | int error; |
3996 | @@ -503,8 +499,8 @@ sys_removexattr(const char __user *pathname, const char __user *name) |
3997 | return error; |
3998 | } |
3999 | |
4000 | -asmlinkage long |
4001 | -sys_lremovexattr(const char __user *pathname, const char __user *name) |
4002 | +SYSCALL_DEFINE2(lremovexattr, const char __user *, pathname, |
4003 | + const char __user *, name) |
4004 | { |
4005 | struct path path; |
4006 | int error; |
4007 | @@ -521,8 +517,7 @@ sys_lremovexattr(const char __user *pathname, const char __user *name) |
4008 | return error; |
4009 | } |
4010 | |
4011 | -asmlinkage long |
4012 | -sys_fremovexattr(int fd, const char __user *name) |
4013 | +SYSCALL_DEFINE2(fremovexattr, int, fd, const char __user *, name) |
4014 | { |
4015 | struct file *f; |
4016 | struct dentry *dentry; |
4017 | diff --git a/include/linux/compat.h b/include/linux/compat.h |
4018 | index cf8d11c..275b9bd 100644 |
4019 | --- a/include/linux/compat.h |
4020 | +++ b/include/linux/compat.h |
4021 | @@ -278,5 +278,18 @@ asmlinkage long compat_sys_timerfd_settime(int ufd, int flags, |
4022 | asmlinkage long compat_sys_timerfd_gettime(int ufd, |
4023 | struct compat_itimerspec __user *otmr); |
4024 | |
4025 | +asmlinkage long compat_sys_move_pages(pid_t pid, unsigned long nr_page, |
4026 | + __u32 __user *pages, |
4027 | + const int __user *nodes, |
4028 | + int __user *status, |
4029 | + int flags); |
4030 | +asmlinkage long compat_sys_futimesat(unsigned int dfd, char __user *filename, |
4031 | + struct compat_timeval __user *t); |
4032 | +asmlinkage long compat_sys_newfstatat(unsigned int dfd, char __user * filename, |
4033 | + struct compat_stat __user *statbuf, |
4034 | + int flag); |
4035 | +asmlinkage long compat_sys_openat(unsigned int dfd, const char __user *filename, |
4036 | + int flags, int mode); |
4037 | + |
4038 | #endif /* CONFIG_COMPAT */ |
4039 | #endif /* _LINUX_COMPAT_H */ |
4040 | diff --git a/include/linux/fs.h b/include/linux/fs.h |
4041 | index 580b513..d621217 100644 |
4042 | --- a/include/linux/fs.h |
4043 | +++ b/include/linux/fs.h |
4044 | @@ -403,6 +403,9 @@ enum positive_aop_returns { |
4045 | |
4046 | #define AOP_FLAG_UNINTERRUPTIBLE 0x0001 /* will not do a short write */ |
4047 | #define AOP_FLAG_CONT_EXPAND 0x0002 /* called from cont_expand */ |
4048 | +#define AOP_FLAG_NOFS 0x0004 /* used by filesystem to direct |
4049 | + * helper code (eg buffer layer) |
4050 | + * to clear GFP_FS from alloc */ |
4051 | |
4052 | /* |
4053 | * oh the beauties of C type declarations. |
4054 | @@ -1959,7 +1962,7 @@ extern int page_readlink(struct dentry *, char __user *, int); |
4055 | extern void *page_follow_link_light(struct dentry *, struct nameidata *); |
4056 | extern void page_put_link(struct dentry *, struct nameidata *, void *); |
4057 | extern int __page_symlink(struct inode *inode, const char *symname, int len, |
4058 | - gfp_t gfp_mask); |
4059 | + int nofs); |
4060 | extern int page_symlink(struct inode *inode, const char *symname, int len); |
4061 | extern const struct inode_operations page_symlink_inode_operations; |
4062 | extern int generic_readlink(struct dentry *, char __user *, int); |
4063 | diff --git a/include/linux/mm.h b/include/linux/mm.h |
4064 | index 72a15dc..856d52a 100644 |
4065 | --- a/include/linux/mm.h |
4066 | +++ b/include/linux/mm.h |
4067 | @@ -253,7 +253,6 @@ static inline int put_page_testzero(struct page *page) |
4068 | */ |
4069 | static inline int get_page_unless_zero(struct page *page) |
4070 | { |
4071 | - VM_BUG_ON(PageTail(page)); |
4072 | return atomic_inc_not_zero(&page->_count); |
4073 | } |
4074 | |
4075 | diff --git a/include/linux/pagemap.h b/include/linux/pagemap.h |
4076 | index 5da31c1..62efceb 100644 |
4077 | --- a/include/linux/pagemap.h |
4078 | +++ b/include/linux/pagemap.h |
4079 | @@ -213,7 +213,8 @@ unsigned find_get_pages_contig(struct address_space *mapping, pgoff_t start, |
4080 | unsigned find_get_pages_tag(struct address_space *mapping, pgoff_t *index, |
4081 | int tag, unsigned int nr_pages, struct page **pages); |
4082 | |
4083 | -struct page *__grab_cache_page(struct address_space *mapping, pgoff_t index); |
4084 | +struct page *grab_cache_page_write_begin(struct address_space *mapping, |
4085 | + pgoff_t index, unsigned flags); |
4086 | |
4087 | /* |
4088 | * Returns locked page at given index in given cache, creating it if needed. |
4089 | diff --git a/include/linux/radix-tree.h b/include/linux/radix-tree.h |
4090 | index a916c66..355f6e8 100644 |
4091 | --- a/include/linux/radix-tree.h |
4092 | +++ b/include/linux/radix-tree.h |
4093 | @@ -136,7 +136,7 @@ do { \ |
4094 | */ |
4095 | static inline void *radix_tree_deref_slot(void **pslot) |
4096 | { |
4097 | - void *ret = *pslot; |
4098 | + void *ret = rcu_dereference(*pslot); |
4099 | if (unlikely(radix_tree_is_indirect_ptr(ret))) |
4100 | ret = RADIX_TREE_RETRY; |
4101 | return ret; |
4102 | diff --git a/include/linux/syscalls.h b/include/linux/syscalls.h |
4103 | index d6ff145..f54aa38 100644 |
4104 | --- a/include/linux/syscalls.h |
4105 | +++ b/include/linux/syscalls.h |
4106 | @@ -54,6 +54,7 @@ struct compat_stat; |
4107 | struct compat_timeval; |
4108 | struct robust_list_head; |
4109 | struct getcpu_cache; |
4110 | +struct old_linux_dirent; |
4111 | |
4112 | #include <linux/types.h> |
4113 | #include <linux/aio_abi.h> |
4114 | @@ -65,6 +66,74 @@ struct getcpu_cache; |
4115 | #include <linux/quota.h> |
4116 | #include <linux/key.h> |
4117 | |
4118 | +#define __SC_DECL1(t1, a1) t1 a1 |
4119 | +#define __SC_DECL2(t2, a2, ...) t2 a2, __SC_DECL1(__VA_ARGS__) |
4120 | +#define __SC_DECL3(t3, a3, ...) t3 a3, __SC_DECL2(__VA_ARGS__) |
4121 | +#define __SC_DECL4(t4, a4, ...) t4 a4, __SC_DECL3(__VA_ARGS__) |
4122 | +#define __SC_DECL5(t5, a5, ...) t5 a5, __SC_DECL4(__VA_ARGS__) |
4123 | +#define __SC_DECL6(t6, a6, ...) t6 a6, __SC_DECL5(__VA_ARGS__) |
4124 | + |
4125 | +#define __SC_LONG1(t1, a1) long a1 |
4126 | +#define __SC_LONG2(t2, a2, ...) long a2, __SC_LONG1(__VA_ARGS__) |
4127 | +#define __SC_LONG3(t3, a3, ...) long a3, __SC_LONG2(__VA_ARGS__) |
4128 | +#define __SC_LONG4(t4, a4, ...) long a4, __SC_LONG3(__VA_ARGS__) |
4129 | +#define __SC_LONG5(t5, a5, ...) long a5, __SC_LONG4(__VA_ARGS__) |
4130 | +#define __SC_LONG6(t6, a6, ...) long a6, __SC_LONG5(__VA_ARGS__) |
4131 | + |
4132 | +#define __SC_CAST1(t1, a1) (t1) a1 |
4133 | +#define __SC_CAST2(t2, a2, ...) (t2) a2, __SC_CAST1(__VA_ARGS__) |
4134 | +#define __SC_CAST3(t3, a3, ...) (t3) a3, __SC_CAST2(__VA_ARGS__) |
4135 | +#define __SC_CAST4(t4, a4, ...) (t4) a4, __SC_CAST3(__VA_ARGS__) |
4136 | +#define __SC_CAST5(t5, a5, ...) (t5) a5, __SC_CAST4(__VA_ARGS__) |
4137 | +#define __SC_CAST6(t6, a6, ...) (t6) a6, __SC_CAST5(__VA_ARGS__) |
4138 | + |
4139 | +#define __SC_TEST(type) BUILD_BUG_ON(sizeof(type) > sizeof(long)) |
4140 | +#define __SC_TEST1(t1, a1) __SC_TEST(t1) |
4141 | +#define __SC_TEST2(t2, a2, ...) __SC_TEST(t2); __SC_TEST1(__VA_ARGS__) |
4142 | +#define __SC_TEST3(t3, a3, ...) __SC_TEST(t3); __SC_TEST2(__VA_ARGS__) |
4143 | +#define __SC_TEST4(t4, a4, ...) __SC_TEST(t4); __SC_TEST3(__VA_ARGS__) |
4144 | +#define __SC_TEST5(t5, a5, ...) __SC_TEST(t5); __SC_TEST4(__VA_ARGS__) |
4145 | +#define __SC_TEST6(t6, a6, ...) __SC_TEST(t6); __SC_TEST5(__VA_ARGS__) |
4146 | + |
4147 | +#define SYSCALL_DEFINE0(name) asmlinkage long sys_##name(void) |
4148 | +#define SYSCALL_DEFINE1(...) SYSCALL_DEFINEx(1, __VA_ARGS__) |
4149 | +#define SYSCALL_DEFINE2(...) SYSCALL_DEFINEx(2, __VA_ARGS__) |
4150 | +#define SYSCALL_DEFINE3(...) SYSCALL_DEFINEx(3, __VA_ARGS__) |
4151 | +#define SYSCALL_DEFINE4(...) SYSCALL_DEFINEx(4, __VA_ARGS__) |
4152 | +#define SYSCALL_DEFINE5(...) SYSCALL_DEFINEx(5, __VA_ARGS__) |
4153 | +#define SYSCALL_DEFINE6(...) SYSCALL_DEFINEx(6, __VA_ARGS__) |
4154 | + |
4155 | +#ifdef CONFIG_PPC64 |
4156 | +#define SYSCALL_ALIAS(alias, name) \ |
4157 | + asm ("\t.globl " #alias "\n\t.set " #alias ", " #name "\n" \ |
4158 | + "\t.globl ." #alias "\n\t.set ." #alias ", ." #name) |
4159 | +#else |
4160 | +#define SYSCALL_ALIAS(alias, name) \ |
4161 | + asm ("\t.globl " #alias "\n\t.set " #alias ", " #name) |
4162 | +#endif |
4163 | + |
4164 | +#ifdef CONFIG_HAVE_SYSCALL_WRAPPERS |
4165 | + |
4166 | +#define SYSCALL_DEFINE(name) static inline long SYSC_##name |
4167 | +#define SYSCALL_DEFINEx(x, name, ...) \ |
4168 | + asmlinkage long sys_##name(__SC_DECL##x(__VA_ARGS__)); \ |
4169 | + static inline long SYSC_##name(__SC_DECL##x(__VA_ARGS__)); \ |
4170 | + asmlinkage long SyS_##name(__SC_LONG##x(__VA_ARGS__)) \ |
4171 | + { \ |
4172 | + __SC_TEST##x(__VA_ARGS__); \ |
4173 | + return (long) SYSC_##name(__SC_CAST##x(__VA_ARGS__)); \ |
4174 | + } \ |
4175 | + SYSCALL_ALIAS(sys_##name, SyS_##name); \ |
4176 | + static inline long SYSC_##name(__SC_DECL##x(__VA_ARGS__)) |
4177 | + |
4178 | +#else /* CONFIG_HAVE_SYSCALL_WRAPPERS */ |
4179 | + |
4180 | +#define SYSCALL_DEFINE(name) asmlinkage long sys_##name |
4181 | +#define SYSCALL_DEFINEx(x, name, ...) \ |
4182 | + asmlinkage long sys_##name(__SC_DECL##x(__VA_ARGS__)) |
4183 | + |
4184 | +#endif /* CONFIG_HAVE_SYSCALL_WRAPPERS */ |
4185 | + |
4186 | asmlinkage long sys_time(time_t __user *tloc); |
4187 | asmlinkage long sys_stime(time_t __user *tptr); |
4188 | asmlinkage long sys_gettimeofday(struct timeval __user *tv, |
4189 | @@ -77,7 +146,7 @@ asmlinkage long sys_times(struct tms __user *tbuf); |
4190 | |
4191 | asmlinkage long sys_gettid(void); |
4192 | asmlinkage long sys_nanosleep(struct timespec __user *rqtp, struct timespec __user *rmtp); |
4193 | -asmlinkage unsigned long sys_alarm(unsigned int seconds); |
4194 | +asmlinkage long sys_alarm(unsigned int seconds); |
4195 | asmlinkage long sys_getpid(void); |
4196 | asmlinkage long sys_getppid(void); |
4197 | asmlinkage long sys_getuid(void); |
4198 | @@ -166,7 +235,7 @@ asmlinkage long sys_kexec_load(unsigned long entry, unsigned long nr_segments, |
4199 | unsigned long flags); |
4200 | |
4201 | asmlinkage long sys_exit(int error_code); |
4202 | -asmlinkage void sys_exit_group(int error_code); |
4203 | +asmlinkage long sys_exit_group(int error_code); |
4204 | asmlinkage long sys_wait4(pid_t pid, int __user *stat_addr, |
4205 | int options, struct rusage __user *ru); |
4206 | asmlinkage long sys_waitid(int which, pid_t pid, |
4207 | @@ -196,7 +265,7 @@ asmlinkage long sys_tkill(int pid, int sig); |
4208 | asmlinkage long sys_rt_sigqueueinfo(int pid, int sig, siginfo_t __user *uinfo); |
4209 | asmlinkage long sys_sgetmask(void); |
4210 | asmlinkage long sys_ssetmask(int newmask); |
4211 | -asmlinkage unsigned long sys_signal(int sig, __sighandler_t handler); |
4212 | +asmlinkage long sys_signal(int sig, __sighandler_t handler); |
4213 | asmlinkage long sys_pause(void); |
4214 | |
4215 | asmlinkage long sys_sync(void); |
4216 | @@ -246,29 +315,29 @@ asmlinkage long sys_lsetxattr(const char __user *path, const char __user *name, |
4217 | const void __user *value, size_t size, int flags); |
4218 | asmlinkage long sys_fsetxattr(int fd, const char __user *name, |
4219 | const void __user *value, size_t size, int flags); |
4220 | -asmlinkage ssize_t sys_getxattr(const char __user *path, const char __user *name, |
4221 | - void __user *value, size_t size); |
4222 | -asmlinkage ssize_t sys_lgetxattr(const char __user *path, const char __user *name, |
4223 | - void __user *value, size_t size); |
4224 | -asmlinkage ssize_t sys_fgetxattr(int fd, const char __user *name, |
4225 | - void __user *value, size_t size); |
4226 | -asmlinkage ssize_t sys_listxattr(const char __user *path, char __user *list, |
4227 | - size_t size); |
4228 | -asmlinkage ssize_t sys_llistxattr(const char __user *path, char __user *list, |
4229 | - size_t size); |
4230 | -asmlinkage ssize_t sys_flistxattr(int fd, char __user *list, size_t size); |
4231 | +asmlinkage long sys_getxattr(const char __user *path, const char __user *name, |
4232 | + void __user *value, size_t size); |
4233 | +asmlinkage long sys_lgetxattr(const char __user *path, const char __user *name, |
4234 | + void __user *value, size_t size); |
4235 | +asmlinkage long sys_fgetxattr(int fd, const char __user *name, |
4236 | + void __user *value, size_t size); |
4237 | +asmlinkage long sys_listxattr(const char __user *path, char __user *list, |
4238 | + size_t size); |
4239 | +asmlinkage long sys_llistxattr(const char __user *path, char __user *list, |
4240 | + size_t size); |
4241 | +asmlinkage long sys_flistxattr(int fd, char __user *list, size_t size); |
4242 | asmlinkage long sys_removexattr(const char __user *path, |
4243 | const char __user *name); |
4244 | asmlinkage long sys_lremovexattr(const char __user *path, |
4245 | const char __user *name); |
4246 | asmlinkage long sys_fremovexattr(int fd, const char __user *name); |
4247 | |
4248 | -asmlinkage unsigned long sys_brk(unsigned long brk); |
4249 | +asmlinkage long sys_brk(unsigned long brk); |
4250 | asmlinkage long sys_mprotect(unsigned long start, size_t len, |
4251 | unsigned long prot); |
4252 | -asmlinkage unsigned long sys_mremap(unsigned long addr, |
4253 | - unsigned long old_len, unsigned long new_len, |
4254 | - unsigned long flags, unsigned long new_addr); |
4255 | +asmlinkage long sys_mremap(unsigned long addr, |
4256 | + unsigned long old_len, unsigned long new_len, |
4257 | + unsigned long flags, unsigned long new_addr); |
4258 | asmlinkage long sys_remap_file_pages(unsigned long start, unsigned long size, |
4259 | unsigned long prot, unsigned long pgoff, |
4260 | unsigned long flags); |
4261 | @@ -321,10 +390,10 @@ asmlinkage long sys_io_submit(aio_context_t, long, |
4262 | struct iocb __user * __user *); |
4263 | asmlinkage long sys_io_cancel(aio_context_t ctx_id, struct iocb __user *iocb, |
4264 | struct io_event __user *result); |
4265 | -asmlinkage ssize_t sys_sendfile(int out_fd, int in_fd, |
4266 | - off_t __user *offset, size_t count); |
4267 | -asmlinkage ssize_t sys_sendfile64(int out_fd, int in_fd, |
4268 | - loff_t __user *offset, size_t count); |
4269 | +asmlinkage long sys_sendfile(int out_fd, int in_fd, |
4270 | + off_t __user *offset, size_t count); |
4271 | +asmlinkage long sys_sendfile64(int out_fd, int in_fd, |
4272 | + loff_t __user *offset, size_t count); |
4273 | asmlinkage long sys_readlink(const char __user *path, |
4274 | char __user *buf, int bufsiz); |
4275 | asmlinkage long sys_creat(const char __user *pathname, int mode); |
4276 | @@ -368,26 +437,25 @@ asmlinkage long sys_utime(char __user *filename, |
4277 | struct utimbuf __user *times); |
4278 | asmlinkage long sys_utimes(char __user *filename, |
4279 | struct timeval __user *utimes); |
4280 | -asmlinkage off_t sys_lseek(unsigned int fd, off_t offset, |
4281 | - unsigned int origin); |
4282 | +asmlinkage long sys_lseek(unsigned int fd, off_t offset, |
4283 | + unsigned int origin); |
4284 | asmlinkage long sys_llseek(unsigned int fd, unsigned long offset_high, |
4285 | unsigned long offset_low, loff_t __user *result, |
4286 | unsigned int origin); |
4287 | -asmlinkage ssize_t sys_read(unsigned int fd, char __user *buf, |
4288 | - size_t count); |
4289 | -asmlinkage ssize_t sys_readahead(int fd, loff_t offset, size_t count); |
4290 | -asmlinkage ssize_t sys_readv(unsigned long fd, |
4291 | - const struct iovec __user *vec, |
4292 | - unsigned long vlen); |
4293 | -asmlinkage ssize_t sys_write(unsigned int fd, const char __user *buf, |
4294 | - size_t count); |
4295 | -asmlinkage ssize_t sys_writev(unsigned long fd, |
4296 | - const struct iovec __user *vec, |
4297 | - unsigned long vlen); |
4298 | -asmlinkage ssize_t sys_pread64(unsigned int fd, char __user *buf, |
4299 | - size_t count, loff_t pos); |
4300 | -asmlinkage ssize_t sys_pwrite64(unsigned int fd, const char __user *buf, |
4301 | - size_t count, loff_t pos); |
4302 | +asmlinkage long sys_read(unsigned int fd, char __user *buf, size_t count); |
4303 | +asmlinkage long sys_readahead(int fd, loff_t offset, size_t count); |
4304 | +asmlinkage long sys_readv(unsigned long fd, |
4305 | + const struct iovec __user *vec, |
4306 | + unsigned long vlen); |
4307 | +asmlinkage long sys_write(unsigned int fd, const char __user *buf, |
4308 | + size_t count); |
4309 | +asmlinkage long sys_writev(unsigned long fd, |
4310 | + const struct iovec __user *vec, |
4311 | + unsigned long vlen); |
4312 | +asmlinkage long sys_pread64(unsigned int fd, char __user *buf, |
4313 | + size_t count, loff_t pos); |
4314 | +asmlinkage long sys_pwrite64(unsigned int fd, const char __user *buf, |
4315 | + size_t count, loff_t pos); |
4316 | asmlinkage long sys_getcwd(char __user *buf, unsigned long size); |
4317 | asmlinkage long sys_mkdir(const char __user *pathname, int mode); |
4318 | asmlinkage long sys_chdir(const char __user *filename); |
4319 | @@ -477,7 +545,7 @@ asmlinkage long sys_shmctl(int shmid, int cmd, struct shmid_ds __user *buf); |
4320 | asmlinkage long sys_mq_open(const char __user *name, int oflag, mode_t mode, struct mq_attr __user *attr); |
4321 | asmlinkage long sys_mq_unlink(const char __user *name); |
4322 | asmlinkage long sys_mq_timedsend(mqd_t mqdes, const char __user *msg_ptr, size_t msg_len, unsigned int msg_prio, const struct timespec __user *abs_timeout); |
4323 | -asmlinkage ssize_t sys_mq_timedreceive(mqd_t mqdes, char __user *msg_ptr, size_t msg_len, unsigned int __user *msg_prio, const struct timespec __user *abs_timeout); |
4324 | +asmlinkage long sys_mq_timedreceive(mqd_t mqdes, char __user *msg_ptr, size_t msg_len, unsigned int __user *msg_prio, const struct timespec __user *abs_timeout); |
4325 | asmlinkage long sys_mq_notify(mqd_t mqdes, const struct sigevent __user *notification); |
4326 | asmlinkage long sys_mq_getsetattr(mqd_t mqdes, const struct mq_attr __user *mqstat, struct mq_attr __user *omqstat); |
4327 | |
4328 | @@ -531,11 +599,6 @@ asmlinkage long sys_move_pages(pid_t pid, unsigned long nr_pages, |
4329 | const int __user *nodes, |
4330 | int __user *status, |
4331 | int flags); |
4332 | -asmlinkage long compat_sys_move_pages(pid_t pid, unsigned long nr_page, |
4333 | - __u32 __user *pages, |
4334 | - const int __user *nodes, |
4335 | - int __user *status, |
4336 | - int flags); |
4337 | asmlinkage long sys_mbind(unsigned long start, unsigned long len, |
4338 | unsigned long mode, |
4339 | unsigned long __user *nmask, |
4340 | @@ -550,7 +613,7 @@ asmlinkage long sys_inotify_init(void); |
4341 | asmlinkage long sys_inotify_init1(int flags); |
4342 | asmlinkage long sys_inotify_add_watch(int fd, const char __user *path, |
4343 | u32 mask); |
4344 | -asmlinkage long sys_inotify_rm_watch(int fd, u32 wd); |
4345 | +asmlinkage long sys_inotify_rm_watch(int fd, __s32 wd); |
4346 | |
4347 | asmlinkage long sys_spu_run(int fd, __u32 __user *unpc, |
4348 | __u32 __user *ustatus); |
4349 | @@ -584,13 +647,6 @@ asmlinkage long sys_readlinkat(int dfd, const char __user *path, char __user *bu |
4350 | int bufsiz); |
4351 | asmlinkage long sys_utimensat(int dfd, char __user *filename, |
4352 | struct timespec __user *utimes, int flags); |
4353 | -asmlinkage long compat_sys_futimesat(unsigned int dfd, char __user *filename, |
4354 | - struct compat_timeval __user *t); |
4355 | -asmlinkage long compat_sys_newfstatat(unsigned int dfd, char __user * filename, |
4356 | - struct compat_stat __user *statbuf, |
4357 | - int flag); |
4358 | -asmlinkage long compat_sys_openat(unsigned int dfd, const char __user *filename, |
4359 | - int flags, int mode); |
4360 | asmlinkage long sys_unshare(unsigned long unshare_flags); |
4361 | |
4362 | asmlinkage long sys_splice(int fd_in, loff_t __user *off_in, |
4363 | @@ -622,6 +678,15 @@ asmlinkage long sys_timerfd_gettime(int ufd, struct itimerspec __user *otmr); |
4364 | asmlinkage long sys_eventfd(unsigned int count); |
4365 | asmlinkage long sys_eventfd2(unsigned int count, int flags); |
4366 | asmlinkage long sys_fallocate(int fd, int mode, loff_t offset, loff_t len); |
4367 | +asmlinkage long sys_old_readdir(unsigned int, struct old_linux_dirent __user *, unsigned int); |
4368 | +asmlinkage long sys_pselect6(int, fd_set __user *, fd_set __user *, |
4369 | + fd_set __user *, struct timespec __user *, |
4370 | + void __user *); |
4371 | +asmlinkage long sys_ppoll(struct pollfd __user *, unsigned int, |
4372 | + struct timespec __user *, const sigset_t __user *, |
4373 | + size_t); |
4374 | +asmlinkage long sys_pipe2(int __user *, int); |
4375 | +asmlinkage long sys_pipe(int __user *); |
4376 | |
4377 | int kernel_execve(const char *filename, char *const argv[], char *const envp[]); |
4378 | |
4379 | diff --git a/include/linux/time.h b/include/linux/time.h |
4380 | index e15206a..0095ad1 100644 |
4381 | --- a/include/linux/time.h |
4382 | +++ b/include/linux/time.h |
4383 | @@ -99,6 +99,7 @@ extern unsigned long read_persistent_clock(void); |
4384 | extern int update_persistent_clock(struct timespec now); |
4385 | extern int no_sync_cmos_clock __read_mostly; |
4386 | void timekeeping_init(void); |
4387 | +extern int timekeeping_suspended; |
4388 | |
4389 | unsigned long get_seconds(void); |
4390 | struct timespec current_kernel_time(void); |
4391 | diff --git a/ipc/mqueue.c b/ipc/mqueue.c |
4392 | index 96fb36c..a58bfad 100644 |
4393 | --- a/ipc/mqueue.c |
4394 | +++ b/ipc/mqueue.c |
4395 | @@ -647,8 +647,8 @@ static int oflag2acc[O_ACCMODE] = { MAY_READ, MAY_WRITE, |
4396 | return dentry_open(dentry, mqueue_mnt, oflag); |
4397 | } |
4398 | |
4399 | -asmlinkage long sys_mq_open(const char __user *u_name, int oflag, mode_t mode, |
4400 | - struct mq_attr __user *u_attr) |
4401 | +SYSCALL_DEFINE4(mq_open, const char __user *, u_name, int, oflag, mode_t, mode, |
4402 | + struct mq_attr __user *, u_attr) |
4403 | { |
4404 | struct dentry *dentry; |
4405 | struct file *filp; |
4406 | @@ -715,7 +715,7 @@ out_putname: |
4407 | return fd; |
4408 | } |
4409 | |
4410 | -asmlinkage long sys_mq_unlink(const char __user *u_name) |
4411 | +SYSCALL_DEFINE1(mq_unlink, const char __user *, u_name) |
4412 | { |
4413 | int err; |
4414 | char *name; |
4415 | @@ -808,9 +808,9 @@ static inline void pipelined_receive(struct mqueue_inode_info *info) |
4416 | sender->state = STATE_READY; |
4417 | } |
4418 | |
4419 | -asmlinkage long sys_mq_timedsend(mqd_t mqdes, const char __user *u_msg_ptr, |
4420 | - size_t msg_len, unsigned int msg_prio, |
4421 | - const struct timespec __user *u_abs_timeout) |
4422 | +SYSCALL_DEFINE5(mq_timedsend, mqd_t, mqdes, const char __user *, u_msg_ptr, |
4423 | + size_t, msg_len, unsigned int, msg_prio, |
4424 | + const struct timespec __user *, u_abs_timeout) |
4425 | { |
4426 | struct file *filp; |
4427 | struct inode *inode; |
4428 | @@ -896,9 +896,9 @@ out: |
4429 | return ret; |
4430 | } |
4431 | |
4432 | -asmlinkage ssize_t sys_mq_timedreceive(mqd_t mqdes, char __user *u_msg_ptr, |
4433 | - size_t msg_len, unsigned int __user *u_msg_prio, |
4434 | - const struct timespec __user *u_abs_timeout) |
4435 | +SYSCALL_DEFINE5(mq_timedreceive, mqd_t, mqdes, char __user *, u_msg_ptr, |
4436 | + size_t, msg_len, unsigned int __user *, u_msg_prio, |
4437 | + const struct timespec __user *, u_abs_timeout) |
4438 | { |
4439 | long timeout; |
4440 | ssize_t ret; |
4441 | @@ -981,8 +981,8 @@ out: |
4442 | * and he isn't currently owner of notification, will be silently discarded. |
4443 | * It isn't explicitly defined in the POSIX. |
4444 | */ |
4445 | -asmlinkage long sys_mq_notify(mqd_t mqdes, |
4446 | - const struct sigevent __user *u_notification) |
4447 | +SYSCALL_DEFINE2(mq_notify, mqd_t, mqdes, |
4448 | + const struct sigevent __user *, u_notification) |
4449 | { |
4450 | int ret; |
4451 | struct file *filp; |
4452 | @@ -1107,9 +1107,9 @@ out: |
4453 | return ret; |
4454 | } |
4455 | |
4456 | -asmlinkage long sys_mq_getsetattr(mqd_t mqdes, |
4457 | - const struct mq_attr __user *u_mqstat, |
4458 | - struct mq_attr __user *u_omqstat) |
4459 | +SYSCALL_DEFINE3(mq_getsetattr, mqd_t, mqdes, |
4460 | + const struct mq_attr __user *, u_mqstat, |
4461 | + struct mq_attr __user *, u_omqstat) |
4462 | { |
4463 | int ret; |
4464 | struct mq_attr mqstat, omqstat; |
4465 | diff --git a/ipc/msg.c b/ipc/msg.c |
4466 | index b4eee1c..2ceab7f 100644 |
4467 | --- a/ipc/msg.c |
4468 | +++ b/ipc/msg.c |
4469 | @@ -309,7 +309,7 @@ static inline int msg_security(struct kern_ipc_perm *ipcp, int msgflg) |
4470 | return security_msg_queue_associate(msq, msgflg); |
4471 | } |
4472 | |
4473 | -asmlinkage long sys_msgget(key_t key, int msgflg) |
4474 | +SYSCALL_DEFINE2(msgget, key_t, key, int, msgflg) |
4475 | { |
4476 | struct ipc_namespace *ns; |
4477 | struct ipc_ops msg_ops; |
4478 | @@ -466,7 +466,7 @@ out_up: |
4479 | return err; |
4480 | } |
4481 | |
4482 | -asmlinkage long sys_msgctl(int msqid, int cmd, struct msqid_ds __user *buf) |
4483 | +SYSCALL_DEFINE3(msgctl, int, msqid, int, cmd, struct msqid_ds __user *, buf) |
4484 | { |
4485 | struct msg_queue *msq; |
4486 | int err, version; |
4487 | @@ -723,8 +723,8 @@ out_free: |
4488 | return err; |
4489 | } |
4490 | |
4491 | -asmlinkage long |
4492 | -sys_msgsnd(int msqid, struct msgbuf __user *msgp, size_t msgsz, int msgflg) |
4493 | +SYSCALL_DEFINE4(msgsnd, int, msqid, struct msgbuf __user *, msgp, size_t, msgsz, |
4494 | + int, msgflg) |
4495 | { |
4496 | long mtype; |
4497 | |
4498 | @@ -904,8 +904,8 @@ out_unlock: |
4499 | return msgsz; |
4500 | } |
4501 | |
4502 | -asmlinkage long sys_msgrcv(int msqid, struct msgbuf __user *msgp, size_t msgsz, |
4503 | - long msgtyp, int msgflg) |
4504 | +SYSCALL_DEFINE5(msgrcv, int, msqid, struct msgbuf __user *, msgp, size_t, msgsz, |
4505 | + long, msgtyp, int, msgflg) |
4506 | { |
4507 | long err, mtype; |
4508 | |
4509 | diff --git a/ipc/sem.c b/ipc/sem.c |
4510 | index bf1bc36..9eb9d31 100644 |
4511 | --- a/ipc/sem.c |
4512 | +++ b/ipc/sem.c |
4513 | @@ -308,7 +308,7 @@ static inline int sem_more_checks(struct kern_ipc_perm *ipcp, |
4514 | return 0; |
4515 | } |
4516 | |
4517 | -asmlinkage long sys_semget(key_t key, int nsems, int semflg) |
4518 | +SYSCALL_DEFINE3(semget, key_t, key, int, nsems, int, semflg) |
4519 | { |
4520 | struct ipc_namespace *ns; |
4521 | struct ipc_ops sem_ops; |
4522 | @@ -887,7 +887,7 @@ out_up: |
4523 | return err; |
4524 | } |
4525 | |
4526 | -asmlinkage long sys_semctl (int semid, int semnum, int cmd, union semun arg) |
4527 | +SYSCALL_DEFINE(semctl)(int semid, int semnum, int cmd, union semun arg) |
4528 | { |
4529 | int err = -EINVAL; |
4530 | int version; |
4531 | @@ -923,6 +923,13 @@ asmlinkage long sys_semctl (int semid, int semnum, int cmd, union semun arg) |
4532 | return -EINVAL; |
4533 | } |
4534 | } |
4535 | +#ifdef CONFIG_HAVE_SYSCALL_WRAPPERS |
4536 | +asmlinkage long SyS_semctl(int semid, int semnum, int cmd, union semun arg) |
4537 | +{ |
4538 | + return SYSC_semctl((int) semid, (int) semnum, (int) cmd, arg); |
4539 | +} |
4540 | +SYSCALL_ALIAS(sys_semctl, SyS_semctl); |
4541 | +#endif |
4542 | |
4543 | /* If the task doesn't already have a undo_list, then allocate one |
4544 | * here. We guarantee there is only one thread using this undo list, |
4545 | @@ -1048,8 +1055,8 @@ out: |
4546 | return un; |
4547 | } |
4548 | |
4549 | -asmlinkage long sys_semtimedop(int semid, struct sembuf __user *tsops, |
4550 | - unsigned nsops, const struct timespec __user *timeout) |
4551 | +SYSCALL_DEFINE4(semtimedop, int, semid, struct sembuf __user *, tsops, |
4552 | + unsigned, nsops, const struct timespec __user *, timeout) |
4553 | { |
4554 | int error = -EINVAL; |
4555 | struct sem_array *sma; |
4556 | @@ -1226,7 +1233,8 @@ out_free: |
4557 | return error; |
4558 | } |
4559 | |
4560 | -asmlinkage long sys_semop (int semid, struct sembuf __user *tsops, unsigned nsops) |
4561 | +SYSCALL_DEFINE3(semop, int, semid, struct sembuf __user *, tsops, |
4562 | + unsigned, nsops) |
4563 | { |
4564 | return sys_semtimedop(semid, tsops, nsops, NULL); |
4565 | } |
4566 | diff --git a/ipc/shm.c b/ipc/shm.c |
4567 | index e77ec69..f00c897 100644 |
4568 | --- a/ipc/shm.c |
4569 | +++ b/ipc/shm.c |
4570 | @@ -440,7 +440,7 @@ static inline int shm_more_checks(struct kern_ipc_perm *ipcp, |
4571 | return 0; |
4572 | } |
4573 | |
4574 | -asmlinkage long sys_shmget (key_t key, size_t size, int shmflg) |
4575 | +SYSCALL_DEFINE3(shmget, key_t, key, size_t, size, int, shmflg) |
4576 | { |
4577 | struct ipc_namespace *ns; |
4578 | struct ipc_ops shm_ops; |
4579 | @@ -621,7 +621,7 @@ out_up: |
4580 | return err; |
4581 | } |
4582 | |
4583 | -asmlinkage long sys_shmctl(int shmid, int cmd, struct shmid_ds __user *buf) |
4584 | +SYSCALL_DEFINE3(shmctl, int, shmid, int, cmd, struct shmid_ds __user *, buf) |
4585 | { |
4586 | struct shmid_kernel *shp; |
4587 | int err, version; |
4588 | @@ -941,7 +941,7 @@ out_put_dentry: |
4589 | goto out_nattch; |
4590 | } |
4591 | |
4592 | -asmlinkage long sys_shmat(int shmid, char __user *shmaddr, int shmflg) |
4593 | +SYSCALL_DEFINE3(shmat, int, shmid, char __user *, shmaddr, int, shmflg) |
4594 | { |
4595 | unsigned long ret; |
4596 | long err; |
4597 | @@ -957,7 +957,7 @@ asmlinkage long sys_shmat(int shmid, char __user *shmaddr, int shmflg) |
4598 | * detach and kill segment if marked destroyed. |
4599 | * The work is done in shm_close. |
4600 | */ |
4601 | -asmlinkage long sys_shmdt(char __user *shmaddr) |
4602 | +SYSCALL_DEFINE1(shmdt, char __user *, shmaddr) |
4603 | { |
4604 | struct mm_struct *mm = current->mm; |
4605 | struct vm_area_struct *vma, *next; |
4606 | diff --git a/kernel/acct.c b/kernel/acct.c |
4607 | index dd68b90..a272f53 100644 |
4608 | --- a/kernel/acct.c |
4609 | +++ b/kernel/acct.c |
4610 | @@ -277,7 +277,7 @@ static int acct_on(char *name) |
4611 | * should be written. If the filename is NULL, accounting will be |
4612 | * shutdown. |
4613 | */ |
4614 | -asmlinkage long sys_acct(const char __user *name) |
4615 | +SYSCALL_DEFINE1(acct, const char __user *, name) |
4616 | { |
4617 | int error; |
4618 | |
4619 | diff --git a/kernel/capability.c b/kernel/capability.c |
4620 | index 33e51e7..6ec8359 100644 |
4621 | --- a/kernel/capability.c |
4622 | +++ b/kernel/capability.c |
4623 | @@ -348,7 +348,7 @@ EXPORT_SYMBOL(cap_set_effective); |
4624 | * |
4625 | * Returns 0 on success and < 0 on error. |
4626 | */ |
4627 | -asmlinkage long sys_capget(cap_user_header_t header, cap_user_data_t dataptr) |
4628 | +SYSCALL_DEFINE2(capget, cap_user_header_t, header, cap_user_data_t, dataptr) |
4629 | { |
4630 | int ret = 0; |
4631 | pid_t pid; |
4632 | @@ -425,7 +425,7 @@ asmlinkage long sys_capget(cap_user_header_t header, cap_user_data_t dataptr) |
4633 | * |
4634 | * Returns 0 on success and < 0 on error. |
4635 | */ |
4636 | -asmlinkage long sys_capset(cap_user_header_t header, const cap_user_data_t data) |
4637 | +SYSCALL_DEFINE2(capset, cap_user_header_t, header, const cap_user_data_t, data) |
4638 | { |
4639 | struct __user_cap_data_struct kdata[_KERNEL_CAPABILITY_U32S]; |
4640 | unsigned i, tocopy; |
4641 | diff --git a/kernel/cgroup.c b/kernel/cgroup.c |
4642 | index 0ba3a5a..271763d 100644 |
4643 | --- a/kernel/cgroup.c |
4644 | +++ b/kernel/cgroup.c |
4645 | @@ -2885,7 +2885,11 @@ int cgroup_clone(struct task_struct *tsk, struct cgroup_subsys *subsys, |
4646 | parent = task_cgroup(tsk, subsys->subsys_id); |
4647 | |
4648 | /* Pin the hierarchy */ |
4649 | - atomic_inc(&parent->root->sb->s_active); |
4650 | + if (!atomic_inc_not_zero(&parent->root->sb->s_active)) { |
4651 | + /* We race with the final deactivate_super() */ |
4652 | + mutex_unlock(&cgroup_mutex); |
4653 | + return 0; |
4654 | + } |
4655 | |
4656 | /* Keep the cgroup alive */ |
4657 | get_css_set(cg); |
4658 | diff --git a/kernel/exec_domain.c b/kernel/exec_domain.c |
4659 | index 0d407e8..18e8a50 100644 |
4660 | --- a/kernel/exec_domain.c |
4661 | +++ b/kernel/exec_domain.c |
4662 | @@ -188,8 +188,7 @@ get_exec_domain_list(char *page) |
4663 | return (len); |
4664 | } |
4665 | |
4666 | -asmlinkage long |
4667 | -sys_personality(u_long personality) |
4668 | +SYSCALL_DEFINE1(personality, u_long, personality) |
4669 | { |
4670 | u_long old = current->personality; |
4671 | |
4672 | diff --git a/kernel/exit.c b/kernel/exit.c |
4673 | index 85a83c8..14096a1 100644 |
4674 | --- a/kernel/exit.c |
4675 | +++ b/kernel/exit.c |
4676 | @@ -1145,7 +1145,7 @@ NORET_TYPE void complete_and_exit(struct completion *comp, long code) |
4677 | |
4678 | EXPORT_SYMBOL(complete_and_exit); |
4679 | |
4680 | -asmlinkage long sys_exit(int error_code) |
4681 | +SYSCALL_DEFINE1(exit, int, error_code) |
4682 | { |
4683 | do_exit((error_code&0xff)<<8); |
4684 | } |
4685 | @@ -1186,9 +1186,11 @@ do_group_exit(int exit_code) |
4686 | * wait4()-ing process will get the correct exit code - even if this |
4687 | * thread is not the thread group leader. |
4688 | */ |
4689 | -asmlinkage void sys_exit_group(int error_code) |
4690 | +SYSCALL_DEFINE1(exit_group, int, error_code) |
4691 | { |
4692 | do_group_exit((error_code & 0xff) << 8); |
4693 | + /* NOTREACHED */ |
4694 | + return 0; |
4695 | } |
4696 | |
4697 | static struct pid *task_pid_type(struct task_struct *task, enum pid_type type) |
4698 | @@ -1749,9 +1751,8 @@ end: |
4699 | return retval; |
4700 | } |
4701 | |
4702 | -asmlinkage long sys_waitid(int which, pid_t upid, |
4703 | - struct siginfo __user *infop, int options, |
4704 | - struct rusage __user *ru) |
4705 | +SYSCALL_DEFINE5(waitid, int, which, pid_t, upid, struct siginfo __user *, |
4706 | + infop, int, options, struct rusage __user *, ru) |
4707 | { |
4708 | struct pid *pid = NULL; |
4709 | enum pid_type type; |
4710 | @@ -1790,8 +1791,8 @@ asmlinkage long sys_waitid(int which, pid_t upid, |
4711 | return ret; |
4712 | } |
4713 | |
4714 | -asmlinkage long sys_wait4(pid_t upid, int __user *stat_addr, |
4715 | - int options, struct rusage __user *ru) |
4716 | +SYSCALL_DEFINE4(wait4, pid_t, upid, int __user *, stat_addr, |
4717 | + int, options, struct rusage __user *, ru) |
4718 | { |
4719 | struct pid *pid = NULL; |
4720 | enum pid_type type; |
4721 | @@ -1828,7 +1829,7 @@ asmlinkage long sys_wait4(pid_t upid, int __user *stat_addr, |
4722 | * sys_waitpid() remains for compatibility. waitpid() should be |
4723 | * implemented by calling sys_wait4() from libc.a. |
4724 | */ |
4725 | -asmlinkage long sys_waitpid(pid_t pid, int __user *stat_addr, int options) |
4726 | +SYSCALL_DEFINE3(waitpid, pid_t, pid, int __user *, stat_addr, int, options) |
4727 | { |
4728 | return sys_wait4(pid, stat_addr, options, NULL); |
4729 | } |
4730 | diff --git a/kernel/fork.c b/kernel/fork.c |
4731 | index d8ad2c6..42fb5b0 100644 |
4732 | --- a/kernel/fork.c |
4733 | +++ b/kernel/fork.c |
4734 | @@ -865,7 +865,7 @@ static void copy_flags(unsigned long clone_flags, struct task_struct *p) |
4735 | clear_freeze_flag(p); |
4736 | } |
4737 | |
4738 | -asmlinkage long sys_set_tid_address(int __user *tidptr) |
4739 | +SYSCALL_DEFINE1(set_tid_address, int __user *, tidptr) |
4740 | { |
4741 | current->clear_child_tid = tidptr; |
4742 | |
4743 | @@ -1561,7 +1561,7 @@ static int unshare_fd(unsigned long unshare_flags, struct files_struct **new_fdp |
4744 | * constructed. Here we are modifying the current, active, |
4745 | * task_struct. |
4746 | */ |
4747 | -asmlinkage long sys_unshare(unsigned long unshare_flags) |
4748 | +SYSCALL_DEFINE1(unshare, unsigned long, unshare_flags) |
4749 | { |
4750 | int err = 0; |
4751 | struct fs_struct *fs, *new_fs = NULL; |
4752 | diff --git a/kernel/futex.c b/kernel/futex.c |
4753 | index 7d1136e..ec84da5 100644 |
4754 | --- a/kernel/futex.c |
4755 | +++ b/kernel/futex.c |
4756 | @@ -1797,9 +1797,8 @@ pi_faulted: |
4757 | * @head: pointer to the list-head |
4758 | * @len: length of the list-head, as userspace expects |
4759 | */ |
4760 | -asmlinkage long |
4761 | -sys_set_robust_list(struct robust_list_head __user *head, |
4762 | - size_t len) |
4763 | +SYSCALL_DEFINE2(set_robust_list, struct robust_list_head __user *, head, |
4764 | + size_t, len) |
4765 | { |
4766 | if (!futex_cmpxchg_enabled) |
4767 | return -ENOSYS; |
4768 | @@ -1820,9 +1819,9 @@ sys_set_robust_list(struct robust_list_head __user *head, |
4769 | * @head_ptr: pointer to a list-head pointer, the kernel fills it in |
4770 | * @len_ptr: pointer to a length field, the kernel fills in the header size |
4771 | */ |
4772 | -asmlinkage long |
4773 | -sys_get_robust_list(int pid, struct robust_list_head __user * __user *head_ptr, |
4774 | - size_t __user *len_ptr) |
4775 | +SYSCALL_DEFINE3(get_robust_list, int, pid, |
4776 | + struct robust_list_head __user * __user *, head_ptr, |
4777 | + size_t __user *, len_ptr) |
4778 | { |
4779 | struct robust_list_head __user *head; |
4780 | unsigned long ret; |
4781 | @@ -2036,9 +2035,9 @@ long do_futex(u32 __user *uaddr, int op, u32 val, ktime_t *timeout, |
4782 | } |
4783 | |
4784 | |
4785 | -asmlinkage long sys_futex(u32 __user *uaddr, int op, u32 val, |
4786 | - struct timespec __user *utime, u32 __user *uaddr2, |
4787 | - u32 val3) |
4788 | +SYSCALL_DEFINE6(futex, u32 __user *, uaddr, int, op, u32, val, |
4789 | + struct timespec __user *, utime, u32 __user *, uaddr2, |
4790 | + u32, val3) |
4791 | { |
4792 | struct timespec ts; |
4793 | ktime_t t, *tp = NULL; |
4794 | diff --git a/kernel/hrtimer.c b/kernel/hrtimer.c |
4795 | index cdec83e..98bbbe5 100644 |
4796 | --- a/kernel/hrtimer.c |
4797 | +++ b/kernel/hrtimer.c |
4798 | @@ -1560,8 +1560,8 @@ out: |
4799 | return ret; |
4800 | } |
4801 | |
4802 | -asmlinkage long |
4803 | -sys_nanosleep(struct timespec __user *rqtp, struct timespec __user *rmtp) |
4804 | +SYSCALL_DEFINE2(nanosleep, struct timespec __user *, rqtp, |
4805 | + struct timespec __user *, rmtp) |
4806 | { |
4807 | struct timespec tu; |
4808 | |
4809 | diff --git a/kernel/itimer.c b/kernel/itimer.c |
4810 | index ab98274..13470aa 100644 |
4811 | --- a/kernel/itimer.c |
4812 | +++ b/kernel/itimer.c |
4813 | @@ -109,7 +109,7 @@ int do_getitimer(int which, struct itimerval *value) |
4814 | return 0; |
4815 | } |
4816 | |
4817 | -asmlinkage long sys_getitimer(int which, struct itimerval __user *value) |
4818 | +SYSCALL_DEFINE2(getitimer, int, which, struct itimerval __user *, value) |
4819 | { |
4820 | int error = -EFAULT; |
4821 | struct itimerval get_buffer; |
4822 | @@ -273,9 +273,8 @@ unsigned int alarm_setitimer(unsigned int seconds) |
4823 | return it_old.it_value.tv_sec; |
4824 | } |
4825 | |
4826 | -asmlinkage long sys_setitimer(int which, |
4827 | - struct itimerval __user *value, |
4828 | - struct itimerval __user *ovalue) |
4829 | +SYSCALL_DEFINE3(setitimer, int, which, struct itimerval __user *, value, |
4830 | + struct itimerval __user *, ovalue) |
4831 | { |
4832 | struct itimerval set_buffer, get_buffer; |
4833 | int error; |
4834 | diff --git a/kernel/kexec.c b/kernel/kexec.c |
4835 | index aef2653..cba525a 100644 |
4836 | --- a/kernel/kexec.c |
4837 | +++ b/kernel/kexec.c |
4838 | @@ -933,9 +933,8 @@ struct kimage *kexec_crash_image; |
4839 | |
4840 | static DEFINE_MUTEX(kexec_mutex); |
4841 | |
4842 | -asmlinkage long sys_kexec_load(unsigned long entry, unsigned long nr_segments, |
4843 | - struct kexec_segment __user *segments, |
4844 | - unsigned long flags) |
4845 | +SYSCALL_DEFINE4(kexec_load, unsigned long, entry, unsigned long, nr_segments, |
4846 | + struct kexec_segment __user *, segments, unsigned long, flags) |
4847 | { |
4848 | struct kimage **dest_image, *image; |
4849 | int result; |
4850 | diff --git a/kernel/module.c b/kernel/module.c |
4851 | index d5fcd24..69d274a 100644 |
4852 | --- a/kernel/module.c |
4853 | +++ b/kernel/module.c |
4854 | @@ -715,8 +715,8 @@ static void wait_for_zero_refcount(struct module *mod) |
4855 | mutex_lock(&module_mutex); |
4856 | } |
4857 | |
4858 | -asmlinkage long |
4859 | -sys_delete_module(const char __user *name_user, unsigned int flags) |
4860 | +SYSCALL_DEFINE2(delete_module, const char __user *, name_user, |
4861 | + unsigned int, flags) |
4862 | { |
4863 | struct module *mod; |
4864 | char name[MODULE_NAME_LEN]; |
4865 | @@ -2257,10 +2257,8 @@ static noinline struct module *load_module(void __user *umod, |
4866 | } |
4867 | |
4868 | /* This is where the real work happens */ |
4869 | -asmlinkage long |
4870 | -sys_init_module(void __user *umod, |
4871 | - unsigned long len, |
4872 | - const char __user *uargs) |
4873 | +SYSCALL_DEFINE3(init_module, void __user *, umod, |
4874 | + unsigned long, len, const char __user *, uargs) |
4875 | { |
4876 | struct module *mod; |
4877 | int ret = 0; |
4878 | diff --git a/kernel/posix-timers.c b/kernel/posix-timers.c |
4879 | index 5131e54..24ae236 100644 |
4880 | --- a/kernel/posix-timers.c |
4881 | +++ b/kernel/posix-timers.c |
4882 | @@ -463,10 +463,9 @@ static void release_posix_timer(struct k_itimer *tmr, int it_id_set) |
4883 | |
4884 | /* Create a POSIX.1b interval timer. */ |
4885 | |
4886 | -asmlinkage long |
4887 | -sys_timer_create(const clockid_t which_clock, |
4888 | - struct sigevent __user *timer_event_spec, |
4889 | - timer_t __user * created_timer_id) |
4890 | +SYSCALL_DEFINE3(timer_create, const clockid_t, which_clock, |
4891 | + struct sigevent __user *, timer_event_spec, |
4892 | + timer_t __user *, created_timer_id) |
4893 | { |
4894 | int error = 0; |
4895 | struct k_itimer *new_timer = NULL; |
4896 | @@ -682,8 +681,8 @@ common_timer_get(struct k_itimer *timr, struct itimerspec *cur_setting) |
4897 | } |
4898 | |
4899 | /* Get the time remaining on a POSIX.1b interval timer. */ |
4900 | -asmlinkage long |
4901 | -sys_timer_gettime(timer_t timer_id, struct itimerspec __user *setting) |
4902 | +SYSCALL_DEFINE2(timer_gettime, timer_t, timer_id, |
4903 | + struct itimerspec __user *, setting) |
4904 | { |
4905 | struct k_itimer *timr; |
4906 | struct itimerspec cur_setting; |
4907 | @@ -712,8 +711,7 @@ sys_timer_gettime(timer_t timer_id, struct itimerspec __user *setting) |
4908 | * the call back to do_schedule_next_timer(). So all we need to do is |
4909 | * to pick up the frozen overrun. |
4910 | */ |
4911 | -asmlinkage long |
4912 | -sys_timer_getoverrun(timer_t timer_id) |
4913 | +SYSCALL_DEFINE1(timer_getoverrun, timer_t, timer_id) |
4914 | { |
4915 | struct k_itimer *timr; |
4916 | int overrun; |
4917 | @@ -783,10 +781,9 @@ common_timer_set(struct k_itimer *timr, int flags, |
4918 | } |
4919 | |
4920 | /* Set a POSIX.1b interval timer */ |
4921 | -asmlinkage long |
4922 | -sys_timer_settime(timer_t timer_id, int flags, |
4923 | - const struct itimerspec __user *new_setting, |
4924 | - struct itimerspec __user *old_setting) |
4925 | +SYSCALL_DEFINE4(timer_settime, timer_t, timer_id, int, flags, |
4926 | + const struct itimerspec __user *, new_setting, |
4927 | + struct itimerspec __user *, old_setting) |
4928 | { |
4929 | struct k_itimer *timr; |
4930 | struct itimerspec new_spec, old_spec; |
4931 | @@ -839,8 +836,7 @@ static inline int timer_delete_hook(struct k_itimer *timer) |
4932 | } |
4933 | |
4934 | /* Delete a POSIX.1b interval timer. */ |
4935 | -asmlinkage long |
4936 | -sys_timer_delete(timer_t timer_id) |
4937 | +SYSCALL_DEFINE1(timer_delete, timer_t, timer_id) |
4938 | { |
4939 | struct k_itimer *timer; |
4940 | unsigned long flags; |
4941 | @@ -930,8 +926,8 @@ int do_posix_clock_nonanosleep(const clockid_t clock, int flags, |
4942 | } |
4943 | EXPORT_SYMBOL_GPL(do_posix_clock_nonanosleep); |
4944 | |
4945 | -asmlinkage long sys_clock_settime(const clockid_t which_clock, |
4946 | - const struct timespec __user *tp) |
4947 | +SYSCALL_DEFINE2(clock_settime, const clockid_t, which_clock, |
4948 | + const struct timespec __user *, tp) |
4949 | { |
4950 | struct timespec new_tp; |
4951 | |
4952 | @@ -943,8 +939,8 @@ asmlinkage long sys_clock_settime(const clockid_t which_clock, |
4953 | return CLOCK_DISPATCH(which_clock, clock_set, (which_clock, &new_tp)); |
4954 | } |
4955 | |
4956 | -asmlinkage long |
4957 | -sys_clock_gettime(const clockid_t which_clock, struct timespec __user *tp) |
4958 | +SYSCALL_DEFINE2(clock_gettime, const clockid_t, which_clock, |
4959 | + struct timespec __user *,tp) |
4960 | { |
4961 | struct timespec kernel_tp; |
4962 | int error; |
4963 | @@ -960,8 +956,8 @@ sys_clock_gettime(const clockid_t which_clock, struct timespec __user *tp) |
4964 | |
4965 | } |
4966 | |
4967 | -asmlinkage long |
4968 | -sys_clock_getres(const clockid_t which_clock, struct timespec __user *tp) |
4969 | +SYSCALL_DEFINE2(clock_getres, const clockid_t, which_clock, |
4970 | + struct timespec __user *, tp) |
4971 | { |
4972 | struct timespec rtn_tp; |
4973 | int error; |
4974 | @@ -990,10 +986,9 @@ static int common_nsleep(const clockid_t which_clock, int flags, |
4975 | which_clock); |
4976 | } |
4977 | |
4978 | -asmlinkage long |
4979 | -sys_clock_nanosleep(const clockid_t which_clock, int flags, |
4980 | - const struct timespec __user *rqtp, |
4981 | - struct timespec __user *rmtp) |
4982 | +SYSCALL_DEFINE4(clock_nanosleep, const clockid_t, which_clock, int, flags, |
4983 | + const struct timespec __user *, rqtp, |
4984 | + struct timespec __user *, rmtp) |
4985 | { |
4986 | struct timespec t; |
4987 | |
4988 | diff --git a/kernel/printk.c b/kernel/printk.c |
4989 | index b51b156..0084812 100644 |
4990 | --- a/kernel/printk.c |
4991 | +++ b/kernel/printk.c |
4992 | @@ -421,7 +421,7 @@ out: |
4993 | return error; |
4994 | } |
4995 | |
4996 | -asmlinkage long sys_syslog(int type, char __user *buf, int len) |
4997 | +SYSCALL_DEFINE3(syslog, int, type, char __user *, buf, int, len) |
4998 | { |
4999 | return do_syslog(type, buf, len); |
5000 | } |
5001 | @@ -782,11 +782,6 @@ EXPORT_SYMBOL(vprintk); |
5002 | |
5003 | #else |
5004 | |
5005 | -asmlinkage long sys_syslog(int type, char __user *buf, int len) |
5006 | -{ |
5007 | - return -ENOSYS; |
5008 | -} |
5009 | - |
5010 | static void call_console_drivers(unsigned start, unsigned end) |
5011 | { |
5012 | } |
5013 | diff --git a/kernel/ptrace.c b/kernel/ptrace.c |
5014 | index 356699a..85c1983 100644 |
5015 | --- a/kernel/ptrace.c |
5016 | +++ b/kernel/ptrace.c |
5017 | @@ -545,7 +545,7 @@ struct task_struct *ptrace_get_task_struct(pid_t pid) |
5018 | #define arch_ptrace_attach(child) do { } while (0) |
5019 | #endif |
5020 | |
5021 | -asmlinkage long sys_ptrace(long request, long pid, long addr, long data) |
5022 | +SYSCALL_DEFINE4(ptrace, long, request, long, pid, long, addr, long, data) |
5023 | { |
5024 | struct task_struct *child; |
5025 | long ret; |
5026 | diff --git a/kernel/sched.c b/kernel/sched.c |
5027 | index 92c0a70..2a09e44 100644 |
5028 | --- a/kernel/sched.c |
5029 | +++ b/kernel/sched.c |
5030 | @@ -4942,7 +4942,7 @@ int can_nice(const struct task_struct *p, const int nice) |
5031 | * sys_setpriority is a more generic, but much slower function that |
5032 | * does similar things. |
5033 | */ |
5034 | -asmlinkage long sys_nice(int increment) |
5035 | +SYSCALL_DEFINE1(nice, int, increment) |
5036 | { |
5037 | long nice, retval; |
5038 | |
5039 | @@ -5233,8 +5233,8 @@ do_sched_setscheduler(pid_t pid, int policy, struct sched_param __user *param) |
5040 | * @policy: new policy. |
5041 | * @param: structure containing the new RT priority. |
5042 | */ |
5043 | -asmlinkage long |
5044 | -sys_sched_setscheduler(pid_t pid, int policy, struct sched_param __user *param) |
5045 | +SYSCALL_DEFINE3(sched_setscheduler, pid_t, pid, int, policy, |
5046 | + struct sched_param __user *, param) |
5047 | { |
5048 | /* negative values for policy are not valid */ |
5049 | if (policy < 0) |
5050 | @@ -5248,7 +5248,7 @@ sys_sched_setscheduler(pid_t pid, int policy, struct sched_param __user *param) |
5051 | * @pid: the pid in question. |
5052 | * @param: structure containing the new RT priority. |
5053 | */ |
5054 | -asmlinkage long sys_sched_setparam(pid_t pid, struct sched_param __user *param) |
5055 | +SYSCALL_DEFINE2(sched_setparam, pid_t, pid, struct sched_param __user *, param) |
5056 | { |
5057 | return do_sched_setscheduler(pid, -1, param); |
5058 | } |
5059 | @@ -5257,7 +5257,7 @@ asmlinkage long sys_sched_setparam(pid_t pid, struct sched_param __user *param) |
5060 | * sys_sched_getscheduler - get the policy (scheduling class) of a thread |
5061 | * @pid: the pid in question. |
5062 | */ |
5063 | -asmlinkage long sys_sched_getscheduler(pid_t pid) |
5064 | +SYSCALL_DEFINE1(sched_getscheduler, pid_t, pid) |
5065 | { |
5066 | struct task_struct *p; |
5067 | int retval; |
5068 | @@ -5282,7 +5282,7 @@ asmlinkage long sys_sched_getscheduler(pid_t pid) |
5069 | * @pid: the pid in question. |
5070 | * @param: structure containing the RT priority. |
5071 | */ |
5072 | -asmlinkage long sys_sched_getparam(pid_t pid, struct sched_param __user *param) |
5073 | +SYSCALL_DEFINE2(sched_getparam, pid_t, pid, struct sched_param __user *, param) |
5074 | { |
5075 | struct sched_param lp; |
5076 | struct task_struct *p; |
5077 | @@ -5390,8 +5390,8 @@ static int get_user_cpu_mask(unsigned long __user *user_mask_ptr, unsigned len, |
5078 | * @len: length in bytes of the bitmask pointed to by user_mask_ptr |
5079 | * @user_mask_ptr: user-space pointer to the new cpu mask |
5080 | */ |
5081 | -asmlinkage long sys_sched_setaffinity(pid_t pid, unsigned int len, |
5082 | - unsigned long __user *user_mask_ptr) |
5083 | +SYSCALL_DEFINE3(sched_setaffinity, pid_t, pid, unsigned int, len, |
5084 | + unsigned long __user *, user_mask_ptr) |
5085 | { |
5086 | cpumask_t new_mask; |
5087 | int retval; |
5088 | @@ -5435,8 +5435,8 @@ out_unlock: |
5089 | * @len: length in bytes of the bitmask pointed to by user_mask_ptr |
5090 | * @user_mask_ptr: user-space pointer to hold the current cpu mask |
5091 | */ |
5092 | -asmlinkage long sys_sched_getaffinity(pid_t pid, unsigned int len, |
5093 | - unsigned long __user *user_mask_ptr) |
5094 | +SYSCALL_DEFINE3(sched_getaffinity, pid_t, pid, unsigned int, len, |
5095 | + unsigned long __user *, user_mask_ptr) |
5096 | { |
5097 | int ret; |
5098 | cpumask_t mask; |
5099 | @@ -5460,7 +5460,7 @@ asmlinkage long sys_sched_getaffinity(pid_t pid, unsigned int len, |
5100 | * This function yields the current CPU to other tasks. If there are no |
5101 | * other threads running on this CPU then this function will return. |
5102 | */ |
5103 | -asmlinkage long sys_sched_yield(void) |
5104 | +SYSCALL_DEFINE0(sched_yield) |
5105 | { |
5106 | struct rq *rq = this_rq_lock(); |
5107 | |
5108 | @@ -5601,7 +5601,7 @@ long __sched io_schedule_timeout(long timeout) |
5109 | * this syscall returns the maximum rt_priority that can be used |
5110 | * by a given scheduling class. |
5111 | */ |
5112 | -asmlinkage long sys_sched_get_priority_max(int policy) |
5113 | +SYSCALL_DEFINE1(sched_get_priority_max, int, policy) |
5114 | { |
5115 | int ret = -EINVAL; |
5116 | |
5117 | @@ -5626,7 +5626,7 @@ asmlinkage long sys_sched_get_priority_max(int policy) |
5118 | * this syscall returns the minimum rt_priority that can be used |
5119 | * by a given scheduling class. |
5120 | */ |
5121 | -asmlinkage long sys_sched_get_priority_min(int policy) |
5122 | +SYSCALL_DEFINE1(sched_get_priority_min, int, policy) |
5123 | { |
5124 | int ret = -EINVAL; |
5125 | |
5126 | @@ -5651,8 +5651,8 @@ asmlinkage long sys_sched_get_priority_min(int policy) |
5127 | * this syscall writes the default timeslice value of a given process |
5128 | * into the user-space timespec buffer. A value of '0' means infinity. |
5129 | */ |
5130 | -asmlinkage |
5131 | -long sys_sched_rr_get_interval(pid_t pid, struct timespec __user *interval) |
5132 | +SYSCALL_DEFINE2(sched_rr_get_interval, pid_t, pid, |
5133 | + struct timespec __user *, interval) |
5134 | { |
5135 | struct task_struct *p; |
5136 | unsigned int time_slice; |
5137 | diff --git a/kernel/sched_clock.c b/kernel/sched_clock.c |
5138 | index e8ab096..a0b0852 100644 |
5139 | --- a/kernel/sched_clock.c |
5140 | +++ b/kernel/sched_clock.c |
5141 | @@ -124,7 +124,7 @@ static u64 __update_sched_clock(struct sched_clock_data *scd, u64 now) |
5142 | |
5143 | clock = scd->tick_gtod + delta; |
5144 | min_clock = wrap_max(scd->tick_gtod, scd->clock); |
5145 | - max_clock = scd->tick_gtod + TICK_NSEC; |
5146 | + max_clock = wrap_max(scd->clock, scd->tick_gtod + TICK_NSEC); |
5147 | |
5148 | clock = wrap_max(clock, min_clock); |
5149 | clock = wrap_min(clock, max_clock); |
5150 | @@ -227,6 +227,9 @@ EXPORT_SYMBOL_GPL(sched_clock_idle_sleep_event); |
5151 | */ |
5152 | void sched_clock_idle_wakeup_event(u64 delta_ns) |
5153 | { |
5154 | + if (timekeeping_suspended) |
5155 | + return; |
5156 | + |
5157 | sched_clock_tick(); |
5158 | touch_softlockup_watchdog(); |
5159 | } |
5160 | diff --git a/kernel/signal.c b/kernel/signal.c |
5161 | index e661b01..6f06f43 100644 |
5162 | --- a/kernel/signal.c |
5163 | +++ b/kernel/signal.c |
5164 | @@ -1936,7 +1936,7 @@ EXPORT_SYMBOL(unblock_all_signals); |
5165 | * System call entry points. |
5166 | */ |
5167 | |
5168 | -asmlinkage long sys_restart_syscall(void) |
5169 | +SYSCALL_DEFINE0(restart_syscall) |
5170 | { |
5171 | struct restart_block *restart = ¤t_thread_info()->restart_block; |
5172 | return restart->fn(restart); |
5173 | @@ -1989,8 +1989,8 @@ int sigprocmask(int how, sigset_t *set, sigset_t *oldset) |
5174 | return error; |
5175 | } |
5176 | |
5177 | -asmlinkage long |
5178 | -sys_rt_sigprocmask(int how, sigset_t __user *set, sigset_t __user *oset, size_t sigsetsize) |
5179 | +SYSCALL_DEFINE4(rt_sigprocmask, int, how, sigset_t __user *, set, |
5180 | + sigset_t __user *, oset, size_t, sigsetsize) |
5181 | { |
5182 | int error = -EINVAL; |
5183 | sigset_t old_set, new_set; |
5184 | @@ -2049,8 +2049,7 @@ out: |
5185 | return error; |
5186 | } |
5187 | |
5188 | -asmlinkage long |
5189 | -sys_rt_sigpending(sigset_t __user *set, size_t sigsetsize) |
5190 | +SYSCALL_DEFINE2(rt_sigpending, sigset_t __user *, set, size_t, sigsetsize) |
5191 | { |
5192 | return do_sigpending(set, sigsetsize); |
5193 | } |
5194 | @@ -2121,11 +2120,9 @@ int copy_siginfo_to_user(siginfo_t __user *to, siginfo_t *from) |
5195 | |
5196 | #endif |
5197 | |
5198 | -asmlinkage long |
5199 | -sys_rt_sigtimedwait(const sigset_t __user *uthese, |
5200 | - siginfo_t __user *uinfo, |
5201 | - const struct timespec __user *uts, |
5202 | - size_t sigsetsize) |
5203 | +SYSCALL_DEFINE4(rt_sigtimedwait, const sigset_t __user *, uthese, |
5204 | + siginfo_t __user *, uinfo, const struct timespec __user *, uts, |
5205 | + size_t, sigsetsize) |
5206 | { |
5207 | int ret, sig; |
5208 | sigset_t these; |
5209 | @@ -2198,8 +2195,7 @@ sys_rt_sigtimedwait(const sigset_t __user *uthese, |
5210 | return ret; |
5211 | } |
5212 | |
5213 | -asmlinkage long |
5214 | -sys_kill(pid_t pid, int sig) |
5215 | +SYSCALL_DEFINE2(kill, pid_t, pid, int, sig) |
5216 | { |
5217 | struct siginfo info; |
5218 | |
5219 | @@ -2258,7 +2254,7 @@ static int do_tkill(pid_t tgid, pid_t pid, int sig) |
5220 | * exists but it's not belonging to the target process anymore. This |
5221 | * method solves the problem of threads exiting and PIDs getting reused. |
5222 | */ |
5223 | -asmlinkage long sys_tgkill(pid_t tgid, pid_t pid, int sig) |
5224 | +SYSCALL_DEFINE3(tgkill, pid_t, tgid, pid_t, pid, int, sig) |
5225 | { |
5226 | /* This is only valid for single tasks */ |
5227 | if (pid <= 0 || tgid <= 0) |
5228 | @@ -2270,8 +2266,7 @@ asmlinkage long sys_tgkill(pid_t tgid, pid_t pid, int sig) |
5229 | /* |
5230 | * Send a signal to only one task, even if it's a CLONE_THREAD task. |
5231 | */ |
5232 | -asmlinkage long |
5233 | -sys_tkill(pid_t pid, int sig) |
5234 | +SYSCALL_DEFINE2(tkill, pid_t, pid, int, sig) |
5235 | { |
5236 | /* This is only valid for single tasks */ |
5237 | if (pid <= 0) |
5238 | @@ -2280,8 +2275,8 @@ sys_tkill(pid_t pid, int sig) |
5239 | return do_tkill(0, pid, sig); |
5240 | } |
5241 | |
5242 | -asmlinkage long |
5243 | -sys_rt_sigqueueinfo(pid_t pid, int sig, siginfo_t __user *uinfo) |
5244 | +SYSCALL_DEFINE3(rt_sigqueueinfo, pid_t, pid, int, sig, |
5245 | + siginfo_t __user *, uinfo) |
5246 | { |
5247 | siginfo_t info; |
5248 | |
5249 | @@ -2409,8 +2404,7 @@ out: |
5250 | |
5251 | #ifdef __ARCH_WANT_SYS_SIGPENDING |
5252 | |
5253 | -asmlinkage long |
5254 | -sys_sigpending(old_sigset_t __user *set) |
5255 | +SYSCALL_DEFINE1(sigpending, old_sigset_t __user *, set) |
5256 | { |
5257 | return do_sigpending(set, sizeof(*set)); |
5258 | } |
5259 | @@ -2421,8 +2415,8 @@ sys_sigpending(old_sigset_t __user *set) |
5260 | /* Some platforms have their own version with special arguments others |
5261 | support only sys_rt_sigprocmask. */ |
5262 | |
5263 | -asmlinkage long |
5264 | -sys_sigprocmask(int how, old_sigset_t __user *set, old_sigset_t __user *oset) |
5265 | +SYSCALL_DEFINE3(sigprocmask, int, how, old_sigset_t __user *, set, |
5266 | + old_sigset_t __user *, oset) |
5267 | { |
5268 | int error; |
5269 | old_sigset_t old_set, new_set; |
5270 | @@ -2472,11 +2466,10 @@ out: |
5271 | #endif /* __ARCH_WANT_SYS_SIGPROCMASK */ |
5272 | |
5273 | #ifdef __ARCH_WANT_SYS_RT_SIGACTION |
5274 | -asmlinkage long |
5275 | -sys_rt_sigaction(int sig, |
5276 | - const struct sigaction __user *act, |
5277 | - struct sigaction __user *oact, |
5278 | - size_t sigsetsize) |
5279 | +SYSCALL_DEFINE4(rt_sigaction, int, sig, |
5280 | + const struct sigaction __user *, act, |
5281 | + struct sigaction __user *, oact, |
5282 | + size_t, sigsetsize) |
5283 | { |
5284 | struct k_sigaction new_sa, old_sa; |
5285 | int ret = -EINVAL; |
5286 | @@ -2506,15 +2499,13 @@ out: |
5287 | /* |
5288 | * For backwards compatibility. Functionality superseded by sigprocmask. |
5289 | */ |
5290 | -asmlinkage long |
5291 | -sys_sgetmask(void) |
5292 | +SYSCALL_DEFINE0(sgetmask) |
5293 | { |
5294 | /* SMP safe */ |
5295 | return current->blocked.sig[0]; |
5296 | } |
5297 | |
5298 | -asmlinkage long |
5299 | -sys_ssetmask(int newmask) |
5300 | +SYSCALL_DEFINE1(ssetmask, int, newmask) |
5301 | { |
5302 | int old; |
5303 | |
5304 | @@ -2534,8 +2525,7 @@ sys_ssetmask(int newmask) |
5305 | /* |
5306 | * For backwards compatibility. Functionality superseded by sigaction. |
5307 | */ |
5308 | -asmlinkage unsigned long |
5309 | -sys_signal(int sig, __sighandler_t handler) |
5310 | +SYSCALL_DEFINE2(signal, int, sig, __sighandler_t, handler) |
5311 | { |
5312 | struct k_sigaction new_sa, old_sa; |
5313 | int ret; |
5314 | @@ -2552,8 +2542,7 @@ sys_signal(int sig, __sighandler_t handler) |
5315 | |
5316 | #ifdef __ARCH_WANT_SYS_PAUSE |
5317 | |
5318 | -asmlinkage long |
5319 | -sys_pause(void) |
5320 | +SYSCALL_DEFINE0(pause) |
5321 | { |
5322 | current->state = TASK_INTERRUPTIBLE; |
5323 | schedule(); |
5324 | @@ -2563,7 +2552,7 @@ sys_pause(void) |
5325 | #endif |
5326 | |
5327 | #ifdef __ARCH_WANT_SYS_RT_SIGSUSPEND |
5328 | -asmlinkage long sys_rt_sigsuspend(sigset_t __user *unewset, size_t sigsetsize) |
5329 | +SYSCALL_DEFINE2(rt_sigsuspend, sigset_t __user *, unewset, size_t, sigsetsize) |
5330 | { |
5331 | sigset_t newset; |
5332 | |
5333 | diff --git a/kernel/sys.c b/kernel/sys.c |
5334 | index 038a7bc..10a263b 100644 |
5335 | --- a/kernel/sys.c |
5336 | +++ b/kernel/sys.c |
5337 | @@ -137,7 +137,7 @@ out: |
5338 | return error; |
5339 | } |
5340 | |
5341 | -asmlinkage long sys_setpriority(int which, int who, int niceval) |
5342 | +SYSCALL_DEFINE3(setpriority, int, which, int, who, int, niceval) |
5343 | { |
5344 | struct task_struct *g, *p; |
5345 | struct user_struct *user; |
5346 | @@ -201,7 +201,7 @@ out: |
5347 | * has been offset by 20 (ie it returns 40..1 instead of -20..19) |
5348 | * to stay compatible. |
5349 | */ |
5350 | -asmlinkage long sys_getpriority(int which, int who) |
5351 | +SYSCALL_DEFINE2(getpriority, int, which, int, who) |
5352 | { |
5353 | struct task_struct *g, *p; |
5354 | struct user_struct *user; |
5355 | @@ -347,7 +347,8 @@ EXPORT_SYMBOL_GPL(kernel_power_off); |
5356 | * |
5357 | * reboot doesn't sync: do that yourself before calling this. |
5358 | */ |
5359 | -asmlinkage long sys_reboot(int magic1, int magic2, unsigned int cmd, void __user * arg) |
5360 | +SYSCALL_DEFINE4(reboot, int, magic1, int, magic2, unsigned int, cmd, |
5361 | + void __user *, arg) |
5362 | { |
5363 | char buffer[256]; |
5364 | |
5365 | @@ -470,7 +471,7 @@ void ctrl_alt_del(void) |
5366 | * SMP: There are not races, the GIDs are checked only by filesystem |
5367 | * operations (as far as semantic preservation is concerned). |
5368 | */ |
5369 | -asmlinkage long sys_setregid(gid_t rgid, gid_t egid) |
5370 | +SYSCALL_DEFINE2(setregid, gid_t, rgid, gid_t, egid) |
5371 | { |
5372 | int old_rgid = current->gid; |
5373 | int old_egid = current->egid; |
5374 | @@ -519,7 +520,7 @@ asmlinkage long sys_setregid(gid_t rgid, gid_t egid) |
5375 | * |
5376 | * SMP: Same implicit races as above. |
5377 | */ |
5378 | -asmlinkage long sys_setgid(gid_t gid) |
5379 | +SYSCALL_DEFINE1(setgid, gid_t, gid) |
5380 | { |
5381 | int old_egid = current->egid; |
5382 | int retval; |
5383 | @@ -589,7 +590,7 @@ static int set_user(uid_t new_ruid, int dumpclear) |
5384 | * 100% compatible with BSD. A program which uses just setuid() will be |
5385 | * 100% compatible with POSIX with saved IDs. |
5386 | */ |
5387 | -asmlinkage long sys_setreuid(uid_t ruid, uid_t euid) |
5388 | +SYSCALL_DEFINE2(setreuid, uid_t, ruid, uid_t, euid) |
5389 | { |
5390 | int old_ruid, old_euid, old_suid, new_ruid, new_euid; |
5391 | int retval; |
5392 | @@ -651,7 +652,7 @@ asmlinkage long sys_setreuid(uid_t ruid, uid_t euid) |
5393 | * will allow a root program to temporarily drop privileges and be able to |
5394 | * regain them by swapping the real and effective uid. |
5395 | */ |
5396 | -asmlinkage long sys_setuid(uid_t uid) |
5397 | +SYSCALL_DEFINE1(setuid, uid_t, uid) |
5398 | { |
5399 | int old_euid = current->euid; |
5400 | int old_ruid, old_suid, new_suid; |
5401 | @@ -690,7 +691,7 @@ asmlinkage long sys_setuid(uid_t uid) |
5402 | * This function implements a generic ability to update ruid, euid, |
5403 | * and suid. This allows you to implement the 4.4 compatible seteuid(). |
5404 | */ |
5405 | -asmlinkage long sys_setresuid(uid_t ruid, uid_t euid, uid_t suid) |
5406 | +SYSCALL_DEFINE3(setresuid, uid_t, ruid, uid_t, euid, uid_t, suid) |
5407 | { |
5408 | int old_ruid = current->uid; |
5409 | int old_euid = current->euid; |
5410 | @@ -733,7 +734,7 @@ asmlinkage long sys_setresuid(uid_t ruid, uid_t euid, uid_t suid) |
5411 | return security_task_post_setuid(old_ruid, old_euid, old_suid, LSM_SETID_RES); |
5412 | } |
5413 | |
5414 | -asmlinkage long sys_getresuid(uid_t __user *ruid, uid_t __user *euid, uid_t __user *suid) |
5415 | +SYSCALL_DEFINE3(getresuid, uid_t __user *, ruid, uid_t __user *, euid, uid_t __user *, suid) |
5416 | { |
5417 | int retval; |
5418 | |
5419 | @@ -747,7 +748,7 @@ asmlinkage long sys_getresuid(uid_t __user *ruid, uid_t __user *euid, uid_t __us |
5420 | /* |
5421 | * Same as above, but for rgid, egid, sgid. |
5422 | */ |
5423 | -asmlinkage long sys_setresgid(gid_t rgid, gid_t egid, gid_t sgid) |
5424 | +SYSCALL_DEFINE3(setresgid, gid_t, rgid, gid_t, egid, gid_t, sgid) |
5425 | { |
5426 | int retval; |
5427 | |
5428 | @@ -784,7 +785,7 @@ asmlinkage long sys_setresgid(gid_t rgid, gid_t egid, gid_t sgid) |
5429 | return 0; |
5430 | } |
5431 | |
5432 | -asmlinkage long sys_getresgid(gid_t __user *rgid, gid_t __user *egid, gid_t __user *sgid) |
5433 | +SYSCALL_DEFINE3(getresgid, gid_t __user *, rgid, gid_t __user *, egid, gid_t __user *, sgid) |
5434 | { |
5435 | int retval; |
5436 | |
5437 | @@ -802,7 +803,7 @@ asmlinkage long sys_getresgid(gid_t __user *rgid, gid_t __user *egid, gid_t __us |
5438 | * whatever uid it wants to). It normally shadows "euid", except when |
5439 | * explicitly set by setfsuid() or for access.. |
5440 | */ |
5441 | -asmlinkage long sys_setfsuid(uid_t uid) |
5442 | +SYSCALL_DEFINE1(setfsuid, uid_t, uid) |
5443 | { |
5444 | int old_fsuid; |
5445 | |
5446 | @@ -831,7 +832,7 @@ asmlinkage long sys_setfsuid(uid_t uid) |
5447 | /* |
5448 | * Samma på svenska.. |
5449 | */ |
5450 | -asmlinkage long sys_setfsgid(gid_t gid) |
5451 | +SYSCALL_DEFINE1(setfsgid, gid_t, gid) |
5452 | { |
5453 | int old_fsgid; |
5454 | |
5455 | @@ -853,7 +854,7 @@ asmlinkage long sys_setfsgid(gid_t gid) |
5456 | return old_fsgid; |
5457 | } |
5458 | |
5459 | -asmlinkage long sys_times(struct tms __user * tbuf) |
5460 | +SYSCALL_DEFINE1(times, struct tms __user *, tbuf) |
5461 | { |
5462 | /* |
5463 | * In the SMP world we might just be unlucky and have one of |
5464 | @@ -903,7 +904,7 @@ asmlinkage long sys_times(struct tms __user * tbuf) |
5465 | * Auch. Had to add the 'did_exec' flag to conform completely to POSIX. |
5466 | * LBT 04.03.94 |
5467 | */ |
5468 | -asmlinkage long sys_setpgid(pid_t pid, pid_t pgid) |
5469 | +SYSCALL_DEFINE2(setpgid, pid_t, pid, pid_t, pgid) |
5470 | { |
5471 | struct task_struct *p; |
5472 | struct task_struct *group_leader = current->group_leader; |
5473 | @@ -974,7 +975,7 @@ out: |
5474 | return err; |
5475 | } |
5476 | |
5477 | -asmlinkage long sys_getpgid(pid_t pid) |
5478 | +SYSCALL_DEFINE1(getpgid, pid_t, pid) |
5479 | { |
5480 | struct task_struct *p; |
5481 | struct pid *grp; |
5482 | @@ -1004,14 +1005,14 @@ out: |
5483 | |
5484 | #ifdef __ARCH_WANT_SYS_GETPGRP |
5485 | |
5486 | -asmlinkage long sys_getpgrp(void) |
5487 | +SYSCALL_DEFINE0(getpgrp) |
5488 | { |
5489 | return sys_getpgid(0); |
5490 | } |
5491 | |
5492 | #endif |
5493 | |
5494 | -asmlinkage long sys_getsid(pid_t pid) |
5495 | +SYSCALL_DEFINE1(getsid, pid_t, pid) |
5496 | { |
5497 | struct task_struct *p; |
5498 | struct pid *sid; |
5499 | @@ -1039,7 +1040,7 @@ out: |
5500 | return retval; |
5501 | } |
5502 | |
5503 | -asmlinkage long sys_setsid(void) |
5504 | +SYSCALL_DEFINE0(setsid) |
5505 | { |
5506 | struct task_struct *group_leader = current->group_leader; |
5507 | struct pid *sid = task_pid(group_leader); |
5508 | @@ -1245,7 +1246,7 @@ int set_current_groups(struct group_info *group_info) |
5509 | |
5510 | EXPORT_SYMBOL(set_current_groups); |
5511 | |
5512 | -asmlinkage long sys_getgroups(int gidsetsize, gid_t __user *grouplist) |
5513 | +SYSCALL_DEFINE2(getgroups, int, gidsetsize, gid_t __user *, grouplist) |
5514 | { |
5515 | int i = 0; |
5516 | |
5517 | @@ -1278,7 +1279,7 @@ out: |
5518 | * without another task interfering. |
5519 | */ |
5520 | |
5521 | -asmlinkage long sys_setgroups(int gidsetsize, gid_t __user *grouplist) |
5522 | +SYSCALL_DEFINE2(setgroups, int, gidsetsize, gid_t __user *, grouplist) |
5523 | { |
5524 | struct group_info *group_info; |
5525 | int retval; |
5526 | @@ -1328,7 +1329,7 @@ EXPORT_SYMBOL(in_egroup_p); |
5527 | |
5528 | DECLARE_RWSEM(uts_sem); |
5529 | |
5530 | -asmlinkage long sys_newuname(struct new_utsname __user * name) |
5531 | +SYSCALL_DEFINE1(newuname, struct new_utsname __user *, name) |
5532 | { |
5533 | int errno = 0; |
5534 | |
5535 | @@ -1339,7 +1340,7 @@ asmlinkage long sys_newuname(struct new_utsname __user * name) |
5536 | return errno; |
5537 | } |
5538 | |
5539 | -asmlinkage long sys_sethostname(char __user *name, int len) |
5540 | +SYSCALL_DEFINE2(sethostname, char __user *, name, int, len) |
5541 | { |
5542 | int errno; |
5543 | char tmp[__NEW_UTS_LEN]; |
5544 | @@ -1361,7 +1362,7 @@ asmlinkage long sys_sethostname(char __user *name, int len) |
5545 | |
5546 | #ifdef __ARCH_WANT_SYS_GETHOSTNAME |
5547 | |
5548 | -asmlinkage long sys_gethostname(char __user *name, int len) |
5549 | +SYSCALL_DEFINE2(gethostname, char __user *, name, int, len) |
5550 | { |
5551 | int i, errno; |
5552 | |
5553 | @@ -1384,7 +1385,7 @@ asmlinkage long sys_gethostname(char __user *name, int len) |
5554 | * Only setdomainname; getdomainname can be implemented by calling |
5555 | * uname() |
5556 | */ |
5557 | -asmlinkage long sys_setdomainname(char __user *name, int len) |
5558 | +SYSCALL_DEFINE2(setdomainname, char __user *, name, int, len) |
5559 | { |
5560 | int errno; |
5561 | char tmp[__NEW_UTS_LEN]; |
5562 | @@ -1405,7 +1406,7 @@ asmlinkage long sys_setdomainname(char __user *name, int len) |
5563 | return errno; |
5564 | } |
5565 | |
5566 | -asmlinkage long sys_getrlimit(unsigned int resource, struct rlimit __user *rlim) |
5567 | +SYSCALL_DEFINE2(getrlimit, unsigned int, resource, struct rlimit __user *, rlim) |
5568 | { |
5569 | if (resource >= RLIM_NLIMITS) |
5570 | return -EINVAL; |
5571 | @@ -1424,7 +1425,8 @@ asmlinkage long sys_getrlimit(unsigned int resource, struct rlimit __user *rlim) |
5572 | * Back compatibility for getrlimit. Needed for some apps. |
5573 | */ |
5574 | |
5575 | -asmlinkage long sys_old_getrlimit(unsigned int resource, struct rlimit __user *rlim) |
5576 | +SYSCALL_DEFINE2(old_getrlimit, unsigned int, resource, |
5577 | + struct rlimit __user *, rlim) |
5578 | { |
5579 | struct rlimit x; |
5580 | if (resource >= RLIM_NLIMITS) |
5581 | @@ -1442,7 +1444,7 @@ asmlinkage long sys_old_getrlimit(unsigned int resource, struct rlimit __user *r |
5582 | |
5583 | #endif |
5584 | |
5585 | -asmlinkage long sys_setrlimit(unsigned int resource, struct rlimit __user *rlim) |
5586 | +SYSCALL_DEFINE2(setrlimit, unsigned int, resource, struct rlimit __user *, rlim) |
5587 | { |
5588 | struct rlimit new_rlim, *old_rlim; |
5589 | unsigned long it_prof_secs; |
5590 | @@ -1618,7 +1620,7 @@ int getrusage(struct task_struct *p, int who, struct rusage __user *ru) |
5591 | return copy_to_user(ru, &r, sizeof(r)) ? -EFAULT : 0; |
5592 | } |
5593 | |
5594 | -asmlinkage long sys_getrusage(int who, struct rusage __user *ru) |
5595 | +SYSCALL_DEFINE2(getrusage, int, who, struct rusage __user *, ru) |
5596 | { |
5597 | if (who != RUSAGE_SELF && who != RUSAGE_CHILDREN && |
5598 | who != RUSAGE_THREAD) |
5599 | @@ -1626,14 +1628,14 @@ asmlinkage long sys_getrusage(int who, struct rusage __user *ru) |
5600 | return getrusage(current, who, ru); |
5601 | } |
5602 | |
5603 | -asmlinkage long sys_umask(int mask) |
5604 | +SYSCALL_DEFINE1(umask, int, mask) |
5605 | { |
5606 | mask = xchg(¤t->fs->umask, mask & S_IRWXUGO); |
5607 | return mask; |
5608 | } |
5609 | |
5610 | -asmlinkage long sys_prctl(int option, unsigned long arg2, unsigned long arg3, |
5611 | - unsigned long arg4, unsigned long arg5) |
5612 | +SYSCALL_DEFINE5(prctl, int, option, unsigned long, arg2, unsigned long, arg3, |
5613 | + unsigned long, arg4, unsigned long, arg5) |
5614 | { |
5615 | long error = 0; |
5616 | |
5617 | @@ -1734,8 +1736,8 @@ asmlinkage long sys_prctl(int option, unsigned long arg2, unsigned long arg3, |
5618 | return error; |
5619 | } |
5620 | |
5621 | -asmlinkage long sys_getcpu(unsigned __user *cpup, unsigned __user *nodep, |
5622 | - struct getcpu_cache __user *unused) |
5623 | +SYSCALL_DEFINE3(getcpu, unsigned __user *, cpup, unsigned __user *, nodep, |
5624 | + struct getcpu_cache __user *, unused) |
5625 | { |
5626 | int err = 0; |
5627 | int cpu = raw_smp_processor_id(); |
5628 | diff --git a/kernel/sys_ni.c b/kernel/sys_ni.c |
5629 | index 08d6e1b..d7b7b45 100644 |
5630 | --- a/kernel/sys_ni.c |
5631 | +++ b/kernel/sys_ni.c |
5632 | @@ -125,6 +125,7 @@ cond_syscall(sys_vm86old); |
5633 | cond_syscall(sys_vm86); |
5634 | cond_syscall(compat_sys_ipc); |
5635 | cond_syscall(compat_sys_sysctl); |
5636 | +cond_syscall(sys_syslog); |
5637 | |
5638 | /* arch-specific weak syscall entries */ |
5639 | cond_syscall(sys_pciconfig_read); |
5640 | diff --git a/kernel/sysctl.c b/kernel/sysctl.c |
5641 | index 6ffbed2..6816e6d 100644 |
5642 | --- a/kernel/sysctl.c |
5643 | +++ b/kernel/sysctl.c |
5644 | @@ -1614,7 +1614,7 @@ int do_sysctl(int __user *name, int nlen, void __user *oldval, size_t __user *ol |
5645 | return error; |
5646 | } |
5647 | |
5648 | -asmlinkage long sys_sysctl(struct __sysctl_args __user *args) |
5649 | +SYSCALL_DEFINE1(sysctl, struct __sysctl_args __user *, args) |
5650 | { |
5651 | struct __sysctl_args tmp; |
5652 | int error; |
5653 | @@ -2925,7 +2925,7 @@ int sysctl_ms_jiffies(struct ctl_table *table, int __user *name, int nlen, |
5654 | #else /* CONFIG_SYSCTL_SYSCALL */ |
5655 | |
5656 | |
5657 | -asmlinkage long sys_sysctl(struct __sysctl_args __user *args) |
5658 | +SYSCALL_DEFINE1(sysctl, struct __sysctl_args __user *, args) |
5659 | { |
5660 | struct __sysctl_args tmp; |
5661 | int error; |
5662 | diff --git a/kernel/time.c b/kernel/time.c |
5663 | index 6a08660..4ed46e3 100644 |
5664 | --- a/kernel/time.c |
5665 | +++ b/kernel/time.c |
5666 | @@ -59,7 +59,7 @@ EXPORT_SYMBOL(sys_tz); |
5667 | * why not move it into the appropriate arch directory (for those |
5668 | * architectures that need it). |
5669 | */ |
5670 | -asmlinkage long sys_time(time_t __user * tloc) |
5671 | +SYSCALL_DEFINE1(time, time_t __user *, tloc) |
5672 | { |
5673 | time_t i = get_seconds(); |
5674 | |
5675 | @@ -77,7 +77,7 @@ asmlinkage long sys_time(time_t __user * tloc) |
5676 | * architectures that need it). |
5677 | */ |
5678 | |
5679 | -asmlinkage long sys_stime(time_t __user *tptr) |
5680 | +SYSCALL_DEFINE1(stime, time_t __user *, tptr) |
5681 | { |
5682 | struct timespec tv; |
5683 | int err; |
5684 | @@ -97,8 +97,8 @@ asmlinkage long sys_stime(time_t __user *tptr) |
5685 | |
5686 | #endif /* __ARCH_WANT_SYS_TIME */ |
5687 | |
5688 | -asmlinkage long sys_gettimeofday(struct timeval __user *tv, |
5689 | - struct timezone __user *tz) |
5690 | +SYSCALL_DEFINE2(gettimeofday, struct timeval __user *, tv, |
5691 | + struct timezone __user *, tz) |
5692 | { |
5693 | if (likely(tv != NULL)) { |
5694 | struct timeval ktv; |
5695 | @@ -182,8 +182,8 @@ int do_sys_settimeofday(struct timespec *tv, struct timezone *tz) |
5696 | return 0; |
5697 | } |
5698 | |
5699 | -asmlinkage long sys_settimeofday(struct timeval __user *tv, |
5700 | - struct timezone __user *tz) |
5701 | +SYSCALL_DEFINE2(settimeofday, struct timeval __user *, tv, |
5702 | + struct timezone __user *, tz) |
5703 | { |
5704 | struct timeval user_tv; |
5705 | struct timespec new_ts; |
5706 | @@ -203,7 +203,7 @@ asmlinkage long sys_settimeofday(struct timeval __user *tv, |
5707 | return do_sys_settimeofday(tv ? &new_ts : NULL, tz ? &new_tz : NULL); |
5708 | } |
5709 | |
5710 | -asmlinkage long sys_adjtimex(struct timex __user *txc_p) |
5711 | +SYSCALL_DEFINE1(adjtimex, struct timex __user *, txc_p) |
5712 | { |
5713 | struct timex txc; /* Local copy of parameter */ |
5714 | int ret; |
5715 | diff --git a/kernel/time/timekeeping.c b/kernel/time/timekeeping.c |
5716 | index e91c29f..4220a2e 100644 |
5717 | --- a/kernel/time/timekeeping.c |
5718 | +++ b/kernel/time/timekeeping.c |
5719 | @@ -46,6 +46,9 @@ struct timespec xtime __attribute__ ((aligned (16))); |
5720 | struct timespec wall_to_monotonic __attribute__ ((aligned (16))); |
5721 | static unsigned long total_sleep_time; /* seconds */ |
5722 | |
5723 | +/* flag for if timekeeping is suspended */ |
5724 | +int __read_mostly timekeeping_suspended; |
5725 | + |
5726 | static struct timespec xtime_cache __attribute__ ((aligned (16))); |
5727 | void update_xtime_cache(u64 nsec) |
5728 | { |
5729 | @@ -92,6 +95,8 @@ void getnstimeofday(struct timespec *ts) |
5730 | unsigned long seq; |
5731 | s64 nsecs; |
5732 | |
5733 | + WARN_ON(timekeeping_suspended); |
5734 | + |
5735 | do { |
5736 | seq = read_seqbegin(&xtime_lock); |
5737 | |
5738 | @@ -261,8 +266,6 @@ void __init timekeeping_init(void) |
5739 | write_sequnlock_irqrestore(&xtime_lock, flags); |
5740 | } |
5741 | |
5742 | -/* flag for if timekeeping is suspended */ |
5743 | -static int timekeeping_suspended; |
5744 | /* time in seconds when suspend began */ |
5745 | static unsigned long timekeeping_suspend_time; |
5746 | /* xtime offset when we went into suspend */ |
5747 | diff --git a/kernel/timer.c b/kernel/timer.c |
5748 | index 03bc7f1..e9a0195 100644 |
5749 | --- a/kernel/timer.c |
5750 | +++ b/kernel/timer.c |
5751 | @@ -1074,7 +1074,7 @@ void do_timer(unsigned long ticks) |
5752 | * For backwards compatibility? This can be done in libc so Alpha |
5753 | * and all newer ports shouldn't need it. |
5754 | */ |
5755 | -asmlinkage unsigned long sys_alarm(unsigned int seconds) |
5756 | +SYSCALL_DEFINE1(alarm, unsigned int, seconds) |
5757 | { |
5758 | return alarm_setitimer(seconds); |
5759 | } |
5760 | @@ -1097,7 +1097,7 @@ asmlinkage unsigned long sys_alarm(unsigned int seconds) |
5761 | * |
5762 | * This is SMP safe as current->tgid does not change. |
5763 | */ |
5764 | -asmlinkage long sys_getpid(void) |
5765 | +SYSCALL_DEFINE0(getpid) |
5766 | { |
5767 | return task_tgid_vnr(current); |
5768 | } |
5769 | @@ -1108,7 +1108,7 @@ asmlinkage long sys_getpid(void) |
5770 | * value of ->real_parent under rcu_read_lock(), see |
5771 | * release_task()->call_rcu(delayed_put_task_struct). |
5772 | */ |
5773 | -asmlinkage long sys_getppid(void) |
5774 | +SYSCALL_DEFINE0(getppid) |
5775 | { |
5776 | int pid; |
5777 | |
5778 | @@ -1119,25 +1119,25 @@ asmlinkage long sys_getppid(void) |
5779 | return pid; |
5780 | } |
5781 | |
5782 | -asmlinkage long sys_getuid(void) |
5783 | +SYSCALL_DEFINE0(getuid) |
5784 | { |
5785 | /* Only we change this so SMP safe */ |
5786 | return current->uid; |
5787 | } |
5788 | |
5789 | -asmlinkage long sys_geteuid(void) |
5790 | +SYSCALL_DEFINE0(geteuid) |
5791 | { |
5792 | /* Only we change this so SMP safe */ |
5793 | return current->euid; |
5794 | } |
5795 | |
5796 | -asmlinkage long sys_getgid(void) |
5797 | +SYSCALL_DEFINE0(getgid) |
5798 | { |
5799 | /* Only we change this so SMP safe */ |
5800 | return current->gid; |
5801 | } |
5802 | |
5803 | -asmlinkage long sys_getegid(void) |
5804 | +SYSCALL_DEFINE0(getegid) |
5805 | { |
5806 | /* Only we change this so SMP safe */ |
5807 | return current->egid; |
5808 | @@ -1253,7 +1253,7 @@ signed long __sched schedule_timeout_uninterruptible(signed long timeout) |
5809 | EXPORT_SYMBOL(schedule_timeout_uninterruptible); |
5810 | |
5811 | /* Thread ID - the internal kernel "pid" */ |
5812 | -asmlinkage long sys_gettid(void) |
5813 | +SYSCALL_DEFINE0(gettid) |
5814 | { |
5815 | return task_pid_vnr(current); |
5816 | } |
5817 | @@ -1345,7 +1345,7 @@ out: |
5818 | return 0; |
5819 | } |
5820 | |
5821 | -asmlinkage long sys_sysinfo(struct sysinfo __user *info) |
5822 | +SYSCALL_DEFINE1(sysinfo, struct sysinfo __user *, info) |
5823 | { |
5824 | struct sysinfo val; |
5825 | |
5826 | diff --git a/kernel/uid16.c b/kernel/uid16.c |
5827 | index 3e41c16..67bb92c 100644 |
5828 | --- a/kernel/uid16.c |
5829 | +++ b/kernel/uid16.c |
5830 | @@ -17,7 +17,7 @@ |
5831 | |
5832 | #include <asm/uaccess.h> |
5833 | |
5834 | -asmlinkage long sys_chown16(const char __user * filename, old_uid_t user, old_gid_t group) |
5835 | +SYSCALL_DEFINE3(chown16, const char __user *, filename, old_uid_t, user, old_gid_t, group) |
5836 | { |
5837 | long ret = sys_chown(filename, low2highuid(user), low2highgid(group)); |
5838 | /* avoid REGPARM breakage on x86: */ |
5839 | @@ -25,7 +25,7 @@ asmlinkage long sys_chown16(const char __user * filename, old_uid_t user, old_gi |
5840 | return ret; |
5841 | } |
5842 | |
5843 | -asmlinkage long sys_lchown16(const char __user * filename, old_uid_t user, old_gid_t group) |
5844 | +SYSCALL_DEFINE3(lchown16, const char __user *, filename, old_uid_t, user, old_gid_t, group) |
5845 | { |
5846 | long ret = sys_lchown(filename, low2highuid(user), low2highgid(group)); |
5847 | /* avoid REGPARM breakage on x86: */ |
5848 | @@ -33,7 +33,7 @@ asmlinkage long sys_lchown16(const char __user * filename, old_uid_t user, old_g |
5849 | return ret; |
5850 | } |
5851 | |
5852 | -asmlinkage long sys_fchown16(unsigned int fd, old_uid_t user, old_gid_t group) |
5853 | +SYSCALL_DEFINE3(fchown16, unsigned int, fd, old_uid_t, user, old_gid_t, group) |
5854 | { |
5855 | long ret = sys_fchown(fd, low2highuid(user), low2highgid(group)); |
5856 | /* avoid REGPARM breakage on x86: */ |
5857 | @@ -41,7 +41,7 @@ asmlinkage long sys_fchown16(unsigned int fd, old_uid_t user, old_gid_t group) |
5858 | return ret; |
5859 | } |
5860 | |
5861 | -asmlinkage long sys_setregid16(old_gid_t rgid, old_gid_t egid) |
5862 | +SYSCALL_DEFINE2(setregid16, old_gid_t, rgid, old_gid_t, egid) |
5863 | { |
5864 | long ret = sys_setregid(low2highgid(rgid), low2highgid(egid)); |
5865 | /* avoid REGPARM breakage on x86: */ |
5866 | @@ -49,7 +49,7 @@ asmlinkage long sys_setregid16(old_gid_t rgid, old_gid_t egid) |
5867 | return ret; |
5868 | } |
5869 | |
5870 | -asmlinkage long sys_setgid16(old_gid_t gid) |
5871 | +SYSCALL_DEFINE1(setgid16, old_gid_t, gid) |
5872 | { |
5873 | long ret = sys_setgid(low2highgid(gid)); |
5874 | /* avoid REGPARM breakage on x86: */ |
5875 | @@ -57,7 +57,7 @@ asmlinkage long sys_setgid16(old_gid_t gid) |
5876 | return ret; |
5877 | } |
5878 | |
5879 | -asmlinkage long sys_setreuid16(old_uid_t ruid, old_uid_t euid) |
5880 | +SYSCALL_DEFINE2(setreuid16, old_uid_t, ruid, old_uid_t, euid) |
5881 | { |
5882 | long ret = sys_setreuid(low2highuid(ruid), low2highuid(euid)); |
5883 | /* avoid REGPARM breakage on x86: */ |
5884 | @@ -65,7 +65,7 @@ asmlinkage long sys_setreuid16(old_uid_t ruid, old_uid_t euid) |
5885 | return ret; |
5886 | } |
5887 | |
5888 | -asmlinkage long sys_setuid16(old_uid_t uid) |
5889 | +SYSCALL_DEFINE1(setuid16, old_uid_t, uid) |
5890 | { |
5891 | long ret = sys_setuid(low2highuid(uid)); |
5892 | /* avoid REGPARM breakage on x86: */ |
5893 | @@ -73,7 +73,7 @@ asmlinkage long sys_setuid16(old_uid_t uid) |
5894 | return ret; |
5895 | } |
5896 | |
5897 | -asmlinkage long sys_setresuid16(old_uid_t ruid, old_uid_t euid, old_uid_t suid) |
5898 | +SYSCALL_DEFINE3(setresuid16, old_uid_t, ruid, old_uid_t, euid, old_uid_t, suid) |
5899 | { |
5900 | long ret = sys_setresuid(low2highuid(ruid), low2highuid(euid), |
5901 | low2highuid(suid)); |
5902 | @@ -82,7 +82,7 @@ asmlinkage long sys_setresuid16(old_uid_t ruid, old_uid_t euid, old_uid_t suid) |
5903 | return ret; |
5904 | } |
5905 | |
5906 | -asmlinkage long sys_getresuid16(old_uid_t __user *ruid, old_uid_t __user *euid, old_uid_t __user *suid) |
5907 | +SYSCALL_DEFINE3(getresuid16, old_uid_t __user *, ruid, old_uid_t __user *, euid, old_uid_t __user *, suid) |
5908 | { |
5909 | int retval; |
5910 | |
5911 | @@ -93,7 +93,7 @@ asmlinkage long sys_getresuid16(old_uid_t __user *ruid, old_uid_t __user *euid, |
5912 | return retval; |
5913 | } |
5914 | |
5915 | -asmlinkage long sys_setresgid16(old_gid_t rgid, old_gid_t egid, old_gid_t sgid) |
5916 | +SYSCALL_DEFINE3(setresgid16, old_gid_t, rgid, old_gid_t, egid, old_gid_t, sgid) |
5917 | { |
5918 | long ret = sys_setresgid(low2highgid(rgid), low2highgid(egid), |
5919 | low2highgid(sgid)); |
5920 | @@ -102,7 +102,8 @@ asmlinkage long sys_setresgid16(old_gid_t rgid, old_gid_t egid, old_gid_t sgid) |
5921 | return ret; |
5922 | } |
5923 | |
5924 | -asmlinkage long sys_getresgid16(old_gid_t __user *rgid, old_gid_t __user *egid, old_gid_t __user *sgid) |
5925 | + |
5926 | +SYSCALL_DEFINE3(getresgid16, old_gid_t __user *, rgid, old_gid_t __user *, egid, old_gid_t __user *, sgid) |
5927 | { |
5928 | int retval; |
5929 | |
5930 | @@ -113,7 +114,7 @@ asmlinkage long sys_getresgid16(old_gid_t __user *rgid, old_gid_t __user *egid, |
5931 | return retval; |
5932 | } |
5933 | |
5934 | -asmlinkage long sys_setfsuid16(old_uid_t uid) |
5935 | +SYSCALL_DEFINE1(setfsuid16, old_uid_t, uid) |
5936 | { |
5937 | long ret = sys_setfsuid(low2highuid(uid)); |
5938 | /* avoid REGPARM breakage on x86: */ |
5939 | @@ -121,7 +122,7 @@ asmlinkage long sys_setfsuid16(old_uid_t uid) |
5940 | return ret; |
5941 | } |
5942 | |
5943 | -asmlinkage long sys_setfsgid16(old_gid_t gid) |
5944 | +SYSCALL_DEFINE1(setfsgid16, old_gid_t, gid) |
5945 | { |
5946 | long ret = sys_setfsgid(low2highgid(gid)); |
5947 | /* avoid REGPARM breakage on x86: */ |
5948 | @@ -159,7 +160,7 @@ static int groups16_from_user(struct group_info *group_info, |
5949 | return 0; |
5950 | } |
5951 | |
5952 | -asmlinkage long sys_getgroups16(int gidsetsize, old_gid_t __user *grouplist) |
5953 | +SYSCALL_DEFINE2(getgroups16, int, gidsetsize, old_gid_t __user *, grouplist) |
5954 | { |
5955 | int i = 0; |
5956 | |
5957 | @@ -183,7 +184,7 @@ out: |
5958 | return i; |
5959 | } |
5960 | |
5961 | -asmlinkage long sys_setgroups16(int gidsetsize, old_gid_t __user *grouplist) |
5962 | +SYSCALL_DEFINE2(setgroups16, int, gidsetsize, old_gid_t __user *, grouplist) |
5963 | { |
5964 | struct group_info *group_info; |
5965 | int retval; |
5966 | @@ -208,22 +209,22 @@ asmlinkage long sys_setgroups16(int gidsetsize, old_gid_t __user *grouplist) |
5967 | return retval; |
5968 | } |
5969 | |
5970 | -asmlinkage long sys_getuid16(void) |
5971 | +SYSCALL_DEFINE0(getuid16) |
5972 | { |
5973 | return high2lowuid(current->uid); |
5974 | } |
5975 | |
5976 | -asmlinkage long sys_geteuid16(void) |
5977 | +SYSCALL_DEFINE0(geteuid16) |
5978 | { |
5979 | return high2lowuid(current->euid); |
5980 | } |
5981 | |
5982 | -asmlinkage long sys_getgid16(void) |
5983 | +SYSCALL_DEFINE0(getgid16) |
5984 | { |
5985 | return high2lowgid(current->gid); |
5986 | } |
5987 | |
5988 | -asmlinkage long sys_getegid16(void) |
5989 | +SYSCALL_DEFINE0(getegid16) |
5990 | { |
5991 | return high2lowgid(current->egid); |
5992 | } |
5993 | diff --git a/mm/fadvise.c b/mm/fadvise.c |
5994 | index 343cfdf..a32a66e 100644 |
5995 | --- a/mm/fadvise.c |
5996 | +++ b/mm/fadvise.c |
5997 | @@ -24,7 +24,7 @@ |
5998 | * POSIX_FADV_WILLNEED could set PG_Referenced, and POSIX_FADV_NOREUSE could |
5999 | * deactivate the pages and clear PG_Referenced. |
6000 | */ |
6001 | -asmlinkage long sys_fadvise64_64(int fd, loff_t offset, loff_t len, int advice) |
6002 | +SYSCALL_DEFINE(fadvise64_64)(int fd, loff_t offset, loff_t len, int advice) |
6003 | { |
6004 | struct file *file = fget(fd); |
6005 | struct address_space *mapping; |
6006 | @@ -126,12 +126,26 @@ out: |
6007 | fput(file); |
6008 | return ret; |
6009 | } |
6010 | +#ifdef CONFIG_HAVE_SYSCALL_WRAPPERS |
6011 | +asmlinkage long SyS_fadvise64_64(long fd, loff_t offset, loff_t len, long advice) |
6012 | +{ |
6013 | + return SYSC_fadvise64_64((int) fd, offset, len, (int) advice); |
6014 | +} |
6015 | +SYSCALL_ALIAS(sys_fadvise64_64, SyS_fadvise64_64); |
6016 | +#endif |
6017 | |
6018 | #ifdef __ARCH_WANT_SYS_FADVISE64 |
6019 | |
6020 | -asmlinkage long sys_fadvise64(int fd, loff_t offset, size_t len, int advice) |
6021 | +SYSCALL_DEFINE(fadvise64)(int fd, loff_t offset, size_t len, int advice) |
6022 | { |
6023 | return sys_fadvise64_64(fd, offset, len, advice); |
6024 | } |
6025 | +#ifdef CONFIG_HAVE_SYSCALL_WRAPPERS |
6026 | +asmlinkage long SyS_fadvise64(long fd, loff_t offset, long len, long advice) |
6027 | +{ |
6028 | + return SYSC_fadvise64((int) fd, offset, (size_t)len, (int)advice); |
6029 | +} |
6030 | +SYSCALL_ALIAS(sys_fadvise64, SyS_fadvise64); |
6031 | +#endif |
6032 | |
6033 | #endif |
6034 | diff --git a/mm/filemap.c b/mm/filemap.c |
6035 | index 876bc59..f3033d0 100644 |
6036 | --- a/mm/filemap.c |
6037 | +++ b/mm/filemap.c |
6038 | @@ -1353,7 +1353,7 @@ do_readahead(struct address_space *mapping, struct file *filp, |
6039 | return 0; |
6040 | } |
6041 | |
6042 | -asmlinkage ssize_t sys_readahead(int fd, loff_t offset, size_t count) |
6043 | +SYSCALL_DEFINE(readahead)(int fd, loff_t offset, size_t count) |
6044 | { |
6045 | ssize_t ret; |
6046 | struct file *file; |
6047 | @@ -1372,6 +1372,13 @@ asmlinkage ssize_t sys_readahead(int fd, loff_t offset, size_t count) |
6048 | } |
6049 | return ret; |
6050 | } |
6051 | +#ifdef CONFIG_HAVE_SYSCALL_WRAPPERS |
6052 | +asmlinkage long SyS_readahead(long fd, loff_t offset, long count) |
6053 | +{ |
6054 | + return SYSC_readahead((int) fd, offset, (size_t) count); |
6055 | +} |
6056 | +SYSCALL_ALIAS(sys_readahead, SyS_readahead); |
6057 | +#endif |
6058 | |
6059 | #ifdef CONFIG_MMU |
6060 | /** |
6061 | @@ -2026,7 +2033,7 @@ int pagecache_write_begin(struct file *file, struct address_space *mapping, |
6062 | struct inode *inode = mapping->host; |
6063 | struct page *page; |
6064 | again: |
6065 | - page = __grab_cache_page(mapping, index); |
6066 | + page = grab_cache_page_write_begin(mapping, index, flags); |
6067 | *pagep = page; |
6068 | if (!page) |
6069 | return -ENOMEM; |
6070 | @@ -2190,19 +2197,24 @@ EXPORT_SYMBOL(generic_file_direct_write); |
6071 | * Find or create a page at the given pagecache position. Return the locked |
6072 | * page. This function is specifically for buffered writes. |
6073 | */ |
6074 | -struct page *__grab_cache_page(struct address_space *mapping, pgoff_t index) |
6075 | +struct page *grab_cache_page_write_begin(struct address_space *mapping, |
6076 | + pgoff_t index, unsigned flags) |
6077 | { |
6078 | int status; |
6079 | struct page *page; |
6080 | + gfp_t gfp_notmask = 0; |
6081 | + if (flags & AOP_FLAG_NOFS) |
6082 | + gfp_notmask = __GFP_FS; |
6083 | repeat: |
6084 | page = find_lock_page(mapping, index); |
6085 | if (likely(page)) |
6086 | return page; |
6087 | |
6088 | - page = page_cache_alloc(mapping); |
6089 | + page = __page_cache_alloc(mapping_gfp_mask(mapping) & ~gfp_notmask); |
6090 | if (!page) |
6091 | return NULL; |
6092 | - status = add_to_page_cache_lru(page, mapping, index, GFP_KERNEL); |
6093 | + status = add_to_page_cache_lru(page, mapping, index, |
6094 | + GFP_KERNEL & ~gfp_notmask); |
6095 | if (unlikely(status)) { |
6096 | page_cache_release(page); |
6097 | if (status == -EEXIST) |
6098 | @@ -2211,7 +2223,7 @@ repeat: |
6099 | } |
6100 | return page; |
6101 | } |
6102 | -EXPORT_SYMBOL(__grab_cache_page); |
6103 | +EXPORT_SYMBOL(grab_cache_page_write_begin); |
6104 | |
6105 | static ssize_t generic_perform_write_2copy(struct file *file, |
6106 | struct iov_iter *i, loff_t pos) |
6107 | @@ -2256,7 +2268,7 @@ static ssize_t generic_perform_write_2copy(struct file *file, |
6108 | break; |
6109 | } |
6110 | |
6111 | - page = __grab_cache_page(mapping, index); |
6112 | + page = grab_cache_page_write_begin(mapping, index, 0); |
6113 | if (!page) { |
6114 | status = -ENOMEM; |
6115 | break; |
6116 | diff --git a/mm/fremap.c b/mm/fremap.c |
6117 | index 7881638..b4a4aa3 100644 |
6118 | --- a/mm/fremap.c |
6119 | +++ b/mm/fremap.c |
6120 | @@ -118,8 +118,8 @@ static int populate_range(struct mm_struct *mm, struct vm_area_struct *vma, |
6121 | * and the vma's default protection is used. Arbitrary protections |
6122 | * might be implemented in the future. |
6123 | */ |
6124 | -asmlinkage long sys_remap_file_pages(unsigned long start, unsigned long size, |
6125 | - unsigned long prot, unsigned long pgoff, unsigned long flags) |
6126 | +SYSCALL_DEFINE5(remap_file_pages, unsigned long, start, unsigned long, size, |
6127 | + unsigned long, prot, unsigned long, pgoff, unsigned long, flags) |
6128 | { |
6129 | struct mm_struct *mm = current->mm; |
6130 | struct address_space *mapping; |
6131 | diff --git a/mm/madvise.c b/mm/madvise.c |
6132 | index f9349c1..b9ce574 100644 |
6133 | --- a/mm/madvise.c |
6134 | +++ b/mm/madvise.c |
6135 | @@ -281,7 +281,7 @@ madvise_vma(struct vm_area_struct *vma, struct vm_area_struct **prev, |
6136 | * -EBADF - map exists, but area maps something that isn't a file. |
6137 | * -EAGAIN - a kernel resource was temporarily unavailable. |
6138 | */ |
6139 | -asmlinkage long sys_madvise(unsigned long start, size_t len_in, int behavior) |
6140 | +SYSCALL_DEFINE3(madvise, unsigned long, start, size_t, len_in, int, behavior) |
6141 | { |
6142 | unsigned long end, tmp; |
6143 | struct vm_area_struct * vma, *prev; |
6144 | diff --git a/mm/mempolicy.c b/mm/mempolicy.c |
6145 | index 8336905..83bea4f 100644 |
6146 | --- a/mm/mempolicy.c |
6147 | +++ b/mm/mempolicy.c |
6148 | @@ -1059,10 +1059,9 @@ static int copy_nodes_to_user(unsigned long __user *mask, unsigned long maxnode, |
6149 | return copy_to_user(mask, nodes_addr(*nodes), copy) ? -EFAULT : 0; |
6150 | } |
6151 | |
6152 | -asmlinkage long sys_mbind(unsigned long start, unsigned long len, |
6153 | - unsigned long mode, |
6154 | - unsigned long __user *nmask, unsigned long maxnode, |
6155 | - unsigned flags) |
6156 | +SYSCALL_DEFINE6(mbind, unsigned long, start, unsigned long, len, |
6157 | + unsigned long, mode, unsigned long __user *, nmask, |
6158 | + unsigned long, maxnode, unsigned, flags) |
6159 | { |
6160 | nodemask_t nodes; |
6161 | int err; |
6162 | @@ -1082,8 +1081,8 @@ asmlinkage long sys_mbind(unsigned long start, unsigned long len, |
6163 | } |
6164 | |
6165 | /* Set the process memory policy */ |
6166 | -asmlinkage long sys_set_mempolicy(int mode, unsigned long __user *nmask, |
6167 | - unsigned long maxnode) |
6168 | +SYSCALL_DEFINE3(set_mempolicy, int, mode, unsigned long __user *, nmask, |
6169 | + unsigned long, maxnode) |
6170 | { |
6171 | int err; |
6172 | nodemask_t nodes; |
6173 | @@ -1101,9 +1100,9 @@ asmlinkage long sys_set_mempolicy(int mode, unsigned long __user *nmask, |
6174 | return do_set_mempolicy(mode, flags, &nodes); |
6175 | } |
6176 | |
6177 | -asmlinkage long sys_migrate_pages(pid_t pid, unsigned long maxnode, |
6178 | - const unsigned long __user *old_nodes, |
6179 | - const unsigned long __user *new_nodes) |
6180 | +SYSCALL_DEFINE4(migrate_pages, pid_t, pid, unsigned long, maxnode, |
6181 | + const unsigned long __user *, old_nodes, |
6182 | + const unsigned long __user *, new_nodes) |
6183 | { |
6184 | struct mm_struct *mm; |
6185 | struct task_struct *task; |
6186 | @@ -1171,10 +1170,9 @@ out: |
6187 | |
6188 | |
6189 | /* Retrieve NUMA policy */ |
6190 | -asmlinkage long sys_get_mempolicy(int __user *policy, |
6191 | - unsigned long __user *nmask, |
6192 | - unsigned long maxnode, |
6193 | - unsigned long addr, unsigned long flags) |
6194 | +SYSCALL_DEFINE5(get_mempolicy, int __user *, policy, |
6195 | + unsigned long __user *, nmask, unsigned long, maxnode, |
6196 | + unsigned long, addr, unsigned long, flags) |
6197 | { |
6198 | int err; |
6199 | int uninitialized_var(pval); |
6200 | diff --git a/mm/migrate.c b/mm/migrate.c |
6201 | index 2a80136..d493c02 100644 |
6202 | --- a/mm/migrate.c |
6203 | +++ b/mm/migrate.c |
6204 | @@ -979,10 +979,10 @@ set_status: |
6205 | * Move a list of pages in the address space of the currently executing |
6206 | * process. |
6207 | */ |
6208 | -asmlinkage long sys_move_pages(pid_t pid, unsigned long nr_pages, |
6209 | - const void __user * __user *pages, |
6210 | - const int __user *nodes, |
6211 | - int __user *status, int flags) |
6212 | +SYSCALL_DEFINE6(move_pages, pid_t, pid, unsigned long, nr_pages, |
6213 | + const void __user * __user *, pages, |
6214 | + const int __user *, nodes, |
6215 | + int __user *, status, int, flags) |
6216 | { |
6217 | int err = 0; |
6218 | int i; |
6219 | diff --git a/mm/mincore.c b/mm/mincore.c |
6220 | index 5178800..8cb508f 100644 |
6221 | --- a/mm/mincore.c |
6222 | +++ b/mm/mincore.c |
6223 | @@ -177,8 +177,8 @@ none_mapped: |
6224 | * mapped |
6225 | * -EAGAIN - A kernel resource was temporarily unavailable. |
6226 | */ |
6227 | -asmlinkage long sys_mincore(unsigned long start, size_t len, |
6228 | - unsigned char __user * vec) |
6229 | +SYSCALL_DEFINE3(mincore, unsigned long, start, size_t, len, |
6230 | + unsigned char __user *, vec) |
6231 | { |
6232 | long retval; |
6233 | unsigned long pages; |
6234 | diff --git a/mm/mlock.c b/mm/mlock.c |
6235 | index 01fbe93..73ee3fa 100644 |
6236 | --- a/mm/mlock.c |
6237 | +++ b/mm/mlock.c |
6238 | @@ -130,7 +130,7 @@ static int do_mlock(unsigned long start, size_t len, int on) |
6239 | return error; |
6240 | } |
6241 | |
6242 | -asmlinkage long sys_mlock(unsigned long start, size_t len) |
6243 | +SYSCALL_DEFINE2(mlock, unsigned long, start, size_t, len) |
6244 | { |
6245 | unsigned long locked; |
6246 | unsigned long lock_limit; |
6247 | @@ -156,7 +156,7 @@ asmlinkage long sys_mlock(unsigned long start, size_t len) |
6248 | return error; |
6249 | } |
6250 | |
6251 | -asmlinkage long sys_munlock(unsigned long start, size_t len) |
6252 | +SYSCALL_DEFINE2(munlock, unsigned long, start, size_t, len) |
6253 | { |
6254 | int ret; |
6255 | |
6256 | @@ -193,7 +193,7 @@ out: |
6257 | return 0; |
6258 | } |
6259 | |
6260 | -asmlinkage long sys_mlockall(int flags) |
6261 | +SYSCALL_DEFINE1(mlockall, int, flags) |
6262 | { |
6263 | unsigned long lock_limit; |
6264 | int ret = -EINVAL; |
6265 | @@ -219,7 +219,7 @@ out: |
6266 | return ret; |
6267 | } |
6268 | |
6269 | -asmlinkage long sys_munlockall(void) |
6270 | +SYSCALL_DEFINE0(munlockall) |
6271 | { |
6272 | int ret; |
6273 | |
6274 | diff --git a/mm/mmap.c b/mm/mmap.c |
6275 | index e7a5a68..ca12a93 100644 |
6276 | --- a/mm/mmap.c |
6277 | +++ b/mm/mmap.c |
6278 | @@ -244,7 +244,7 @@ static struct vm_area_struct *remove_vma(struct vm_area_struct *vma) |
6279 | return next; |
6280 | } |
6281 | |
6282 | -asmlinkage unsigned long sys_brk(unsigned long brk) |
6283 | +SYSCALL_DEFINE1(brk, unsigned long, brk) |
6284 | { |
6285 | unsigned long rlim, retval; |
6286 | unsigned long newbrk, oldbrk; |
6287 | @@ -1927,7 +1927,7 @@ int do_munmap(struct mm_struct *mm, unsigned long start, size_t len) |
6288 | |
6289 | EXPORT_SYMBOL(do_munmap); |
6290 | |
6291 | -asmlinkage long sys_munmap(unsigned long addr, size_t len) |
6292 | +SYSCALL_DEFINE2(munmap, unsigned long, addr, size_t, len) |
6293 | { |
6294 | int ret; |
6295 | struct mm_struct *mm = current->mm; |
6296 | diff --git a/mm/mprotect.c b/mm/mprotect.c |
6297 | index fded06f..2623e29 100644 |
6298 | --- a/mm/mprotect.c |
6299 | +++ b/mm/mprotect.c |
6300 | @@ -219,8 +219,8 @@ fail: |
6301 | return error; |
6302 | } |
6303 | |
6304 | -asmlinkage long |
6305 | -sys_mprotect(unsigned long start, size_t len, unsigned long prot) |
6306 | +SYSCALL_DEFINE3(mprotect, unsigned long, start, size_t, len, |
6307 | + unsigned long, prot) |
6308 | { |
6309 | unsigned long vm_flags, nstart, end, tmp, reqprot; |
6310 | struct vm_area_struct *vma, *prev; |
6311 | diff --git a/mm/mremap.c b/mm/mremap.c |
6312 | index 1a77439..cfdeed9 100644 |
6313 | --- a/mm/mremap.c |
6314 | +++ b/mm/mremap.c |
6315 | @@ -418,9 +418,9 @@ out_nc: |
6316 | return ret; |
6317 | } |
6318 | |
6319 | -asmlinkage unsigned long sys_mremap(unsigned long addr, |
6320 | - unsigned long old_len, unsigned long new_len, |
6321 | - unsigned long flags, unsigned long new_addr) |
6322 | +SYSCALL_DEFINE5(mremap, unsigned long, addr, unsigned long, old_len, |
6323 | + unsigned long, new_len, unsigned long, flags, |
6324 | + unsigned long, new_addr) |
6325 | { |
6326 | unsigned long ret; |
6327 | |
6328 | diff --git a/mm/msync.c b/mm/msync.c |
6329 | index 144a757..9e06d2e 100644 |
6330 | --- a/mm/msync.c |
6331 | +++ b/mm/msync.c |
6332 | @@ -28,7 +28,7 @@ |
6333 | * So by _not_ starting I/O in MS_ASYNC we provide complete flexibility to |
6334 | * applications. |
6335 | */ |
6336 | -asmlinkage long sys_msync(unsigned long start, size_t len, int flags) |
6337 | +SYSCALL_DEFINE3(msync, unsigned long, start, size_t, len, int, flags) |
6338 | { |
6339 | unsigned long end; |
6340 | struct mm_struct *mm = current->mm; |
6341 | diff --git a/mm/nommu.c b/mm/nommu.c |
6342 | index ed75bc9..4bf7686 100644 |
6343 | --- a/mm/nommu.c |
6344 | +++ b/mm/nommu.c |
6345 | @@ -355,7 +355,7 @@ EXPORT_SYMBOL(vm_insert_page); |
6346 | * to a regular file. in this case, the unmapping will need |
6347 | * to invoke file system routines that need the global lock. |
6348 | */ |
6349 | -asmlinkage unsigned long sys_brk(unsigned long brk) |
6350 | +SYSCALL_DEFINE1(brk, unsigned long, brk) |
6351 | { |
6352 | struct mm_struct *mm = current->mm; |
6353 | |
6354 | @@ -1170,7 +1170,7 @@ int do_munmap(struct mm_struct *mm, unsigned long addr, size_t len) |
6355 | } |
6356 | EXPORT_SYMBOL(do_munmap); |
6357 | |
6358 | -asmlinkage long sys_munmap(unsigned long addr, size_t len) |
6359 | +SYSCALL_DEFINE2(munmap, unsigned long, addr, size_t, len) |
6360 | { |
6361 | int ret; |
6362 | struct mm_struct *mm = current->mm; |
6363 | @@ -1261,9 +1261,9 @@ unsigned long do_mremap(unsigned long addr, |
6364 | } |
6365 | EXPORT_SYMBOL(do_mremap); |
6366 | |
6367 | -asmlinkage unsigned long sys_mremap(unsigned long addr, |
6368 | - unsigned long old_len, unsigned long new_len, |
6369 | - unsigned long flags, unsigned long new_addr) |
6370 | +SYSCALL_DEFINE5(mremap, unsigned long, addr, unsigned long, old_len, |
6371 | + unsigned long, new_len, unsigned long, flags, |
6372 | + unsigned long, new_addr) |
6373 | { |
6374 | unsigned long ret; |
6375 | |
6376 | diff --git a/mm/swapfile.c b/mm/swapfile.c |
6377 | index 1e330f2..572cc78 100644 |
6378 | --- a/mm/swapfile.c |
6379 | +++ b/mm/swapfile.c |
6380 | @@ -1204,7 +1204,7 @@ int page_queue_congested(struct page *page) |
6381 | } |
6382 | #endif |
6383 | |
6384 | -asmlinkage long sys_swapoff(const char __user * specialfile) |
6385 | +SYSCALL_DEFINE1(swapoff, const char __user *, specialfile) |
6386 | { |
6387 | struct swap_info_struct * p = NULL; |
6388 | unsigned short *swap_map; |
6389 | @@ -1448,7 +1448,7 @@ __initcall(procswaps_init); |
6390 | * |
6391 | * The swapon system call |
6392 | */ |
6393 | -asmlinkage long sys_swapon(const char __user * specialfile, int swap_flags) |
6394 | +SYSCALL_DEFINE2(swapon, const char __user *, specialfile, int, swap_flags) |
6395 | { |
6396 | struct swap_info_struct * p; |
6397 | char *name = NULL; |
6398 | diff --git a/net/socket.c b/net/socket.c |
6399 | index 3e8d4e3..3e2859c 100644 |
6400 | --- a/net/socket.c |
6401 | +++ b/net/socket.c |
6402 | @@ -1216,7 +1216,7 @@ int sock_create_kern(int family, int type, int protocol, struct socket **res) |
6403 | return __sock_create(&init_net, family, type, protocol, res, 1); |
6404 | } |
6405 | |
6406 | -asmlinkage long sys_socket(int family, int type, int protocol) |
6407 | +SYSCALL_DEFINE3(socket, int, family, int, type, int, protocol) |
6408 | { |
6409 | int retval; |
6410 | struct socket *sock; |
6411 | @@ -1257,8 +1257,8 @@ out_release: |
6412 | * Create a pair of connected sockets. |
6413 | */ |
6414 | |
6415 | -asmlinkage long sys_socketpair(int family, int type, int protocol, |
6416 | - int __user *usockvec) |
6417 | +SYSCALL_DEFINE4(socketpair, int, family, int, type, int, protocol, |
6418 | + int __user *, usockvec) |
6419 | { |
6420 | struct socket *sock1, *sock2; |
6421 | int fd1, fd2, err; |
6422 | @@ -1365,7 +1365,7 @@ out_fd: |
6423 | * the protocol layer (having also checked the address is ok). |
6424 | */ |
6425 | |
6426 | -asmlinkage long sys_bind(int fd, struct sockaddr __user *umyaddr, int addrlen) |
6427 | +SYSCALL_DEFINE3(bind, int, fd, struct sockaddr __user *, umyaddr, int, addrlen) |
6428 | { |
6429 | struct socket *sock; |
6430 | struct sockaddr_storage address; |
6431 | @@ -1394,7 +1394,7 @@ asmlinkage long sys_bind(int fd, struct sockaddr __user *umyaddr, int addrlen) |
6432 | * ready for listening. |
6433 | */ |
6434 | |
6435 | -asmlinkage long sys_listen(int fd, int backlog) |
6436 | +SYSCALL_DEFINE2(listen, int, fd, int, backlog) |
6437 | { |
6438 | struct socket *sock; |
6439 | int err, fput_needed; |
6440 | @@ -1567,8 +1567,8 @@ asmlinkage long sys_paccept(int fd, struct sockaddr __user *upeer_sockaddr, |
6441 | #endif |
6442 | #endif |
6443 | |
6444 | -asmlinkage long sys_accept(int fd, struct sockaddr __user *upeer_sockaddr, |
6445 | - int __user *upeer_addrlen) |
6446 | +SYSCALL_DEFINE3(accept, int, fd, struct sockaddr __user *, upeer_sockaddr, |
6447 | + int __user *, upeer_addrlen) |
6448 | { |
6449 | return do_accept(fd, upeer_sockaddr, upeer_addrlen, 0); |
6450 | } |
6451 | @@ -1585,8 +1585,8 @@ asmlinkage long sys_accept(int fd, struct sockaddr __user *upeer_sockaddr, |
6452 | * include the -EINPROGRESS status for such sockets. |
6453 | */ |
6454 | |
6455 | -asmlinkage long sys_connect(int fd, struct sockaddr __user *uservaddr, |
6456 | - int addrlen) |
6457 | +SYSCALL_DEFINE3(connect, int, fd, struct sockaddr __user *, uservaddr, |
6458 | + int, addrlen) |
6459 | { |
6460 | struct socket *sock; |
6461 | struct sockaddr_storage address; |
6462 | @@ -1617,8 +1617,8 @@ out: |
6463 | * name to user space. |
6464 | */ |
6465 | |
6466 | -asmlinkage long sys_getsockname(int fd, struct sockaddr __user *usockaddr, |
6467 | - int __user *usockaddr_len) |
6468 | +SYSCALL_DEFINE3(getsockname, int, fd, struct sockaddr __user *, usockaddr, |
6469 | + int __user *, usockaddr_len) |
6470 | { |
6471 | struct socket *sock; |
6472 | struct sockaddr_storage address; |
6473 | @@ -1648,8 +1648,8 @@ out: |
6474 | * name to user space. |
6475 | */ |
6476 | |
6477 | -asmlinkage long sys_getpeername(int fd, struct sockaddr __user *usockaddr, |
6478 | - int __user *usockaddr_len) |
6479 | +SYSCALL_DEFINE3(getpeername, int, fd, struct sockaddr __user *, usockaddr, |
6480 | + int __user *, usockaddr_len) |
6481 | { |
6482 | struct socket *sock; |
6483 | struct sockaddr_storage address; |
6484 | @@ -1680,9 +1680,9 @@ asmlinkage long sys_getpeername(int fd, struct sockaddr __user *usockaddr, |
6485 | * the protocol. |
6486 | */ |
6487 | |
6488 | -asmlinkage long sys_sendto(int fd, void __user *buff, size_t len, |
6489 | - unsigned flags, struct sockaddr __user *addr, |
6490 | - int addr_len) |
6491 | +SYSCALL_DEFINE6(sendto, int, fd, void __user *, buff, size_t, len, |
6492 | + unsigned, flags, struct sockaddr __user *, addr, |
6493 | + int, addr_len) |
6494 | { |
6495 | struct socket *sock; |
6496 | struct sockaddr_storage address; |
6497 | @@ -1725,7 +1725,8 @@ out: |
6498 | * Send a datagram down a socket. |
6499 | */ |
6500 | |
6501 | -asmlinkage long sys_send(int fd, void __user *buff, size_t len, unsigned flags) |
6502 | +SYSCALL_DEFINE4(send, int, fd, void __user *, buff, size_t, len, |
6503 | + unsigned, flags) |
6504 | { |
6505 | return sys_sendto(fd, buff, len, flags, NULL, 0); |
6506 | } |
6507 | @@ -1736,9 +1737,9 @@ asmlinkage long sys_send(int fd, void __user *buff, size_t len, unsigned flags) |
6508 | * sender address from kernel to user space. |
6509 | */ |
6510 | |
6511 | -asmlinkage long sys_recvfrom(int fd, void __user *ubuf, size_t size, |
6512 | - unsigned flags, struct sockaddr __user *addr, |
6513 | - int __user *addr_len) |
6514 | +SYSCALL_DEFINE6(recvfrom, int, fd, void __user *, ubuf, size_t, size, |
6515 | + unsigned, flags, struct sockaddr __user *, addr, |
6516 | + int __user *, addr_len) |
6517 | { |
6518 | struct socket *sock; |
6519 | struct iovec iov; |
6520 | @@ -1790,8 +1791,8 @@ asmlinkage long sys_recv(int fd, void __user *ubuf, size_t size, |
6521 | * to pass the user mode parameter for the protocols to sort out. |
6522 | */ |
6523 | |
6524 | -asmlinkage long sys_setsockopt(int fd, int level, int optname, |
6525 | - char __user *optval, int optlen) |
6526 | +SYSCALL_DEFINE5(setsockopt, int, fd, int, level, int, optname, |
6527 | + char __user *, optval, int, optlen) |
6528 | { |
6529 | int err, fput_needed; |
6530 | struct socket *sock; |
6531 | @@ -1824,8 +1825,8 @@ out_put: |
6532 | * to pass a user mode parameter for the protocols to sort out. |
6533 | */ |
6534 | |
6535 | -asmlinkage long sys_getsockopt(int fd, int level, int optname, |
6536 | - char __user *optval, int __user *optlen) |
6537 | +SYSCALL_DEFINE5(getsockopt, int, fd, int, level, int, optname, |
6538 | + char __user *, optval, int __user *, optlen) |
6539 | { |
6540 | int err, fput_needed; |
6541 | struct socket *sock; |
6542 | @@ -1854,7 +1855,7 @@ out_put: |
6543 | * Shutdown a socket. |
6544 | */ |
6545 | |
6546 | -asmlinkage long sys_shutdown(int fd, int how) |
6547 | +SYSCALL_DEFINE2(shutdown, int, fd, int, how) |
6548 | { |
6549 | int err, fput_needed; |
6550 | struct socket *sock; |
6551 | @@ -1880,7 +1881,7 @@ asmlinkage long sys_shutdown(int fd, int how) |
6552 | * BSD sendmsg interface |
6553 | */ |
6554 | |
6555 | -asmlinkage long sys_sendmsg(int fd, struct msghdr __user *msg, unsigned flags) |
6556 | +SYSCALL_DEFINE3(sendmsg, int, fd, struct msghdr __user *, msg, unsigned, flags) |
6557 | { |
6558 | struct compat_msghdr __user *msg_compat = |
6559 | (struct compat_msghdr __user *)msg; |
6560 | @@ -1986,8 +1987,8 @@ out: |
6561 | * BSD recvmsg interface |
6562 | */ |
6563 | |
6564 | -asmlinkage long sys_recvmsg(int fd, struct msghdr __user *msg, |
6565 | - unsigned int flags) |
6566 | +SYSCALL_DEFINE3(recvmsg, int, fd, struct msghdr __user *, msg, |
6567 | + unsigned int, flags) |
6568 | { |
6569 | struct compat_msghdr __user *msg_compat = |
6570 | (struct compat_msghdr __user *)msg; |
6571 | @@ -2110,7 +2111,7 @@ static const unsigned char nargs[19]={ |
6572 | * it is set by the callees. |
6573 | */ |
6574 | |
6575 | -asmlinkage long sys_socketcall(int call, unsigned long __user *args) |
6576 | +SYSCALL_DEFINE2(socketcall, int, call, unsigned long __user *, args) |
6577 | { |
6578 | unsigned long a[6]; |
6579 | unsigned long a0, a1; |
6580 | diff --git a/security/device_cgroup.c b/security/device_cgroup.c |
6581 | index 46f2397..9ef066d 100644 |
6582 | --- a/security/device_cgroup.c |
6583 | +++ b/security/device_cgroup.c |
6584 | @@ -543,6 +543,9 @@ int devcgroup_inode_mknod(int mode, dev_t dev) |
6585 | struct dev_cgroup *dev_cgroup; |
6586 | struct dev_whitelist_item *wh; |
6587 | |
6588 | + if (!S_ISBLK(mode) && !S_ISCHR(mode)) |
6589 | + return 0; |
6590 | + |
6591 | rcu_read_lock(); |
6592 | |
6593 | dev_cgroup = task_devcgroup(current); |
6594 | diff --git a/security/keys/keyctl.c b/security/keys/keyctl.c |
6595 | index acc9c89..9b4e0e9 100644 |
6596 | --- a/security/keys/keyctl.c |
6597 | +++ b/security/keys/keyctl.c |
6598 | @@ -54,11 +54,11 @@ static int key_get_type_from_user(char *type, |
6599 | * - returns the new key's serial number |
6600 | * - implements add_key() |
6601 | */ |
6602 | -asmlinkage long sys_add_key(const char __user *_type, |
6603 | - const char __user *_description, |
6604 | - const void __user *_payload, |
6605 | - size_t plen, |
6606 | - key_serial_t ringid) |
6607 | +SYSCALL_DEFINE5(add_key, const char __user *, _type, |
6608 | + const char __user *, _description, |
6609 | + const void __user *, _payload, |
6610 | + size_t, plen, |
6611 | + key_serial_t, ringid) |
6612 | { |
6613 | key_ref_t keyring_ref, key_ref; |
6614 | char type[32], *description; |
6615 | @@ -146,10 +146,10 @@ asmlinkage long sys_add_key(const char __user *_type, |
6616 | * - if the _callout_info string is empty, it will be rendered as "-" |
6617 | * - implements request_key() |
6618 | */ |
6619 | -asmlinkage long sys_request_key(const char __user *_type, |
6620 | - const char __user *_description, |
6621 | - const char __user *_callout_info, |
6622 | - key_serial_t destringid) |
6623 | +SYSCALL_DEFINE4(request_key, const char __user *, _type, |
6624 | + const char __user *, _description, |
6625 | + const char __user *, _callout_info, |
6626 | + key_serial_t, destringid) |
6627 | { |
6628 | struct key_type *ktype; |
6629 | struct key *key; |
6630 | @@ -1152,8 +1152,8 @@ long keyctl_get_security(key_serial_t keyid, |
6631 | /* |
6632 | * the key control system call |
6633 | */ |
6634 | -asmlinkage long sys_keyctl(int option, unsigned long arg2, unsigned long arg3, |
6635 | - unsigned long arg4, unsigned long arg5) |
6636 | +SYSCALL_DEFINE5(keyctl, int, option, unsigned long, arg2, unsigned long, arg3, |
6637 | + unsigned long, arg4, unsigned long, arg5) |
6638 | { |
6639 | switch (option) { |
6640 | case KEYCTL_GET_KEYRING_ID: |
6641 | diff --git a/sound/pci/hda/patch_analog.c b/sound/pci/hda/patch_analog.c |
6642 | index cb13307..591f62f 100644 |
6643 | --- a/sound/pci/hda/patch_analog.c |
6644 | +++ b/sound/pci/hda/patch_analog.c |
6645 | @@ -3848,6 +3848,7 @@ static const char *ad1884a_models[AD1884A_MODELS] = { |
6646 | static struct snd_pci_quirk ad1884a_cfg_tbl[] = { |
6647 | SND_PCI_QUIRK(0x103c, 0x3030, "HP", AD1884A_MOBILE), |
6648 | SND_PCI_QUIRK(0x103c, 0x3056, "HP", AD1884A_MOBILE), |
6649 | + SND_PCI_QUIRK(0x103c, 0x30e6, "HP 6730b", AD1884A_LAPTOP), |
6650 | SND_PCI_QUIRK(0x103c, 0x30e7, "HP EliteBook 8530p", AD1884A_LAPTOP), |
6651 | SND_PCI_QUIRK(0x103c, 0x3614, "HP 6730s", AD1884A_LAPTOP), |
6652 | SND_PCI_QUIRK(0x17aa, 0x20ac, "Thinkpad X300", AD1884A_THINKPAD), |
6653 | diff --git a/sound/usb/caiaq/caiaq-device.h b/sound/usb/caiaq/caiaq-device.h |
6654 | index f9fbdba..ab56e73 100644 |
6655 | --- a/sound/usb/caiaq/caiaq-device.h |
6656 | +++ b/sound/usb/caiaq/caiaq-device.h |
6657 | @@ -75,6 +75,7 @@ struct snd_usb_caiaqdev { |
6658 | wait_queue_head_t ep1_wait_queue; |
6659 | wait_queue_head_t prepare_wait_queue; |
6660 | int spec_received, audio_parm_answer; |
6661 | + int midi_out_active; |
6662 | |
6663 | char vendor_name[CAIAQ_USB_STR_LEN]; |
6664 | char product_name[CAIAQ_USB_STR_LEN]; |
6665 | diff --git a/sound/usb/caiaq/caiaq-midi.c b/sound/usb/caiaq/caiaq-midi.c |
6666 | index 30b57f9..f19fd36 100644 |
6667 | --- a/sound/usb/caiaq/caiaq-midi.c |
6668 | +++ b/sound/usb/caiaq/caiaq-midi.c |
6669 | @@ -59,6 +59,11 @@ static int snd_usb_caiaq_midi_output_open(struct snd_rawmidi_substream *substrea |
6670 | |
6671 | static int snd_usb_caiaq_midi_output_close(struct snd_rawmidi_substream *substream) |
6672 | { |
6673 | + struct snd_usb_caiaqdev *dev = substream->rmidi->private_data; |
6674 | + if (dev->midi_out_active) { |
6675 | + usb_kill_urb(&dev->midi_out_urb); |
6676 | + dev->midi_out_active = 0; |
6677 | + } |
6678 | return 0; |
6679 | } |
6680 | |
6681 | @@ -69,7 +74,8 @@ static void snd_usb_caiaq_midi_send(struct snd_usb_caiaqdev *dev, |
6682 | |
6683 | dev->midi_out_buf[0] = EP1_CMD_MIDI_WRITE; |
6684 | dev->midi_out_buf[1] = 0; /* port */ |
6685 | - len = snd_rawmidi_transmit_peek(substream, dev->midi_out_buf+3, EP1_BUFSIZE-3); |
6686 | + len = snd_rawmidi_transmit(substream, dev->midi_out_buf + 3, |
6687 | + EP1_BUFSIZE - 3); |
6688 | |
6689 | if (len <= 0) |
6690 | return; |
6691 | @@ -79,24 +85,24 @@ static void snd_usb_caiaq_midi_send(struct snd_usb_caiaqdev *dev, |
6692 | |
6693 | ret = usb_submit_urb(&dev->midi_out_urb, GFP_ATOMIC); |
6694 | if (ret < 0) |
6695 | - log("snd_usb_caiaq_midi_send(%p): usb_submit_urb() failed, %d\n", |
6696 | - substream, ret); |
6697 | + log("snd_usb_caiaq_midi_send(%p): usb_submit_urb() failed," |
6698 | + "ret=%d, len=%d\n", |
6699 | + substream, ret, len); |
6700 | + else |
6701 | + dev->midi_out_active = 1; |
6702 | } |
6703 | |
6704 | static void snd_usb_caiaq_midi_output_trigger(struct snd_rawmidi_substream *substream, int up) |
6705 | { |
6706 | struct snd_usb_caiaqdev *dev = substream->rmidi->private_data; |
6707 | |
6708 | - if (dev->midi_out_substream != NULL) |
6709 | - return; |
6710 | - |
6711 | - if (!up) { |
6712 | + if (up) { |
6713 | + dev->midi_out_substream = substream; |
6714 | + if (!dev->midi_out_active) |
6715 | + snd_usb_caiaq_midi_send(dev, substream); |
6716 | + } else { |
6717 | dev->midi_out_substream = NULL; |
6718 | - return; |
6719 | } |
6720 | - |
6721 | - dev->midi_out_substream = substream; |
6722 | - snd_usb_caiaq_midi_send(dev, substream); |
6723 | } |
6724 | |
6725 | |
6726 | @@ -161,16 +167,14 @@ int snd_usb_caiaq_midi_init(struct snd_usb_caiaqdev *device) |
6727 | void snd_usb_caiaq_midi_output_done(struct urb* urb) |
6728 | { |
6729 | struct snd_usb_caiaqdev *dev = urb->context; |
6730 | - char *buf = urb->transfer_buffer; |
6731 | |
6732 | + dev->midi_out_active = 0; |
6733 | if (urb->status != 0) |
6734 | return; |
6735 | |
6736 | if (!dev->midi_out_substream) |
6737 | return; |
6738 | |
6739 | - snd_rawmidi_transmit_ack(dev->midi_out_substream, buf[2]); |
6740 | - dev->midi_out_substream = NULL; |
6741 | snd_usb_caiaq_midi_send(dev, dev->midi_out_substream); |
6742 | } |
6743 |