Commit b693940e authored by Marc Zyngier's avatar Marc Zyngier
Browse files

Merge branch kvm-arm64/pkvm-psci into kvmarm-master/next



* kvm-arm64/pkvm-psci:
  : .
  : Cleanup of the pKVM PSCI relay CPU entry code, making it slightly
  : easier to follow, should someone have to wade into these waters
  : ever again.
  : .
  KVM: arm64: Remove extra ISBs when using msr_hcr_el2
  KVM: arm64: pkvm: Use direct function pointers for cpu_{on,resume}
  KVM: arm64: pkvm: Turn __kvm_hyp_init_cpu into an inner label
  KVM: arm64: pkvm: Simplify BTI handling on CPU boot
  KVM: arm64: pkvm: Move error handling to the end of kvm_hyp_cpu_entry

Signed-off-by: default avatarMarc Zyngier <maz@kernel.org>
parents e85d1c0c 54a3cc14
Loading
Loading
Loading
Loading
+0 −2
Original line number Diff line number Diff line
@@ -50,7 +50,6 @@
	 * effectively VHE-only or not.
	 */
	msr_hcr_el2 x0		// Setup HCR_EL2 as nVHE
	isb
	mov	x1, #1		// Write something to FAR_EL1
	msr	far_el1, x1
	isb
@@ -64,7 +63,6 @@
.LnE2H0_\@:
	orr	x0, x0, #HCR_E2H
	msr_hcr_el2 x0
	isb
.LnVHE_\@:
.endm

+2 −1
Original line number Diff line number Diff line
@@ -301,7 +301,8 @@ asmlinkage void __noreturn hyp_panic_bad_stack(void);
asmlinkage void kvm_unexpected_el2_exception(void);
struct kvm_cpu_context;
void handle_trap(struct kvm_cpu_context *host_ctxt);
asmlinkage void __noreturn __kvm_host_psci_cpu_entry(bool is_cpu_on);
asmlinkage void __noreturn __kvm_host_psci_cpu_on_entry(void);
asmlinkage void __noreturn __kvm_host_psci_cpu_resume_entry(void);
void __noreturn __pkvm_init_finalise(void);
void kvm_nvhe_prepare_backtrace(unsigned long fp, unsigned long pc);
void kvm_patch_vector_branch(struct alt_instr *alt,
+2 −4
Original line number Diff line number Diff line
@@ -1121,11 +1121,9 @@
	.macro	msr_hcr_el2, reg
#if IS_ENABLED(CONFIG_AMPERE_ERRATUM_AC04_CPU_23)
	dsb	nsh
	msr	hcr_el2, \reg
	isb
#else
	msr	hcr_el2, \reg
#endif
	msr	hcr_el2, \reg
	isb			// Required by AMPERE_ERRATUM_AC04_CPU_23
	.endm
#else

+0 −1
Original line number Diff line number Diff line
@@ -103,7 +103,6 @@ SYM_CODE_START_LOCAL(__finalise_el2)
	// Engage the VHE magic!
	mov_q	x0, HCR_HOST_VHE_FLAGS
	msr_hcr_el2 x0
	isb

	// Use the EL1 allocated stack, per-cpu offset
	mrs	x0, sp_el1
+0 −11
Original line number Diff line number Diff line
@@ -125,7 +125,6 @@ SYM_FUNC_START(__hyp_do_panic)
	mrs	x0, hcr_el2
	bic	x0, x0, #HCR_VM
	msr_hcr_el2 x0
	isb
	tlbi	vmalls12e1
	dsb	nsh
#endif
@@ -291,13 +290,3 @@ SYM_CODE_START(__kvm_hyp_host_forward_smc)

	ret
SYM_CODE_END(__kvm_hyp_host_forward_smc)

/*
 * kvm_host_psci_cpu_entry is called through br instruction, which requires
 * bti j instruction as compilers (gcc and llvm) doesn't insert bti j for external
 * functions, but bti c instead.
 */
SYM_CODE_START(kvm_host_psci_cpu_entry)
       bti j
       b __kvm_host_psci_cpu_entry
SYM_CODE_END(kvm_host_psci_cpu_entry)
Loading