Message ID | 20200312094002.153302-1-remi@remlab.net (mailing list archive) |
---|---|
State | Mainlined |
Commit | 6cf9a2dce6bd10cf454cf6299c1c23182cb486e7 |
Headers | show |
Series | arm64: move kimage_vaddr to .rodata | expand |
On Thu, Mar 12, 2020 at 11:40:02AM +0200, Rémi Denis-Courmont wrote: > From: Remi Denis-Courmont <remi.denis.courmont@huawei.com> > > This datum is not referenced from .idmap.text: it does not need to be > mapped in idmap. Lets move it to .rodata as it is never written to after > early boot of the primary CPU. > (Maybe .data.ro_after_init would be cleaner though?) Can we move this into arch/arm64/mm/mmu.c, where we already have kimage_voffset: | u64 kimage_voffset __ro_after_init; | EXPORT_SYMBOL(kimage_voffset); ... or is it not possible to initialize kimage_vaddr correctly in C? Thanks, Mark. > > Signed-off-by: Rémi Denis-Courmont <remi@remlab.net> > --- > arch/arm64/kernel/head.S | 12 +++++++----- > 1 file changed, 7 insertions(+), 5 deletions(-) > > diff --git a/arch/arm64/kernel/head.S b/arch/arm64/kernel/head.S > index 6e08ee2b4d55..8e5c0e0040e4 100644 > --- a/arch/arm64/kernel/head.S > +++ b/arch/arm64/kernel/head.S > @@ -457,17 +457,19 @@ SYM_FUNC_START_LOCAL(__primary_switched) > b start_kernel > SYM_FUNC_END(__primary_switched) > > + .pushsection ".rodata", "a" > +SYM_DATA_START(kimage_vaddr) > + .quad _text - TEXT_OFFSET > +SYM_DATA_END(kimage_vaddr) > +EXPORT_SYMBOL(kimage_vaddr) > + .popsection > + > /* > * end early head section, begin head code that is also used for > * hotplug and needs to have the same protections as the text region > */ > .section ".idmap.text","awx" > > -SYM_DATA_START(kimage_vaddr) > - .quad _text - TEXT_OFFSET > -SYM_DATA_END(kimage_vaddr) > -EXPORT_SYMBOL(kimage_vaddr) > - > /* > * If we're fortunate enough to boot at EL2, ensure that the world is > * sane before dropping to EL1. > -- > 2.25.1 > > > _______________________________________________ > linux-arm-kernel mailing list > linux-arm-kernel@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
Le 2020-03-12 18:40, Mark Rutland a écrit : > On Thu, Mar 12, 2020 at 11:40:02AM +0200, Rémi Denis-Courmont wrote: >> From: Remi Denis-Courmont <remi.denis.courmont@huawei.com> >> >> This datum is not referenced from .idmap.text: it does not need to be >> mapped in idmap. Lets move it to .rodata as it is never written to >> after >> early boot of the primary CPU. >> (Maybe .data.ro_after_init would be cleaner though?) > > Can we move this into arch/arm64/mm/mmu.c, where we already have > kimage_voffset: > > | u64 kimage_voffset __ro_after_init; > | EXPORT_SYMBOL(kimage_voffset); > > ... or is it not possible to initialize kimage_vaddr correctly in C? Good question... I'll check tomorrow.
Le torstaina 12. maaliskuuta 2020, 18.40.36 EET Mark Rutland a écrit : > On Thu, Mar 12, 2020 at 11:40:02AM +0200, Rémi Denis-Courmont wrote: > > From: Remi Denis-Courmont <remi.denis.courmont@huawei.com> > > > > This datum is not referenced from .idmap.text: it does not need to be > > mapped in idmap. Lets move it to .rodata as it is never written to after > > early boot of the primary CPU. > > (Maybe .data.ro_after_init would be cleaner though?) > > Can we move this into arch/arm64/mm/mmu.c, where we already have > > kimage_voffset: > | u64 kimage_voffset __ro_after_init; > | EXPORT_SYMBOL(kimage_voffset); > > ... or is it not possible to initialize kimage_vaddr correctly in C? Currently TEXT_OFFSET is defined by the Makefile only for assembler sources and the linker script. So that would need to be exposed to CPPFLAGS as well.
On Thu, Mar 12, 2020 at 11:40:02AM +0200, Rémi Denis-Courmont wrote: > From: Remi Denis-Courmont <remi.denis.courmont@huawei.com> > > This datum is not referenced from .idmap.text: it does not need to be > mapped in idmap. Lets move it to .rodata as it is never written to after > early boot of the primary CPU. > (Maybe .data.ro_after_init would be cleaner though?) > > Signed-off-by: Rémi Denis-Courmont <remi@remlab.net> > --- > arch/arm64/kernel/head.S | 12 +++++++----- > 1 file changed, 7 insertions(+), 5 deletions(-) > > diff --git a/arch/arm64/kernel/head.S b/arch/arm64/kernel/head.S > index 6e08ee2b4d55..8e5c0e0040e4 100644 > --- a/arch/arm64/kernel/head.S > +++ b/arch/arm64/kernel/head.S > @@ -457,17 +457,19 @@ SYM_FUNC_START_LOCAL(__primary_switched) > b start_kernel > SYM_FUNC_END(__primary_switched) > > + .pushsection ".rodata", "a" > +SYM_DATA_START(kimage_vaddr) > + .quad _text - TEXT_OFFSET > +SYM_DATA_END(kimage_vaddr) > +EXPORT_SYMBOL(kimage_vaddr) > + .popsection > + > /* > * end early head section, begin head code that is also used for > * hotplug and needs to have the same protections as the text region > */ > .section ".idmap.text","awx" > > -SYM_DATA_START(kimage_vaddr) > - .quad _text - TEXT_OFFSET > -SYM_DATA_END(kimage_vaddr) > -EXPORT_SYMBOL(kimage_vaddr) Acked-by: Will Deacon <will@kernel.org> Will
On Thu, Mar 12, 2020 at 11:40:02AM +0200, Rémi Denis-Courmont wrote: > From: Remi Denis-Courmont <remi.denis.courmont@huawei.com> > > This datum is not referenced from .idmap.text: it does not need to be > mapped in idmap. Lets move it to .rodata as it is never written to after > early boot of the primary CPU. > (Maybe .data.ro_after_init would be cleaner though?) > > Signed-off-by: Rémi Denis-Courmont <remi@remlab.net> Queued for 5.7. Thanks.
diff --git a/arch/arm64/kernel/head.S b/arch/arm64/kernel/head.S index 6e08ee2b4d55..8e5c0e0040e4 100644 --- a/arch/arm64/kernel/head.S +++ b/arch/arm64/kernel/head.S @@ -457,17 +457,19 @@ SYM_FUNC_START_LOCAL(__primary_switched) b start_kernel SYM_FUNC_END(__primary_switched) + .pushsection ".rodata", "a" +SYM_DATA_START(kimage_vaddr) + .quad _text - TEXT_OFFSET +SYM_DATA_END(kimage_vaddr) +EXPORT_SYMBOL(kimage_vaddr) + .popsection + /* * end early head section, begin head code that is also used for * hotplug and needs to have the same protections as the text region */ .section ".idmap.text","awx" -SYM_DATA_START(kimage_vaddr) - .quad _text - TEXT_OFFSET -SYM_DATA_END(kimage_vaddr) -EXPORT_SYMBOL(kimage_vaddr) - /* * If we're fortunate enough to boot at EL2, ensure that the world is * sane before dropping to EL1.