All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/2] Misc comments fixup in relocate_kernel_64.S
@ 2024-08-19 12:21 Kai Huang
  2024-08-19 12:21 ` [PATCH 1/2] x86/kexec: Fix a comment of swap_pages() assembly Kai Huang
  2024-08-19 12:21 ` [PATCH 2/2] x86/kexec: Add comments around swap_pages() assembly to improve readability Kai Huang
  0 siblings, 2 replies; 7+ messages in thread
From: Kai Huang @ 2024-08-19 12:21 UTC (permalink / raw)
  To: tglx, mingo, bp, dave.hansen, hpa, peterz
  Cc: kirill.shutemov, x86, linux-kernel, nik.borisov

The assembly code of relcocate_kernel() takes some time to follow for
newbies like me.  This series adds some comments to try to improve the
readability hoping they could be helpful to others too.  Also fix an
error (IIUC) in one comment.

Kai Huang (2):
  x86/kexec: Fix a comment of swap_pages() assembly
  x86/kexec: Add comments around swap_pages() assembly to improve
    readability

 arch/x86/kernel/relocate_kernel_64.S | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)


base-commit: b8c7cbc324dc17b9e42379b42603613580bec2d8
-- 
2.45.2


^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH 1/2] x86/kexec: Fix a comment of swap_pages() assembly
  2024-08-19 12:21 [PATCH 0/2] Misc comments fixup in relocate_kernel_64.S Kai Huang
@ 2024-08-19 12:21 ` Kai Huang
  2024-08-20  8:40   ` Kirill A. Shutemov
  2024-08-19 12:21 ` [PATCH 2/2] x86/kexec: Add comments around swap_pages() assembly to improve readability Kai Huang
  1 sibling, 1 reply; 7+ messages in thread
From: Kai Huang @ 2024-08-19 12:21 UTC (permalink / raw)
  To: tglx, mingo, bp, dave.hansen, hpa, peterz
  Cc: kirill.shutemov, x86, linux-kernel, nik.borisov

When relocate_kernel() gets called, %rdi holds 'indirection_page' and
%rsi holds 'page_list'.  And %rdi always holds 'indirection_page' when
swap_pages() is called.

Therefore the comment of the first line code of swap_pages()

	movq    %rdi, %rcx      /* Put the page_list in %rcx */

.. isn't correct because it actually moves the 'indirection_page' to
the %rcx.  Fix it.

Signed-off-by: Kai Huang <kai.huang@intel.com>
---
 arch/x86/kernel/relocate_kernel_64.S | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/x86/kernel/relocate_kernel_64.S b/arch/x86/kernel/relocate_kernel_64.S
index 042c9a0334e9..f7a3ca3dee53 100644
--- a/arch/x86/kernel/relocate_kernel_64.S
+++ b/arch/x86/kernel/relocate_kernel_64.S
@@ -258,7 +258,7 @@ SYM_CODE_END(virtual_mapped)
 	/* Do the copies */
 SYM_CODE_START_LOCAL_NOALIGN(swap_pages)
 	UNWIND_HINT_END_OF_STACK
-	movq	%rdi, %rcx	/* Put the page_list in %rcx */
+	movq	%rdi, %rcx	/* Put the indirection_page in %rcx */
 	xorl	%edi, %edi
 	xorl	%esi, %esi
 	jmp	1f
-- 
2.45.2


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH 2/2] x86/kexec: Add comments around swap_pages() assembly to improve readability
  2024-08-19 12:21 [PATCH 0/2] Misc comments fixup in relocate_kernel_64.S Kai Huang
  2024-08-19 12:21 ` [PATCH 1/2] x86/kexec: Fix a comment of swap_pages() assembly Kai Huang
@ 2024-08-19 12:21 ` Kai Huang
  2024-08-20  9:25   ` Kirill A. Shutemov
  1 sibling, 1 reply; 7+ messages in thread
From: Kai Huang @ 2024-08-19 12:21 UTC (permalink / raw)
  To: tglx, mingo, bp, dave.hansen, hpa, peterz
  Cc: kirill.shutemov, x86, linux-kernel, nik.borisov

The current assembly around swap_pages() in the relocate_kernel() takes
some time to follow because the use of registers can be easily lost when
the line of assembly goes long.  Add a couple of comments to clarify the
code around swap_pages() to improve readability.

Signed-off-by: Kai Huang <kai.huang@intel.com>
---
 arch/x86/kernel/relocate_kernel_64.S | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/arch/x86/kernel/relocate_kernel_64.S b/arch/x86/kernel/relocate_kernel_64.S
index f7a3ca3dee53..e9e88c342f75 100644
--- a/arch/x86/kernel/relocate_kernel_64.S
+++ b/arch/x86/kernel/relocate_kernel_64.S
@@ -170,6 +170,7 @@ SYM_CODE_START_LOCAL_NOALIGN(identity_mapped)
 	wbinvd
 .Lsme_off:
 
+	/* Save the preserve_context to %r11 as swap_pages clobbers %rcx. */
 	movq	%rcx, %r11
 	call	swap_pages
 
@@ -289,18 +290,21 @@ SYM_CODE_START_LOCAL_NOALIGN(swap_pages)
 	movq	%rcx,   %rsi  /* For ever source page do a copy */
 	andq	$0xfffffffffffff000, %rsi
 
-	movq	%rdi, %rdx
-	movq	%rsi, %rax
+	movq	%rdi, %rdx    /* Save destination page to %rdx */
+	movq	%rsi, %rax    /* Save source page to %rax */
 
+	/* copy source page to swap page */
 	movq	%r10, %rdi
 	movl	$512, %ecx
 	rep ; movsq
 
+	/* copy destination page to source page */
 	movq	%rax, %rdi
 	movq	%rdx, %rsi
 	movl	$512, %ecx
 	rep ; movsq
 
+	/* copy swap page to destination page */
 	movq	%rdx, %rdi
 	movq	%r10, %rsi
 	movl	$512, %ecx
-- 
2.45.2


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH 1/2] x86/kexec: Fix a comment of swap_pages() assembly
  2024-08-19 12:21 ` [PATCH 1/2] x86/kexec: Fix a comment of swap_pages() assembly Kai Huang
@ 2024-08-20  8:40   ` Kirill A. Shutemov
  2024-08-20 10:32     ` Huang, Kai
  0 siblings, 1 reply; 7+ messages in thread
From: Kirill A. Shutemov @ 2024-08-20  8:40 UTC (permalink / raw)
  To: Kai Huang
  Cc: tglx, mingo, bp, dave.hansen, hpa, peterz, x86, linux-kernel,
	nik.borisov

On Tue, Aug 20, 2024 at 12:21:11AM +1200, Kai Huang wrote:
> When relocate_kernel() gets called, %rdi holds 'indirection_page' and
> %rsi holds 'page_list'.  And %rdi always holds 'indirection_page' when
> swap_pages() is called.
> 
> Therefore the comment of the first line code of swap_pages()
> 
> 	movq    %rdi, %rcx      /* Put the page_list in %rcx */
> 
> .. isn't correct because it actually moves the 'indirection_page' to
> the %rcx.  Fix it.
> 
> Signed-off-by: Kai Huang <kai.huang@intel.com>

Acked-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>

Looks like it got broken by 4bfaaef01a1b ("[PATCH] Avoid overwriting the
current pgd (V4, x86_64)")

-- 
  Kiryl Shutsemau / Kirill A. Shutemov

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 2/2] x86/kexec: Add comments around swap_pages() assembly to improve readability
  2024-08-19 12:21 ` [PATCH 2/2] x86/kexec: Add comments around swap_pages() assembly to improve readability Kai Huang
@ 2024-08-20  9:25   ` Kirill A. Shutemov
  0 siblings, 0 replies; 7+ messages in thread
From: Kirill A. Shutemov @ 2024-08-20  9:25 UTC (permalink / raw)
  To: Kai Huang
  Cc: tglx, mingo, bp, dave.hansen, hpa, peterz, x86, linux-kernel,
	nik.borisov

On Tue, Aug 20, 2024 at 12:21:12AM +1200, Kai Huang wrote:
> The current assembly around swap_pages() in the relocate_kernel() takes
> some time to follow because the use of registers can be easily lost when
> the line of assembly goes long.  Add a couple of comments to clarify the
> code around swap_pages() to improve readability.
> 
> Signed-off-by: Kai Huang <kai.huang@intel.com>

Acked-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>

-- 
  Kiryl Shutsemau / Kirill A. Shutemov

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 1/2] x86/kexec: Fix a comment of swap_pages() assembly
  2024-08-20  8:40   ` Kirill A. Shutemov
@ 2024-08-20 10:32     ` Huang, Kai
  2024-08-20 11:15       ` kirill.shutemov
  0 siblings, 1 reply; 7+ messages in thread
From: Huang, Kai @ 2024-08-20 10:32 UTC (permalink / raw)
  To: kirill.shutemov@linux.intel.com
  Cc: Hansen, Dave, bp@alien8.de, x86@kernel.org, peterz@infradead.org,
	hpa@zytor.com, mingo@redhat.com, tglx@linutronix.de,
	linux-kernel@vger.kernel.org, nik.borisov@suse.com

On Tue, 2024-08-20 at 11:40 +0300, Kirill A. Shutemov wrote:
> On Tue, Aug 20, 2024 at 12:21:11AM +1200, Kai Huang wrote:
> > When relocate_kernel() gets called, %rdi holds 'indirection_page' and
> > %rsi holds 'page_list'.  And %rdi always holds 'indirection_page' when
> > swap_pages() is called.
> > 
> > Therefore the comment of the first line code of swap_pages()
> > 
> > 	movq    %rdi, %rcx      /* Put the page_list in %rcx */
> > 
> > .. isn't correct because it actually moves the 'indirection_page' to
> > the %rcx.  Fix it.
> > 
> > Signed-off-by: Kai Huang <kai.huang@intel.com>
> 
> Acked-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
> 
> Looks like it got broken by 4bfaaef01a1b ("[PATCH] Avoid overwriting the
> current pgd (V4, x86_64)")
> 

Thanks for finding this.  I spent some time yesterday trying to do so but it
wasn't obvious to me.  :-)

Yes that line was firstly introduced by commit 5234f5eb04abb ("[PATCH] kexec:
x86_64 kexec implementation") but by that time it was correct: %rdi indeed
holds 'page_list'.  The commit you mentioned above adds a new (first) argument
to relocate_kernel() and %rdi was changed to hold 'indirection_page', but the
comment was leftover.

But the two commits were introduced at 2004 and 2006, so I don't think it
worth any Fixes tag?

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 1/2] x86/kexec: Fix a comment of swap_pages() assembly
  2024-08-20 10:32     ` Huang, Kai
@ 2024-08-20 11:15       ` kirill.shutemov
  0 siblings, 0 replies; 7+ messages in thread
From: kirill.shutemov @ 2024-08-20 11:15 UTC (permalink / raw)
  To: Huang, Kai
  Cc: Hansen, Dave, bp@alien8.de, x86@kernel.org, peterz@infradead.org,
	hpa@zytor.com, mingo@redhat.com, tglx@linutronix.de,
	linux-kernel@vger.kernel.org, nik.borisov@suse.com

On Tue, Aug 20, 2024 at 10:32:39AM +0000, Huang, Kai wrote:
> But the two commits were introduced at 2004 and 2006, so I don't think it
> worth any Fixes tag?

Nah. It is a comment after all.

-- 
  Kiryl Shutsemau / Kirill A. Shutemov

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2024-08-20 11:15 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-08-19 12:21 [PATCH 0/2] Misc comments fixup in relocate_kernel_64.S Kai Huang
2024-08-19 12:21 ` [PATCH 1/2] x86/kexec: Fix a comment of swap_pages() assembly Kai Huang
2024-08-20  8:40   ` Kirill A. Shutemov
2024-08-20 10:32     ` Huang, Kai
2024-08-20 11:15       ` kirill.shutemov
2024-08-19 12:21 ` [PATCH 2/2] x86/kexec: Add comments around swap_pages() assembly to improve readability Kai Huang
2024-08-20  9:25   ` Kirill A. Shutemov

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.