提交 13038801 编写于 作者: T Tom Lendacky 提交者: Ingo Molnar

x86/mm: Clean up register saving in the __enc_copy() assembly code

Clean up the use of PUSH and POP and when registers are saved in the
__enc_copy() assembly function in order to improve the readability of the code.

Move parameter register saving into general purpose registers earlier
in the code and move all the pushes to the beginning of the function
with corresponding pops at the end.

We do this to prepare fixes.
Tested-by: NGabriel Craciunescu <nix.or.die@gmail.com>
Signed-off-by: NTom Lendacky <thomas.lendacky@amd.com>
Reviewed-by: NBorislav Petkov <bp@suse.de>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Brijesh Singh <brijesh.singh@amd.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/20180110192556.6026.74187.stgit@tlendack-t1.amdoffice.netSigned-off-by: NIngo Molnar <mingo@kernel.org>
上级 327867fa
...@@ -103,20 +103,19 @@ ENTRY(__enc_copy) ...@@ -103,20 +103,19 @@ ENTRY(__enc_copy)
orq $X86_CR4_PGE, %rdx orq $X86_CR4_PGE, %rdx
mov %rdx, %cr4 mov %rdx, %cr4
push %r15
movq %rcx, %r9 /* Save kernel length */
movq %rdi, %r10 /* Save encrypted kernel address */
movq %rsi, %r11 /* Save decrypted kernel address */
/* Set the PAT register PA5 entry to write-protect */ /* Set the PAT register PA5 entry to write-protect */
push %rcx
movl $MSR_IA32_CR_PAT, %ecx movl $MSR_IA32_CR_PAT, %ecx
rdmsr rdmsr
push %rdx /* Save original PAT value */ mov %rdx, %r15 /* Save original PAT value */
andl $0xffff00ff, %edx /* Clear PA5 */ andl $0xffff00ff, %edx /* Clear PA5 */
orl $0x00000500, %edx /* Set PA5 to WP */ orl $0x00000500, %edx /* Set PA5 to WP */
wrmsr wrmsr
pop %rdx /* RDX contains original PAT value */
pop %rcx
movq %rcx, %r9 /* Save kernel length */
movq %rdi, %r10 /* Save encrypted kernel address */
movq %rsi, %r11 /* Save decrypted kernel address */
wbinvd /* Invalidate any cache entries */ wbinvd /* Invalidate any cache entries */
...@@ -138,12 +137,13 @@ ENTRY(__enc_copy) ...@@ -138,12 +137,13 @@ ENTRY(__enc_copy)
jnz 1b /* Kernel length not zero? */ jnz 1b /* Kernel length not zero? */
/* Restore PAT register */ /* Restore PAT register */
push %rdx /* Save original PAT value */
movl $MSR_IA32_CR_PAT, %ecx movl $MSR_IA32_CR_PAT, %ecx
rdmsr rdmsr
pop %rdx /* Restore original PAT value */ mov %r15, %rdx /* Restore original PAT value */
wrmsr wrmsr
pop %r15
ret ret
.L__enc_copy_end: .L__enc_copy_end:
ENDPROC(__enc_copy) ENDPROC(__enc_copy)
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册