diff options
author | Nick Piggin <npiggin@suse.de> | 2008-09-10 07:37:17 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2008-09-11 03:44:21 -0400 |
commit | 3ee1afa308f2a38e5d1e2ad3752ad7abcf480da1 (patch) | |
tree | 914e0f3bbd32a387cf6095c6955369fa8da7ebf6 /include/asm-x86/uaccess_64.h | |
parent | c10d38dda1774ed4540380333cabd229eff37094 (diff) |
x86: some lock annotations for user copy paths, v2
- introduce might_fault()
- handle the atomic user copy paths correctly
[ mingo@elte.hu: move might_sleep() outside of in_atomic(). ]
Signed-off-by: Nick Piggin <npiggin@suse.de>
Acked-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'include/asm-x86/uaccess_64.h')
-rw-r--r-- | include/asm-x86/uaccess_64.h | 12 |
1 files changed, 3 insertions, 9 deletions
diff --git a/include/asm-x86/uaccess_64.h b/include/asm-x86/uaccess_64.h index 40a7205fe576..13fd56fbc3ab 100644 --- a/include/asm-x86/uaccess_64.h +++ b/include/asm-x86/uaccess_64.h | |||
@@ -29,9 +29,7 @@ int __copy_from_user(void *dst, const void __user *src, unsigned size) | |||
29 | { | 29 | { |
30 | int ret = 0; | 30 | int ret = 0; |
31 | 31 | ||
32 | might_sleep(); | 32 | might_fault(); |
33 | if (current->mm) | ||
34 | might_lock_read(¤t->mm->mmap_sem); | ||
35 | if (!__builtin_constant_p(size)) | 33 | if (!__builtin_constant_p(size)) |
36 | return copy_user_generic(dst, (__force void *)src, size); | 34 | return copy_user_generic(dst, (__force void *)src, size); |
37 | switch (size) { | 35 | switch (size) { |
@@ -75,9 +73,7 @@ int __copy_to_user(void __user *dst, const void *src, unsigned size) | |||
75 | { | 73 | { |
76 | int ret = 0; | 74 | int ret = 0; |
77 | 75 | ||
78 | might_sleep(); | 76 | might_fault(); |
79 | if (current->mm) | ||
80 | might_lock_read(¤t->mm->mmap_sem); | ||
81 | if (!__builtin_constant_p(size)) | 77 | if (!__builtin_constant_p(size)) |
82 | return copy_user_generic((__force void *)dst, src, size); | 78 | return copy_user_generic((__force void *)dst, src, size); |
83 | switch (size) { | 79 | switch (size) { |
@@ -121,9 +117,7 @@ int __copy_in_user(void __user *dst, const void __user *src, unsigned size) | |||
121 | { | 117 | { |
122 | int ret = 0; | 118 | int ret = 0; |
123 | 119 | ||
124 | might_sleep(); | 120 | might_fault(); |
125 | if (current->mm) | ||
126 | might_lock_read(¤t->mm->mmap_sem); | ||
127 | if (!__builtin_constant_p(size)) | 121 | if (!__builtin_constant_p(size)) |
128 | return copy_user_generic((__force void *)dst, | 122 | return copy_user_generic((__force void *)dst, |
129 | (__force void *)src, size); | 123 | (__force void *)src, size); |