diff options
author | Arjan van de Ven <arjan@linux.intel.com> | 2011-05-10 23:45:31 -0400 |
---|---|---|
committer | Arjan van de Ven <arjan@linux.intel.com> | 2011-05-10 23:45:31 -0400 |
commit | 8e815ce49a9c5bd6a3849cea081af0dc68d19820 (patch) | |
tree | 1b4195a1afbc80a693bca936f8feb905f1f58679 | |
parent | 26751ea8cd274c0221bbf48b89ac5228e7a70d80 (diff) | |
download | powertop-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.cpp | 21 | ||||
-rw-r--r-- | parameters/learn.cpp | 3 | ||||
-rw-r--r-- | parameters/parameters.cpp | 10 | ||||
-rw-r--r-- | parameters/parameters.h | 3 |
4 files changed, 35 insertions, 2 deletions
@@ -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 |