forked from Minki/linux
c685238922
It could be done in exception-handling bits in __get_user_b() et.al., but the surgery involved would take more knowledge of sh64 details than I have or _want_ to have. Cc: stable@vger.kernel.org Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
89 lines
2.2 KiB
C
89 lines
2.2 KiB
C
#ifndef __ASM_SH_UACCESS_64_H
|
|
#define __ASM_SH_UACCESS_64_H
|
|
|
|
/*
|
|
* include/asm-sh/uaccess_64.h
|
|
*
|
|
* Copyright (C) 2000, 2001 Paolo Alberelli
|
|
* Copyright (C) 2003, 2004 Paul Mundt
|
|
*
|
|
* User space memory access functions
|
|
*
|
|
* Copyright (C) 1999 Niibe Yutaka
|
|
*
|
|
* Based on:
|
|
* MIPS implementation version 1.15 by
|
|
* Copyright (C) 1996, 1997, 1998 by Ralf Baechle
|
|
* and i386 version.
|
|
*
|
|
* This file is subject to the terms and conditions of the GNU General Public
|
|
* License. See the file "COPYING" in the main directory of this archive
|
|
* for more details.
|
|
*/
|
|
|
|
#define __get_user_size(x,ptr,size,retval) \
|
|
do { \
|
|
retval = 0; \
|
|
x = 0; \
|
|
switch (size) { \
|
|
case 1: \
|
|
retval = __get_user_asm_b((void *)&x, \
|
|
(long)ptr); \
|
|
break; \
|
|
case 2: \
|
|
retval = __get_user_asm_w((void *)&x, \
|
|
(long)ptr); \
|
|
break; \
|
|
case 4: \
|
|
retval = __get_user_asm_l((void *)&x, \
|
|
(long)ptr); \
|
|
break; \
|
|
case 8: \
|
|
retval = __get_user_asm_q((void *)&x, \
|
|
(long)ptr); \
|
|
break; \
|
|
default: \
|
|
__get_user_unknown(); \
|
|
break; \
|
|
} \
|
|
} while (0)
|
|
|
|
extern long __get_user_asm_b(void *, long);
|
|
extern long __get_user_asm_w(void *, long);
|
|
extern long __get_user_asm_l(void *, long);
|
|
extern long __get_user_asm_q(void *, long);
|
|
extern void __get_user_unknown(void);
|
|
|
|
#define __put_user_size(x,ptr,size,retval) \
|
|
do { \
|
|
retval = 0; \
|
|
switch (size) { \
|
|
case 1: \
|
|
retval = __put_user_asm_b((void *)&x, \
|
|
(__force long)ptr); \
|
|
break; \
|
|
case 2: \
|
|
retval = __put_user_asm_w((void *)&x, \
|
|
(__force long)ptr); \
|
|
break; \
|
|
case 4: \
|
|
retval = __put_user_asm_l((void *)&x, \
|
|
(__force long)ptr); \
|
|
break; \
|
|
case 8: \
|
|
retval = __put_user_asm_q((void *)&x, \
|
|
(__force long)ptr); \
|
|
break; \
|
|
default: \
|
|
__put_user_unknown(); \
|
|
} \
|
|
} while (0)
|
|
|
|
extern long __put_user_asm_b(void *, long);
|
|
extern long __put_user_asm_w(void *, long);
|
|
extern long __put_user_asm_l(void *, long);
|
|
extern long __put_user_asm_q(void *, long);
|
|
extern void __put_user_unknown(void);
|
|
|
|
#endif /* __ASM_SH_UACCESS_64_H */
|