aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArjan van de Ven <arjan@linux.intel.com>2011-05-10 23:45:31 -0400
committerArjan van de Ven <arjan@linux.intel.com>2011-05-10 23:45:31 -0400
commit8e815ce49a9c5bd6a3849cea081af0dc68d19820 (patch)
tree1b4195a1afbc80a693bca936f8feb905f1f58679
parent26751ea8cd274c0221bbf48b89ac5228e7a70d80 (diff)
downloadpowertop-8e815ce49a9c5bd6a3849cea081af0dc68d19820.tar.gz
allow for fixed parameters on a board specific override
(so that we can prepackage lab-calibrated files for specific devices)
-rw-r--r--main.cpp21
-rw-r--r--parameters/learn.cpp3
-rw-r--r--parameters/parameters.cpp10
-rw-r--r--parameters/parameters.h3
4 files changed, 35 insertions, 2 deletions
diff --git a/main.cpp b/main.cpp
index 9fc358c..7feaeed 100644
--- a/main.cpp
+++ b/main.cpp
@@ -192,6 +192,26 @@ void out_of_memory()
abort();
}
+static void load_board_params()
+{
+ string boardname;
+ char filename[4096];
+
+ boardname = read_sysfs_string("/etc/boardname");
+
+ if (boardname.length() < 2)
+ return;
+
+ sprintf(filename, "/var/cache/powertop/saved_parameters.powertop.%s", boardname.c_str());
+
+ if (access(filename, R_OK))
+ return;
+
+ load_parameters(filename);
+ global_fixed_parameters = 1;
+ global_power_override = 1;
+}
+
int main(int argc, char **argv)
{
int uid;
@@ -221,6 +241,7 @@ int main(int argc, char **argv)
load_results("/var/cache/powertop/saved_results.powertop");
load_parameters("/var/cache/powertop/saved_parameters.powertop");
+ load_board_params();
enumerate_cpus();
create_all_devices();
diff --git a/parameters/learn.cpp b/parameters/learn.cpp
index 974719b..36918ce 100644
--- a/parameters/learn.cpp
+++ b/parameters/learn.cpp
@@ -112,6 +112,9 @@ void learn_parameters(int iterations, int do_base_power)
unsigned int i;
time_t start;
+ if (global_fixed_parameters)
+ return;
+
/* don't start fitting anything until we have at least 1 more measurement than we have parameters */
if (past_results.size() <= all_parameters.parameters.size())
diff --git a/parameters/parameters.cpp b/parameters/parameters.cpp
index 59161d9..c56eab3 100644
--- a/parameters/parameters.cpp
+++ b/parameters/parameters.cpp
@@ -421,6 +421,12 @@ int utilization_power_valid(int index)
}
+/* force power data to be valid to the rest of the system */
+int global_power_override = 0;
+
+/* force no calculations to be done on parameters and trust the current ones */
+int global_fixed_parameters = 0;
+
/*
* only report power numbers once we have 3* more measurements than
* we have parameters; anything less and our model fit is highly suspect
@@ -431,5 +437,5 @@ int global_power_valid(void)
return 1;
- return 0;
-} \ No newline at end of file
+ return global_power_override;
+}
diff --git a/parameters/parameters.h b/parameters/parameters.h
index 9cc3271..b82427a 100644
--- a/parameters/parameters.h
+++ b/parameters/parameters.h
@@ -114,5 +114,8 @@ extern double calculate_params(struct parameter_bundle *params = &all_parameters
int global_power_valid(void);
+extern int global_power_override;
+extern int global_fixed_parameters;
+
#endif