]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
KVM: selftests: Add __open_path_or_exit() variant to provide extra help info
authorSean Christopherson <seanjc@google.com>
Fri, 16 May 2025 21:59:07 +0000 (14:59 -0700)
committerSean Christopherson <seanjc@google.com>
Fri, 20 Jun 2025 20:39:10 +0000 (13:39 -0700)
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: Sean Christopherson <seanjc@google.com>
tools/testing/selftests/kvm/include/kvm_util.h
tools/testing/selftests/kvm/lib/kvm_util.c

index bee65ca087217675b3e1d125486c3cff316b16e9..e82af690edc517b526c1ff758ec3e89ff9877014 100644 (file)
@@ -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);
 
index 7573771a6146267258747722674a3c4533041f13..41c7d04d32bdb6597307ec0ea7852c9fbd127bd8 100644 (file)
@@ -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)