summaryrefslogtreecommitdiff
blob: 11e82db75f19468c2be427a45254d498631e2061 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
#!/sbin/openrc-run
# Copyright 1999-2016 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Id$
#
# Based on the Debian init script written by Celso Gonzalez <celso@bulma.net>,
# and on the cpufreqd Gentoo init script written by Robert Gogolok <robertgogolok@web.de>.
# Heavily modified by Robin H. Johnson <robbat2@gentoo.org> to ensure correct
# start only under support conditions
# More preconditions by Karl Trygve Kalleberg <karltk@gentoo.org> 
# 

DAEMON=/usr/sbin/cpudynd
PIDFILE=/var/run/cpudynd.pid

opts="${opts} min max dynamic"

depend() {
	need localmount
}

checkconfig() {
	local CPUFREQ_FILES="${CPUFREQ_24} ${CPUFREQ_25} ${CPUFREQ_ACPI}"
	local CPUFREQ_FILE=""
	for i in ${CPUFREQ_FILES}; do [ -e ${i} ] && CPUFREQ_FILE="${i}" && break ; done
	if [ -z "${CPUFREQ_FILE}" ]; then
		eerror "Neither CPUFreq nor ACPI throttling support were found"
		return 1
	fi
	if [ "${CPUFREQ_FILE}" = "${CPUFREQ_ACPI}" ]; then
		# see if the file says we are supported or not
		grep 'not supported' ${CPUFREQ_ACPI} 2>&1 >/dev/null
		retval="$?"
		if [ $retval -eq 0 ]; then
			eerror "ACPI throttling support found, but hardware doesn't support it"
			return 1
		fi
		# now check that we can write to the file
		local acpistate=`grep 'active state' ${CPUFREQ_ACPI} | cut -dT -f2-`
		echo $acpistate > ${CPUFREQ_ACPI}
		retval="$?"
		if [ $retval -ne 0 ]; then
			eerror "Writing to ACPI throttling file failed"
			return 1
		fi
	fi
	# CPUFREQ_25 has more than one entry, hence the grep -- karltk
	if [ ! -z "$(echo ${CPUFREQ_25} | grep ${CPUFREQ_FILE})" ]; then
		# Silently try to load the governors; shouldn't hurt if they're already there
		modprobe -q cpufreq_performance
		modprobe -q cpufreq_powersave
		modprobe -q cpufreq_userspace
		modprobe -q cpufreq_ondemand
	fi

	return 0
}


start() {
	local CPUDYN_OPTS=""
	if [ -n "$INTERVAL" ]; then CPUDYN_OPTS="$CPUDYN_OPTS -i $INTERVAL"; fi
	if [ -n "$CPU_UP" -a -n "$CPU_DOWN" ]; then CPUDYN_OPTS="$CPUDYN_OPTS -p $CPU_UP $CPU_DOWN"; fi
	if [ -n "$THROTTLING_LOW" ]; then CPUDYN_OPTS="$CPUDYN_OPTS -l $THROTTLING_LOW"; fi
	if [ -n "$TIMEOUT" ]; then CPUDYN_OPTS="$CPUDYN_OPTS -t $TIMEOUT"; fi
	if [ -n "$DISKS" ]; then CPUDYN_OPTS="$CPUDYN_OPTS -h $DISKS"; fi
	if [ "$NICE" = "yes" ]; then CPUDYN_OPTS="$CPUDYN_OPTS -nice"; fi

	ebegin "Starting cpudynd"
	if checkconfig; then
		start-stop-daemon --start --quiet --pidfile $PIDFILE \
			--background --make-pidfile --exec $DAEMON -- $CPUDYN_OPTS
		eend $?
	else
		eend 1
	fi
}

stop() {
	ebegin "Stopping cpudynd"
	start-stop-daemon --stop --quiet --pidfile $PIDFILE \
		--exec $DAEMON && rm -f $PIDFILE
	eend $?
}

min() {
	ebegin "Forcing minimal speed"
	kill -USR2 $(cat ${PIDFILE})
	eend $?
}
max() {
	ebegin "Forcing maximal speed"
	kill -USR1 $(cat ${PIDFILE})
	eend $?
}
dynamic() {
	ebegin "Resetting to default dynamic speed"
	kill -HUP $(cat ${PIDFILE})
	eend $?
}

# vim:ts=4 noexpandtab: