Commit d135399a authored by Oliver Upton's avatar Oliver Upton Committed by Marc Zyngier
Browse files

selftests: KVM: Use KVM_SET_MP_STATE to power off vCPU in psci_test



Setting a vCPU's MP state to KVM_MP_STATE_STOPPED has the effect of
powering off the vCPU. Rather than using the vCPU init feature flag, use
the KVM_SET_MP_STATE ioctl to power off the target vCPU.

Signed-off-by: default avatarOliver Upton <oupton@google.com>
Signed-off-by: default avatarMarc Zyngier <maz@kernel.org>
Link: https://lore.kernel.org/r/20220504032446.4133305-11-oupton@google.com
parent 694e3dcc
Loading
Loading
Loading
Loading
+11 −2
Original line number Diff line number Diff line
@@ -60,6 +60,15 @@ static void guest_main(uint64_t target_cpu)
	GUEST_DONE();
}

static void vcpu_power_off(struct kvm_vm *vm, uint32_t vcpuid)
{
	struct kvm_mp_state mp_state = {
		.mp_state = KVM_MP_STATE_STOPPED,
	};

	vcpu_set_mp_state(vm, vcpuid, &mp_state);
}

int main(void)
{
	uint64_t target_mpidr, obs_pc, obs_x0;
@@ -75,12 +84,12 @@ int main(void)
	init.features[0] |= (1 << KVM_ARM_VCPU_PSCI_0_2);

	aarch64_vcpu_add_default(vm, VCPU_ID_SOURCE, &init, guest_main);
	aarch64_vcpu_add_default(vm, VCPU_ID_TARGET, &init, guest_main);

	/*
	 * make sure the target is already off when executing the test.
	 */
	init.features[0] |= (1 << KVM_ARM_VCPU_POWER_OFF);
	aarch64_vcpu_add_default(vm, VCPU_ID_TARGET, &init, guest_main);
	vcpu_power_off(vm, VCPU_ID_TARGET);

	get_reg(vm, VCPU_ID_TARGET, KVM_ARM64_SYS_REG(SYS_MPIDR_EL1), &target_mpidr);
	vcpu_args_set(vm, VCPU_ID_SOURCE, 1, target_mpidr & MPIDR_HWID_BITMASK);