Merge to Fedora kernel-2.6.7-1.492
[linux-2.6.git] / arch / i386 / lib / usercopy.c
index 62e3836..6072db0 100644 (file)
@@ -30,6 +30,7 @@ static inline int __movsl_is_ok(unsigned long a1, unsigned long a2, unsigned lon
 #define __do_strncpy_from_user(dst,src,count,res)                         \
 do {                                                                      \
        int __d0, __d1, __d2;                                              \
+       might_sleep();                                                     \
        __asm__ __volatile__(                                              \
                "       testl %1,%1\n"                                     \
                "       jz 2f\n"                                           \
@@ -118,6 +119,7 @@ direct_strncpy_from_user(char *dst, const char __user *src, long count)
 #define __do_clear_user(addr,size)                                     \
 do {                                                                   \
        int __d0;                                                       \
+       might_sleep();                                                  \
        __asm__ __volatile__(                                           \
                "0:     rep; stosl\n"                                   \
                "       movl %2,%0\n"                                   \
@@ -218,7 +220,7 @@ long direct_strnlen_user(const char __user *s, long n)
 
 #ifdef CONFIG_X86_INTEL_USERCOPY
 static unsigned long
-__copy_user_intel(void *to, const void *from,unsigned long size)
+__copy_user_intel(void __user *to, const void *from, unsigned long size)
 {
        int d0, d1;
        __asm__ __volatile__(
@@ -325,7 +327,7 @@ __copy_user_intel(void *to, const void *from,unsigned long size)
 }
 
 static unsigned long
-__copy_user_zeroing_intel(void *to, const void *from, unsigned long size)
+__copy_user_zeroing_intel(void *to, const void __user *from, unsigned long size)
 {
        int d0, d1;
        __asm__ __volatile__(
@@ -424,9 +426,9 @@ __copy_user_zeroing_intel(void *to, const void *from, unsigned long size)
  * them
  */
 unsigned long
-__copy_user_zeroing_intel(void *to, const void *from, unsigned long size);
+__copy_user_zeroing_intel(void *to, const void __user *from, unsigned long size);
 unsigned long
-__copy_user_intel(void *to, const void *from,unsigned long size);
+__copy_user_intel(void __user *to, const void *from, unsigned long size);
 #endif /* CONFIG_X86_INTEL_USERCOPY */
 
 /* Generic arbitrary sized copy.  */
@@ -561,18 +563,18 @@ survive:
        }
 #endif
        if (movsl_is_ok(to, from, n))
-               __copy_user((void *)to, from, n);
+               __copy_user(to, from, n);
        else
-               n = __copy_user_intel((void *)to, from, n);
+               n = __copy_user_intel(to, from, n);
        return n;
 }
 
 unsigned long __copy_from_user_ll(void *to, const void __user *from, unsigned long n)
 {
        if (movsl_is_ok(to, from, n))
-               __copy_user_zeroing(to, (const void *) from, n);
+               __copy_user_zeroing(to, from, n);
        else
-               n = __copy_user_zeroing_intel(to, (const void *) from, n);
+               n = __copy_user_zeroing_intel(to, from, n);
        return n;
 }