]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
Merge branch 'x86-uaccess-for-linus' of git://git.kernel.org/pub/scm/linux/kernel...
authorLinus Torvalds <torvalds@linux-foundation.org>
Tue, 12 Nov 2013 02:46:06 +0000 (11:46 +0900)
committerLinus Torvalds <torvalds@linux-foundation.org>
Tue, 12 Nov 2013 02:46:06 +0000 (11:46 +0900)
Pull x86 uaccess changes from Ingo Molnar:
 "A single change that micro-optimizes __copy_*_user_inatomic(), used by
  the futex code"

* 'x86-uaccess-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
  x86: Add 1/2/4/8 byte optimization to 64bit __copy_{from,to}_user_inatomic

1  2 
arch/x86/include/asm/uaccess_64.h

index 0acae710fa00e18e0e7433eacad37b206b96bf86,64476bb2a1465dcf6ce15dc2a939ad1fb54fe7bf..190413d0de57b20a3334a9fcaaf8bcfbdd6fd14f
@@@ -45,15 -45,42 +45,14 @@@ copy_user_generic(void *to, const void 
        return ret;
  }
  
 -__must_check unsigned long
 -_copy_to_user(void __user *to, const void *from, unsigned len);
 -__must_check unsigned long
 -_copy_from_user(void *to, const void __user *from, unsigned len);
  __must_check unsigned long
  copy_in_user(void __user *to, const void __user *from, unsigned len);
  
 -static inline unsigned long __must_check copy_from_user(void *to,
 -                                        const void __user *from,
 -                                        unsigned long n)
 -{
 -      int sz = __compiletime_object_size(to);
 -
 -      might_fault();
 -      if (likely(sz == -1 || sz >= n))
 -              n = _copy_from_user(to, from, n);
 -#ifdef CONFIG_DEBUG_VM
 -      else
 -              WARN(1, "Buffer overflow detected!\n");
 -#endif
 -      return n;
 -}
 -
 -static __always_inline __must_check
 -int copy_to_user(void __user *dst, const void *src, unsigned size)
 -{
 -      might_fault();
 -
 -      return _copy_to_user(dst, src, size);
 -}
 -
  static __always_inline __must_check
- int __copy_from_user(void *dst, const void __user *src, unsigned size)
+ int __copy_from_user_nocheck(void *dst, const void __user *src, unsigned size)
  {
        int ret = 0;
  
-       might_fault();
        if (!__builtin_constant_p(size))
                return copy_user_generic(dst, (__force void *)src, size);
        switch (size) {
  }
  
  static __always_inline __must_check
- int __copy_to_user(void __user *dst, const void *src, unsigned size)
+ int __copy_from_user(void *dst, const void __user *src, unsigned size)
+ {
+       might_fault();
+       return __copy_from_user_nocheck(dst, src, size);
+ }
+ static __always_inline __must_check
+ int __copy_to_user_nocheck(void __user *dst, const void *src, unsigned size)
  {
        int ret = 0;
  
-       might_fault();
        if (!__builtin_constant_p(size))
                return copy_user_generic((__force void *)dst, src, size);
        switch (size) {
        }
  }
  
+ static __always_inline __must_check
+ int __copy_to_user(void __user *dst, const void *src, unsigned size)
+ {
+       might_fault();
+       return __copy_to_user_nocheck(dst, src, size);
+ }
  static __always_inline __must_check
  int __copy_in_user(void __user *dst, const void __user *src, unsigned size)
  {
  static __must_check __always_inline int
  __copy_from_user_inatomic(void *dst, const void __user *src, unsigned size)
  {
-       return copy_user_generic(dst, (__force const void *)src, size);
+       return __copy_from_user_nocheck(dst, (__force const void *)src, size);
  }
  
  static __must_check __always_inline int
  __copy_to_user_inatomic(void __user *dst, const void *src, unsigned size)
  {
-       return copy_user_generic((__force void *)dst, src, size);
+       return __copy_to_user_nocheck((__force void *)dst, src, size);
  }
  
  extern long __copy_user_nocache(void *dst, const void __user *src,