tools/power turbostat: Add Android support for MSR device handling
authorKaushlendra Kumar <kaushlendra.kumar@intel.com>
Thu, 22 May 2025 08:49:46 +0000 (14:19 +0530)
committerLen Brown <len.brown@intel.com>
Sun, 8 Jun 2025 18:10:16 +0000 (14:10 -0400)
It uses /dev/msrN device paths on Android instead of /dev/cpu/N/msr,
updates error messages and permission checks to reflect the Android
device path, and wraps platform-specific code with #if defined(ANDROID)
to ensure correct behavior on both Android and non-Android systems.
These changes improve compatibility and usability of turbostat on
Android devices.

Signed-off-by: Kaushlendra Kumar <kaushlendra.kumar@intel.com>
Signed-off-by: Len Brown <len.brown@intel.com>
tools/power/x86/turbostat/turbostat.c

index 0170d3cc68194c9b8b820f7c0445967e242d29f6..3b418cae88124e0a871f36e7f5772b908a55810a 100644 (file)
@@ -2140,13 +2140,20 @@ int get_msr_fd(int cpu)
 
        if (fd)
                return fd;
-
+#if defined(ANDROID)
+       sprintf(pathname, "/dev/msr%d", cpu);
+#else
        sprintf(pathname, "/dev/cpu/%d/msr", cpu);
+#endif
        fd = open(pathname, O_RDONLY);
        if (fd < 0)
+#if defined(ANDROID)
+               err(-1, "%s open failed, try chown or chmod +r /dev/msr*, "
+                   "or run with --no-msr, or run as root", pathname);
+#else
                err(-1, "%s open failed, try chown or chmod +r /dev/cpu/*/msr, "
                    "or run with --no-msr, or run as root", pathname);
-
+#endif
        fd_percpu[cpu] = fd;
 
        return fd;
@@ -6476,8 +6483,11 @@ void check_dev_msr()
 
        if (no_msr)
                return;
-
+#if defined(ANDROID)
+       sprintf(pathname, "/dev/msr%d", base_cpu);
+#else
        sprintf(pathname, "/dev/cpu/%d/msr", base_cpu);
+#endif
        if (stat(pathname, &sb))
                if (system("/sbin/modprobe msr > /dev/null 2>&1"))
                        no_msr = 1;
@@ -6527,7 +6537,11 @@ void check_msr_permission(void)
        failed += check_for_cap_sys_rawio();
 
        /* test file permissions */
+#if defined(ANDROID)
+       sprintf(pathname, "/dev/msr%d", base_cpu);
+#else
        sprintf(pathname, "/dev/cpu/%d/msr", base_cpu);
+#endif
        if (euidaccess(pathname, R_OK)) {
                failed++;
        }