diff --git a/tools/perf/tests/hists_common.c b/tools/perf/tests/hists_common.c
index 46f453b..4cd8cad 100644
--- a/tools/perf/tests/hists_common.c
+++ b/tools/perf/tests/hists_common.c
@@ -81,14 +81,19 @@ struct machine *setup_fake_machine(struct machines *machines)
 {
 	struct machine *machine = machines__find(machines, HOST_KERNEL_ID);
 	size_t i;
+	int err = -ENOMEM;
 
 	if (machine == NULL) {
 		pr_debug("Not enough memory for machine setup\n");
-		return NULL;
+		return ERR_PTR(-ENOMEM);
 	}
 
 	if (machine__create_kernel_maps(machine)) {
-		pr_debug("Not enough memory for machine setup\n");
+		pr_debug("Failed to create kernel maps\n");
+		if (symbol_conf.kptr_restrict) {
+			pr_debug("Hint: Check /proc/sys/kernel/kptr_restrict.\n");
+			err = -EACCES;
+		}
 		goto out;
 	}
 
@@ -153,10 +158,10 @@ struct machine *setup_fake_machine(struct machines *machines)
 	return machine;
 
 out:
-	pr_debug("Not enough memory for machine setup\n");
+	pr_debug("Failed for machine setup\n");
 	machine__delete_threads(machine);
-	machine__delete(machine);
-	return NULL;
+	machine__exit(machine);
+	return ERR_PTR(err);
 }
 
 void print_hists_in(struct hists *hists)
diff --git a/tools/perf/tests/hists_common.h b/tools/perf/tests/hists_common.h
index 888254e..0252eae 100644
--- a/tools/perf/tests/hists_common.h
+++ b/tools/perf/tests/hists_common.h
@@ -1,5 +1,6 @@
 #ifndef __PERF_TESTS__HISTS_COMMON_H__
 #define __PERF_TESTS__HISTS_COMMON_H__
+#include <linux/err.h>
 
 struct machine;
 struct machines;
diff --git a/tools/perf/tests/hists_cumulate.c b/tools/perf/tests/hists_cumulate.c
index 8292948..c211075 100644
--- a/tools/perf/tests/hists_cumulate.c
+++ b/tools/perf/tests/hists_cumulate.c
@@ -706,13 +706,17 @@ int test__hists_cumulate(int subtest __maybe_unused)
 	err = parse_events(evlist, "cpu-clock", NULL);
 	if (err)
 		goto out;
+	err = TEST_FAIL;
 
 	machines__init(&machines);
 
 	/* setup threads/dso/map/symbols also */
 	machine = setup_fake_machine(&machines);
-	if (!machine)
+	if (IS_ERR(machine)) {
+		if (PTR_ERR(machine) == -EACCES)
+			err = TEST_SKIP;
 		goto out;
+	}
 
 	if (verbose > 1)
 		machine__fprintf(machine, stderr);
diff --git a/tools/perf/tests/hists_filter.c b/tools/perf/tests/hists_filter.c
index ccb5b49..795a04d 100644
--- a/tools/perf/tests/hists_filter.c
+++ b/tools/perf/tests/hists_filter.c
@@ -120,6 +120,7 @@ int test__hists_filter(int subtest __maybe_unused)
 	err = parse_events(evlist, "task-clock", NULL);
 	if (err)
 		goto out;
+	err = TEST_FAIL;
 
 	/* default sort order (comm,dso,sym) will be used */
 	if (setup_sorting() < 0)
@@ -129,8 +130,11 @@ int test__hists_filter(int subtest __maybe_unused)
 
 	/* setup threads/dso/map/symbols also */
 	machine = setup_fake_machine(&machines);
-	if (!machine)
+	if (IS_ERR(machine)) {
+		if (PTR_ERR(machine) == -EACCES)
+			err = TEST_SKIP;
 		goto out;
+	}
 
 	if (verbose > 1)
 		machine__fprintf(machine, stderr);
diff --git a/tools/perf/tests/hists_link.c b/tools/perf/tests/hists_link.c
index 6243e2b..f5f37ef9 100644
--- a/tools/perf/tests/hists_link.c
+++ b/tools/perf/tests/hists_link.c
@@ -293,6 +293,7 @@ int test__hists_link(int subtest __maybe_unused)
 	if (err)
 		goto out;
 
+	err = TEST_FAIL;
 	/* default sort order (comm,dso,sym) will be used */
 	if (setup_sorting() < 0)
 		goto out;
@@ -301,8 +302,11 @@ int test__hists_link(int subtest __maybe_unused)
 
 	/* setup threads/dso/map/symbols also */
 	machine = setup_fake_machine(&machines);
-	if (!machine)
+	if (IS_ERR(machine)) {
+		if (PTR_ERR(machine) == -EACCES)
+			err = TEST_SKIP;
 		goto out;
+	}
 
 	if (verbose > 1)
 		machine__fprintf(machine, stderr);
diff --git a/tools/perf/tests/hists_output.c b/tools/perf/tests/hists_output.c
index 248beec..cc570cf 100644
--- a/tools/perf/tests/hists_output.c
+++ b/tools/perf/tests/hists_output.c
@@ -597,13 +597,17 @@ int test__hists_output(int subtest __maybe_unused)
 	err = parse_events(evlist, "cpu-clock", NULL);
 	if (err)
 		goto out;
+	err = TEST_FAIL;
 
 	machines__init(&machines);
 
 	/* setup threads/dso/map/symbols also */
 	machine = setup_fake_machine(&machines);
-	if (!machine)
+	if (IS_ERR(machine)) {
+		if (PTR_ERR(machine) == -EACCES)
+			err = TEST_SKIP;
 		goto out;
+	}
 
 	if (verbose > 1)
 		machine__fprintf(machine, stderr);
