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

Reply via email to