mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-16 23:45:31 +08:00
83a17d2661
The fixup helper function mechanism for handling user copy fault handling is not %100 accurrate, and can never be made so. We are going to transition the code to return the running return return length, which is always kept track in one or more registers of each of these routines. In order to convert them one by one, we have to allow the existing behavior to continue functioning. Therefore make all the copy code that wants the fixup helper to be used return negative one. After all of the user copy routines have been converted, this logic and the fixup helpers themselves can be removed completely. Signed-off-by: David S. Miller <davem@davemloft.net>
36 lines
753 B
ArmAsm
36 lines
753 B
ArmAsm
/* NGcopy_to_user.S: Niagara optimized copy to userspace.
|
|
*
|
|
* Copyright (C) 2006, 2007 David S. Miller (davem@davemloft.net)
|
|
*/
|
|
|
|
#define EX_ST(x) \
|
|
98: x; \
|
|
.section __ex_table,"a";\
|
|
.align 4; \
|
|
.word 98b, __ret_mone_asi;\
|
|
.text; \
|
|
.align 4;
|
|
|
|
#ifndef ASI_AIUS
|
|
#define ASI_AIUS 0x11
|
|
#endif
|
|
|
|
#define FUNC_NAME NGcopy_to_user
|
|
#define STORE(type,src,addr) type##a src, [addr] ASI_AIUS
|
|
#define STORE_ASI ASI_BLK_INIT_QUAD_LDD_AIUS
|
|
#define EX_RETVAL(x) %g0
|
|
|
|
#ifdef __KERNEL__
|
|
/* Writing to %asi is _expensive_ so we hardcode it.
|
|
* Reading %asi to check for KERNEL_DS is comparatively
|
|
* cheap.
|
|
*/
|
|
#define PREAMBLE \
|
|
rd %asi, %g1; \
|
|
cmp %g1, ASI_AIUS; \
|
|
bne,pn %icc, ___copy_in_user; \
|
|
nop
|
|
#endif
|
|
|
|
#include "NGmemcpy.S"
|