diff options
Diffstat (limited to 'arch/x86/lib/copy_user_nocache_64.S')
| -rw-r--r-- | arch/x86/lib/copy_user_nocache_64.S | 53 | 
1 files changed, 26 insertions, 27 deletions
diff --git a/arch/x86/lib/copy_user_nocache_64.S b/arch/x86/lib/copy_user_nocache_64.S index cb0c112386f..6a4f43c2d9e 100644 --- a/arch/x86/lib/copy_user_nocache_64.S +++ b/arch/x86/lib/copy_user_nocache_64.S @@ -14,6 +14,8 @@  #include <asm/current.h>  #include <asm/asm-offsets.h>  #include <asm/thread_info.h> +#include <asm/asm.h> +#include <asm/smap.h>  	.macro ALIGN_DESTINATION  #ifdef FIX_ALIGNMENT @@ -36,11 +38,8 @@  	jmp copy_user_handle_tail  	.previous -	.section __ex_table,"a" -	.align 8 -	.quad 100b,103b -	.quad 101b,103b -	.previous +	_ASM_EXTABLE(100b,103b) +	_ASM_EXTABLE(101b,103b)  #endif  	.endm @@ -50,6 +49,7 @@   */  ENTRY(__copy_user_nocache)  	CFI_STARTPROC +	ASM_STAC  	cmpl $8,%edx  	jb 20f		/* less then 8 bytes, go to byte copy loop */  	ALIGN_DESTINATION @@ -97,6 +97,7 @@ ENTRY(__copy_user_nocache)  	decl %ecx  	jnz 21b  23:	xorl %eax,%eax +	ASM_CLAC  	sfence  	ret @@ -111,27 +112,25 @@ ENTRY(__copy_user_nocache)  	jmp copy_user_handle_tail  	.previous -	.section __ex_table,"a" -	.quad 1b,30b -	.quad 2b,30b -	.quad 3b,30b -	.quad 4b,30b -	.quad 5b,30b -	.quad 6b,30b -	.quad 7b,30b -	.quad 8b,30b -	.quad 9b,30b -	.quad 10b,30b -	.quad 11b,30b -	.quad 12b,30b -	.quad 13b,30b -	.quad 14b,30b -	.quad 15b,30b -	.quad 16b,30b -	.quad 18b,40b -	.quad 19b,40b -	.quad 21b,50b -	.quad 22b,50b -	.previous +	_ASM_EXTABLE(1b,30b) +	_ASM_EXTABLE(2b,30b) +	_ASM_EXTABLE(3b,30b) +	_ASM_EXTABLE(4b,30b) +	_ASM_EXTABLE(5b,30b) +	_ASM_EXTABLE(6b,30b) +	_ASM_EXTABLE(7b,30b) +	_ASM_EXTABLE(8b,30b) +	_ASM_EXTABLE(9b,30b) +	_ASM_EXTABLE(10b,30b) +	_ASM_EXTABLE(11b,30b) +	_ASM_EXTABLE(12b,30b) +	_ASM_EXTABLE(13b,30b) +	_ASM_EXTABLE(14b,30b) +	_ASM_EXTABLE(15b,30b) +	_ASM_EXTABLE(16b,30b) +	_ASM_EXTABLE(18b,40b) +	_ASM_EXTABLE(19b,40b) +	_ASM_EXTABLE(21b,50b) +	_ASM_EXTABLE(22b,50b)  	CFI_ENDPROC  ENDPROC(__copy_user_nocache)  | 
