mirror of
https://github.com/rd-stuffs/msm-4.14.git
synced 2025-02-20 11:45:48 +08:00
cpufreq: stats: Handle the case when trans_table goes beyond PAGE_SIZE
On platforms with large number of Pstates, the transition table, which is a NxN matrix, can overflow beyond the PAGE_SIZE boundary. This can be seen on POWER9 which has 100+ Pstates. As a result, each time the trans_table is read for any of the CPUs, we will get the following error. --------------------------------------------------- fill_read_buffer: show+0x0/0xa0 returned bad count --------------------------------------------------- This patch ensures that in case of an overflow, we print a warning once in the dmesg and return FILE TOO LARGE error for this and all subsequent accesses of trans_table. Change-Id: I4d22a81fcad037e887b4ddf2999904b321401441 Signed-off-by: Gautham R. Shenoy <ego@linux.vnet.ibm.com> Acked-by: Viresh Kumar <viresh.kumar@linaro.org> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> Git-repo: https://android.googlesource.com/kernel/common/ Git-commit: f7bc9b209e27c0b617378400136cc663a6314d0c Signed-off-by: Rahul Shahare <rshaha@codeaurora.org>
This commit is contained in:
parent
c81bd9708c
commit
39174fe35f
@ -90,6 +90,9 @@ Freq_i to Freq_j. Freq_i is in descending order with increasing rows and
|
|||||||
Freq_j is in descending order with increasing columns. The output here also
|
Freq_j is in descending order with increasing columns. The output here also
|
||||||
contains the actual freq values for each row and column for better readability.
|
contains the actual freq values for each row and column for better readability.
|
||||||
|
|
||||||
|
If the transition table is bigger than PAGE_SIZE, reading this will
|
||||||
|
return an -EFBIG error.
|
||||||
|
|
||||||
--------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------
|
||||||
<mysystem>:/sys/devices/system/cpu/cpu0/cpufreq/stats # cat trans_table
|
<mysystem>:/sys/devices/system/cpu/cpu0/cpufreq/stats # cat trans_table
|
||||||
From : To
|
From : To
|
||||||
|
@ -113,8 +113,11 @@ static ssize_t show_trans_table(struct cpufreq_policy *policy, char *buf)
|
|||||||
break;
|
break;
|
||||||
len += snprintf(buf + len, PAGE_SIZE - len, "\n");
|
len += snprintf(buf + len, PAGE_SIZE - len, "\n");
|
||||||
}
|
}
|
||||||
if (len >= PAGE_SIZE)
|
|
||||||
return PAGE_SIZE;
|
if (len >= PAGE_SIZE) {
|
||||||
|
pr_warn_once("cpufreq transition table exceeds PAGE_SIZE. Disabling\n");
|
||||||
|
return -EFBIG;
|
||||||
|
}
|
||||||
return len;
|
return len;
|
||||||
}
|
}
|
||||||
cpufreq_freq_attr_ro(trans_table);
|
cpufreq_freq_attr_ro(trans_table);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user