Commit 4228a996 authored by Michael Ellerman's avatar Michael Ellerman

selftests/powerpc: Skip energy_scale_info test on older firmware

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: 57201d65 ("selftest/powerpc: Add PAPR sysfs attributes sniff test")
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/20220619233103.2666171-1-mpe@ellerman.id.au
parent 00bcb550
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
* Copyright 2022, Pratik Rajesh Sampat, IBM Corp. * Copyright 2022, Pratik Rajesh Sampat, IBM Corp.
*/ */
#include <errno.h>
#include <stdio.h> #include <stdio.h>
#include <string.h> #include <string.h>
#include <dirent.h> #include <dirent.h>
...@@ -32,7 +33,7 @@ enum type { ...@@ -32,7 +33,7 @@ enum type {
NUM_VAL NUM_VAL
}; };
int value_type(int id) static int value_type(int id)
{ {
int val_type; int val_type;
...@@ -54,15 +55,21 @@ int value_type(int id) ...@@ -54,15 +55,21 @@ int value_type(int id)
return val_type; return val_type;
} }
int verify_energy_info(void) static int verify_energy_info(void)
{ {
const char *path = "/sys/firmware/papr/energy_scale_info"; const char *path = "/sys/firmware/papr/energy_scale_info";
struct dirent *entry; struct dirent *entry;
struct stat s; struct stat s;
DIR *dirp; DIR *dirp;
if (stat(path, &s) || !S_ISDIR(s.st_mode)) errno = 0;
return -1; if (stat(path, &s)) {
SKIP_IF(errno == ENOENT);
FAIL_IF(errno);
}
FAIL_IF(!S_ISDIR(s.st_mode));
dirp = opendir(path); dirp = opendir(path);
while ((entry = readdir(dirp)) != NULL) { while ((entry = readdir(dirp)) != NULL) {
...@@ -76,25 +83,24 @@ int verify_energy_info(void) ...@@ -76,25 +83,24 @@ int verify_energy_info(void)
id = atoi(entry->d_name); id = atoi(entry->d_name);
attr_type = value_type(id); attr_type = value_type(id);
if (attr_type == INVALID) FAIL_IF(attr_type == INVALID);
return -1;
/* Check if the files exist and have data in them */ /* Check if the files exist and have data in them */
sprintf(file_name, "%s/%d/desc", path, id); sprintf(file_name, "%s/%d/desc", path, id);
f = fopen(file_name, "r"); f = fopen(file_name, "r");
if (!f || fgetc(f) == EOF) FAIL_IF(!f);
return -1; FAIL_IF(fgetc(f) == EOF);
sprintf(file_name, "%s/%d/value", path, id); sprintf(file_name, "%s/%d/value", path, id);
f = fopen(file_name, "r"); f = fopen(file_name, "r");
if (!f || fgetc(f) == EOF) FAIL_IF(!f);
return -1; FAIL_IF(fgetc(f) == EOF);
if (attr_type == STR_VAL) { if (attr_type == STR_VAL) {
sprintf(file_name, "%s/%d/value_desc", path, id); sprintf(file_name, "%s/%d/value_desc", path, id);
f = fopen(file_name, "r"); f = fopen(file_name, "r");
if (!f || fgetc(f) == EOF) FAIL_IF(!f);
return -1; FAIL_IF(fgetc(f) == EOF);
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment