Hi,
My previous argument was flawed. Here goes another try.
Rather than parse /proc/cpuinfo, use the same information cpufreq-info has
about the cpu's. It currently gets that information from /proc/stat, so it
makes since not to parse different files to harvest the same information.
print_cpus_index.patch adds an option to cpufreq-info to print the index of
each cpu in system. This option can be used by a variety of scripts,
including cpufrequtils.init, to enumerate a list of cpu indices to perform
actions on.
02_449307-parse-cpufreq-info-for-cpus.patch is the patch against
cpufrequtils.init to use the new option.
Thanks, Kel.
diff -Nrup cpufrequtils-002/man/cpufreq-info.1 cpufrequtils-002.n/man/cpufreq-info.1
--- cpufrequtils-002/man/cpufreq-info.1 2006-06-01 18:54:41.000000000 +1000
+++ cpufrequtils-002.n/man/cpufreq-info.1 2007-12-05 10:43:09.000000000 +1000
@@ -40,6 +40,9 @@ Determines which CPUs can only switch fr
.TP
\fB\-o\fR \fB\-\-proc\fR
Prints out information like provided by the /proc/cpufreq interface in 2.4. and early 2.6. kernels.
+.TP
+\fB\-i\fR \fB\-\-cpus-index\fR
+Prints an index number for each CPU on the system.
.TP
\fB\-m\fR \fB\-\-human\fR
human\-readable output for the \-f and \-w parameters.
diff -Nrup cpufrequtils-002/utils/info.c cpufrequtils-002.n/utils/info.c
--- cpufrequtils-002/utils/info.c 2006-06-01 18:54:41.000000000 +1000
+++ cpufrequtils-002.n/utils/info.c 2007-12-05 13:06:10.000000000 +1000
@@ -55,6 +55,14 @@ static unsigned int count_cpus(void)
return (ret+1);
}
+static void print_cpus_index(void)
+{
+ unsigned int cpu, nr_cpus;
+
+ nr_cpus = count_cpus();
+ for (cpu=0; cpu < nr_cpus; cpu++)
+ printf("%d\n", cpu);
+}
static void proc_cpufreq_output(void)
{
@@ -359,6 +367,7 @@ static struct option info_opts[] = {
{ .name="affected-cpus",.has_arg=no_argument, .flag=NULL, .val='a'},
{ .name="proc", .has_arg=no_argument, .flag=NULL, .val='o'},
{ .name="human", .has_arg=no_argument, .flag=NULL, .val='m'},
+ { .name="cpus-index", .has_arg=no_argument, .flag=NULL, .val='i'},
{ .name="help", .has_arg=no_argument, .flag=NULL, .val='h'},
};
@@ -375,7 +384,7 @@ int main(int argc, char **argv) {
textdomain (PACKAGE);
do {
- ret = getopt_long(argc, argv, "c:hoefwldpgam", info_opts, NULL);
+ ret = getopt_long(argc, argv, "c:hoefwldpgami", info_opts, NULL);
switch (ret) {
case '?':
output_param = '?';
@@ -396,6 +405,7 @@ int main(int argc, char **argv) {
case 'l':
case 'w':
case 'f':
+ case 'i':
case 'e':
if (output_param) {
output_param = -1;
@@ -458,6 +468,9 @@ int main(int argc, char **argv) {
print_header();
print_help();
break;
+ case 'i':
+ print_cpus_index();
+ break;
case 'o':
proc_cpufreq_output();
break;
diff -Nrup cpufrequtils-002/debian/cpufrequtils.init cpufrequtils-002.parse-cpufreqinfo/debian/cpufrequtils.init
--- cpufrequtils-002/debian/cpufrequtils.init 2007-11-25 00:08:27.000000000 +1000
+++ cpufrequtils-002.parse-cpufreqinfo/debian/cpufrequtils.init 2007-12-05 13:14:53.000000000 +1000
@@ -52,7 +52,7 @@ check_governor_avail() {
return 1;
}
-[ -x $CPUFREQ_SET ] || exit 0
+[ -x $CPUFREQ_SET ] && [ -x $CPUFREQ_INFO ]|| exit 0
if [ -f /etc/default/cpufrequtils ] ; then
. /etc/default/cpufrequtils
@@ -73,7 +73,7 @@ if [ -n "$GOVERNOR" ] ; then
CPUFREQ_OPTIONS="$CPUFREQ_OPTIONS --governor $GOVERNOR"
fi
-CPUS=$(sed -ne 's/^processor[[:space:]]*: \([0-9]\+\)$/\1/p' /proc/cpuinfo)
+CPUS=$($CPUFREQ_INFO --cpus-index)
RETVAL=0
case "$1" in
start|force-reload|restart|reload)