]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
x86/kexec: Only swap pages for preserve_context mode
authorDavid Woodhouse <dwmw@amazon.co.uk>
Sat, 2 Nov 2024 23:27:33 +0000 (23:27 +0000)
committerDavid Woodhouse <dwmw@amazon.co.uk>
Tue, 5 Nov 2024 20:21:13 +0000 (20:21 +0000)
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>
arch/x86/kernel/relocate_kernel_64.S

index ca01e3e2f097cb373bdc002ccd742ab13e0f05da..2848d086ceb0fe4d2f289a3bff1e317109fcfad4 100644 (file)
@@ -303,6 +303,9 @@ SYM_CODE_START_LOCAL_NOALIGN(swap_pages)
        movq    %rdi, %rdx    /* Save destination page to %rdx */
        movq    %rsi, %rax    /* Save source page to %rax */
 
+       testq   %r11, %r11    /* Only actually swap for preserve_context */
+       jnz .Lnoswap
+
        /* copy source page to swap page */
        movq    %r10, %rdi
        movl    $512, %ecx
@@ -317,6 +320,7 @@ SYM_CODE_START_LOCAL_NOALIGN(swap_pages)
        /* copy swap page to destination page */
        movq    %rdx, %rdi
        movq    %r10, %rsi
+.Lnoswap:
        movl    $512, %ecx
        rep ; movsq