Hi,
strolling around the source i came around some very nasty constructs in
cpufreq.cpp that still need to first check if userspace or kernelspace
governors are used to decide which object methods to invoke. I came up
with the attached patch (which does not work yet ;-) and would like to
hear if it could be done the way i tried and if not, why.
I obviously cannot do it (else i would have attached a working patch),
but i can see that the current implementation is not very nice.
--
Stefan Seyfried \ "I didn't want to write for pay. I
QA / R&D Team Mobile Devices \ wanted to be paid for what I write."
SUSE LINUX Products GmbH, Nürnberg \ -- Leonard Cohen
Index: cpufreq.cpp
===================================================================
RCS file: /cvsroot/powersave/powersave/daemon/cpufreq.cpp,v
retrieving revision 1.32
diff -u -p -r1.32 cpufreq.cpp
--- cpufreq.cpp 26 Jul 2005 13:47:04 -0000 1.32
+++ cpufreq.cpp 26 Jul 2005 18:46:16 -0000
@@ -19,9 +19,7 @@ int CPUFreq_Interface::cpus = -1;
CPUFREQ_MODE CPUFreq_Interface::mode = _DYNAMIC;
CPUFREQ_CONTROL_MODE CPUFreq_Interface::control = CPUFREQ_USERSPACE;
-map<int, CPUFreq_Kernel> CPUFreq_Interface::cpu_objects_kernel = map<int,
CPUFreq_Kernel>();
-map<int, CPUFreq_Userspace> CPUFreq_Interface::cpu_objects_userspace =
map<int, CPUFreq_Userspace>();
-
+map<int, CPUFreq_Interface> CPUFreq_Interface::cpu_objects = map<int,
CPUFreq_Interface>();
#ifdef CPUFREQ_MEASURE
unsigned long CPUFreq_Interface::polling_interval = 333;
@@ -151,24 +149,18 @@ void CPUFreq_Interface::createCPUFreqObj
for (x = 0; x < cpus; x++){
switch(control) {
case CPUFREQ_USERSPACE:
- cpu_objects_userspace[x] =
CPUFreq_Userspace(use_sysfs, x);
- if
(cpu_objects_userspace[x].readFrequencies()){
- cpu_objects_userspace.clear();
- /* indicates no support ! */
- cpus = -1;
- return;
- }
+ cpu_objects[x] = CPUFreq_Userspace(use_sysfs,
x);
break;
case CPUFREQ_KERNEL:
- cpu_objects_kernel[x] =
CPUFreq_Kernel(use_sysfs, x, sampling_rate);
- if (cpu_objects_kernel[x].readFrequencies()){
- cpu_objects_kernel.clear();
- /* indicates no support ! */
- cpus = -1;
- return;
- }
+ cpu_objects[x] = CPUFreq_Kernel(use_sysfs, x,
sampling_rate);
break;
}
+ if (cpu_objects[x].readFrequencies()){
+ cpu_objects.clear();
+ /* indicates no support ! */
+ cpus = -1;
+ return;
+ }
}
}
// SYSFS OR NOT ... ********************************************/
@@ -198,15 +190,8 @@ CPUFREQ_MODE CPUFreq_Interface::getMode(
}
int CPUFreq_Interface::isSupported(){
- int ret = 0;
- switch (CPUFreq_Interface::control){
- case CPUFREQ_USERSPACE:
- ret = cpu_objects_userspace.empty();
- break;
- case CPUFREQ_KERNEL:
- ret = cpu_objects_kernel.empty();
- break;
- }
+ int ret;
+ ret = cpu_objects.empty();
if (ret)
/* supported */
return 0;
@@ -215,20 +200,10 @@ int CPUFreq_Interface::isSupported(){
}
void CPUFreq_Interface::adjustSpeeds(){
- switch (CPUFreq_Interface::control){
- case CPUFREQ_USERSPACE:
- for (userspace_iter cpu_core =
cpu_objects_userspace.begin();
- cpu_core != cpu_objects_userspace.end();
cpu_core++)
- (*cpu_core).second.adjustSpeed(
- (int)getCPULoadSMP(consider_nice,
(*cpu_core).first));
- break;
- case CPUFREQ_KERNEL:
- for (kernel_iter cpu_core = cpu_objects_kernel.begin();
- cpu_core != cpu_objects_kernel.end(); cpu_core++)
- (*cpu_core).second.adjustSpeed(
- (int)getCPULoadSMP(consider_nice,
(*cpu_core).first));
- break;
- }
+ for (cpufreq_iter cpu_core = cpu_objects.begin();
+ cpu_core != cpu_objects.end(); cpu_core++)
+ (*cpu_core).second.adjustSpeed(
+ (int)getCPULoadSMP(consider_nice, (*cpu_core).first));
}
/**
@@ -238,63 +213,30 @@ void CPUFreq_Interface::adjustSpeeds(){
*/
int CPUFreq_Interface::setModes(CPUFREQ_MODE mode){
int ret = 0;
- switch (CPUFreq_Interface::control){
- case CPUFREQ_USERSPACE:
- for (userspace_iter cpu_core =
cpu_objects_userspace.begin();
- cpu_core != cpu_objects_userspace.end();
cpu_core++)
- ret |= (*cpu_core).second.setMode(mode);
- break;
- case CPUFREQ_KERNEL:
- for (kernel_iter cpu_core = cpu_objects_kernel.begin();
- cpu_core != cpu_objects_kernel.end(); cpu_core++)
- ret |= (*cpu_core).second.setMode(mode);
- }
+ for (cpufreq_iter cpu_core = cpu_objects.begin();
+ cpu_core != cpu_objects.end(); cpu_core++)
+ ret |= (*cpu_core).second.setMode(mode);
return ret;
}
void CPUFreq_Interface::reinitSpeeds(){
- switch (CPUFreq_Interface::control){
- case CPUFREQ_USERSPACE:
- for (userspace_iter cpu_core =
cpu_objects_userspace.begin();
- cpu_core != cpu_objects_userspace.end();
cpu_core++)
- (*cpu_core).second.reinitSpeed();
- break;
- case CPUFREQ_KERNEL:
- for (kernel_iter cpu_core = cpu_objects_kernel.begin();
- cpu_core != cpu_objects_kernel.end(); cpu_core++)
- (*cpu_core).second.reinitSpeed();
- break;
- }
+ for (cpufreq_iter cpu_core = cpu_objects.begin();
+ cpu_core != cpu_objects.end(); cpu_core++)
+ (*cpu_core).second.reinitSpeed();
}
void CPUFreq_Interface::rereadFrequencies(){
int ret = 0;
- switch (CPUFreq_Interface::control){
- case CPUFREQ_USERSPACE:
- for (userspace_iter cpu_core =
cpu_objects_userspace.begin();
- cpu_core != cpu_objects_userspace.end();
cpu_core++)
- ret |= (*cpu_core).second.readFrequencies();
- break;
- case CPUFREQ_KERNEL:
- for (kernel_iter cpu_core = cpu_objects_kernel.begin();
- cpu_core != cpu_objects_kernel.end(); cpu_core++)
- ret |= (*cpu_core).second.readFrequencies();
- break;
- }
+ for (cpufreq_iter cpu_core = cpu_objects.begin();
+ cpu_core != cpu_objects.end(); cpu_core++)
+ ret |= (*cpu_core).second.readFrequencies();
if (!ret)
adjustSpeeds();
}
void CPUFreq_Interface::destroy(){
freeCPULoadSMPCalls();
- switch (CPUFreq_Interface::control){
- case CPUFREQ_USERSPACE:
- cpu_objects_userspace.clear();
- break;
- case CPUFREQ_KERNEL:
- cpu_objects_kernel.clear();
- break;
- }
+ cpu_objects.clear();
}
int CPUFreq_Interface::setGovernor(const string new_governor){
@@ -313,18 +255,9 @@ int CPUFreq_Interface::setGovernor(const
int CPUFreq_Interface::setGovernors(const string new_governor){
int ret = 0;
- switch (CPUFreq_Interface::control){
- case CPUFREQ_USERSPACE:
- for (userspace_iter cpu_core =
cpu_objects_userspace.begin();
- cpu_core != cpu_objects_userspace.end();
cpu_core++)
- ret |=
(*cpu_core).second.setGovernor(new_governor);
- break;
- case CPUFREQ_KERNEL:
- for (kernel_iter cpu_core = cpu_objects_kernel.begin();
- cpu_core != cpu_objects_kernel.end(); cpu_core++)
- ret |=
(*cpu_core).second.setGovernor(new_governor);
- break;
- }
+ for (cpufreq_iter cpu_core = cpu_objects.begin();
+ cpu_core != cpu_objects.end(); cpu_core++)
+ ret |= (*cpu_core).second.setGovernor(new_governor);
/* if (ret != 0) -> something wrong */
return ret;
}
@@ -367,16 +300,7 @@ void CPUFreq_Interface::setConfigs(int m
cpu_hysteresis = hyster;
consider_nice = consider;
- switch (CPUFreq_Interface::control){
- case CPUFREQ_USERSPACE:
- for (userspace_iter cpu_core =
cpu_objects_userspace.begin();
- cpu_core != cpu_objects_userspace.end();
cpu_core++)
- (*cpu_core).second.setConfig();
- break;
- case CPUFREQ_KERNEL:
- for (kernel_iter cpu_core = cpu_objects_kernel.begin();
- cpu_core != cpu_objects_kernel.end(); cpu_core++)
- (*cpu_core).second.setConfig();
- break;
- }
+ for (cpufreq_iter cpu_core = cpu_objects.begin();
+ cpu_core != cpu_objects.end(); cpu_core++)
+ (*cpu_core).second.setConfig();
}
Index: cpufreq.h
===================================================================
RCS file: /cvsroot/powersave/powersave/daemon/cpufreq.h,v
retrieving revision 1.14
diff -u -p -r1.14 cpufreq.h
--- cpufreq.h 6 Jul 2005 16:18:15 -0000 1.14
+++ cpufreq.h 26 Jul 2005 18:46:17 -0000
@@ -47,11 +47,8 @@ class CPUFreq_Interface{
* and userspace (there shouldn't be any more subclasses
* in the future ...
*/
- static map<int, CPUFreq_Kernel> cpu_objects_kernel;
- static map<int, CPUFreq_Userspace> cpu_objects_userspace;
- typedef map<int, CPUFreq_Kernel>::iterator kernel_iter;
- typedef map<int, CPUFreq_Userspace>::iterator userspace_iter;
-
+ static map<int, CPUFreq_Interface> cpu_objects;
+ typedef map<int, CPUFreq_Interface>::iterator cpufreq_iter;
/** @brief file where active governor is in */
string GOVERNOR_FILE;
_______________________________________________
powersave-devel mailing list
[email protected]
http://forge.novell.com/mailman/listinfo/powersave-devel