Skip to content

Commit fcab107

Browse files
committed
KVM: selftests: Verify KVM is loaded when getting a KVM module param
Probe /dev/kvm when getting a KVM module param so that attempting to load a module param super early in a selftest generates a SKIP message about KVM not being loaded/enabled, versus some random parameter not existing. E.g. KVM x86's unconditional retrieval of force_emulation_prefix during kvm_selftest_arch_init() generates a rather confusing error message that takes far too much triage to understand. Link: https://lore.kernel.org/r/20250516215909.2551628-2-seanjc@google.com Signed-off-by: Sean Christopherson <seanjc@google.com>
1 parent 30142a9 commit fcab107

4 files changed

Lines changed: 9 additions & 12 deletions

File tree

tools/testing/selftests/kvm/include/x86/processor.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1150,7 +1150,6 @@ do { \
11501150

11511151
void kvm_get_cpu_address_width(unsigned int *pa_bits, unsigned int *va_bits);
11521152
void kvm_init_vm_address_properties(struct kvm_vm *vm);
1153-
bool vm_is_unrestricted_guest(struct kvm_vm *vm);
11541153

11551154
struct ex_regs {
11561155
uint64_t rax, rcx, rdx, rbx;
@@ -1325,6 +1324,11 @@ static inline bool kvm_is_forced_emulation_enabled(void)
13251324
return !!get_kvm_param_integer("force_emulation_prefix");
13261325
}
13271326

1327+
static inline bool kvm_is_unrestricted_guest_enabled(void)
1328+
{
1329+
return get_kvm_intel_param_bool("unrestricted_guest");
1330+
}
1331+
13281332
uint64_t *__vm_get_page_table_entry(struct kvm_vm *vm, uint64_t vaddr,
13291333
int *level);
13301334
uint64_t *vm_get_page_table_entry(struct kvm_vm *vm, uint64_t vaddr);

tools/testing/selftests/kvm/lib/kvm_util.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,9 @@ static ssize_t get_module_param(const char *module_name, const char *param,
6464
ssize_t bytes_read;
6565
int fd, r;
6666

67+
/* Verify KVM is loaded, to provide a more helpful SKIP message. */
68+
close(open_kvm_dev_path_or_exit());
69+
6770
r = snprintf(path, path_size, "/sys/module/%s/parameters/%s",
6871
module_name, param);
6972
TEST_ASSERT(r < path_size,

tools/testing/selftests/kvm/lib/x86/processor.c

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1264,16 +1264,6 @@ unsigned long vm_compute_max_gfn(struct kvm_vm *vm)
12641264
return min(max_gfn, ht_gfn - 1);
12651265
}
12661266

1267-
/* Returns true if kvm_intel was loaded with unrestricted_guest=1. */
1268-
bool vm_is_unrestricted_guest(struct kvm_vm *vm)
1269-
{
1270-
/* Ensure that a KVM vendor-specific module is loaded. */
1271-
if (vm == NULL)
1272-
close(open_kvm_dev_path_or_exit());
1273-
1274-
return get_kvm_intel_param_bool("unrestricted_guest");
1275-
}
1276-
12771267
void kvm_selftest_arch_init(void)
12781268
{
12791269
host_cpu_is_intel = this_cpu_is_intel();

tools/testing/selftests/kvm/x86/vmx_exception_with_invalid_guest_state.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ int main(int argc, char *argv[])
110110
struct kvm_vm *vm;
111111

112112
TEST_REQUIRE(host_cpu_is_intel);
113-
TEST_REQUIRE(!vm_is_unrestricted_guest(NULL));
113+
TEST_REQUIRE(!kvm_is_unrestricted_guest_enabled());
114114

115115
vm = vm_create_with_one_vcpu(&vcpu, guest_code);
116116
get_set_sigalrm_vcpu(vcpu);

0 commit comments

Comments
 (0)