Skip to content

Commit 4e2bbbf

Browse files
zhang-ruilenb
authored andcommitted
tools/power/turbostat: Cache graphics sysfs path
Graphics drivers (i915/Xe) have different sysfs knobs on different platforms, and it is possible that different sysfs knobs fit into the same turbostat columns. Instead of specifying different sysfs knobs every time, detect them once and cache the path for future use. No functional change. Signed-off-by: Zhang Rui <[email protected]> Signed-off-by: Len Brown <[email protected]>
1 parent bb5db22 commit 4e2bbbf

File tree

1 file changed

+32
-13
lines changed

1 file changed

+32
-13
lines changed

tools/power/x86/turbostat/turbostat.c

Lines changed: 32 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -276,6 +276,19 @@ bool no_msr;
276276
bool no_perf;
277277
enum amperf_source amperf_source;
278278

279+
enum gfx_sysfs_idx {
280+
GFX_rc6,
281+
GFX_MHz,
282+
GFX_ACTMHz,
283+
GFX_MAX
284+
};
285+
286+
struct gfx_sysfs_info {
287+
const char *path;
288+
};
289+
290+
static struct gfx_sysfs_info gfx_info[GFX_MAX];
291+
279292
int get_msr(int cpu, off_t offset, unsigned long long *msr);
280293

281294
/* Model specific support Start */
@@ -4620,7 +4633,7 @@ int snapshot_gfx_rc6_ms(void)
46204633
FILE *fp;
46214634
int retval;
46224635

4623-
fp = fopen_or_die("/sys/class/drm/card0/power/rc6_residency_ms", "r");
4636+
fp = fopen_or_die(gfx_info[GFX_rc6].path, "r");
46244637

46254638
retval = fscanf(fp, "%lld", &gfx_cur_rc6_ms);
46264639
if (retval != 1)
@@ -4645,9 +4658,7 @@ int snapshot_gfx_mhz(void)
46454658
int retval;
46464659

46474660
if (fp == NULL) {
4648-
fp = fopen("/sys/class/drm/card0/gt_cur_freq_mhz", "r");
4649-
if (!fp)
4650-
fp = fopen_or_die("/sys/class/graphics/fb0/device/drm/card0/gt_cur_freq_mhz", "r");
4661+
fp = fopen_or_die(gfx_info[GFX_MHz].path, "r");
46514662
} else {
46524663
rewind(fp);
46534664
fflush(fp);
@@ -4674,9 +4685,7 @@ int snapshot_gfx_act_mhz(void)
46744685
int retval;
46754686

46764687
if (fp == NULL) {
4677-
fp = fopen("/sys/class/drm/card0/gt_act_freq_mhz", "r");
4678-
if (!fp)
4679-
fp = fopen_or_die("/sys/class/graphics/fb0/device/drm/card0/gt_act_freq_mhz", "r");
4688+
fp = fopen_or_die(gfx_info[GFX_ACTMHz].path, "r");
46804689
} else {
46814690
rewind(fp);
46824691
fflush(fp);
@@ -5338,14 +5347,24 @@ static void probe_intel_uncore_frequency(void)
53385347
static void probe_graphics(void)
53395348
{
53405349
if (!access("/sys/class/drm/card0/power/rc6_residency_ms", R_OK))
5341-
BIC_PRESENT(BIC_GFX_rc6);
5350+
gfx_info[GFX_rc6].path = "/sys/class/drm/card0/power/rc6_residency_ms";
53425351

5343-
if (!access("/sys/class/drm/card0/gt_cur_freq_mhz", R_OK) ||
5344-
!access("/sys/class/graphics/fb0/device/drm/card0/gt_cur_freq_mhz", R_OK))
5345-
BIC_PRESENT(BIC_GFXMHz);
5352+
if (!access("/sys/class/drm/card0/gt_cur_freq_mhz", R_OK))
5353+
gfx_info[GFX_MHz].path = "/sys/class/drm/card0/gt_cur_freq_mhz";
5354+
else if (!access("/sys/class/graphics/fb0/device/drm/card0/gt_cur_freq_mhz", R_OK))
5355+
gfx_info[GFX_MHz].path = "/sys/class/graphics/fb0/device/drm/card0/gt_cur_freq_mhz";
5356+
5357+
5358+
if (!access("/sys/class/drm/card0/gt_act_freq_mhz", R_OK))
5359+
gfx_info[GFX_ACTMHz].path = "/sys/class/drm/card0/gt_act_freq_mhz";
5360+
else if (!access("/sys/class/graphics/fb0/device/drm/card0/gt_act_freq_mhz", R_OK))
5361+
gfx_info[GFX_ACTMHz].path = "/sys/class/graphics/fb0/device/drm/card0/gt_act_freq_mhz";
53465362

5347-
if (!access("/sys/class/drm/card0/gt_act_freq_mhz", R_OK) ||
5348-
!access("/sys/class/graphics/fb0/device/drm/card0/gt_act_freq_mhz", R_OK))
5363+
if (gfx_info[GFX_rc6].path)
5364+
BIC_PRESENT(BIC_GFX_rc6);
5365+
if (gfx_info[GFX_MHz].path)
5366+
BIC_PRESENT(BIC_GFXMHz);
5367+
if (gfx_info[GFX_ACTMHz].path)
53495368
BIC_PRESENT(BIC_GFXACTMHz);
53505369
}
53515370

0 commit comments

Comments
 (0)