diff mbox series

[RFC,02/27] KVM: arm64: Link position-independent string routines into .hyp.text

Message ID 20201117181607.1761516-3-qperret@google.com
State New
Headers show
Series [RFC,01/27] arm64: lib: Annotate {clear,copy}_page() as position-independent | expand

Commit Message

Quentin Perret Nov. 17, 2020, 6:15 p.m. UTC
From: Will Deacon <will@kernel.org>

Pull clear_page(), copy_page(), memcpy() and memset() into the nVHE hyp
code and ensure that we always execute the '__pi_' entry point on the
offchance that it changes in future.

[ qperret: Commit title nits ]

Signed-off-by: Will Deacon <will@kernel.org>
Signed-off-by: Quentin Perret <qperret@google.com>
---
 arch/arm64/kernel/image-vars.h   | 11 +++++++++++
 arch/arm64/kvm/hyp/nvhe/Makefile |  4 ++++
 2 files changed, 15 insertions(+)

Comments

David Brazdil Nov. 23, 2020, 12:34 p.m. UTC | #1
On Tue, Nov 17, 2020 at 06:15:42PM +0000, 'Quentin Perret' via kernel-team wrote:
> From: Will Deacon <will@kernel.org>

> 

> Pull clear_page(), copy_page(), memcpy() and memset() into the nVHE hyp

> code and ensure that we always execute the '__pi_' entry point on the

> offchance that it changes in future.

> 

> [ qperret: Commit title nits ]

> 

> Signed-off-by: Will Deacon <will@kernel.org>

> Signed-off-by: Quentin Perret <qperret@google.com>

> ---

>  arch/arm64/kernel/image-vars.h   | 11 +++++++++++

>  arch/arm64/kvm/hyp/nvhe/Makefile |  4 ++++

>  2 files changed, 15 insertions(+)

> 

> diff --git a/arch/arm64/kernel/image-vars.h b/arch/arm64/kernel/image-vars.h

> index 8539f34d7538..dd8ccc9efb6a 100644

> --- a/arch/arm64/kernel/image-vars.h

> +++ b/arch/arm64/kernel/image-vars.h

> @@ -105,6 +105,17 @@ KVM_NVHE_ALIAS(__stop___kvm_ex_table);

>  /* Array containing bases of nVHE per-CPU memory regions. */

>  KVM_NVHE_ALIAS(kvm_arm_hyp_percpu_base);

>  

> +/* Position-independent library routines */

> +__kvm_nvhe_clear_page			= __kvm_nvhe___pi_clear_page;

> +__kvm_nvhe_copy_page			= __kvm_nvhe___pi_copy_page;

> +__kvm_nvhe_memcpy			= __kvm_nvhe___pi_memcpy;

> +__kvm_nvhe_memset			= __kvm_nvhe___pi_memset;

> +

> +#ifdef CONFIG_KASAN

> +__kvm_nvhe___memcpy			= __kvm_nvhe___pi_memcpy;

> +__kvm_nvhe___memset			= __kvm_nvhe___pi_memset;

> +#endif

> +

>  #endif /* CONFIG_KVM */


Nit: Would be good to use the kvm_nvhe_sym() helper for the namespacing.
And feel free to define something like KVM_NVHE_ALIAS for PI in hyp-image.h.

>  

>  #endif /* __ARM64_KERNEL_IMAGE_VARS_H */

> diff --git a/arch/arm64/kvm/hyp/nvhe/Makefile b/arch/arm64/kvm/hyp/nvhe/Makefile

> index 1f1e351c5fe2..590fdefb42dd 100644

> --- a/arch/arm64/kvm/hyp/nvhe/Makefile

> +++ b/arch/arm64/kvm/hyp/nvhe/Makefile

> @@ -6,10 +6,14 @@

>  asflags-y := -D__KVM_NVHE_HYPERVISOR__

>  ccflags-y := -D__KVM_NVHE_HYPERVISOR__

>  

> +lib-objs := clear_page.o copy_page.o memcpy.o memset.o

> +lib-objs := $(addprefix ../../../lib/, $(lib-objs))

> +

>  obj-y := timer-sr.o sysreg-sr.o debug-sr.o switch.o tlb.o hyp-init.o host.o \

>  	 hyp-main.o hyp-smp.o psci-relay.o

>  obj-y += ../vgic-v3-sr.o ../aarch32.o ../vgic-v2-cpuif-proxy.o ../entry.o \

>  	 ../fpsimd.o ../hyp-entry.o ../exception.o

> +obj-y += $(lib-objs)

>  

>  ##

>  ## Build rules for compiling nVHE hyp code

> -- 

> 2.29.2.299.gdc1121823c-goog

> 

> -- 

> To unsubscribe from this group and stop receiving emails from it, send an email to kernel-team+unsubscribe@android.com.

>
Quentin Perret Nov. 23, 2020, 2:06 p.m. UTC | #2
On Monday 23 Nov 2020 at 12:34:25 (+0000), David Brazdil wrote:
> On Tue, Nov 17, 2020 at 06:15:42PM +0000, 'Quentin Perret' via kernel-team wrote:

> > diff --git a/arch/arm64/kernel/image-vars.h b/arch/arm64/kernel/image-vars.h

> > index 8539f34d7538..dd8ccc9efb6a 100644

> > --- a/arch/arm64/kernel/image-vars.h

> > +++ b/arch/arm64/kernel/image-vars.h

> > @@ -105,6 +105,17 @@ KVM_NVHE_ALIAS(__stop___kvm_ex_table);

> >  /* Array containing bases of nVHE per-CPU memory regions. */

> >  KVM_NVHE_ALIAS(kvm_arm_hyp_percpu_base);

> >  

> > +/* Position-independent library routines */

> > +__kvm_nvhe_clear_page			= __kvm_nvhe___pi_clear_page;

> > +__kvm_nvhe_copy_page			= __kvm_nvhe___pi_copy_page;

> > +__kvm_nvhe_memcpy			= __kvm_nvhe___pi_memcpy;

> > +__kvm_nvhe_memset			= __kvm_nvhe___pi_memset;

> > +

> > +#ifdef CONFIG_KASAN

> > +__kvm_nvhe___memcpy			= __kvm_nvhe___pi_memcpy;

> > +__kvm_nvhe___memset			= __kvm_nvhe___pi_memset;

> > +#endif

> > +

> >  #endif /* CONFIG_KVM */

> 

> Nit: Would be good to use the kvm_nvhe_sym() helper for the namespacing.

> And feel free to define something like KVM_NVHE_ALIAS for PI in hyp-image.h.


Ack, that'd be much nicer, I'll fix it up for v2.

Thanks,
Quentin
diff mbox series

Patch

diff --git a/arch/arm64/kernel/image-vars.h b/arch/arm64/kernel/image-vars.h
index 8539f34d7538..dd8ccc9efb6a 100644
--- a/arch/arm64/kernel/image-vars.h
+++ b/arch/arm64/kernel/image-vars.h
@@ -105,6 +105,17 @@  KVM_NVHE_ALIAS(__stop___kvm_ex_table);
 /* Array containing bases of nVHE per-CPU memory regions. */
 KVM_NVHE_ALIAS(kvm_arm_hyp_percpu_base);
 
+/* Position-independent library routines */
+__kvm_nvhe_clear_page			= __kvm_nvhe___pi_clear_page;
+__kvm_nvhe_copy_page			= __kvm_nvhe___pi_copy_page;
+__kvm_nvhe_memcpy			= __kvm_nvhe___pi_memcpy;
+__kvm_nvhe_memset			= __kvm_nvhe___pi_memset;
+
+#ifdef CONFIG_KASAN
+__kvm_nvhe___memcpy			= __kvm_nvhe___pi_memcpy;
+__kvm_nvhe___memset			= __kvm_nvhe___pi_memset;
+#endif
+
 #endif /* CONFIG_KVM */
 
 #endif /* __ARM64_KERNEL_IMAGE_VARS_H */
diff --git a/arch/arm64/kvm/hyp/nvhe/Makefile b/arch/arm64/kvm/hyp/nvhe/Makefile
index 1f1e351c5fe2..590fdefb42dd 100644
--- a/arch/arm64/kvm/hyp/nvhe/Makefile
+++ b/arch/arm64/kvm/hyp/nvhe/Makefile
@@ -6,10 +6,14 @@ 
 asflags-y := -D__KVM_NVHE_HYPERVISOR__
 ccflags-y := -D__KVM_NVHE_HYPERVISOR__
 
+lib-objs := clear_page.o copy_page.o memcpy.o memset.o
+lib-objs := $(addprefix ../../../lib/, $(lib-objs))
+
 obj-y := timer-sr.o sysreg-sr.o debug-sr.o switch.o tlb.o hyp-init.o host.o \
 	 hyp-main.o hyp-smp.o psci-relay.o
 obj-y += ../vgic-v3-sr.o ../aarch32.o ../vgic-v2-cpuif-proxy.o ../entry.o \
 	 ../fpsimd.o ../hyp-entry.o ../exception.o
+obj-y += $(lib-objs)
 
 ##
 ## Build rules for compiling nVHE hyp code