Commit 31a52a9e9d71afc65afb9c54479052b1663a5532

Authored by Rafael J. Wysocki
Committed by Greg Kroah-Hartman
1 parent 9321e2ecf4

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

... ... @@ -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