Linux Power Management development
 help / color / mirror / Atom feed
* [PATCH] kselftest: cpufreq: Backup and restore governor for sptests
@ 2026-07-06 16:14 Yiwei Lin
  2026-07-07  5:19 ` Viresh Kumar
  0 siblings, 1 reply; 2+ messages in thread
From: Yiwei Lin @ 2026-07-06 16:14 UTC (permalink / raw)
  To: rafael, viresh.kumar, shuah
  Cc: linux-pm, linux-kselftest, linux-kernel, Yiwei Lin

After executing cpufreq sptest, the system governor
will be overwritten with the governor switched
during the test. Restore this setting to maintain
consistency before and after the test.

Signed-off-by: Yiwei Lin <s921975628@gmail.com>
---
 tools/testing/selftests/cpufreq/governor.sh   | 21 +++++++++++++++++++
 .../selftests/cpufreq/special-tests.sh        | 13 ++++++++++++
 2 files changed, 34 insertions(+)

diff --git a/tools/testing/selftests/cpufreq/governor.sh b/tools/testing/selftests/cpufreq/governor.sh
index fe37df79c0871..5d105ab9c9222 100755
--- a/tools/testing/selftests/cpufreq/governor.sh
+++ b/tools/testing/selftests/cpufreq/governor.sh
@@ -16,6 +16,12 @@ source cpufreq.sh
 CUR_GOV=
 CUR_FREQ=
 
+# Per-policy backup, keyed by policy so multiple policies can be saved at once
+# (backup_governor/restore_governor also keep CUR_GOV/CUR_FREQ for callers that
+# read them directly).
+declare -A SAVED_GOVERNORS
+declare -A SAVED_FREQS
+
 # Find governor's directory path
 # $1: policy, $2: governor
 find_gov_directory()
@@ -39,11 +45,13 @@ find_current_governor()
 backup_governor()
 {
 	CUR_GOV=$(find_current_governor $1)
+	SAVED_GOVERNORS[$1]=$CUR_GOV
 
 	printf "Governor backup done for $1: $CUR_GOV\n"
 
 	if [ $CUR_GOV == "userspace" ]; then
 		CUR_FREQ=$(find_current_freq $1)
+		SAVED_FREQS[$1]=$CUR_FREQ
 		printf "Governor frequency backup done for $1: $CUR_FREQ\n"
 	fi
 
@@ -53,11 +61,13 @@ backup_governor()
 # $1: policy
 restore_governor()
 {
+	CUR_GOV=${SAVED_GOVERNORS[$1]}
 	__switch_governor $1 $CUR_GOV
 
 	printf "Governor restored for $1 to $CUR_GOV\n"
 
 	if [ $CUR_GOV == "userspace" ]; then
+		CUR_FREQ=${SAVED_FREQS[$1]}
 		set_cpu_frequency $1 $CUR_FREQ
 		printf "Governor frequency restored for $1: $CUR_FREQ\n"
 	fi
@@ -65,6 +75,17 @@ restore_governor()
 	printf "\n"
 }
 
+# Save/restore governors for every policy at once
+save_all_governors()
+{
+	for_each_policy backup_governor
+}
+
+restore_all_governors()
+{
+	for_each_policy restore_governor
+}
+
 # param:
 # $1: policy, $2: governor
 __switch_governor()
diff --git a/tools/testing/selftests/cpufreq/special-tests.sh b/tools/testing/selftests/cpufreq/special-tests.sh
index 8d40505dc4682..c7eddadd047d1 100755
--- a/tools/testing/selftests/cpufreq/special-tests.sh
+++ b/tools/testing/selftests/cpufreq/special-tests.sh
@@ -40,7 +40,9 @@ simple_lockdep()
 {
 	printf "** Test: Running ${FUNCNAME[0]} **\n"
 
+	save_all_governors
 	for_each_policy __simple_lockdep
+	restore_all_governors
 }
 
 # Test 2
@@ -56,7 +58,10 @@ concurrent_lockdep()
 {
 	printf "** Test: Running ${FUNCNAME[0]} **\n"
 
+	save_all_governors
 	for_each_policy_concurrent __concurrent_lockdep
+	wait
+	restore_all_governors
 }
 
 # Test 3
@@ -68,17 +73,23 @@ quick_shuffle()
 		echo ondemand | sudo tee $CPUFREQROOT/policy*/scaling_governor &
 		echo userspace | sudo tee $CPUFREQROOT/policy*/scaling_governor &
 	done
+	wait
 }
 
 governor_race()
 {
 	printf "** Test: Running ${FUNCNAME[0]} **\n"
 
+	save_all_governors
+
 	# run 8 concurrent instances
 	for I in `seq 8`
 	do
 		quick_shuffle &
 	done
+	wait
+
+	restore_all_governors
 }
 
 # Test 4
@@ -112,5 +123,7 @@ hotplug_with_updates_cpu()
 
 hotplug_with_updates()
 {
+	save_all_governors
 	for_each_non_boot_cpu hotplug_with_updates_cpu
+	restore_all_governors
 }
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH] kselftest: cpufreq: Backup and restore governor for sptests
  2026-07-06 16:14 [PATCH] kselftest: cpufreq: Backup and restore governor for sptests Yiwei Lin
@ 2026-07-07  5:19 ` Viresh Kumar
  0 siblings, 0 replies; 2+ messages in thread
From: Viresh Kumar @ 2026-07-07  5:19 UTC (permalink / raw)
  To: Yiwei Lin; +Cc: rafael, shuah, linux-pm, linux-kselftest, linux-kernel

On 07-07-26, 00:14, Yiwei Lin wrote:
> After executing cpufreq sptest, the system governor
> will be overwritten with the governor switched
> during the test. Restore this setting to maintain
> consistency before and after the test.
> 
> Signed-off-by: Yiwei Lin <s921975628@gmail.com>
> ---
>  tools/testing/selftests/cpufreq/governor.sh   | 21 +++++++++++++++++++
>  .../selftests/cpufreq/special-tests.sh        | 13 ++++++++++++
>  2 files changed, 34 insertions(+)
> 
> diff --git a/tools/testing/selftests/cpufreq/governor.sh b/tools/testing/selftests/cpufreq/governor.sh
> index fe37df79c0871..5d105ab9c9222 100755
> --- a/tools/testing/selftests/cpufreq/governor.sh
> +++ b/tools/testing/selftests/cpufreq/governor.sh
> @@ -16,6 +16,12 @@ source cpufreq.sh
>  CUR_GOV=
>  CUR_FREQ=
>  
> +# Per-policy backup, keyed by policy so multiple policies can be saved at once
> +# (backup_governor/restore_governor also keep CUR_GOV/CUR_FREQ for callers that
> +# read them directly).
> +declare -A SAVED_GOVERNORS
> +declare -A SAVED_FREQS
> +
>  # Find governor's directory path
>  # $1: policy, $2: governor
>  find_gov_directory()
> @@ -39,11 +45,13 @@ find_current_governor()
>  backup_governor()
>  {
>  	CUR_GOV=$(find_current_governor $1)
> +	SAVED_GOVERNORS[$1]=$CUR_GOV
>  
>  	printf "Governor backup done for $1: $CUR_GOV\n"
>  
>  	if [ $CUR_GOV == "userspace" ]; then
>  		CUR_FREQ=$(find_current_freq $1)
> +		SAVED_FREQS[$1]=$CUR_FREQ
>  		printf "Governor frequency backup done for $1: $CUR_FREQ\n"
>  	fi
>  
> @@ -53,11 +61,13 @@ backup_governor()
>  # $1: policy
>  restore_governor()
>  {
> +	CUR_GOV=${SAVED_GOVERNORS[$1]}
>  	__switch_governor $1 $CUR_GOV
>  
>  	printf "Governor restored for $1 to $CUR_GOV\n"
>  
>  	if [ $CUR_GOV == "userspace" ]; then
> +		CUR_FREQ=${SAVED_FREQS[$1]}
>  		set_cpu_frequency $1 $CUR_FREQ
>  		printf "Governor frequency restored for $1: $CUR_FREQ\n"
>  	fi
> @@ -65,6 +75,17 @@ restore_governor()
>  	printf "\n"
>  }
>  
> +# Save/restore governors for every policy at once
> +save_all_governors()
> +{
> +	for_each_policy backup_governor
> +}
> +
> +restore_all_governors()
> +{
> +	for_each_policy restore_governor
> +}
> +
>  # param:
>  # $1: policy, $2: governor
>  __switch_governor()
> diff --git a/tools/testing/selftests/cpufreq/special-tests.sh b/tools/testing/selftests/cpufreq/special-tests.sh
> index 8d40505dc4682..c7eddadd047d1 100755
> --- a/tools/testing/selftests/cpufreq/special-tests.sh
> +++ b/tools/testing/selftests/cpufreq/special-tests.sh
> @@ -40,7 +40,9 @@ simple_lockdep()
>  {
>  	printf "** Test: Running ${FUNCNAME[0]} **\n"
>  
> +	save_all_governors
>  	for_each_policy __simple_lockdep
> +	restore_all_governors
>  }
>  
>  # Test 2
> @@ -56,7 +58,10 @@ concurrent_lockdep()
>  {
>  	printf "** Test: Running ${FUNCNAME[0]} **\n"
>  
> +	save_all_governors
>  	for_each_policy_concurrent __concurrent_lockdep
> +	wait
> +	restore_all_governors
>  }
>  
>  # Test 3
> @@ -68,17 +73,23 @@ quick_shuffle()
>  		echo ondemand | sudo tee $CPUFREQROOT/policy*/scaling_governor &
>  		echo userspace | sudo tee $CPUFREQROOT/policy*/scaling_governor &
>  	done
> +	wait
>  }
>  
>  governor_race()
>  {
>  	printf "** Test: Running ${FUNCNAME[0]} **\n"
>  
> +	save_all_governors
> +
>  	# run 8 concurrent instances
>  	for I in `seq 8`
>  	do
>  		quick_shuffle &
>  	done
> +	wait
> +
> +	restore_all_governors
>  }
>  
>  # Test 4
> @@ -112,5 +123,7 @@ hotplug_with_updates_cpu()
>  
>  hotplug_with_updates()
>  {
> +	save_all_governors
>  	for_each_non_boot_cpu hotplug_with_updates_cpu

Don't you need wait here too ?

> +	restore_all_governors
>  }


Acked-by: Viresh Kumar <viresh.kumar@linaro.org>

-- 
viresh

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2026-07-07  5:19 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-07-06 16:14 [PATCH] kselftest: cpufreq: Backup and restore governor for sptests Yiwei Lin
2026-07-07  5:19 ` Viresh Kumar

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox