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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.