fedora core 6 1.2949 + vserver 2.2.0
[linux-2.6.git] / arch / alpha / lib / csum_partial_copy.c
index 3e0da49..4ca75c7 100644 (file)
@@ -193,7 +193,8 @@ csum_partial_cfu_dest_aligned(const unsigned long __user *src,
  * This is slightly less fun than the above..
  */
 static inline unsigned long
-csum_partial_cfu_src_aligned(const unsigned long *src, unsigned long *dst,
+csum_partial_cfu_src_aligned(const unsigned long __user *src,
+                            unsigned long *dst,
                             unsigned long doff,
                             long len, unsigned long checksum,
                             unsigned long partial_dest,
@@ -250,7 +251,8 @@ out:
  * look at this too closely, you'll go blind.
  */
 static inline unsigned long
-csum_partial_cfu_unaligned(const unsigned long * src, unsigned long * dst,
+csum_partial_cfu_unaligned(const unsigned long __user * src,
+                          unsigned long * dst,
                           unsigned long soff, unsigned long doff,
                           long len, unsigned long checksum,
                           unsigned long partial_dest,
@@ -327,11 +329,11 @@ csum_partial_cfu_unaligned(const unsigned long * src, unsigned long * dst,
        return checksum;
 }
 
-static unsigned int
-do_csum_partial_copy_from_user(const char __user *src, char *dst, int len,
-                              unsigned int sum, int *errp)
+__wsum
+csum_partial_copy_from_user(const void __user *src, void *dst, int len,
+                              __wsum sum, int *errp)
 {
-       unsigned long checksum = (unsigned) sum;
+       unsigned long checksum = (__force u32) sum;
        unsigned long soff = 7 & (unsigned long) src;
        unsigned long doff = 7 & (unsigned long) dst;
 
@@ -365,24 +367,12 @@ do_csum_partial_copy_from_user(const char __user *src, char *dst, int len,
                }
                checksum = from64to16 (checksum);
        }
-       return checksum;
-}
-
-unsigned int
-csum_partial_copy_from_user(const char __user *src, char *dst, int len,
-                           unsigned int sum, int *errp)
-{
-       if (!access_ok(src, len, VERIFY_READ)) {
-               *errp = -EFAULT;
-               memset(dst, 0, len);
-               return sum;
-       }
-
-       return do_csum_partial_copy_from_user(src, dst, len, sum, errp);
+       return (__force __wsum)checksum;
 }
 
-unsigned int
-csum_partial_copy_nocheck(const char *src, char *dst, int len, unsigned int sum)
+__wsum
+csum_partial_copy_nocheck(const void *src, void *dst, int len, __wsum sum)
 {
-       return do_csum_partial_copy_from_user(src, dst, len, sum, NULL);
+       return csum_partial_copy_from_user((__force const void __user *)src,
+                       dst, len, sum, NULL);
 }