* [PATCH v3] selftests: cpufreq: stop CPU hotplug loop after cpufreq update test
@ 2026-10-30 10:42 xiong yining
2026-10-30 15:11 ` Zhongqiu Han
0 siblings, 1 reply; 2+ messages in thread
From: xiong yining @ 2026-10-30 10:42 UTC (permalink / raw)
To: Rafael J . Wysocki, Viresh Kumar, Shuah Khan
Cc: linux-pm, linux-kselftest, linux-kernel, chenbaozi,
zhongqiu . han, xiong yining
Original test uses a fixed 5000 iteration loop to trigger CPU hotplug
for verifying cpufreq synchronization between CPU hotplug and sysfs
writes.
Two issues exist:
1. Background hotplug task keeps running after test completes, causing
redundant CPU on/offline operations.
2. When cpufreq frequency setup is slow, the hotplug loop may exit
before frequency updates finish, which breaks test purpose.
Use signal notification to terminate the infinite hotplug loop, and
add an EXIT trap to clean up the hotplug child when this test function
terminates abnormally.
This makes hotplug run only during cpufreq sysfs write test,
align with test objective.
Signed-off-by: xiong yining <xiongyining1480@phytium.com.cn>
---
Changes in v3:
- Start the hotplug child after governor switch and sysfs frequency reads,
to avoid -EBUSY errors when the target CPU is offline.
Changes in v2:
- Stop the hotplug child process by signal notification instead of
a stop file, avoiding the predictable temporary path.
- Add an exit trap so the hotplug child is also cleaned up when the
main shell terminates abnormally.
- Link to v1:
https://www.mail-archive.com/linux-kernel@vger.kernel.org/msg2662696.html
This addresses the security and robustness concerns raised by Sashiko.
---
.../selftests/cpufreq/special-tests.sh | 30 +++++++++++++++----
1 file changed, 24 insertions(+), 6 deletions(-)
diff --git a/tools/testing/selftests/cpufreq/special-tests.sh b/tools/testing/selftests/cpufreq/special-tests.sh
index e87ed7c8e5e5..0665da8f2444 100755
--- a/tools/testing/selftests/cpufreq/special-tests.sh
+++ b/tools/testing/selftests/cpufreq/special-tests.sh
@@ -16,6 +16,8 @@ source cpu.sh
source cpufreq.sh
source governor.sh
+HOTPLUG_PID=""
+
# Test 1
# $1: policy
__simple_lockdep()
@@ -92,6 +94,16 @@ governor_race()
restore_all_governors
}
+hotplug_cleanup()
+{
+ if [[ -n "$HOTPLUG_PID" ]]; then
+ kill -s SIGTERM "$HOTPLUG_PID"
+ wait "$HOTPLUG_PID"
+
+ HOTPLUG_PID=""
+ fi
+}
+
# Test 4
# $1: cpu
hotplug_with_updates_cpu()
@@ -101,14 +113,18 @@ hotplug_with_updates_cpu()
# switch to ondemand
__switch_governor_for_cpu $1 "ondemand"
- for i in `seq 1 5000`
- do
- reboot_cpu $1
- done &
-
local freqs=$(cat $filepath/scaling_available_frequencies)
local oldfreq=$(cat $filepath/scaling_min_freq)
+ (
+ local quit=0
+ trap 'quit=1' SIGTERM
+ while [ "$quit" -eq 0 ]; do
+ reboot_cpu "$1"
+ done
+ ) &
+ HOTPLUG_PID=$!
+
for j in `seq 1 5000`
do
# Set all frequencies one-by-one
@@ -117,14 +133,16 @@ hotplug_with_updates_cpu()
done
done
+ hotplug_cleanup
+
# restore old freq
echo $oldfreq > $filepath/scaling_min_freq
}
hotplug_with_updates()
{
+ trap 'hotplug_cleanup' EXIT
save_all_governors
for_each_non_boot_cpu hotplug_with_updates_cpu
- wait
restore_all_governors
}
--
2.34.1
^ permalink raw reply [flat|nested] 2+ messages in thread
* Re: [PATCH v3] selftests: cpufreq: stop CPU hotplug loop after cpufreq update test
2026-10-30 10:42 [PATCH v3] selftests: cpufreq: stop CPU hotplug loop after cpufreq update test xiong yining
@ 2026-10-30 15:11 ` Zhongqiu Han
0 siblings, 0 replies; 2+ messages in thread
From: Zhongqiu Han @ 2026-10-30 15:11 UTC (permalink / raw)
To: xiong yining, Rafael J . Wysocki, Viresh Kumar, Shuah Khan
Cc: linux-pm, linux-kselftest, linux-kernel, chenbaozi, zhongqiu.han
On 10/30/2026 6:42 PM, xiong yining wrote:
> Original test uses a fixed 5000 iteration loop to trigger CPU hotplug
> for verifying cpufreq synchronization between CPU hotplug and sysfs
> writes.
>
> Two issues exist:
> 1. Background hotplug task keeps running after test completes, causing
> redundant CPU on/offline operations.
> 2. When cpufreq frequency setup is slow, the hotplug loop may exit
> before frequency updates finish, which breaks test purpose.
>
> Use signal notification to terminate the infinite hotplug loop, and
> add an EXIT trap to clean up the hotplug child when this test function
> terminates abnormally.
>
> This makes hotplug run only during cpufreq sysfs write test,
> align with test objective.
>
> Signed-off-by: xiong yining <xiongyining1480@phytium.com.cn>
Reviewed-by: Zhongqiu Han <zhongqiu.han@oss.qualcomm.com>
> ---
> Changes in v3:
> - Start the hotplug child after governor switch and sysfs frequency reads,
> to avoid -EBUSY errors when the target CPU is offline.
>
> Changes in v2:
> - Stop the hotplug child process by signal notification instead of
> a stop file, avoiding the predictable temporary path.
> - Add an exit trap so the hotplug child is also cleaned up when the
> main shell terminates abnormally.
> - Link to v1:
> https://www.mail-archive.com/linux-kernel@vger.kernel.org/msg2662696.html
>
> This addresses the security and robustness concerns raised by Sashiko.
> ---
> .../selftests/cpufreq/special-tests.sh | 30 +++++++++++++++----
> 1 file changed, 24 insertions(+), 6 deletions(-)
>
> diff --git a/tools/testing/selftests/cpufreq/special-tests.sh b/tools/testing/selftests/cpufreq/special-tests.sh
> index e87ed7c8e5e5..0665da8f2444 100755
> --- a/tools/testing/selftests/cpufreq/special-tests.sh
> +++ b/tools/testing/selftests/cpufreq/special-tests.sh
> @@ -16,6 +16,8 @@ source cpu.sh
> source cpufreq.sh
> source governor.sh
>
> +HOTPLUG_PID=""
> +
> # Test 1
> # $1: policy
> __simple_lockdep()
> @@ -92,6 +94,16 @@ governor_race()
> restore_all_governors
> }
>
> +hotplug_cleanup()
> +{
> + if [[ -n "$HOTPLUG_PID" ]]; then
> + kill -s SIGTERM "$HOTPLUG_PID"
> + wait "$HOTPLUG_PID"
> +
> + HOTPLUG_PID=""
> + fi
> +}
> +
> # Test 4
> # $1: cpu
> hotplug_with_updates_cpu()
> @@ -101,14 +113,18 @@ hotplug_with_updates_cpu()
> # switch to ondemand
> __switch_governor_for_cpu $1 "ondemand"
>
> - for i in `seq 1 5000`
> - do
> - reboot_cpu $1
> - done &
> -
> local freqs=$(cat $filepath/scaling_available_frequencies)
> local oldfreq=$(cat $filepath/scaling_min_freq)
>
> + (
> + local quit=0
> + trap 'quit=1' SIGTERM
> + while [ "$quit" -eq 0 ]; do
> + reboot_cpu "$1"
> + done
> + ) &
> + HOTPLUG_PID=$!
> +
> for j in `seq 1 5000`
> do
> # Set all frequencies one-by-one
> @@ -117,14 +133,16 @@ hotplug_with_updates_cpu()
> done
> done
>
> + hotplug_cleanup
> +
> # restore old freq
> echo $oldfreq > $filepath/scaling_min_freq
> }
>
> hotplug_with_updates()
> {
> + trap 'hotplug_cleanup' EXIT
> save_all_governors
> for_each_non_boot_cpu hotplug_with_updates_cpu
> - wait
> restore_all_governors
> }
--
Thx and BRs,
Zhongqiu Han
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2026-10-30 15:12 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-10-30 10:42 [PATCH v3] selftests: cpufreq: stop CPU hotplug loop after cpufreq update test xiong yining
2026-10-30 15:11 ` Zhongqiu Han
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®