mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-08-05 16:54:27 +00:00
x86/kexec: Only swap pages for ::preserve_context mode
There's no need to swap pages (which involves three memcopies for each page) in the plain kexec case. Just do a single copy from source to destination page. Signed-off-by: David Woodhouse <dwmw@amazon.co.uk> Signed-off-by: Ingo Molnar <mingo@kernel.org> Cc: Baoquan He <bhe@redhat.com> Cc: Vivek Goyal <vgoyal@redhat.com> Cc: Dave Young <dyoung@redhat.com> Cc: Eric Biederman <ebiederm@xmission.com> Cc: Ard Biesheuvel <ardb@kernel.org> Cc: "H. Peter Anvin" <hpa@zytor.com> Link: https://lore.kernel.org/r/20241205153343.3275139-5-dwmw2@infradead.org
This commit is contained in:
parent
46d4e205e2
commit
9e5683e2d0
1 changed files with 4 additions and 0 deletions
|
@ -310,6 +310,9 @@ SYM_CODE_START_LOCAL_NOALIGN(swap_pages)
|
||||||
movq %rdi, %rdx /* Save destination page to %rdx */
|
movq %rdi, %rdx /* Save destination page to %rdx */
|
||||||
movq %rsi, %rax /* Save source page to %rax */
|
movq %rsi, %rax /* Save source page to %rax */
|
||||||
|
|
||||||
|
testq %r11, %r11 /* Only actually swap for ::preserve_context */
|
||||||
|
jz .Lnoswap
|
||||||
|
|
||||||
/* copy source page to swap page */
|
/* copy source page to swap page */
|
||||||
movq %r10, %rdi
|
movq %r10, %rdi
|
||||||
movl $512, %ecx
|
movl $512, %ecx
|
||||||
|
@ -324,6 +327,7 @@ SYM_CODE_START_LOCAL_NOALIGN(swap_pages)
|
||||||
/* copy swap page to destination page */
|
/* copy swap page to destination page */
|
||||||
movq %rdx, %rdi
|
movq %rdx, %rdi
|
||||||
movq %r10, %rsi
|
movq %r10, %rsi
|
||||||
|
.Lnoswap:
|
||||||
movl $512, %ecx
|
movl $512, %ecx
|
||||||
rep ; movsq
|
rep ; movsq
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue