From 13bfb6e36a192f1202aa5b2fe986d986cd3cc2c5 Mon Sep 17 00:00:00 2001 From: Vyacheslav Cherkashin Date: Fri, 27 Sep 2013 17:23:01 +0400 Subject: [PATCH] [IMPROVE] energy: add current parameters in debugfs except application parameters Change-Id: I01c17d7d589cd679100b62d72a3e9110a3f2489b Signed-off-by: Vyacheslav Cherkashin --- energy/debugfs_energy.c | 37 +++++++++++++++---------- energy/energy.c | 73 +++++++++++++++++++++++++++++++++++++++++++++++-- energy/energy.h | 16 +++++++++++ 3 files changed, 110 insertions(+), 16 deletions(-) diff --git a/energy/debugfs_energy.c b/energy/debugfs_energy.c index 1a1e33e..4ca5705 100644 --- a/energy/debugfs_energy.c +++ b/energy/debugfs_energy.c @@ -26,7 +26,9 @@ #include #include #include +#include #include +#include "energy.h" /* CPU running */ @@ -35,14 +37,16 @@ static u64 cpu_denominator = 1; static u64 cpu_system(void) { - /* TODO: implement */ - return 0; + u64 time = get_parameter_energy(PE_TIME_SYSTEM); + + return div_u64(time * cpu_numerator, cpu_denominator); } static u64 cpu_apps(void) { - /* TODO: implement */ - return 0; + u64 time = get_parameter_energy(PE_TIME_APPS); + + return div_u64(time * cpu_numerator, cpu_denominator); } @@ -52,8 +56,9 @@ static u64 cpu_idle_denominator = 1; static u64 cpu_idle_system(void) { - /* TODO: implement */ - return 0; + u64 time = get_parameter_energy(PE_TIME_IDLE); + + return div_u64(time * cpu_idle_numerator, cpu_idle_denominator); } @@ -63,14 +68,16 @@ static u64 fr_denominator = 1; static u64 fr_system(void) { - /* TODO: implement */ - return 0; + u64 byte = get_parameter_energy(PE_READ_SYSTEM); + + return div_u64(byte * fr_numerator, fr_denominator); } static u64 fr_apps(void) { - /* TODO: implement */ - return 0; + u64 byte = get_parameter_energy(PE_READ_APPS); + + return div_u64(byte * fr_numerator, fr_denominator); } @@ -80,14 +87,16 @@ static u64 fw_denominator = 1; static u64 fw_system(void) { - /* TODO: implement */ - return 0; + u64 byte = get_parameter_energy(PE_WRITE_SYSTEM); + + return div_u64(byte * fw_numerator, fw_denominator); } static u64 fw_apps(void) { - /* TODO: implement */ - return 0; + u64 byte = get_parameter_energy(PE_WRITE_APPS); + + return div_u64(byte * fw_numerator, fw_denominator); } diff --git a/energy/energy.c b/energy/energy.c index 2bed6fd..e429f61 100644 --- a/energy/energy.c +++ b/energy/energy.c @@ -35,6 +35,7 @@ #include #include #include +#include "energy.h" static u64 get_ntime(void) @@ -67,9 +68,15 @@ static void cpus_time_init(struct cpus_time *ct, u64 time) } } -static u64 cpus_time_get_running(struct cpus_time *ct, int cpu) +static u64 cpus_time_get_running_all(struct cpus_time *ct) { - return ct->time_running[cpu]; + u64 time = 0; + int cpu; + + for (cpu = 0; cpu < NR_CPUS; ++cpu) + time += ct->time_running[cpu]; + + return time; } static void cpus_time_save_entry(struct cpus_time *ct, int cpu, u64 time) @@ -100,6 +107,15 @@ static void init_data_energy(void) cpus_time_init(&ct_system, time); } +static void uninit_data_energy(void) +{ + atomic64_set(&sys_read_byte, 0); + atomic64_set(&sys_write_byte, 0); + + cpus_time_init(&ct_idle, 0); + cpus_time_init(&ct_system, 0); +} + @@ -370,6 +386,57 @@ static struct kretprobe sys_write_krp = { +static u64 current_time_apps(void) +{ + /* TODO: implement */ + return 0; +} + +static u64 current_read_apps(void) +{ + /* TODO: implement */ + return 0; +} + +static u64 current_write_apps(void) +{ + /* TODO: implement */ + return 0; +} + +u64 get_parameter_energy(enum parameter_energy pe) +{ + u64 val = 0; + + switch (pe) { + case PE_TIME_IDLE: + val = cpus_time_get_running_all(&ct_idle); + break; + case PE_TIME_SYSTEM: + val = cpus_time_get_running_all(&ct_system); + break; + case PE_TIME_APPS: + val = current_time_apps(); + break; + case PE_READ_SYSTEM: + val = atomic64_read(&sys_read_byte); + break; + case PE_WRITE_SYSTEM: + val = atomic64_read(&sys_write_byte); + break; + case PE_READ_APPS: + val = current_read_apps(); + break; + case PE_WRITE_APPS: + val = current_write_apps(); + break; + default: + break; + } + + return val; +} + int set_energy(void) { int ret = 0; @@ -411,6 +478,8 @@ void unset_energy(void) dbi_unregister_kretprobe(&switch_to_krp); dbi_unregister_kretprobe(&sys_write_krp); dbi_unregister_kretprobe(&sys_read_krp); + + uninit_data_energy(); } EXPORT_SYMBOL_GPL(unset_energy); diff --git a/energy/energy.h b/energy/energy.h index 6a3224d..b77efc8 100644 --- a/energy/energy.h +++ b/energy/energy.h @@ -26,10 +26,26 @@ */ +#include + + +enum parameter_energy { + PE_TIME_IDLE, + PE_TIME_SYSTEM, + PE_TIME_APPS, + PE_READ_SYSTEM, + PE_WRITE_SYSTEM, + PE_READ_APPS, + PE_WRITE_APPS +}; + + int energy_init(void); void energy_uninit(void); int set_energy(void); void unset_energy(void); +u64 get_parameter_energy(enum parameter_energy pe); + #endif /* _ENERGY_H */ -- 2.7.4