aboutsummaryrefslogtreecommitdiffstats
path: root/include/asm-x86/uaccess_64.h
diff options
context:
space:
mode:
authorNick Piggin <npiggin@suse.de>2008-09-10 07:37:17 -0400
committerIngo Molnar <mingo@elte.hu>2008-09-11 03:44:21 -0400
commit3ee1afa308f2a38e5d1e2ad3752ad7abcf480da1 (patch)
tree914e0f3bbd32a387cf6095c6955369fa8da7ebf6 /include/asm-x86/uaccess_64.h
parentc10d38dda1774ed4540380333cabd229eff37094 (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.h12
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(&current->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(&current->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(&current->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);