selftests/powerpc: Skip energy_scale_info test on older firmware

[ Upstream commit 4228a996b0 ]

Older machines don't have the firmware feature that enables the code
this test is testing. Skip the test if the sysfs directory doesn't
exist. Also use the FAIL_IF() macro to provide more verbose error
reporting if an error is encountered.

Fixes: 57201d657e ("selftest/powerpc: Add PAPR sysfs attributes sniff test")
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/20220619233103.2666171-1-mpe@ellerman.id.au
Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
Michael Ellerman 2022-06-20 09:31:03 +10:00 committed by Greg Kroah-Hartman
parent d8ac689278
commit c25581ce68
1 changed files with 18 additions and 12 deletions

View File

@ -7,6 +7,7 @@
* Copyright 2022, Pratik Rajesh Sampat, IBM Corp.
*/
#include <errno.h>
#include <stdio.h>
#include <string.h>
#include <dirent.h>
@ -32,7 +33,7 @@ enum type {
NUM_VAL
};
int value_type(int id)
static int value_type(int id)
{
int val_type;
@ -54,15 +55,21 @@ int value_type(int id)
return val_type;
}
int verify_energy_info(void)
static int verify_energy_info(void)
{
const char *path = "/sys/firmware/papr/energy_scale_info";
struct dirent *entry;
struct stat s;
DIR *dirp;
if (stat(path, &s) || !S_ISDIR(s.st_mode))
return -1;
errno = 0;
if (stat(path, &s)) {
SKIP_IF(errno == ENOENT);
FAIL_IF(errno);
}
FAIL_IF(!S_ISDIR(s.st_mode));
dirp = opendir(path);
while ((entry = readdir(dirp)) != NULL) {
@ -76,25 +83,24 @@ int verify_energy_info(void)
id = atoi(entry->d_name);
attr_type = value_type(id);
if (attr_type == INVALID)
return -1;
FAIL_IF(attr_type == INVALID);
/* Check if the files exist and have data in them */
sprintf(file_name, "%s/%d/desc", path, id);
f = fopen(file_name, "r");
if (!f || fgetc(f) == EOF)
return -1;
FAIL_IF(!f);
FAIL_IF(fgetc(f) == EOF);
sprintf(file_name, "%s/%d/value", path, id);
f = fopen(file_name, "r");
if (!f || fgetc(f) == EOF)
return -1;
FAIL_IF(!f);
FAIL_IF(fgetc(f) == EOF);
if (attr_type == STR_VAL) {
sprintf(file_name, "%s/%d/value_desc", path, id);
f = fopen(file_name, "r");
if (!f || fgetc(f) == EOF)
return -1;
FAIL_IF(!f);
FAIL_IF(fgetc(f) == EOF);
}
}