ACK: [PATCH] cpufreq: skip frequency claimed maximum test with intel_pstate
ivanhu
ivan.hu at canonical.com
Tue Apr 19 09:53:22 UTC 2016
On 2016年04月15日 15:25, Alex Hung wrote:
> On SandyBridge+, intel_pstate is used and it will not provide
> scaling_available_frequencies[1]. As a result, comparison fails
> with following errors:
>
> "cpu 0 has claimed frequency of 3200000, higher than max freq of 0".
>
> [1] https://bugzilla.kernel.org/show_bug.cgi?id=57141
>
> Signed-off-by: Alex Hung <alex.hung at canonical.com>
> ---
> src/cpu/cpufreq/cpufreq.c | 27 ++++++++++++++++-----------
> 1 file changed, 16 insertions(+), 11 deletions(-)
>
> diff --git a/src/cpu/cpufreq/cpufreq.c b/src/cpu/cpufreq/cpufreq.c
> index a1cb78a..8ab5292 100644
> --- a/src/cpu/cpufreq/cpufreq.c
> +++ b/src/cpu/cpufreq/cpufreq.c
> @@ -712,6 +712,9 @@ static int cpufreq_test_claimed_max(fwts_framework *fw)
> if (!max)
> continue;
>
> + if (!cpu->n_freqs)
> + continue;
> +
> present = true;
>
> if (max > cpu->freqs[cpu->n_freqs-1].Hz) {
> @@ -778,21 +781,23 @@ static int parse_cpu_info(fwts_framework *fw,
> cpu_mkpath(path, sizeof(path), cpu, "scaling_available_frequencies");
> str = fwts_get(path);
>
> - for (tmp = str, i = 0; ; tmp = NULL) {
> - char *tok = strtok(tmp, " ");
> - if (!tok)
> - break;
> - if (!isdigit(tok[0]))
> - continue;
> - cpu->freqs[i++].Hz = strtoull(tok, NULL, 10);
> + /* cpu driver like intel_pstate has no scaling_available_frequencies */
> + if (str != NULL) {
> + for (tmp = str, i = 0; ; tmp = NULL) {
> + char *tok = strtok(tmp, " ");
> + if (!tok)
> + break;
> + if (!isdigit(tok[0]))
> + continue;
> + cpu->freqs[i++].Hz = strtoull(tok, NULL, 10);
> + }
> + cpu->n_freqs = i;
> + qsort(cpu->freqs, cpu->n_freqs, sizeof(cpu->freqs[0]),
> + cpu_freq_compare);
> }
>
> free(str);
>
> - cpu->n_freqs = i;
> - qsort(cpu->freqs, cpu->n_freqs, sizeof(cpu->freqs[0]),
> - cpu_freq_compare);
> -
> return FWTS_OK;
> }
>
>
Acked-by: Ivan Hu <ivan.hu at canonical.com>
More information about the fwts-devel
mailing list