aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c1
-rw-r--r--drivers/cpufreq/cpufreq.c29
-rw-r--r--include/linux/cpufreq.h3
3 files changed, 27 insertions, 6 deletions
diff --git a/arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c b/arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c
index 8db8f73503b3..b0c8208df9fa 100644
--- a/arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c
+++ b/arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c
@@ -601,6 +601,7 @@ static int acpi_cpufreq_cpu_init(struct cpufreq_policy *policy)
601 policy->shared_type == CPUFREQ_SHARED_TYPE_ANY) { 601 policy->shared_type == CPUFREQ_SHARED_TYPE_ANY) {
602 policy->cpus = perf->shared_cpu_map; 602 policy->cpus = perf->shared_cpu_map;
603 } 603 }
604 policy->related_cpus = perf->shared_cpu_map;
604 605
605#ifdef CONFIG_SMP 606#ifdef CONFIG_SMP
606 dmi_check_system(sw_any_bug_dmi_table); 607 dmi_check_system(sw_any_bug_dmi_table);
diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c
index d3575f5ec6d2..7fce038fa57e 100644
--- a/drivers/cpufreq/cpufreq.c
+++ b/drivers/cpufreq/cpufreq.c
@@ -583,15 +583,13 @@ out:
583 i += sprintf(&buf[i], "\n"); 583 i += sprintf(&buf[i], "\n");
584 return i; 584 return i;
585} 585}
586/** 586
587 * show_affected_cpus - show the CPUs affected by each transition 587static ssize_t show_cpus(cpumask_t mask, char *buf)
588 */
589static ssize_t show_affected_cpus(struct cpufreq_policy *policy, char *buf)
590{ 588{
591 ssize_t i = 0; 589 ssize_t i = 0;
592 unsigned int cpu; 590 unsigned int cpu;
593 591
594 for_each_cpu_mask(cpu, policy->cpus) { 592 for_each_cpu_mask(cpu, mask) {
595 if (i) 593 if (i)
596 i += scnprintf(&buf[i], (PAGE_SIZE - i - 2), " "); 594 i += scnprintf(&buf[i], (PAGE_SIZE - i - 2), " ");
597 i += scnprintf(&buf[i], (PAGE_SIZE - i - 2), "%u", cpu); 595 i += scnprintf(&buf[i], (PAGE_SIZE - i - 2), "%u", cpu);
@@ -602,6 +600,25 @@ static ssize_t show_affected_cpus(struct cpufreq_policy *policy, char *buf)
602 return i; 600 return i;
603} 601}
604 602
603/**
604 * show_related_cpus - show the CPUs affected by each transition even if
605 * hw coordination is in use
606 */
607static ssize_t show_related_cpus(struct cpufreq_policy *policy, char *buf)
608{
609 if (cpus_empty(policy->related_cpus))
610 return show_cpus(policy->cpus, buf);
611 return show_cpus(policy->related_cpus, buf);
612}
613
614/**
615 * show_affected_cpus - show the CPUs affected by each transition
616 */
617static ssize_t show_affected_cpus(struct cpufreq_policy *policy, char *buf)
618{
619 return show_cpus(policy->cpus, buf);
620}
621
605static ssize_t store_scaling_setspeed(struct cpufreq_policy *policy, 622static ssize_t store_scaling_setspeed(struct cpufreq_policy *policy,
606 const char *buf, size_t count) 623 const char *buf, size_t count)
607{ 624{
@@ -646,6 +663,7 @@ define_one_ro(cpuinfo_max_freq);
646define_one_ro(scaling_available_governors); 663define_one_ro(scaling_available_governors);
647define_one_ro(scaling_driver); 664define_one_ro(scaling_driver);
648define_one_ro(scaling_cur_freq); 665define_one_ro(scaling_cur_freq);
666define_one_ro(related_cpus);
649define_one_ro(affected_cpus); 667define_one_ro(affected_cpus);
650define_one_rw(scaling_min_freq); 668define_one_rw(scaling_min_freq);
651define_one_rw(scaling_max_freq); 669define_one_rw(scaling_max_freq);
@@ -658,6 +676,7 @@ static struct attribute *default_attrs[] = {
658 &scaling_min_freq.attr, 676 &scaling_min_freq.attr,
659 &scaling_max_freq.attr, 677 &scaling_max_freq.attr,
660 &affected_cpus.attr, 678 &affected_cpus.attr,
679 &related_cpus.attr,
661 &scaling_governor.attr, 680 &scaling_governor.attr,
662 &scaling_driver.attr, 681 &scaling_driver.attr,
663 &scaling_available_governors.attr, 682 &scaling_available_governors.attr,
diff --git a/include/linux/cpufreq.h b/include/linux/cpufreq.h
index ddd8652fc3f3..a881fd62c447 100644
--- a/include/linux/cpufreq.h
+++ b/include/linux/cpufreq.h
@@ -83,7 +83,8 @@ struct cpufreq_real_policy {
83}; 83};
84 84
85struct cpufreq_policy { 85struct cpufreq_policy {
86 cpumask_t cpus; /* affected CPUs */ 86 cpumask_t cpus; /* CPUs requiring sw coordination */
87 cpumask_t related_cpus; /* CPUs with any coordination */
87 unsigned int shared_type; /* ANY or ALL affected CPUs 88 unsigned int shared_type; /* ANY or ALL affected CPUs
88 should set cpufreq */ 89 should set cpufreq */
89 unsigned int cpu; /* cpu nr of registered CPU */ 90 unsigned int cpu; /* cpu nr of registered CPU */