Message ID | 1459529620-22150-13-git-send-email-james.morse@arm.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
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)?
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 --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. */