mirror of
https://github.com/torvalds/linux.git
synced 2024-12-18 00:53:40 +00:00
asm-generic/uaccess.h: don't mess with __copy_{to,from}_user
only h8300 actually used those; might as well define them there. Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
db68ce10c4
commit
3fb5007528
@ -94,9 +94,6 @@ static inline __must_check long __copy_to_user(void __user *to,
|
|||||||
return 0;
|
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);
|
extern int _access_ok(unsigned long addr, unsigned long size);
|
||||||
#ifdef CONFIG_ACCESS_CHECK
|
#ifdef CONFIG_ACCESS_CHECK
|
||||||
#define __access_ok _access_ok
|
#define __access_ok _access_ok
|
||||||
|
@ -69,7 +69,6 @@ generic-y += tlbflush.h
|
|||||||
generic-y += trace_clock.h
|
generic-y += trace_clock.h
|
||||||
generic-y += topology.h
|
generic-y += topology.h
|
||||||
generic-y += types.h
|
generic-y += types.h
|
||||||
generic-y += uaccess.h
|
|
||||||
generic-y += ucontext.h
|
generic-y += ucontext.h
|
||||||
generic-y += unaligned.h
|
generic-y += unaligned.h
|
||||||
generic-y += vga.h
|
generic-y += vga.h
|
||||||
|
52
arch/h8300/include/asm/uaccess.h
Normal file
52
arch/h8300/include/asm/uaccess.h
Normal file
@ -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
|
@ -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. */
|
/* Teach asm-generic/uaccess.h that we have C functions for these. */
|
||||||
#define __access_ok __access_ok
|
#define __access_ok __access_ok
|
||||||
#define __clear_user __clear_user
|
#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 __strnlen_user __strnlen_user
|
||||||
#define __strncpy_from_user __strncpy_from_user
|
#define __strncpy_from_user __strncpy_from_user
|
||||||
#define __copy_to_user_inatomic __copy_to_user
|
#define __copy_to_user_inatomic __copy_to_user
|
||||||
|
@ -14,8 +14,6 @@
|
|||||||
|
|
||||||
#include <asm/memory.h>
|
#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 __strncpy_from_user __strncpy_from_user
|
||||||
#define __strnlen_user __strnlen_user
|
#define __strnlen_user __strnlen_user
|
||||||
#define __clear_user __clear_user
|
#define __clear_user __clear_user
|
||||||
|
@ -47,69 +47,6 @@ static inline int __access_ok(unsigned long addr, unsigned long size)
|
|||||||
}
|
}
|
||||||
#endif
|
#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
|
* These are the main single-value transfer routines. They automatically
|
||||||
* use the right size if we just have the right pointer type.
|
* use the right size if we just have the right pointer type.
|
||||||
|
Loading…
Reference in New Issue
Block a user