From: Cyril Hrubis <chrubis@suse.cz>
To: Jinseok Kim <always.starving0@gmail.com>
Cc: ltp@lists.linux.it
Subject: Re: [LTP] [PATCH v6] power_management: rewrite runpwtests04.sh in C
Date: Fri, 10 Jul 2026 16:20:24 +0200 [thread overview]
Message-ID: <alD_qLh0SzW-2oJC@rei> (raw)
In-Reply-To: <20260707150920.6489-1-always.starving0@gmail.com>
> runtest/power_management_tests | 2 +-
> testcases/kernel/power_management/.gitignore | 1 +
> testcases/kernel/power_management/cpuidle01.c | 90 +++++++++++++++++++
> .../kernel/power_management/runpwtests04.sh | 58 ------------
> 4 files changed, 92 insertions(+), 59 deletions(-)
> create mode 100644 testcases/kernel/power_management/cpuidle01.c
> delete mode 100755 testcases/kernel/power_management/runpwtests04.sh
>
> diff --git a/runtest/power_management_tests b/runtest/power_management_tests
> index 4da57ee72..0f2656b52 100644
> --- a/runtest/power_management_tests
> +++ b/runtest/power_management_tests
> @@ -1,5 +1,5 @@
> #POWER_MANAGEMENT
> high_freq_hwp_cap_cppc high_freq_hwp_cap_cppc
> +cpuidle01 cpuidle01
> runpwtests03 runpwtests03.sh
> -runpwtests04 runpwtests04.sh
> runpwtests06 runpwtests06.sh
> diff --git a/testcases/kernel/power_management/.gitignore b/testcases/kernel/power_management/.gitignore
> index 03f0c83e4..e237df1c8 100644
> --- a/testcases/kernel/power_management/.gitignore
> +++ b/testcases/kernel/power_management/.gitignore
> @@ -1 +1,2 @@
> high_freq_hwp_cap_cppc
> +cpuidle01
> diff --git a/testcases/kernel/power_management/cpuidle01.c b/testcases/kernel/power_management/cpuidle01.c
> new file mode 100644
> index 000000000..919dd2b7c
> --- /dev/null
> +++ b/testcases/kernel/power_management/cpuidle01.c
> @@ -0,0 +1,90 @@
> +// SPDX-License-Identifier: GPL-2.0-or-later
> +/*
> + * Copyright (C) 2026 Jinseok Kim <always.starving0@gmail.com>
> + */
> +
> +/*\
> + * Basic cpuidle sysfs smoke test.
> + *
> + * Verify that selected cpuidle sysfs files are readable.
> + */
> +
> +#include <fcntl.h>
> +#include <unistd.h>
> +
> +#include "tst_test.h"
> +
> +#define CPUIDLE_PATH "/sys/devices/system/cpu/cpuidle"
> +
> +static struct tcase {
> + const char *name;
> + bool is_writable;
> +} tcases[] = {
> + { "available_governors", false },
> + { "current_driver", false },
> + { "current_governor", true },
> + { "current_governor_ro", false },
> +};
> +
> +static int fd = -1;
> +
> +static void verify_cpuidle(unsigned int i)
> +{
> + int ret;
> + char path[PATH_MAX];
> + char buf[32];
> +
> + snprintf(path, sizeof(path), "%s/%s", CPUIDLE_PATH, tcases[i].name);
> +
> + if (tcases[i].is_writable)
> + fd = open(path, O_RDWR);
> + else
> + fd = open(path, O_RDONLY);
> +
> + if (fd < 0) {
> + if (errno == ENOENT)
> + tst_res(TCONF, "%s not available", path);
> + else
> + tst_res(TFAIL | TERRNO, "open(%s) failed", path);
> + return;
> + }
> +
> + ret = read(fd, buf, sizeof(buf));
> +
> + if (ret < 0)
> + tst_res(TFAIL | TERRNO, "%s read() failed", path);
> + else if (ret == 0)
> + tst_res(TFAIL, "%s read() returned 0", path);
> + else
> + tst_res(TPASS, "%s read() successfully", path);
When we actually bother writing tests maybe we should not do it with the
array style, but rather add a function per sysfs file that would
actually check that the data are correct.
E.g. we could write a function that would read and parse
available_governors and then check that current_governor is in the set
of the available_governors.
> + if (tcases[i].is_writable) {
> + if (write(fd, "invalid_governor", 16) < 0) {
> + if (errno == EINVAL)
> + tst_res(TPASS, "%s rejected invalid input with EINVAL", path);
> + else
> + tst_res(TFAIL | TERRNO, "%s rejected invalid input with unexpected errno", path);
> + } else {
> + tst_res(TFAIL, "%s accepted invalid input successfully", path);
> + }
This can be just TST_EXP_FAIL2();
> + }
> +
> + SAFE_CLOSE(fd);
> +}
> +
> +static void cleanup(void)
> +{
> + if (fd != -1)
> + SAFE_CLOSE(fd);
> +}
> +
> +static struct tst_test test = {
> + .cleanup = cleanup,
> + .needs_root = 1,
> + .tcnt = ARRAY_SIZE(tcases),
> + .test = verify_cpuidle,
> + .save_restore = (const struct tst_path_val[]) {
> + { CPUIDLE_PATH "/current_governor", NULL, TST_SR_TCONF },
> + {}
> + },
> +};
> diff --git a/testcases/kernel/power_management/runpwtests04.sh b/testcases/kernel/power_management/runpwtests04.sh
> deleted file mode 100755
> index 6565320d2..000000000
> --- a/testcases/kernel/power_management/runpwtests04.sh
> +++ /dev/null
> @@ -1,58 +0,0 @@
> -#! /bin/sh
> -#
> -# Copyright (c) International Business Machines Corp., 2001
> -# Author: Nageswara R Sastry <nasastry@in.ibm.com>
> -#
> -# This program is free software; you can redistribute it and#or modify
> -# it under the terms of the GNU General Public License as published by
> -# the Free Software Foundation; either version 2 of the License, or
> -# (at your option) any later version.
> -#
> -# This program is distributed in the hope that it will be useful, but
> -# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
> -# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
> -# for more details.
> -#
> -# You should have received a copy of the GNU General Public License
> -# along with this program; if not, write to the Free Software Foundation,
> -# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
> -#
> -
> -export TCID="Power_Management04"
> -export TST_TOTAL=1
> -
> -. test.sh
> -. pm_include.sh
> -
> -check_cpuidle_sysfs_files() {
> - RC=0
> - if [ -d /sys/devices/system/cpu/cpuidle ] ; then
> - for files in current_governor_ro current_driver
> - do
> - cat /sys/devices/system/cpu/cpuidle/${files} \
> - >/dev/null 2>&1
> - if [ $? -ne 0 ] ; then
> - echo "${0}: FAIL: cat ${files}"
> - RC=1
> - fi
> - done
> - fi
> - if [ ${RC} -eq 0 ] ; then
> - echo "${0}: PASS: Checking cpu idle sysfs files"
> - else
> - echo "${0}: FAIL: Checking cpu idle sysfs files"
> - fi
> - return $RC
> -}
> -
> -# Checking test environment
> -check_arch
> -
> -# Checking cpuidle sysfs interface files
> -if check_cpuidle_sysfs_files ; then
> - tst_resm TPASS "CPUIDLE sysfs tests passed"
> -else
> - tst_resm TFAIL "CPUIDLE sysfs tests failed"
> -fi
> -
> -tst_exit
> --
> 2.43.0
>
> --
> Mailing list info: https://lists.linux.it/listinfo/ltp
--
Cyril Hrubis
chrubis@suse.cz
--
Mailing list info: https://lists.linux.it/listinfo/ltp
prev parent reply other threads:[~2026-07-10 14:21 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-07 15:09 [LTP] [PATCH v6] power_management: rewrite runpwtests04.sh in C Jinseok Kim
2026-07-07 16:36 ` [LTP] " linuxtestproject.agent
2026-07-13 11:48 ` Andrea Cervesato via ltp
2026-07-10 14:20 ` Cyril Hrubis [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=alD_qLh0SzW-2oJC@rei \
--to=chrubis@suse.cz \
--cc=always.starving0@gmail.com \
--cc=ltp@lists.linux.it \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox