]> Git Repo - linux.git/commitdiff
tools/power turbostat: Cache graphics sysfs file descriptors during probe
authorZhang Rui <[email protected]>
Thu, 14 Nov 2024 07:59:45 +0000 (15:59 +0800)
committerLen Brown <[email protected]>
Sat, 30 Nov 2024 21:42:07 +0000 (16:42 -0500)
Snapshots of the graphics sysfs knobs are taken based on file
descriptors. To optimize this process, open the files and cache the file
descriptors during the graphics probe phase. As a result, the previously
cached pathnames become redundant and are removed.

This change aims to streamline the code without altering its functionality.

No functional change intended.

Signed-off-by: Zhang Rui <[email protected]>
Signed-off-by: Len Brown <[email protected]>
tools/power/x86/turbostat/turbostat.c

index e5b100b8db2435e54957b85158b02e3ee88eec5c..28513172ffcea442a9af3debb571e2e1badb6b47 100644 (file)
@@ -376,7 +376,6 @@ enum gfx_sysfs_idx {
 };
 
 struct gfx_sysfs_info {
-       const char *path;
        FILE *fp;
        unsigned int val;
        unsigned long long val_ull;
@@ -5766,10 +5765,7 @@ int snapshot_graphics(int idx)
 {
        int retval;
 
-       if (gfx_info[idx].fp == NULL)
-               gfx_info[idx].fp = fopen_or_die(gfx_info[idx].path, "r");
-       else
-               rewind(gfx_info[idx].fp);
+       rewind(gfx_info[idx].fp);
 
        switch (idx) {
        case GFX_rc6:
@@ -6474,6 +6470,12 @@ static void probe_intel_uncore_frequency(void)
                probe_intel_uncore_frequency_legacy();
 }
 
+static void set_graphics_fp(char *path, int idx)
+{
+       if (!access(path, R_OK))
+               gfx_info[idx].fp = fopen_or_die(path, "r");
+}
+
 static void probe_graphics(void)
 {
        /* Xe graphics sysfs knobs */
@@ -6481,7 +6483,6 @@ static void probe_graphics(void)
                FILE *fp;
                char buf[8];
                bool gt0_is_gt;
-               int idx;
 
                fp = fopen("/sys/class/drm/card0/device/tile0/gt0/gtidle/name", "r");
                if (!fp)
@@ -6500,28 +6501,17 @@ static void probe_graphics(void)
                else
                        goto next;
 
-               idx = gt0_is_gt ? GFX_rc6 : SAM_mc6;
-               gfx_info[idx].path = "/sys/class/drm/card0/device/tile0/gt0/gtidle/idle_residency_ms";
+               set_graphics_fp("/sys/class/drm/card0/device/tile0/gt0/gtidle/idle_residency_ms", gt0_is_gt ? GFX_rc6 : SAM_mc6);
 
-               idx = gt0_is_gt ? GFX_MHz : SAM_MHz;
-               if (!access("/sys/class/drm/card0/device/tile0/gt0/freq0/cur_freq", R_OK))
-                       gfx_info[idx].path = "/sys/class/drm/card0/device/tile0/gt0/freq0/cur_freq";
+               set_graphics_fp("/sys/class/drm/card0/device/tile0/gt0/freq0/cur_freq", gt0_is_gt ? GFX_MHz : SAM_MHz);
 
-               idx = gt0_is_gt ? GFX_ACTMHz : SAM_ACTMHz;
-               if (!access("/sys/class/drm/card0/device/tile0/gt0/freq0/act_freq", R_OK))
-                       gfx_info[idx].path = "/sys/class/drm/card0/device/tile0/gt0/freq0/act_freq";
+               set_graphics_fp("/sys/class/drm/card0/device/tile0/gt0/freq0/act_freq", gt0_is_gt ? GFX_ACTMHz : SAM_ACTMHz);
 
-               idx = gt0_is_gt ? SAM_mc6 : GFX_rc6;
-               if (!access("/sys/class/drm/card0/device/tile0/gt1/gtidle/idle_residency_ms", R_OK))
-                       gfx_info[idx].path = "/sys/class/drm/card0/device/tile0/gt1/gtidle/idle_residency_ms";
+               set_graphics_fp("/sys/class/drm/card0/device/tile0/gt1/gtidle/idle_residency_ms", gt0_is_gt ? SAM_mc6 : GFX_rc6);
 
-               idx = gt0_is_gt ? SAM_MHz : GFX_MHz;
-               if (!access("/sys/class/drm/card0/device/tile0/gt1/freq0/cur_freq", R_OK))
-                       gfx_info[idx].path = "/sys/class/drm/card0/device/tile0/gt1/freq0/cur_freq";
+               set_graphics_fp("/sys/class/drm/card0/device/tile0/gt1/freq0/cur_freq", gt0_is_gt ? SAM_MHz : GFX_MHz);
 
-               idx = gt0_is_gt ? SAM_ACTMHz : GFX_ACTMHz;
-               if (!access("/sys/class/drm/card0/device/tile0/gt1/freq0/act_freq", R_OK))
-                       gfx_info[idx].path = "/sys/class/drm/card0/device/tile0/gt1/freq0/act_freq";
+               set_graphics_fp("/sys/class/drm/card0/device/tile0/gt1/freq0/act_freq", gt0_is_gt ? SAM_ACTMHz : GFX_ACTMHz);
 
                goto end;
        }
@@ -6529,52 +6519,44 @@ static void probe_graphics(void)
 next:
        /* New i915 graphics sysfs knobs */
        if (!access("/sys/class/drm/card0/gt/gt0/rc6_residency_ms", R_OK)) {
-               gfx_info[GFX_rc6].path = "/sys/class/drm/card0/gt/gt0/rc6_residency_ms";
+               set_graphics_fp("/sys/class/drm/card0/gt/gt0/rc6_residency_ms", GFX_rc6);
 
-               if (!access("/sys/class/drm/card0/gt/gt0/rps_cur_freq_mhz", R_OK))
-                       gfx_info[GFX_MHz].path = "/sys/class/drm/card0/gt/gt0/rps_cur_freq_mhz";
+               set_graphics_fp("/sys/class/drm/card0/gt/gt0/rps_cur_freq_mhz", GFX_MHz);
 
-               if (!access("/sys/class/drm/card0/gt/gt0/rps_act_freq_mhz", R_OK))
-                       gfx_info[GFX_ACTMHz].path = "/sys/class/drm/card0/gt/gt0/rps_act_freq_mhz";
+               set_graphics_fp("/sys/class/drm/card0/gt/gt0/rps_act_freq_mhz", GFX_ACTMHz);
 
-               if (!access("/sys/class/drm/card0/gt/gt1/rc6_residency_ms", R_OK))
-                       gfx_info[SAM_mc6].path = "/sys/class/drm/card0/gt/gt1/rc6_residency_ms";
+               set_graphics_fp("/sys/class/drm/card0/gt/gt1/rc6_residency_ms", SAM_mc6);
 
-               if (!access("/sys/class/drm/card0/gt/gt1/rps_cur_freq_mhz", R_OK))
-                       gfx_info[SAM_MHz].path = "/sys/class/drm/card0/gt/gt1/rps_cur_freq_mhz";
+               set_graphics_fp("/sys/class/drm/card0/gt/gt1/rps_cur_freq_mhz", SAM_MHz);
 
-               if (!access("/sys/class/drm/card0/gt/gt1/rps_act_freq_mhz", R_OK))
-                       gfx_info[SAM_ACTMHz].path = "/sys/class/drm/card0/gt/gt1/rps_act_freq_mhz";
+               set_graphics_fp("/sys/class/drm/card0/gt/gt1/rps_act_freq_mhz", SAM_ACTMHz);
 
                goto end;
        }
 
        /* Fall back to traditional i915 graphics sysfs knobs */
-       if (!access("/sys/class/drm/card0/power/rc6_residency_ms", R_OK))
-               gfx_info[GFX_rc6].path = "/sys/class/drm/card0/power/rc6_residency_ms";
+       set_graphics_fp("/sys/class/drm/card0/power/rc6_residency_ms", GFX_rc6);
 
-       if (!access("/sys/class/drm/card0/gt_cur_freq_mhz", R_OK))
-               gfx_info[GFX_MHz].path = "/sys/class/drm/card0/gt_cur_freq_mhz";
-       else if (!access("/sys/class/graphics/fb0/device/drm/card0/gt_cur_freq_mhz", R_OK))
-               gfx_info[GFX_MHz].path = "/sys/class/graphics/fb0/device/drm/card0/gt_cur_freq_mhz";
+       set_graphics_fp("/sys/class/drm/card0/gt_cur_freq_mhz", GFX_MHz);
+       if (!gfx_info[GFX_MHz].fp)
+               set_graphics_fp("/sys/class/graphics/fb0/device/drm/card0/gt_cur_freq_mhz", GFX_MHz);
 
-       if (!access("/sys/class/drm/card0/gt_act_freq_mhz", R_OK))
-               gfx_info[GFX_ACTMHz].path = "/sys/class/drm/card0/gt_act_freq_mhz";
-       else if (!access("/sys/class/graphics/fb0/device/drm/card0/gt_act_freq_mhz", R_OK))
-               gfx_info[GFX_ACTMHz].path = "/sys/class/graphics/fb0/device/drm/card0/gt_act_freq_mhz";
+       set_graphics_fp("/sys/class/drm/card0/gt_act_freq_mhz", GFX_ACTMHz);
+       if (!gfx_info[GFX_ACTMHz].fp)
+               set_graphics_fp("/sys/class/graphics/fb0/device/drm/card0/gt_act_freq_mhz", GFX_ACTMHz);
 
 end:
-       if (gfx_info[GFX_rc6].path)
+       if (gfx_info[GFX_rc6].fp)
                BIC_PRESENT(BIC_GFX_rc6);
-       if (gfx_info[GFX_MHz].path)
+       if (gfx_info[GFX_MHz].fp)
                BIC_PRESENT(BIC_GFXMHz);
-       if (gfx_info[GFX_ACTMHz].path)
+       if (gfx_info[GFX_ACTMHz].fp)
                BIC_PRESENT(BIC_GFXACTMHz);
-       if (gfx_info[SAM_mc6].path)
+       if (gfx_info[SAM_mc6].fp)
                BIC_PRESENT(BIC_SAM_mc6);
-       if (gfx_info[SAM_MHz].path)
+       if (gfx_info[SAM_MHz].fp)
                BIC_PRESENT(BIC_SAMMHz);
-       if (gfx_info[SAM_ACTMHz].path)
+       if (gfx_info[SAM_ACTMHz].fp)
                BIC_PRESENT(BIC_SAMACTMHz);
 }
 
This page took 0.063009 seconds and 4 git commands to generate.