提交 5003dbde 编写于 作者: G Geoff Levand 提交者: Will Deacon

arm64: Add new asm macro copy_page

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: NGeoff Levand <geoff@infradead.org>
[Changed asm label to 9998, added commit message]
Signed-off-by: NJames Morse <james.morse@arm.com>
Acked-by: NCatalin Marinas <catalin.marinas@arm.com>
Signed-off-by: NWill Deacon <will.deacon@arm.com>
上级 28c72583
...@@ -24,6 +24,7 @@ ...@@ -24,6 +24,7 @@
#define __ASM_ASSEMBLER_H #define __ASM_ASSEMBLER_H
#include <asm/asm-offsets.h> #include <asm/asm-offsets.h>
#include <asm/page.h>
#include <asm/pgtable-hwdef.h> #include <asm/pgtable-hwdef.h>
#include <asm/ptrace.h> #include <asm/ptrace.h>
#include <asm/thread_info.h> #include <asm/thread_info.h>
...@@ -279,6 +280,24 @@ lr .req x30 // link register ...@@ -279,6 +280,24 @@ lr .req x30 // link register
9000: 9000:
.endm .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 * Annotate a function as position independent, i.e., safe to be called before
* the kernel virtual mapping is activated. * the kernel virtual mapping is activated.
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册