Commit d18c8648 authored by Paolo Bonzini's avatar Paolo Bonzini
Browse files

selftests: kvm: switch to using KVM_X86_*_VM



This removes the concept of "subtypes", instead letting the tests use proper
VM types that were recently added.  While the sev_init_vm() and sev_es_init_vm()
are still able to operate with the legacy KVM_SEV_INIT and KVM_SEV_ES_INIT
ioctls, this is limited to VMs that are created manually with
vm_create_barebones().

Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
Message-ID: <20240404121327.3107131-16-pbonzini@redhat.com>
Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
parent dfc083a1
Loading
Loading
Loading
Loading
+2 −3
Original line number Diff line number Diff line
@@ -93,7 +93,6 @@ enum kvm_mem_region_type {
struct kvm_vm {
	int mode;
	unsigned long type;
	uint8_t subtype;
	int kvm_fd;
	int fd;
	unsigned int pgtable_levels;
@@ -200,8 +199,8 @@ enum vm_guest_mode {
struct vm_shape {
	uint32_t type;
	uint8_t  mode;
	uint8_t  subtype;
	uint16_t padding;
	uint8_t  pad0;
	uint16_t pad1;
};

kvm_static_assert(sizeof(struct vm_shape) == sizeof(uint64_t));
+0 −6
Original line number Diff line number Diff line
@@ -23,12 +23,6 @@
extern bool host_cpu_is_intel;
extern bool host_cpu_is_amd;

enum vm_guest_x86_subtype {
	VM_SUBTYPE_NONE = 0,
	VM_SUBTYPE_SEV,
	VM_SUBTYPE_SEV_ES,
};

/* Forced emulation prefix, used to invoke the emulator unconditionally. */
#define KVM_FEP "ud2; .byte 'k', 'v', 'm';"

+2 −14
Original line number Diff line number Diff line
@@ -67,20 +67,8 @@ kvm_static_assert(SEV_RET_SUCCESS == 0);
	__TEST_ASSERT_VM_VCPU_IOCTL(!ret, #cmd,	ret, vm);		\
})

static inline void sev_vm_init(struct kvm_vm *vm)
{
	vm->arch.sev_fd = open_sev_dev_path_or_exit();

	vm_sev_ioctl(vm, KVM_SEV_INIT, NULL);
}


static inline void sev_es_vm_init(struct kvm_vm *vm)
{
	vm->arch.sev_fd = open_sev_dev_path_or_exit();

	vm_sev_ioctl(vm, KVM_SEV_ES_INIT, NULL);
}
void sev_vm_init(struct kvm_vm *vm);
void sev_es_vm_init(struct kvm_vm *vm);

static inline void sev_register_encrypted_memory(struct kvm_vm *vm,
						 struct userspace_mem_region *region)
+0 −1
Original line number Diff line number Diff line
@@ -276,7 +276,6 @@ struct kvm_vm *____vm_create(struct vm_shape shape)

	vm->mode = shape.mode;
	vm->type = shape.type;
	vm->subtype = shape.subtype;

	vm->pa_bits = vm_guest_mode_params[vm->mode].pa_bits;
	vm->va_bits = vm_guest_mode_params[vm->mode].va_bits;
+9 −5
Original line number Diff line number Diff line
@@ -578,10 +578,11 @@ void kvm_arch_vm_post_create(struct kvm_vm *vm)
	sync_global_to_guest(vm, host_cpu_is_intel);
	sync_global_to_guest(vm, host_cpu_is_amd);

	if (vm->subtype == VM_SUBTYPE_SEV)
		sev_vm_init(vm);
	else if (vm->subtype == VM_SUBTYPE_SEV_ES)
		sev_es_vm_init(vm);
	if (vm->type == KVM_X86_SEV_VM || vm->type == KVM_X86_SEV_ES_VM) {
		struct kvm_sev_init init = { 0 };

		vm_sev_ioctl(vm, KVM_SEV_INIT2, &init);
	}
}

void vcpu_arch_set_entry_point(struct kvm_vcpu *vcpu, void *guest_code)
@@ -1081,9 +1082,12 @@ void kvm_get_cpu_address_width(unsigned int *pa_bits, unsigned int *va_bits)

void kvm_init_vm_address_properties(struct kvm_vm *vm)
{
	if (vm->subtype == VM_SUBTYPE_SEV || vm->subtype == VM_SUBTYPE_SEV_ES) {
	if (vm->type == KVM_X86_SEV_VM || vm->type == KVM_X86_SEV_ES_VM) {
		vm->arch.sev_fd = open_sev_dev_path_or_exit();
		vm->arch.c_bit = BIT_ULL(this_cpu_property(X86_PROPERTY_SEV_C_BIT));
		vm->gpa_tag_mask = vm->arch.c_bit;
	} else {
		vm->arch.sev_fd = -1;
	}
}

Loading