]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
cpupower: If root, try to load msr driver on x86 if /dev/cpu/0/msr is not available
authorThomas Renninger <trenn@suse.de>
Tue, 13 May 2014 10:41:43 +0000 (12:41 +0200)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Fri, 16 May 2014 22:36:36 +0000 (00:36 +0200)
Signed-off-by: Thomas Renninger <trenn@suse.de>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
tools/power/cpupower/utils/cpupower.c

index 7efc570ffbaaeadf40347880d3f2c0e7a7799f8d..7cdcf88659c77d75196b3e078b89b657bf53a26a 100644 (file)
@@ -12,6 +12,9 @@
 #include <string.h>
 #include <unistd.h>
 #include <errno.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/utsname.h>
 
 #include "builtin.h"
 #include "helpers/helpers.h"
@@ -169,6 +172,8 @@ int main(int argc, const char *argv[])
 {
        const char *cmd;
        unsigned int i, ret;
+       struct stat statbuf;
+       struct utsname uts;
 
        cpus_chosen = bitmask_alloc(sysconf(_SC_NPROCESSORS_CONF));
 
@@ -195,6 +200,15 @@ int main(int argc, const char *argv[])
 
        get_cpu_info(0, &cpupower_cpu_info);
        run_as_root = !getuid();
+       if (run_as_root) {
+               ret = uname(&uts);
+               if (!ret && !strcmp(uts.machine, "x86_64") &&
+                   stat("/dev/cpu/0/msr", &statbuf) != 0) {
+                       if (system("modprobe msr") == -1)
+       fprintf(stderr, _("MSR access not available.\n"));
+               }
+       }
+               
 
        for (i = 0; i < ARRAY_SIZE(commands); i++) {
                struct cmd_struct *p = commands + i;