Commit a12c86c4 authored by Sean Christopherson's avatar Sean Christopherson Committed by Paolo Bonzini
Browse files

KVM: selftests: Simplify KVM_ENABLE_CAP helper APIs



Rework the KVM_ENABLE_CAP helpers to take the cap and arg0; literally
every current user, and likely every future user, wants to set 0 or 1
arguments and nothing else.

Signed-off-by: default avatarSean Christopherson <seanjc@google.com>
Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
parent ac712209
Loading
Loading
Loading
Loading
+1 −10
Original line number Diff line number Diff line
@@ -156,15 +156,6 @@ static void host_test_cpu_on(void)
	kvm_vm_free(vm);
}

static void enable_system_suspend(struct kvm_vm *vm)
{
	struct kvm_enable_cap cap = {
		.cap = KVM_CAP_ARM_SYSTEM_SUSPEND,
	};

	vm_enable_cap(vm, &cap);
}

static void guest_test_system_suspend(void)
{
	uint64_t ret;
@@ -183,7 +174,7 @@ static void host_test_system_suspend(void)
	struct kvm_vm *vm;

	vm = setup_vm(guest_test_system_suspend);
	enable_system_suspend(vm);
	vm_enable_cap(vm, KVM_CAP_ARM_SYSTEM_SUSPEND, 0);

	vcpu_power_off(vm, VCPU_ID_TARGET);
	run = vcpu_state(vm, VCPU_ID_SOURCE);
+3 −6
Original line number Diff line number Diff line
@@ -213,7 +213,6 @@ static void run_test(enum vm_guest_mode mode, void *arg)
	struct timespec get_dirty_log_total = (struct timespec){0};
	struct timespec vcpu_dirty_total = (struct timespec){0};
	struct timespec avg;
	struct kvm_enable_cap cap = {};
	struct timespec clear_dirty_log_total = (struct timespec){0};

	vm = perf_test_create_vm(mode, nr_vcpus, guest_percpu_mem_size,
@@ -229,11 +228,9 @@ static void run_test(enum vm_guest_mode mode, void *arg)

	bitmaps = alloc_bitmaps(p->slots, pages_per_slot);

	if (dirty_log_manual_caps) {
		cap.cap = KVM_CAP_MANUAL_DIRTY_LOG_PROTECT2;
		cap.args[0] = dirty_log_manual_caps;
		vm_enable_cap(vm, &cap);
	}
	if (dirty_log_manual_caps)
		vm_enable_cap(vm, KVM_CAP_MANUAL_DIRTY_LOG_PROTECT2,
			      dirty_log_manual_caps);

	arch_setup_vm(vm, nr_vcpus);

+1 −4
Original line number Diff line number Diff line
@@ -217,16 +217,13 @@ static bool clear_log_supported(void)

static void clear_log_create_vm_done(struct kvm_vm *vm)
{
	struct kvm_enable_cap cap = {};
	u64 manual_caps;

	manual_caps = kvm_check_cap(KVM_CAP_MANUAL_DIRTY_LOG_PROTECT2);
	TEST_ASSERT(manual_caps, "MANUAL_CAPS is zero!");
	manual_caps &= (KVM_DIRTY_LOG_MANUAL_PROTECT_ENABLE |
			KVM_DIRTY_LOG_INITIALLY_SET);
	cap.cap = KVM_CAP_MANUAL_DIRTY_LOG_PROTECT2;
	cap.args[0] = manual_caps;
	vm_enable_cap(vm, &cap);
	vm_enable_cap(vm, KVM_CAP_MANUAL_DIRTY_LOG_PROTECT2, manual_caps);
}

static void dirty_log_collect_dirty_pages(struct kvm_vm *vm, int slot,
+12 −6
Original line number Diff line number Diff line
@@ -231,13 +231,17 @@ static inline int vm_check_cap(struct kvm_vm *vm, long cap)
	return ret;
}

static inline int __vm_enable_cap(struct kvm_vm *vm, struct kvm_enable_cap *cap)
static inline int __vm_enable_cap(struct kvm_vm *vm, uint32_t cap, uint64_t arg0)
{
	return __vm_ioctl(vm, KVM_ENABLE_CAP, cap);
	struct kvm_enable_cap enable_cap = { .cap = cap, .args = { arg0 } };

	return __vm_ioctl(vm, KVM_ENABLE_CAP, &enable_cap);
}
static inline void vm_enable_cap(struct kvm_vm *vm, struct kvm_enable_cap *cap)
static inline void vm_enable_cap(struct kvm_vm *vm, uint32_t cap, uint64_t arg0)
{
	vm_ioctl(vm, KVM_ENABLE_CAP, cap);
	struct kvm_enable_cap enable_cap = { .cap = cap, .args = { arg0 } };

	vm_ioctl(vm, KVM_ENABLE_CAP, &enable_cap);
}

void vm_enable_dirty_ring(struct kvm_vm *vm, uint32_t ring_size);
@@ -363,9 +367,11 @@ void vcpu_run_complete_io(struct kvm_vm *vm, uint32_t vcpuid);
struct kvm_reg_list *vcpu_get_reg_list(struct kvm_vm *vm, uint32_t vcpuid);

static inline void vcpu_enable_cap(struct kvm_vm *vm, uint32_t vcpu_id,
				   struct kvm_enable_cap *cap)
				   uint32_t cap, uint64_t arg0)
{
	vcpu_ioctl(vm, vcpu_id, KVM_ENABLE_CAP, cap);
	struct kvm_enable_cap enable_cap = { .cap = cap, .args = { arg0 } };

	vcpu_ioctl(vm, vcpu_id, KVM_ENABLE_CAP, &enable_cap);
}

static inline void vcpu_set_guest_debug(struct kvm_vm *vm, uint32_t vcpuid,
+1 −5
Original line number Diff line number Diff line
@@ -85,11 +85,7 @@ int kvm_check_cap(long cap)

void vm_enable_dirty_ring(struct kvm_vm *vm, uint32_t ring_size)
{
	struct kvm_enable_cap cap = { 0 };

	cap.cap = KVM_CAP_DIRTY_LOG_RING;
	cap.args[0] = ring_size;
	vm_enable_cap(vm, &cap);
	vm_enable_cap(vm, KVM_CAP_DIRTY_LOG_RING, ring_size);
	vm->dirty_ring_size = ring_size;
}

Loading