Commit 31a52a9e9d71afc65afb9c54479052b1663a5532
Committed by
Greg Kroah-Hartman
1 parent
9321e2ecf4
Exists in
ti-linux-3.14.y
and in
2 other branches
PM / sleep: Add state field to pm_states[] entries
commit 27ddcc6596e50cb8f03d2e83248897667811d8f6 upstream. To allow sleep states corresponding to the "mem", "standby" and "freeze" lables to be different from the pm_states[] indexes of those strings, introduce struct pm_sleep_state, consisting of a string label and a state number, and turn pm_states[] into an array of objects of that type. This modification should not lead to any functional changes. Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> Cc: Brian Norris <computersforpeace@gmail.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Showing 4 changed files with 30 additions and 27 deletions Side-by-side Diff
kernel/power/main.c
... | ... | @@ -293,12 +293,12 @@ |
293 | 293 | { |
294 | 294 | char *s = buf; |
295 | 295 | #ifdef CONFIG_SUSPEND |
296 | - int i; | |
296 | + suspend_state_t i; | |
297 | 297 | |
298 | - for (i = 0; i < PM_SUSPEND_MAX; i++) { | |
299 | - if (pm_states[i] && valid_state(i)) | |
300 | - s += sprintf(s,"%s ", pm_states[i]); | |
301 | - } | |
298 | + for (i = PM_SUSPEND_MIN; i < PM_SUSPEND_MAX; i++) | |
299 | + if (valid_state(i)) | |
300 | + s += sprintf(s,"%s ", pm_states[i].label); | |
301 | + | |
302 | 302 | #endif |
303 | 303 | #ifdef CONFIG_HIBERNATION |
304 | 304 | s += sprintf(s, "%s\n", "disk"); |
... | ... | @@ -314,7 +314,7 @@ |
314 | 314 | { |
315 | 315 | #ifdef CONFIG_SUSPEND |
316 | 316 | suspend_state_t state = PM_SUSPEND_MIN; |
317 | - const char * const *s; | |
317 | + struct pm_sleep_state *s; | |
318 | 318 | #endif |
319 | 319 | char *p; |
320 | 320 | int len; |
... | ... | @@ -328,7 +328,7 @@ |
328 | 328 | |
329 | 329 | #ifdef CONFIG_SUSPEND |
330 | 330 | for (s = &pm_states[state]; state < PM_SUSPEND_MAX; s++, state++) |
331 | - if (*s && len == strlen(*s) && !strncmp(buf, *s, len)) | |
331 | + if (len == strlen(s->label) && !strncmp(buf, s->label, len)) | |
332 | 332 | return state; |
333 | 333 | #endif |
334 | 334 | |
... | ... | @@ -448,7 +448,7 @@ |
448 | 448 | #ifdef CONFIG_SUSPEND |
449 | 449 | if (state < PM_SUSPEND_MAX) |
450 | 450 | return sprintf(buf, "%s\n", valid_state(state) ? |
451 | - pm_states[state] : "error"); | |
451 | + pm_states[state].label : "error"); | |
452 | 452 | #endif |
453 | 453 | #ifdef CONFIG_HIBERNATION |
454 | 454 | return sprintf(buf, "disk\n"); |
kernel/power/power.h
... | ... | @@ -175,8 +175,13 @@ |
175 | 175 | unsigned int, char *); |
176 | 176 | |
177 | 177 | #ifdef CONFIG_SUSPEND |
178 | +struct pm_sleep_state { | |
179 | + const char *label; | |
180 | + suspend_state_t state; | |
181 | +}; | |
182 | + | |
178 | 183 | /* kernel/power/suspend.c */ |
179 | -extern const char *const pm_states[]; | |
184 | +extern struct pm_sleep_state pm_states[]; | |
180 | 185 | |
181 | 186 | extern bool valid_state(suspend_state_t state); |
182 | 187 | extern int suspend_devices_and_enter(suspend_state_t state); |
kernel/power/suspend.c
... | ... | @@ -29,10 +29,10 @@ |
29 | 29 | |
30 | 30 | #include "power.h" |
31 | 31 | |
32 | -const char *const pm_states[PM_SUSPEND_MAX] = { | |
33 | - [PM_SUSPEND_FREEZE] = "freeze", | |
34 | - [PM_SUSPEND_STANDBY] = "standby", | |
35 | - [PM_SUSPEND_MEM] = "mem", | |
32 | +struct pm_sleep_state pm_states[PM_SUSPEND_MAX] = { | |
33 | + [PM_SUSPEND_FREEZE] = { "freeze", PM_SUSPEND_FREEZE }, | |
34 | + [PM_SUSPEND_STANDBY] = { "standby", PM_SUSPEND_STANDBY }, | |
35 | + [PM_SUSPEND_MEM] = { "mem", PM_SUSPEND_MEM }, | |
36 | 36 | }; |
37 | 37 | |
38 | 38 | static const struct platform_suspend_ops *suspend_ops; |
... | ... | @@ -337,7 +337,7 @@ |
337 | 337 | sys_sync(); |
338 | 338 | printk("done.\n"); |
339 | 339 | |
340 | - pr_debug("PM: Preparing system for %s sleep\n", pm_states[state]); | |
340 | + pr_debug("PM: Preparing system for %s sleep\n", pm_states[state].label); | |
341 | 341 | error = suspend_prepare(state); |
342 | 342 | if (error) |
343 | 343 | goto Unlock; |
... | ... | @@ -345,7 +345,7 @@ |
345 | 345 | if (suspend_test(TEST_FREEZER)) |
346 | 346 | goto Finish; |
347 | 347 | |
348 | - pr_debug("PM: Entering %s sleep\n", pm_states[state]); | |
348 | + pr_debug("PM: Entering %s sleep\n", pm_states[state].label); | |
349 | 349 | pm_restrict_gfp_mask(); |
350 | 350 | error = suspend_devices_and_enter(state); |
351 | 351 | pm_restore_gfp_mask(); |
kernel/power/suspend_test.c
... | ... | @@ -92,13 +92,13 @@ |
92 | 92 | } |
93 | 93 | |
94 | 94 | if (state == PM_SUSPEND_MEM) { |
95 | - printk(info_test, pm_states[state]); | |
95 | + printk(info_test, pm_states[state].label); | |
96 | 96 | status = pm_suspend(state); |
97 | 97 | if (status == -ENODEV) |
98 | 98 | state = PM_SUSPEND_STANDBY; |
99 | 99 | } |
100 | 100 | if (state == PM_SUSPEND_STANDBY) { |
101 | - printk(info_test, pm_states[state]); | |
101 | + printk(info_test, pm_states[state].label); | |
102 | 102 | status = pm_suspend(state); |
103 | 103 | } |
104 | 104 | if (status < 0) |
105 | 105 | |
... | ... | @@ -136,18 +136,16 @@ |
136 | 136 | |
137 | 137 | static int __init setup_test_suspend(char *value) |
138 | 138 | { |
139 | - unsigned i; | |
139 | + suspend_state_t i; | |
140 | 140 | |
141 | 141 | /* "=mem" ==> "mem" */ |
142 | 142 | value++; |
143 | - for (i = 0; i < PM_SUSPEND_MAX; i++) { | |
144 | - if (!pm_states[i]) | |
145 | - continue; | |
146 | - if (strcmp(pm_states[i], value) != 0) | |
147 | - continue; | |
148 | - test_state = (__force suspend_state_t) i; | |
149 | - return 0; | |
150 | - } | |
143 | + for (i = PM_SUSPEND_MIN; i < PM_SUSPEND_MAX; i++) | |
144 | + if (!strcmp(pm_states[i].label, value)) { | |
145 | + test_state = pm_states[i].state; | |
146 | + return 0; | |
147 | + } | |
148 | + | |
151 | 149 | printk(warn_bad_state, value); |
152 | 150 | return 0; |
153 | 151 | } |
... | ... | @@ -165,7 +163,7 @@ |
165 | 163 | if (test_state == PM_SUSPEND_ON) |
166 | 164 | goto done; |
167 | 165 | if (!valid_state(test_state)) { |
168 | - printk(warn_bad_state, pm_states[test_state]); | |
166 | + printk(warn_bad_state, pm_states[test_state].label); | |
169 | 167 | goto done; |
170 | 168 | } |
171 | 169 |