diff mbox

[v7,12/16] arm64: Add new asm macro copy_page

Message ID 1459529620-22150-13-git-send-email-james.morse@arm.com (mailing list archive)
State New, archived
Headers show

Commit Message

James Morse April 1, 2016, 4:53 p.m. UTC
From: Geoff Levand <geoff@infradead.org>

Kexec and hibernate need to copy pages of memory, but may not have all
of the kernel mapped, and are unable to call copy_page().

Add a simplistic copy_page() macro, that can be inlined in these
situations. lib/copy_page.S provides a bigger better version, but
uses more registers.

Signed-off-by: Geoff Levand <geoff@infradead.org>
[Changed asm label to 9998, added commit message]
Signed-off-by: James Morse <james.morse@arm.com>
---
 arch/arm64/include/asm/assembler.h | 19 +++++++++++++++++++
 1 file changed, 19 insertions(+)

Comments

Catalin Marinas April 20, 2016, 4:38 p.m. UTC | #1
On Fri, Apr 01, 2016 at 05:53:36PM +0100, James Morse wrote:
> From: Geoff Levand <geoff@infradead.org>
> 
> Kexec and hibernate need to copy pages of memory, but may not have all
> of the kernel mapped, and are unable to call copy_page().
> 
> Add a simplistic copy_page() macro, that can be inlined in these
> situations. lib/copy_page.S provides a bigger better version, but
> uses more registers.
> 
> Signed-off-by: Geoff Levand <geoff@infradead.org>
> [Changed asm label to 9998, added commit message]
> Signed-off-by: James Morse <james.morse@arm.com>

Good enough for the brief usage:

Acked-by: Catalin Marinas <catalin.marinas@arm.com>

Would there be another user of this macro in the future (kexec)?
James Morse April 20, 2016, 4:56 p.m. UTC | #2
On 20/04/16 17:38, Catalin Marinas wrote:
> On Fri, Apr 01, 2016 at 05:53:36PM +0100, James Morse wrote:
>> From: Geoff Levand <geoff@infradead.org>
>>
>> Kexec and hibernate need to copy pages of memory, but may not have all
>> of the kernel mapped, and are unable to call copy_page().
>>
>> Add a simplistic copy_page() macro, that can be inlined in these
>> situations. lib/copy_page.S provides a bigger better version, but
>> uses more registers.
>>
>> Signed-off-by: Geoff Levand <geoff@infradead.org>
>> [Changed asm label to 9998, added commit message]
>> Signed-off-by: James Morse <james.morse@arm.com>
> 
> Good enough for the brief usage:
> 
> Acked-by: Catalin Marinas <catalin.marinas@arm.com>

Thanks,

> Would there be another user of this macro in the future (kexec)?

Yes, this is one of the patches common to the two. Adding this macro was some
review feedback from kexec v12 [0].


Thanks,
James

[0] http://lists.infradead.org/pipermail/kexec/2015-December/014959.html
diff mbox

Patch

diff --git a/arch/arm64/include/asm/assembler.h b/arch/arm64/include/asm/assembler.h
index c72474c2d4dc..a04fd7a9c102 100644
--- a/arch/arm64/include/asm/assembler.h
+++ b/arch/arm64/include/asm/assembler.h
@@ -24,6 +24,7 @@ 
 #define __ASM_ASSEMBLER_H
 
 #include <asm/asm-offsets.h>
+#include <asm/page.h>
 #include <asm/pgtable-hwdef.h>
 #include <asm/ptrace.h>
 #include <asm/thread_info.h>
@@ -292,6 +293,24 @@  lr	.req	x30		// link register
 	.endm
 
 /*
+ * copy_page - copy src to dest using temp registers t1-t8
+ */
+	.macro copy_page dest:req src:req t1:req t2:req t3:req t4:req t5:req t6:req t7:req t8:req
+9998:	ldp	\t1, \t2, [\src]
+	ldp	\t3, \t4, [\src, #16]
+	ldp	\t5, \t6, [\src, #32]
+	ldp	\t7, \t8, [\src, #48]
+	add	\src, \src, #64
+	stnp	\t1, \t2, [\dest]
+	stnp	\t3, \t4, [\dest, #16]
+	stnp	\t5, \t6, [\dest, #32]
+	stnp	\t7, \t8, [\dest, #48]
+	add	\dest, \dest, #64
+	tst	\src, #(PAGE_SIZE - 1)
+	b.ne	9998b
+	.endm
+
+/*
  * Annotate a function as position independent, i.e., safe to be called before
  * the kernel virtual mapping is activated.
  */