mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Hubert Mazur <hmazur@google.com>
To: Shuah Khan <shuah@kernel.org>, Jihed Chaibi <jihed.chaibi.dev@gmail.com>
Cc: Lukasz Majczak <lmajczak@google.com>,
	Slawomir Rosek <srosek@google.com>, Wake Liu <wakel@google.com>,
	 linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org,
	 Hubert Mazur <hmazur@google.com>
Subject: [PATCH v2] selftests/cpu-hotplug: Make the script complaint with sh shell
Date: Tue, 31 Mar 2026 11:51:10 +0000	[thread overview]
Message-ID: <20260331115111.1522473-1-hmazur@google.com> (raw)

The script uses by default the bash shell that is inaccessible in
the x86 embedded devices. This leads to the syntax errors. To mitigate
this, change the interpreter to /bin/sh and rework the prints from echo
to printf to make it more robust and posix compliant. Change the
conditional check for being a root from not existent UID and replace
with command execution "id -u".

Signed-off-by: Hubert Mazur <hmazur@google.com>
---

Changes in v2:
- Fix issues reported with sashiko.dev
  - https://sashiko.dev/#/patchset/20260318080825.3063959-2-hmazur%40google.com
- Make sure the script is compliant with strict posix shells
- Test the script syntax on busybox

Link to v1:
- https://lore.kernel.org/all/20260318080825.3063959-2-hmazur@google.com/

 .../selftests/cpu-hotplug/cpu-on-off-test.sh  | 74 ++++++++++---------
 1 file changed, 40 insertions(+), 34 deletions(-)

diff --git a/tools/testing/selftests/cpu-hotplug/cpu-on-off-test.sh b/tools/testing/selftests/cpu-hotplug/cpu-on-off-test.sh
index 6232a46ca6e1..a91c8e47fe46 100755
--- a/tools/testing/selftests/cpu-hotplug/cpu-on-off-test.sh
+++ b/tools/testing/selftests/cpu-hotplug/cpu-on-off-test.sh
@@ -1,4 +1,4 @@
-#!/bin/bash
+#!/bin/sh
 # SPDX-License-Identifier: GPL-2.0
 
 SYSFS=
@@ -10,8 +10,8 @@ prerequisite()
 {
 	msg="skip all tests:"
 
-	if [ $UID != 0 ]; then
-		echo $msg must be run as root >&2
+	if [ $(id -u) -ne 0 ]; then
+		printf "%s must be run as root\n" "$msg" >&2
 		exit $ksft_skip
 	fi
 
@@ -20,37 +20,37 @@ prerequisite()
 	SYSFS=`mount -t sysfs | head -1 | awk '{ print $3 }'`
 
 	if [ ! -d "$SYSFS" ]; then
-		echo $msg sysfs is not mounted >&2
+		printf "%s sysfs is not mounted\n" "$msg" >&2
 		exit $ksft_skip
 	fi
 
 	if ! ls $SYSFS/devices/system/cpu/cpu* > /dev/null 2>&1; then
-		echo $msg cpu hotplug is not supported >&2
+		printf "%s cpu hotplug is not supported\n" "$msg" >&2
 		exit $ksft_skip
 	fi
 
-	echo "CPU online/offline summary:"
+	printf "CPU online/offline summary:\n"
 	online_cpus=`cat $SYSFS/devices/system/cpu/online`
 	online_max=${online_cpus##*-}
 
-	if [[ "$online_cpus" = "$online_max" ]]; then
-		echo "$msg: since there is only one cpu: $online_cpus"
+	if [ "$online_cpus" = "$online_max" ]; then
+		printf "%s since there is only one cpu: %s\n" "$msg" "$online_cpus"
 		exit $ksft_skip
 	fi
 
 	present_cpus=`cat $SYSFS/devices/system/cpu/present`
 	present_max=${present_cpus##*-}
-	echo "present_cpus = $present_cpus present_max = $present_max"
+	printf "present_cpus = %s,  present_max = %s\n" "$present_cpus" "$present_max"
 
-	echo -e "\t Cpus in online state: $online_cpus"
+	printf "\t Cpus in online state: %s\n" "$online_cpus"
 
 	offline_cpus=`cat $SYSFS/devices/system/cpu/offline`
-	if [[ "a$offline_cpus" = "a" ]]; then
+	if [ "a$offline_cpus" = "a" ]; then
 		offline_cpus=0
 	else
 		offline_max=${offline_cpus##*-}
 	fi
-	echo -e "\t Cpus in offline state: $offline_cpus"
+	printf "\t Cpus in offline state: %s\n" "$offline_cpus"
 }
 
 #
@@ -62,7 +62,7 @@ hotpluggable_cpus()
 
 	for cpu in $SYSFS/devices/system/cpu/cpu*; do
 		if [ -f $cpu/online ] && grep -q $state $cpu/online; then
-			echo ${cpu##/*/cpu}
+			printf "%s\n" "${cpu##/*/cpu}"
 		fi
 	done
 }
@@ -99,39 +99,44 @@ offline_cpu()
 
 online_cpu_expect_success()
 {
+	FUNC="online_cpu_expect_success()"
 	local cpu=$1
 
 	if ! online_cpu $cpu; then
-		echo $FUNCNAME $cpu: unexpected fail >&2
+		printf "%s %s: unexpected fail\n" "$FUNC" "$cpu" >&2
 		retval=1
 	elif ! cpu_is_online $cpu; then
-		echo $FUNCNAME $cpu: unexpected offline >&2
+		printf "%s %s: unexpected offline\n" "$FUNC" "$cpu" >&2
 		retval=1
 	fi
 }
 
 online_cpu_expect_fail()
 {
+
+	FUNC="online_cpu_expect_fail()"
 	local cpu=$1
 
 	if online_cpu $cpu 2> /dev/null; then
-		echo $FUNCNAME $cpu: unexpected success >&2
+		printf "%s %s: unexpected success\n" "$FUNC" "$cpu" >&2
 		retval=1
 	elif ! cpu_is_offline $cpu; then
-		echo $FUNCNAME $cpu: unexpected online >&2
+		printf "%s %s: unexpected online\n" "$FUNC" "$cpu" >&2
 		retval=1
 	fi
 }
 
 offline_cpu_expect_success()
 {
+
+	FUNC="offline_cpu_expect_success()"
 	local cpu=$1
 
 	if ! offline_cpu $cpu; then
-		echo $FUNCNAME $cpu: unexpected fail >&2
+		printf "%s %s: unexpected fail\n" "$FUNC" "$cpu" >&2
 		retval=1
 	elif ! cpu_is_offline $cpu; then
-		echo $FUNCNAME $cpu: unexpected offline >&2
+		printf "%s %s: unexpected offline\n" "$FUNC" "$cpu" >&2
 		retval=1
 	fi
 }
@@ -139,12 +144,13 @@ offline_cpu_expect_success()
 offline_cpu_expect_fail()
 {
 	local cpu=$1
+	FUNC="offline_cpu_expect_fail()"
 
 	if offline_cpu $cpu 2> /dev/null; then
-		echo $FUNCNAME $cpu: unexpected success >&2
+		printf "%s %s: unexpected success\n" "$FUNC" "$cpu" >&2
 		retval=1
 	elif ! cpu_is_online $cpu; then
-		echo $FUNCNAME $cpu: unexpected offline >&2
+		printf "%s %s: unexpected offline\n" "$FUNC" "$cpu" >&2
 		retval=1
 	fi
 }
@@ -182,9 +188,9 @@ while getopts ah opt; do
 		allcpus=1
 		;;
 	h)
-		echo "Usage $0 [ -a ]"
-		echo -e "\t default offline one cpu"
-		echo -e "\t run with -a option to offline all cpus"
+		printf "Usage %s [ -a ]\n" "$0"
+		printf "\t default offline one cpu\n"
+		printf "\t run with -a option to offline all cpus\n"
 		exit
 		;;
 	esac
@@ -195,25 +201,25 @@ prerequisite
 #
 # Safe test (default) - offline and online one cpu
 #
-if [ $allcpus -eq 0 ]; then
-	echo "Limited scope test: one hotplug cpu"
-	echo -e "\t (leaves cpu in the original state):"
-	echo -e "\t online to offline to online: cpu $online_max"
+if [ "$allcpus" -eq 0 ]; then
+	printf "Limited scope test: one hotplug cpu\n"
+	printf "\t (leaves cpu in the original state):\n"
+	printf "\t online to offline to online: cpu %s\n" "$online_max"
 	offline_cpu_expect_success $online_max
 	online_cpu_expect_success $online_max
 
-	if [[ $offline_cpus -gt 0 ]]; then
-		echo -e "\t online to offline to online: cpu $present_max"
+	if [ "$offline_cpus" -gt 0 ]; then
+		printf "\t online to offline to online: cpu %s\n" "$present_max"
 		online_cpu_expect_success $present_max
 		offline_cpu_expect_success $present_max
 		online_cpu $present_max
 	fi
 	exit $retval
 else
-	echo "Full scope test: all hotplug cpus"
-	echo -e "\t online all offline cpus"
-	echo -e "\t offline all online cpus"
-	echo -e "\t online all offline cpus"
+	printf "Full scope test: all hotplug cpus\n"
+	printf "\t online all offline cpus\n"
+	printf "\t offline all online cpus\n"
+	printf "\t online all offline cpus\n"
 fi
 
 online_all_hot_pluggable_cpus
-- 
2.53.0.1018.g2bb0e51243-goog


                 reply	other threads:[~2026-03-31 11:51 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

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=20260331115111.1522473-1-hmazur@google.com \
    --to=hmazur@google.com \
    --cc=jihed.chaibi.dev@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-kselftest@vger.kernel.org \
    --cc=lmajczak@google.com \
    --cc=shuah@kernel.org \
    --cc=srosek@google.com \
    --cc=wakel@google.com \
    /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

all inboxes | Powered by JetHome®