Module Name:    src
Committed By:   kre
Date:           Sun May 12 00:24:03 UTC 2019

Modified Files:
        src/etc/rc.d: smtoff

Log Message:
Restructure code a little.

Use quoting everywhere possibly useful (always the right way, except
in the few cases where it is wrong...)

Avoid using cut & grep (from /usr/bin) so script could run before /usr
is mounted (pity cpuctl is in /usr/sbin ...).

Use sysctl -n rather than attempting to parse its output.


To generate a diff of this commit:
cvs rdiff -u -r1.1 -r1.2 src/etc/rc.d/smtoff

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/etc/rc.d/smtoff
diff -u src/etc/rc.d/smtoff:1.1 src/etc/rc.d/smtoff:1.2
--- src/etc/rc.d/smtoff:1.1	Sat May 11 19:31:03 2019
+++ src/etc/rc.d/smtoff	Sun May 12 00:24:03 2019
@@ -1,6 +1,6 @@
 #!/bin/sh
 #
-# $NetBSD: smtoff,v 1.1 2019/05/11 19:31:03 maxv Exp $
+# $NetBSD: smtoff,v 1.2 2019/05/12 00:24:03 kre Exp $
 #
 # Public Domain.
 #
@@ -28,25 +28,36 @@ stop_cmd="smtoff_stop"
 # Return the value.
 #
 GetSmtId() {
-	smtid=$(cpuctl identify $1 | grep "SMT ID" | cut -d " " -f 4)
-	case $smtid in
-		[0-9]*)
-			echo "$smtid" ;;
-		*)
-			echo "error" ;;
-	esac
+	cpuctl identify "$1" |
+	while read cpuN smt id N junk
+	do
+		test -n "$junk" && continue
+
+		case "${smt} ${id}" in
+		'SMT ID')
+			case "$N" in
+			[0-9]|[1-9][0-9]|[1-9][0-9]*[0-9])
+				printf %s "$N"
+				return
+				;;
+			esac
+			;;
+		esac
+	done
+	printf "error"
 }
 
 #
-# The format of the output is:
+# The format of the output (without -n) would be:
 #
 #     hw.ncpu = 80
 #
+# so use -n to make life easy
+#
 # Return the value.
 #
 CountCPUs() {
-	ncpus=$(sysctl hw.ncpu | cut -d " " -f 3)
-	echo "$ncpus"
+	sysctl -n hw.ncpu
 }
 
 # ------------------------------------------------------------------------------
@@ -59,24 +70,22 @@ smtoff_start()
 	ncpus=$(CountCPUs)
 	i=1
 
-	while [ $i -lt $ncpus ]
+	while [ "$i" -lt "$ncpus" ]
 	do
-		smtid=$(GetSmtId "$i")
+		smtid=$(GetSmtId "$i" 2>/dev/null)
+
+		case "$smtid" in
+		error)			# Didn't get the ID? Then maybe no SMT.
+			;;
 
-		# Didn't get the ID? Then maybe no SMT.
-		if [ "$smtid" = "error" ]; then
-			i=$(($i+1))
-			continue
-		fi
-
-		# The first thread is never disabled.
-		if [ $smtid -eq 0 ]; then
-			i=$(($i+1))
-			continue
-		fi
+		0)			# The first thread is never disabled.
+			;;
+
+		*)
+			cpuctl offline "$i"
+			;;
+		esac
 
-		cmd="cpuctl offline $i"
-		$cmd
 		i=$(($i+1))
 	done
 }
@@ -89,10 +98,9 @@ smtoff_stop()
 	ncpus=$(CountCPUs)
 	i=1
 
-	while [ $i -lt $ncpus ]
+	while [ "$i" -lt "$ncpus" ]
 	do
-		cmd="cpuctl online $i"
-		$cmd
+		cpuctl online "$i"
 		i=$(($i+1))
 	done
 }

Reply via email to