Commit d460df12 authored by Quentin Perret's avatar Quentin Perret Committed by Marc Zyngier
Browse files

KVM: arm64: Provide __flush_dcache_area at EL2



We will need to do cache maintenance at EL2 soon, so compile a copy of
__flush_dcache_area at EL2, and provide a copy of arm64_ftr_reg_ctrel0
as it is needed by the read_ctr macro.

Signed-off-by: default avatarQuentin Perret <qperret@google.com>
Signed-off-by: default avatarMarc Zyngier <maz@kernel.org>
Link: https://lore.kernel.org/r/20210319100146.1149909-15-qperret@google.com
parent 7a440cc7
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -19,4 +19,6 @@
#define DEFINE_KVM_HYP_CPU_FTR_REG(name) BUILD_BUG()
#endif

DECLARE_KVM_HYP_CPU_FTR_REG(arm64_ftr_reg_ctrel0);

#endif
+2 −1
Original line number Diff line number Diff line
@@ -13,7 +13,8 @@ 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 early_alloc.o stub.o page_alloc.o
	 hyp-main.o hyp-smp.o psci-relay.o early_alloc.o stub.o page_alloc.o \
	 cache.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)
+13 −0
Original line number Diff line number Diff line
/* SPDX-License-Identifier: GPL-2.0-only */
/*
 * Code copied from arch/arm64/mm/cache.S.
 */

#include <linux/linkage.h>
#include <asm/assembler.h>
#include <asm/alternative.h>

SYM_FUNC_START_PI(__flush_dcache_area)
	dcache_by_line_op civac, sy, x0, x1, x2, x3
	ret
SYM_FUNC_END_PI(__flush_dcache_area)
+6 −0
Original line number Diff line number Diff line
@@ -5,9 +5,15 @@
 */

#include <asm/kvm_asm.h>
#include <asm/kvm_cpufeature.h>
#include <asm/kvm_hyp.h>
#include <asm/kvm_mmu.h>

/*
 * Copies of the host's CPU features registers holding sanitized values.
 */
DEFINE_KVM_HYP_CPU_FTR_REG(arm64_ftr_reg_ctrel0);

/*
 * nVHE copy of data structures tracking available CPU cores.
 * Only entries for CPUs that were online at KVM init are populated.
+1 −0
Original line number Diff line number Diff line
@@ -2783,6 +2783,7 @@ struct __ftr_reg_copy_entry {
	u32			sys_id;
	struct arm64_ftr_reg	*dst;
} hyp_ftr_regs[] __initdata = {
	CPU_FTR_REG_HYP_COPY(SYS_CTR_EL0, arm64_ftr_reg_ctrel0),
};

void __init setup_kvm_el2_caps(void)