x86/asm/uaccess: Unify the ALIGN_DESTINATION macro
Pull it up into the header and kill duplicate versions. Separately, both macros are identical: 35948b2bd3431aee7149e85cfe4becbc /tmp/a 35948b2bd3431aee7149e85cfe4becbc /tmp/b Signed-off-by: Borislav Petkov <bp@suse.de> Cc: Andy Lutomirski <luto@amacapital.net> Cc: Borislav Petkov <bp@alien8.de> Cc: Brian Gerst <brgerst@gmail.com> Cc: Denys Vlasenko <dvlasenk@redhat.com> Cc: H. Peter Anvin <hpa@zytor.com> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Thomas Gleixner <tglx@linutronix.de> Link: http://lkml.kernel.org/r/1431538944-27724-3-git-send-email-bp@alien8.de Signed-off-by: Ingo Molnar <mingo@kernel.org>
This commit is contained in:
parent
26e7d9dee8
commit
9e6b13f761
3 changed files with 25 additions and 48 deletions
|
@ -63,6 +63,31 @@
|
||||||
_ASM_ALIGN ; \
|
_ASM_ALIGN ; \
|
||||||
_ASM_PTR (entry); \
|
_ASM_PTR (entry); \
|
||||||
.popsection
|
.popsection
|
||||||
|
|
||||||
|
.macro ALIGN_DESTINATION
|
||||||
|
/* check for bad alignment of destination */
|
||||||
|
movl %edi,%ecx
|
||||||
|
andl $7,%ecx
|
||||||
|
jz 102f /* already aligned */
|
||||||
|
subl $8,%ecx
|
||||||
|
negl %ecx
|
||||||
|
subl %ecx,%edx
|
||||||
|
100: movb (%rsi),%al
|
||||||
|
101: movb %al,(%rdi)
|
||||||
|
incq %rsi
|
||||||
|
incq %rdi
|
||||||
|
decl %ecx
|
||||||
|
jnz 100b
|
||||||
|
102:
|
||||||
|
.section .fixup,"ax"
|
||||||
|
103: addl %ecx,%edx /* ecx is zerorest also */
|
||||||
|
jmp copy_user_handle_tail
|
||||||
|
.previous
|
||||||
|
|
||||||
|
_ASM_EXTABLE(100b,103b)
|
||||||
|
_ASM_EXTABLE(101b,103b)
|
||||||
|
.endm
|
||||||
|
|
||||||
#else
|
#else
|
||||||
# define _ASM_EXTABLE(from,to) \
|
# define _ASM_EXTABLE(from,to) \
|
||||||
" .pushsection \"__ex_table\",\"a\"\n" \
|
" .pushsection \"__ex_table\",\"a\"\n" \
|
||||||
|
|
|
@ -16,30 +16,6 @@
|
||||||
#include <asm/asm.h>
|
#include <asm/asm.h>
|
||||||
#include <asm/smap.h>
|
#include <asm/smap.h>
|
||||||
|
|
||||||
.macro ALIGN_DESTINATION
|
|
||||||
/* check for bad alignment of destination */
|
|
||||||
movl %edi,%ecx
|
|
||||||
andl $7,%ecx
|
|
||||||
jz 102f /* already aligned */
|
|
||||||
subl $8,%ecx
|
|
||||||
negl %ecx
|
|
||||||
subl %ecx,%edx
|
|
||||||
100: movb (%rsi),%al
|
|
||||||
101: movb %al,(%rdi)
|
|
||||||
incq %rsi
|
|
||||||
incq %rdi
|
|
||||||
decl %ecx
|
|
||||||
jnz 100b
|
|
||||||
102:
|
|
||||||
.section .fixup,"ax"
|
|
||||||
103: addl %ecx,%edx /* ecx is zerorest also */
|
|
||||||
jmp copy_user_handle_tail
|
|
||||||
.previous
|
|
||||||
|
|
||||||
_ASM_EXTABLE(100b,103b)
|
|
||||||
_ASM_EXTABLE(101b,103b)
|
|
||||||
.endm
|
|
||||||
|
|
||||||
/* Standard copy_to_user with segment limit checking */
|
/* Standard copy_to_user with segment limit checking */
|
||||||
ENTRY(_copy_to_user)
|
ENTRY(_copy_to_user)
|
||||||
CFI_STARTPROC
|
CFI_STARTPROC
|
||||||
|
|
|
@ -14,30 +14,6 @@
|
||||||
#include <asm/asm.h>
|
#include <asm/asm.h>
|
||||||
#include <asm/smap.h>
|
#include <asm/smap.h>
|
||||||
|
|
||||||
.macro ALIGN_DESTINATION
|
|
||||||
/* check for bad alignment of destination */
|
|
||||||
movl %edi,%ecx
|
|
||||||
andl $7,%ecx
|
|
||||||
jz 102f /* already aligned */
|
|
||||||
subl $8,%ecx
|
|
||||||
negl %ecx
|
|
||||||
subl %ecx,%edx
|
|
||||||
100: movb (%rsi),%al
|
|
||||||
101: movb %al,(%rdi)
|
|
||||||
incq %rsi
|
|
||||||
incq %rdi
|
|
||||||
decl %ecx
|
|
||||||
jnz 100b
|
|
||||||
102:
|
|
||||||
.section .fixup,"ax"
|
|
||||||
103: addl %ecx,%edx /* ecx is zerorest also */
|
|
||||||
jmp copy_user_handle_tail
|
|
||||||
.previous
|
|
||||||
|
|
||||||
_ASM_EXTABLE(100b,103b)
|
|
||||||
_ASM_EXTABLE(101b,103b)
|
|
||||||
.endm
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* copy_user_nocache - Uncached memory copy with exception handling
|
* copy_user_nocache - Uncached memory copy with exception handling
|
||||||
* This will force destination/source out of cache for more performance.
|
* This will force destination/source out of cache for more performance.
|
||||||
|
|
Loading…
Add table
Reference in a new issue