diff --git a/drivers/soc/qcom/msm_performance.c b/drivers/soc/qcom/msm_performance.c index a2dcfac2f267..28163e9f4d54 100644 --- a/drivers/soc/qcom/msm_performance.c +++ b/drivers/soc/qcom/msm_performance.c @@ -298,13 +298,15 @@ static ssize_t set_cpu_min_freq(struct kobject *kobj, for (i = 0; i < ntokens; i += 2) { if (sscanf(cp, "%u:%u", &cpu, &val) != 2) return -EINVAL; - if (cpu > (num_present_cpus() - 1)) - return -EINVAL; + if (cpu >= nr_cpu_ids) + break; - i_cpu_stats = &per_cpu(msm_perf_cpu_stats, cpu); + if (cpu_possible(cpu)) { + i_cpu_stats = &per_cpu(msm_perf_cpu_stats, cpu); - i_cpu_stats->min = val; - cpumask_set_cpu(cpu, limit_mask_min); + i_cpu_stats->min = val; + cpumask_set_cpu(cpu, limit_mask_min); + } cp = strnchr(cp, strlen(cp), ' '); cp++; @@ -385,13 +387,15 @@ static ssize_t set_cpu_max_freq(struct kobject *kobj, for (i = 0; i < ntokens; i += 2) { if (sscanf(cp, "%u:%u", &cpu, &val) != 2) return -EINVAL; - if (cpu > (num_present_cpus() - 1)) - return -EINVAL; + if (cpu >= nr_cpu_ids) + break; - i_cpu_stats = &per_cpu(msm_perf_cpu_stats, cpu); + if (cpu_possible(cpu)) { + i_cpu_stats = &per_cpu(msm_perf_cpu_stats, cpu); - i_cpu_stats->max = val; - cpumask_set_cpu(cpu, limit_mask_max); + i_cpu_stats->max = val; + cpumask_set_cpu(cpu, limit_mask_max); + } cp = strnchr(cp, strlen(cp), ' '); cp++;