diff options
| -rw-r--r-- | drivers/cpufreq/intel_pstate.c | 4 | ||||
| -rw-r--r-- | drivers/powercap/intel_rapl.c | 8 | ||||
| -rw-r--r-- | include/linux/pm_domain.h | 2 | ||||
| -rw-r--r-- | kernel/power/power.h | 1 | ||||
| -rw-r--r-- | kernel/power/suspend.c | 2 | ||||
| -rw-r--r-- | kernel/power/suspend_test.c | 31 |
6 files changed, 26 insertions, 22 deletions
diff --git a/drivers/cpufreq/intel_pstate.c b/drivers/cpufreq/intel_pstate.c index e396ad3f8f3f..0668b389c516 100644 --- a/drivers/cpufreq/intel_pstate.c +++ b/drivers/cpufreq/intel_pstate.c | |||
| @@ -708,10 +708,6 @@ static unsigned int intel_pstate_get(unsigned int cpu_num) | |||
| 708 | 708 | ||
| 709 | static int intel_pstate_set_policy(struct cpufreq_policy *policy) | 709 | static int intel_pstate_set_policy(struct cpufreq_policy *policy) |
| 710 | { | 710 | { |
| 711 | struct cpudata *cpu; | ||
| 712 | |||
| 713 | cpu = all_cpu_data[policy->cpu]; | ||
| 714 | |||
| 715 | if (!policy->cpuinfo.max_freq) | 711 | if (!policy->cpuinfo.max_freq) |
| 716 | return -ENODEV; | 712 | return -ENODEV; |
| 717 | 713 | ||
diff --git a/drivers/powercap/intel_rapl.c b/drivers/powercap/intel_rapl.c index b1cda6ffdbcc..45e05b32f9b6 100644 --- a/drivers/powercap/intel_rapl.c +++ b/drivers/powercap/intel_rapl.c | |||
| @@ -953,6 +953,7 @@ static const struct x86_cpu_id rapl_ids[] = { | |||
| 953 | { X86_VENDOR_INTEL, 6, 0x3a},/* Ivy Bridge */ | 953 | { X86_VENDOR_INTEL, 6, 0x3a},/* Ivy Bridge */ |
| 954 | { X86_VENDOR_INTEL, 6, 0x3c},/* Haswell */ | 954 | { X86_VENDOR_INTEL, 6, 0x3c},/* Haswell */ |
| 955 | { X86_VENDOR_INTEL, 6, 0x3d},/* Broadwell */ | 955 | { X86_VENDOR_INTEL, 6, 0x3d},/* Broadwell */ |
| 956 | { X86_VENDOR_INTEL, 6, 0x3f},/* Haswell */ | ||
| 956 | { X86_VENDOR_INTEL, 6, 0x45},/* Haswell ULT */ | 957 | { X86_VENDOR_INTEL, 6, 0x45},/* Haswell ULT */ |
| 957 | /* TODO: Add more CPU IDs after testing */ | 958 | /* TODO: Add more CPU IDs after testing */ |
| 958 | {} | 959 | {} |
| @@ -1166,11 +1167,10 @@ static int rapl_detect_domains(struct rapl_package *rp, int cpu) | |||
| 1166 | 1167 | ||
| 1167 | for (i = 0; i < RAPL_DOMAIN_MAX; i++) { | 1168 | for (i = 0; i < RAPL_DOMAIN_MAX; i++) { |
| 1168 | /* use physical package id to read counters */ | 1169 | /* use physical package id to read counters */ |
| 1169 | if (!rapl_check_domain(cpu, i)) | 1170 | if (!rapl_check_domain(cpu, i)) { |
| 1170 | rp->domain_map |= 1 << i; | 1171 | rp->domain_map |= 1 << i; |
| 1171 | else | 1172 | pr_info("Found RAPL domain %s\n", rapl_domain_names[i]); |
| 1172 | pr_warn("RAPL domain %s detection failed\n", | 1173 | } |
| 1173 | rapl_domain_names[i]); | ||
| 1174 | } | 1174 | } |
| 1175 | rp->nr_domains = bitmap_weight(&rp->domain_map, RAPL_DOMAIN_MAX); | 1175 | rp->nr_domains = bitmap_weight(&rp->domain_map, RAPL_DOMAIN_MAX); |
| 1176 | if (!rp->nr_domains) { | 1176 | if (!rp->nr_domains) { |
diff --git a/include/linux/pm_domain.h b/include/linux/pm_domain.h index 7c1d252b20c0..ebc4c76ffb73 100644 --- a/include/linux/pm_domain.h +++ b/include/linux/pm_domain.h | |||
| @@ -60,7 +60,7 @@ struct generic_pm_domain { | |||
| 60 | struct mutex lock; | 60 | struct mutex lock; |
| 61 | struct dev_power_governor *gov; | 61 | struct dev_power_governor *gov; |
| 62 | struct work_struct power_off_work; | 62 | struct work_struct power_off_work; |
| 63 | char *name; | 63 | const char *name; |
| 64 | unsigned int in_progress; /* Number of devices being suspended now */ | 64 | unsigned int in_progress; /* Number of devices being suspended now */ |
| 65 | atomic_t sd_count; /* Number of subdomains with power "on" */ | 65 | atomic_t sd_count; /* Number of subdomains with power "on" */ |
| 66 | enum gpd_status status; /* Current state of the domain */ | 66 | enum gpd_status status; /* Current state of the domain */ |
diff --git a/kernel/power/power.h b/kernel/power/power.h index 5d49dcac2537..2df883a9d3cb 100644 --- a/kernel/power/power.h +++ b/kernel/power/power.h | |||
| @@ -179,6 +179,7 @@ extern void swsusp_show_speed(struct timeval *, struct timeval *, | |||
| 179 | 179 | ||
| 180 | #ifdef CONFIG_SUSPEND | 180 | #ifdef CONFIG_SUSPEND |
| 181 | /* kernel/power/suspend.c */ | 181 | /* kernel/power/suspend.c */ |
| 182 | extern const char *pm_labels[]; | ||
| 182 | extern const char *pm_states[]; | 183 | extern const char *pm_states[]; |
| 183 | 184 | ||
| 184 | extern int suspend_devices_and_enter(suspend_state_t state); | 185 | extern int suspend_devices_and_enter(suspend_state_t state); |
diff --git a/kernel/power/suspend.c b/kernel/power/suspend.c index 6dadb25cb0d8..18c62195660f 100644 --- a/kernel/power/suspend.c +++ b/kernel/power/suspend.c | |||
| @@ -31,7 +31,7 @@ | |||
| 31 | 31 | ||
| 32 | #include "power.h" | 32 | #include "power.h" |
| 33 | 33 | ||
| 34 | static const char *pm_labels[] = { "mem", "standby", "freeze", }; | 34 | const char *pm_labels[] = { "mem", "standby", "freeze", NULL }; |
| 35 | const char *pm_states[PM_SUSPEND_MAX]; | 35 | const char *pm_states[PM_SUSPEND_MAX]; |
| 36 | 36 | ||
| 37 | static const struct platform_suspend_ops *suspend_ops; | 37 | static const struct platform_suspend_ops *suspend_ops; |
diff --git a/kernel/power/suspend_test.c b/kernel/power/suspend_test.c index 2f524928b6aa..bd91bc177c93 100644 --- a/kernel/power/suspend_test.c +++ b/kernel/power/suspend_test.c | |||
| @@ -129,20 +129,20 @@ static int __init has_wakealarm(struct device *dev, const void *data) | |||
| 129 | * at startup time. They're normally disabled, for faster boot and because | 129 | * at startup time. They're normally disabled, for faster boot and because |
| 130 | * we can't know which states really work on this particular system. | 130 | * we can't know which states really work on this particular system. |
| 131 | */ | 131 | */ |
| 132 | static suspend_state_t test_state __initdata = PM_SUSPEND_ON; | 132 | static const char *test_state_label __initdata; |
| 133 | 133 | ||
| 134 | static char warn_bad_state[] __initdata = | 134 | static char warn_bad_state[] __initdata = |
| 135 | KERN_WARNING "PM: can't test '%s' suspend state\n"; | 135 | KERN_WARNING "PM: can't test '%s' suspend state\n"; |
| 136 | 136 | ||
| 137 | static int __init setup_test_suspend(char *value) | 137 | static int __init setup_test_suspend(char *value) |
| 138 | { | 138 | { |
| 139 | suspend_state_t i; | 139 | int i; |
| 140 | 140 | ||
| 141 | /* "=mem" ==> "mem" */ | 141 | /* "=mem" ==> "mem" */ |
| 142 | value++; | 142 | value++; |
| 143 | for (i = PM_SUSPEND_MIN; i < PM_SUSPEND_MAX; i++) | 143 | for (i = 0; pm_labels[i]; i++) |
| 144 | if (!strcmp(pm_states[i], value)) { | 144 | if (!strcmp(pm_labels[i], value)) { |
| 145 | test_state = i; | 145 | test_state_label = pm_labels[i]; |
| 146 | return 0; | 146 | return 0; |
| 147 | } | 147 | } |
| 148 | 148 | ||
| @@ -158,13 +158,21 @@ static int __init test_suspend(void) | |||
| 158 | 158 | ||
| 159 | struct rtc_device *rtc = NULL; | 159 | struct rtc_device *rtc = NULL; |
| 160 | struct device *dev; | 160 | struct device *dev; |
| 161 | suspend_state_t test_state; | ||
| 161 | 162 | ||
| 162 | /* PM is initialized by now; is that state testable? */ | 163 | /* PM is initialized by now; is that state testable? */ |
| 163 | if (test_state == PM_SUSPEND_ON) | 164 | if (!test_state_label) |
| 164 | goto done; | 165 | return 0; |
| 165 | if (!pm_states[test_state]) { | 166 | |
| 166 | printk(warn_bad_state, pm_states[test_state]); | 167 | for (test_state = PM_SUSPEND_MIN; test_state < PM_SUSPEND_MAX; test_state++) { |
| 167 | goto done; | 168 | const char *state_label = pm_states[test_state]; |
| 169 | |||
| 170 | if (state_label && !strcmp(test_state_label, state_label)) | ||
| 171 | break; | ||
| 172 | } | ||
| 173 | if (test_state == PM_SUSPEND_MAX) { | ||
| 174 | printk(warn_bad_state, test_state_label); | ||
| 175 | return 0; | ||
| 168 | } | 176 | } |
| 169 | 177 | ||
| 170 | /* RTCs have initialized by now too ... can we use one? */ | 178 | /* RTCs have initialized by now too ... can we use one? */ |
| @@ -173,13 +181,12 @@ static int __init test_suspend(void) | |||
| 173 | rtc = rtc_class_open(dev_name(dev)); | 181 | rtc = rtc_class_open(dev_name(dev)); |
| 174 | if (!rtc) { | 182 | if (!rtc) { |
| 175 | printk(warn_no_rtc); | 183 | printk(warn_no_rtc); |
| 176 | goto done; | 184 | return 0; |
| 177 | } | 185 | } |
| 178 | 186 | ||
| 179 | /* go for it */ | 187 | /* go for it */ |
| 180 | test_wakealarm(rtc, test_state); | 188 | test_wakealarm(rtc, test_state); |
| 181 | rtc_class_close(rtc); | 189 | rtc_class_close(rtc); |
| 182 | done: | ||
| 183 | return 0; | 190 | return 0; |
| 184 | } | 191 | } |
| 185 | late_initcall(test_suspend); | 192 | late_initcall(test_suspend); |
