Commit 6e1cce7c authored by Sean Christopherson's avatar Sean Christopherson
Browse files

KVM: selftests: Add __open_path_or_exit() variant to provide extra help info

Add an inner __open_path_or_exit() API to let the caller provide additional
information on ENOENT to try and help the user figure out why the test is
being skipped, e.g. for files like the page_idle bitmap needed by the
access tracking perf, which is dependent on a Kconfig.

Immediately convert /dev/kvm to the new API, both as an example and because
users might not know that some architectures/setups require loading KVM.

Link: https://lore.kernel.org/r/20250516215909.2551628-3-seanjc@google.com


Signed-off-by: default avatarSean Christopherson <seanjc@google.com>
parent fcab107a
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -253,6 +253,7 @@ struct vm_guest_mode_params {
};
extern const struct vm_guest_mode_params vm_guest_mode_params[];

int __open_path_or_exit(const char *path, int flags, const char *enoent_help);
int open_path_or_exit(const char *path, int flags);
int open_kvm_dev_path_or_exit(void);

+15 −4
Original line number Diff line number Diff line
@@ -26,15 +26,26 @@ static uint32_t last_guest_seed;

static int vcpu_mmap_sz(void);

int open_path_or_exit(const char *path, int flags)
int __open_path_or_exit(const char *path, int flags, const char *enoent_help)
{
	int fd;

	fd = open(path, flags);
	__TEST_REQUIRE(fd >= 0 || errno != ENOENT, "Cannot open %s: %s", path, strerror(errno));
	TEST_ASSERT(fd >= 0, "Failed to open '%s'", path);
	if (fd < 0)
		goto error;

	return fd;

error:
	if (errno == ENOENT)
		ksft_exit_skip("- Cannot open '%s': %s.  %s\n",
			       path, strerror(errno), enoent_help);
	TEST_FAIL("Failed to open '%s'", path);
}

int open_path_or_exit(const char *path, int flags)
{
	return __open_path_or_exit(path, flags, "");
}

/*
@@ -48,7 +59,7 @@ int open_path_or_exit(const char *path, int flags)
 */
static int _open_kvm_dev_path_or_exit(int flags)
{
	return open_path_or_exit(KVM_DEV_PATH, flags);
	return __open_path_or_exit(KVM_DEV_PATH, flags, "Is KVM loaded and enabled?");
}

int open_kvm_dev_path_or_exit(void)