Michal Suchanek 2a9f2c
From 4228a996b072d36f3baafb4afdc2d2d66d2cbadf Mon Sep 17 00:00:00 2001
Michal Suchanek 2a9f2c
From: Michael Ellerman <mpe@ellerman.id.au>
Michal Suchanek 2a9f2c
Date: Mon, 20 Jun 2022 09:31:03 +1000
Michal Suchanek 2a9f2c
Subject: [PATCH] selftests/powerpc: Skip energy_scale_info test on older
Michal Suchanek 2a9f2c
 firmware
Michal Suchanek 2a9f2c
Michal Suchanek 2a9f2c
References: git-fixes
Michal Suchanek 2a9f2c
Patch-mainline: v6.0-rc1
Michal Suchanek 2a9f2c
Git-commit: 4228a996b072d36f3baafb4afdc2d2d66d2cbadf
Michal Suchanek 2a9f2c
Michal Suchanek 2a9f2c
Older machines don't have the firmware feature that enables the code
Michal Suchanek 2a9f2c
this test is testing. Skip the test if the sysfs directory doesn't
Michal Suchanek 2a9f2c
exist. Also use the FAIL_IF() macro to provide more verbose error
Michal Suchanek 2a9f2c
reporting if an error is encountered.
Michal Suchanek 2a9f2c
Michal Suchanek 2a9f2c
Fixes: 57201d657eb7 ("selftest/powerpc: Add PAPR sysfs attributes sniff test")
Michal Suchanek 2a9f2c
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Michal Suchanek 2a9f2c
Link: https://lore.kernel.org/r/20220619233103.2666171-1-mpe@ellerman.id.au
Michal Suchanek 2a9f2c
Acked-by: Michal Suchanek <msuchanek@suse.de>
Michal Suchanek 2a9f2c
---
Michal Suchanek 2a9f2c
 .../powerpc/papr_attributes/attr_test.c       | 30 +++++++++++--------
Michal Suchanek 2a9f2c
 1 file changed, 18 insertions(+), 12 deletions(-)
Michal Suchanek 2a9f2c
Michal Suchanek 2a9f2c
diff --git a/tools/testing/selftests/powerpc/papr_attributes/attr_test.c b/tools/testing/selftests/powerpc/papr_attributes/attr_test.c
Michal Suchanek 2a9f2c
index bab0dc06e90b..9b655be641c9 100644
Michal Suchanek 2a9f2c
--- a/tools/testing/selftests/powerpc/papr_attributes/attr_test.c
Michal Suchanek 2a9f2c
+++ b/tools/testing/selftests/powerpc/papr_attributes/attr_test.c
Michal Suchanek 2a9f2c
@@ -7,6 +7,7 @@
Michal Suchanek 2a9f2c
  * Copyright 2022, Pratik Rajesh Sampat, IBM Corp.
Michal Suchanek 2a9f2c
  */
Michal Suchanek 2a9f2c
 
Michal Suchanek 2a9f2c
+#include <errno.h>
Michal Suchanek 2a9f2c
 #include <stdio.h>
Michal Suchanek 2a9f2c
 #include <string.h>
Michal Suchanek 2a9f2c
 #include <dirent.h>
Michal Suchanek 2a9f2c
@@ -32,7 +33,7 @@ enum type {
Michal Suchanek 2a9f2c
 	NUM_VAL
Michal Suchanek 2a9f2c
 };
Michal Suchanek 2a9f2c
 
Michal Suchanek 2a9f2c
-int value_type(int id)
Michal Suchanek 2a9f2c
+static int value_type(int id)
Michal Suchanek 2a9f2c
 {
Michal Suchanek 2a9f2c
 	int val_type;
Michal Suchanek 2a9f2c
 
Michal Suchanek 2a9f2c
@@ -54,15 +55,21 @@ int value_type(int id)
Michal Suchanek 2a9f2c
 	return val_type;
Michal Suchanek 2a9f2c
 }
Michal Suchanek 2a9f2c
 
Michal Suchanek 2a9f2c
-int verify_energy_info(void)
Michal Suchanek 2a9f2c
+static int verify_energy_info(void)
Michal Suchanek 2a9f2c
 {
Michal Suchanek 2a9f2c
 	const char *path = "/sys/firmware/papr/energy_scale_info";
Michal Suchanek 2a9f2c
 	struct dirent *entry;
Michal Suchanek 2a9f2c
 	struct stat s;
Michal Suchanek 2a9f2c
 	DIR *dirp;
Michal Suchanek 2a9f2c
 
Michal Suchanek 2a9f2c
-	if (stat(path, &s) || !S_ISDIR(s.st_mode))
Michal Suchanek 2a9f2c
-		return -1;
Michal Suchanek 2a9f2c
+	errno = 0;
Michal Suchanek 2a9f2c
+	if (stat(path, &s)) {
Michal Suchanek 2a9f2c
+		SKIP_IF(errno == ENOENT);
Michal Suchanek 2a9f2c
+		FAIL_IF(errno);
Michal Suchanek 2a9f2c
+	}
Michal Suchanek 2a9f2c
+
Michal Suchanek 2a9f2c
+	FAIL_IF(!S_ISDIR(s.st_mode));
Michal Suchanek 2a9f2c
+
Michal Suchanek 2a9f2c
 	dirp = opendir(path);
Michal Suchanek 2a9f2c
 
Michal Suchanek 2a9f2c
 	while ((entry = readdir(dirp)) != NULL) {
Michal Suchanek 2a9f2c
@@ -76,25 +83,24 @@ int verify_energy_info(void)
Michal Suchanek 2a9f2c
 
Michal Suchanek 2a9f2c
 		id = atoi(entry->d_name);
Michal Suchanek 2a9f2c
 		attr_type = value_type(id);
Michal Suchanek 2a9f2c
-		if (attr_type == INVALID)
Michal Suchanek 2a9f2c
-			return -1;
Michal Suchanek 2a9f2c
+		FAIL_IF(attr_type == INVALID);
Michal Suchanek 2a9f2c
 
Michal Suchanek 2a9f2c
 		/* Check if the files exist and have data in them */
Michal Suchanek 2a9f2c
 		sprintf(file_name, "%s/%d/desc", path, id);
Michal Suchanek 2a9f2c
 		f = fopen(file_name, "r");
Michal Suchanek 2a9f2c
-		if (!f || fgetc(f) == EOF)
Michal Suchanek 2a9f2c
-			return -1;
Michal Suchanek 2a9f2c
+		FAIL_IF(!f);
Michal Suchanek 2a9f2c
+		FAIL_IF(fgetc(f) == EOF);
Michal Suchanek 2a9f2c
 
Michal Suchanek 2a9f2c
 		sprintf(file_name, "%s/%d/value", path, id);
Michal Suchanek 2a9f2c
 		f = fopen(file_name, "r");
Michal Suchanek 2a9f2c
-		if (!f || fgetc(f) == EOF)
Michal Suchanek 2a9f2c
-			return -1;
Michal Suchanek 2a9f2c
+		FAIL_IF(!f);
Michal Suchanek 2a9f2c
+		FAIL_IF(fgetc(f) == EOF);
Michal Suchanek 2a9f2c
 
Michal Suchanek 2a9f2c
 		if (attr_type == STR_VAL) {
Michal Suchanek 2a9f2c
 			sprintf(file_name, "%s/%d/value_desc", path, id);
Michal Suchanek 2a9f2c
 			f = fopen(file_name, "r");
Michal Suchanek 2a9f2c
-			if (!f || fgetc(f) == EOF)
Michal Suchanek 2a9f2c
-				return -1;
Michal Suchanek 2a9f2c
+			FAIL_IF(!f);
Michal Suchanek 2a9f2c
+			FAIL_IF(fgetc(f) == EOF);
Michal Suchanek 2a9f2c
 		}
Michal Suchanek 2a9f2c
 	}
Michal Suchanek 2a9f2c
 
Michal Suchanek 2a9f2c
-- 
Michal Suchanek 2a9f2c
2.35.3
Michal Suchanek 2a9f2c