Skip to content

Commit

Permalink
asm-generic/uaccess.h: don't mess with __copy_{to,from}_user
Browse files Browse the repository at this point in the history
only h8300 actually used those; might as well define them there.

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
  • Loading branch information
Al Viro committed Mar 28, 2017
1 parent db68ce1 commit 3fb5007
Show file tree
Hide file tree
Showing 6 changed files with 52 additions and 71 deletions.
3 changes: 0 additions & 3 deletions arch/c6x/include/asm/uaccess.h
Original file line number Diff line number Diff line change
Expand Up @@ -94,9 +94,6 @@ static inline __must_check long __copy_to_user(void __user *to,
return 0;
}

#define __copy_to_user __copy_to_user
#define __copy_from_user __copy_from_user

extern int _access_ok(unsigned long addr, unsigned long size);
#ifdef CONFIG_ACCESS_CHECK
#define __access_ok _access_ok
Expand Down
1 change: 0 additions & 1 deletion arch/h8300/include/asm/Kbuild
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,6 @@ generic-y += tlbflush.h
generic-y += trace_clock.h
generic-y += topology.h
generic-y += types.h
generic-y += uaccess.h
generic-y += ucontext.h
generic-y += unaligned.h
generic-y += vga.h
Expand Down
52 changes: 52 additions & 0 deletions arch/h8300/include/asm/uaccess.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
#ifndef _ASM_UACCESS_H
#define _ASM_UACCESS_H

#include <linux/string.h>

static inline __must_check long __copy_from_user(void *to,
const void __user * from, unsigned long n)
{
if (__builtin_constant_p(n)) {
switch(n) {
case 1:
*(u8 *)to = *(u8 __force *)from;
return 0;
case 2:
*(u16 *)to = *(u16 __force *)from;
return 0;
case 4:
*(u32 *)to = *(u32 __force *)from;
return 0;
}
}

memcpy(to, (const void __force *)from, n);
return 0;
}

static inline __must_check long __copy_to_user(void __user *to,
const void *from, unsigned long n)
{
if (__builtin_constant_p(n)) {
switch(n) {
case 1:
*(u8 __force *)to = *(u8 *)from;
return 0;
case 2:
*(u16 __force *)to = *(u16 *)from;
return 0;
case 4:
*(u32 __force *)to = *(u32 *)from;
return 0;
default:
break;
}
}

memcpy((void __force *)to, from, n);
return 0;
}

#include <asm-generic/uaccess.h>

#endif
2 changes: 0 additions & 2 deletions arch/um/include/asm/uaccess.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,8 +31,6 @@ static inline int __access_ok(unsigned long addr, unsigned long size);
/* Teach asm-generic/uaccess.h that we have C functions for these. */
#define __access_ok __access_ok
#define __clear_user __clear_user
#define __copy_to_user __copy_to_user
#define __copy_from_user __copy_from_user
#define __strnlen_user __strnlen_user
#define __strncpy_from_user __strncpy_from_user
#define __copy_to_user_inatomic __copy_to_user
Expand Down
2 changes: 0 additions & 2 deletions arch/unicore32/include/asm/uaccess.h
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,6 @@

#include <asm/memory.h>

#define __copy_from_user __copy_from_user
#define __copy_to_user __copy_to_user
#define __strncpy_from_user __strncpy_from_user
#define __strnlen_user __strnlen_user
#define __clear_user __clear_user
Expand Down
63 changes: 0 additions & 63 deletions include/asm-generic/uaccess.h
Original file line number Diff line number Diff line change
Expand Up @@ -47,69 +47,6 @@ static inline int __access_ok(unsigned long addr, unsigned long size)
}
#endif

/*
* architectures with an MMU should override these two
*/
#ifndef __copy_from_user
static inline __must_check long __copy_from_user(void *to,
const void __user * from, unsigned long n)
{
if (__builtin_constant_p(n)) {
switch(n) {
case 1:
*(u8 *)to = *(u8 __force *)from;
return 0;
case 2:
*(u16 *)to = *(u16 __force *)from;
return 0;
case 4:
*(u32 *)to = *(u32 __force *)from;
return 0;
#ifdef CONFIG_64BIT
case 8:
*(u64 *)to = *(u64 __force *)from;
return 0;
#endif
default:
break;
}
}

memcpy(to, (const void __force *)from, n);
return 0;
}
#endif

#ifndef __copy_to_user
static inline __must_check long __copy_to_user(void __user *to,
const void *from, unsigned long n)
{
if (__builtin_constant_p(n)) {
switch(n) {
case 1:
*(u8 __force *)to = *(u8 *)from;
return 0;
case 2:
*(u16 __force *)to = *(u16 *)from;
return 0;
case 4:
*(u32 __force *)to = *(u32 *)from;
return 0;
#ifdef CONFIG_64BIT
case 8:
*(u64 __force *)to = *(u64 *)from;
return 0;
#endif
default:
break;
}
}

memcpy((void __force *)to, from, n);
return 0;
}
#endif

/*
* These are the main single-value transfer routines. They automatically
* use the right size if we just have the right pointer type.
Expand Down

0 comments on commit 3fb5007

Please sign in to comment.