xref: /linux/kernel/power/main.c (revision 7ff836f064e2c814a7504c91a4464eea45d475bd)
1 /*
2  * kernel/power/main.c - PM subsystem core functionality.
3  *
4  * Copyright (c) 2003 Patrick Mochel
5  * Copyright (c) 2003 Open Source Development Lab
6  *
7  * This file is released under the GPLv2
8  *
9  */
10 
11 #include <linux/export.h>
12 #include <linux/kobject.h>
13 #include <linux/string.h>
14 #include <linux/pm-trace.h>
15 #include <linux/workqueue.h>
16 #include <linux/debugfs.h>
17 #include <linux/seq_file.h>
18 #include <linux/suspend.h>
19 #include <linux/syscalls.h>
20 
21 #include "power.h"
22 
23 #ifdef CONFIG_PM_SLEEP
24 
25 void lock_system_sleep(void)
26 {
27 	current->flags |= PF_FREEZER_SKIP;
28 	mutex_lock(&system_transition_mutex);
29 }
30 EXPORT_SYMBOL_GPL(lock_system_sleep);
31 
32 void unlock_system_sleep(void)
33 {
34 	/*
35 	 * Don't use freezer_count() because we don't want the call to
36 	 * try_to_freeze() here.
37 	 *
38 	 * Reason:
39 	 * Fundamentally, we just don't need it, because freezing condition
40 	 * doesn't come into effect until we release the
41 	 * system_transition_mutex lock, since the freezer always works with
42 	 * system_transition_mutex held.
43 	 *
44 	 * More importantly, in the case of hibernation,
45 	 * unlock_system_sleep() gets called in snapshot_read() and
46 	 * snapshot_write() when the freezing condition is still in effect.
47 	 * Which means, if we use try_to_freeze() here, it would make them
48 	 * enter the refrigerator, thus causing hibernation to lockup.
49 	 */
50 	current->flags &= ~PF_FREEZER_SKIP;
51 	mutex_unlock(&system_transition_mutex);
52 }
53 EXPORT_SYMBOL_GPL(unlock_system_sleep);
54 
55 void ksys_sync_helper(void)
56 {
57 	ktime_t start;
58 	long elapsed_msecs;
59 
60 	start = ktime_get();
61 	ksys_sync();
62 	elapsed_msecs = ktime_to_ms(ktime_sub(ktime_get(), start));
63 	pr_info("Filesystems sync: %ld.%03ld seconds\n",
64 		elapsed_msecs / MSEC_PER_SEC, elapsed_msecs % MSEC_PER_SEC);
65 }
66 EXPORT_SYMBOL_GPL(ksys_sync_helper);
67 
68 /* Routines for PM-transition notifications */
69 
70 static BLOCKING_NOTIFIER_HEAD(pm_chain_head);
71 
72 int register_pm_notifier(struct notifier_block *nb)
73 {
74 	return blocking_notifier_chain_register(&pm_chain_head, nb);
75 }
76 EXPORT_SYMBOL_GPL(register_pm_notifier);
77 
78 int unregister_pm_notifier(struct notifier_block *nb)
79 {
80 	return blocking_notifier_chain_unregister(&pm_chain_head, nb);
81 }
82 EXPORT_SYMBOL_GPL(unregister_pm_notifier);
83 
84 int __pm_notifier_call_chain(unsigned long val, int nr_to_call, int *nr_calls)
85 {
86 	int ret;
87 
88 	ret = __blocking_notifier_call_chain(&pm_chain_head, val, NULL,
89 						nr_to_call, nr_calls);
90 
91 	return notifier_to_errno(ret);
92 }
93 int pm_notifier_call_chain(unsigned long val)
94 {
95 	return __pm_notifier_call_chain(val, -1, NULL);
96 }
97 
98 /* If set, devices may be suspended and resumed asynchronously. */
99 int pm_async_enabled = 1;
100 
101 static ssize_t pm_async_show(struct kobject *kobj, struct kobj_attribute *attr,
102 			     char *buf)
103 {
104 	return sprintf(buf, "%d\n", pm_async_enabled);
105 }
106 
107 static ssize_t pm_async_store(struct kobject *kobj, struct kobj_attribute *attr,
108 			      const char *buf, size_t n)
109 {
110 	unsigned long val;
111 
112 	if (kstrtoul(buf, 10, &val))
113 		return -EINVAL;
114 
115 	if (val > 1)
116 		return -EINVAL;
117 
118 	pm_async_enabled = val;
119 	return n;
120 }
121 
122 power_attr(pm_async);
123 
124 #ifdef CONFIG_SUSPEND
125 static ssize_t mem_sleep_show(struct kobject *kobj, struct kobj_attribute *attr,
126 			      char *buf)
127 {
128 	char *s = buf;
129 	suspend_state_t i;
130 
131 	for (i = PM_SUSPEND_MIN; i < PM_SUSPEND_MAX; i++)
132 		if (mem_sleep_states[i]) {
133 			const char *label = mem_sleep_states[i];
134 
135 			if (mem_sleep_current == i)
136 				s += sprintf(s, "[%s] ", label);
137 			else
138 				s += sprintf(s, "%s ", label);
139 		}
140 
141 	/* Convert the last space to a newline if needed. */
142 	if (s != buf)
143 		*(s-1) = '\n';
144 
145 	return (s - buf);
146 }
147 
148 static suspend_state_t decode_suspend_state(const char *buf, size_t n)
149 {
150 	suspend_state_t state;
151 	char *p;
152 	int len;
153 
154 	p = memchr(buf, '\n', n);
155 	len = p ? p - buf : n;
156 
157 	for (state = PM_SUSPEND_MIN; state < PM_SUSPEND_MAX; state++) {
158 		const char *label = mem_sleep_states[state];
159 
160 		if (label && len == strlen(label) && !strncmp(buf, label, len))
161 			return state;
162 	}
163 
164 	return PM_SUSPEND_ON;
165 }
166 
167 static ssize_t mem_sleep_store(struct kobject *kobj, struct kobj_attribute *attr,
168 			       const char *buf, size_t n)
169 {
170 	suspend_state_t state;
171 	int error;
172 
173 	error = pm_autosleep_lock();
174 	if (error)
175 		return error;
176 
177 	if (pm_autosleep_state() > PM_SUSPEND_ON) {
178 		error = -EBUSY;
179 		goto out;
180 	}
181 
182 	state = decode_suspend_state(buf, n);
183 	if (state < PM_SUSPEND_MAX && state > PM_SUSPEND_ON)
184 		mem_sleep_current = state;
185 	else
186 		error = -EINVAL;
187 
188  out:
189 	pm_autosleep_unlock();
190 	return error ? error : n;
191 }
192 
193 power_attr(mem_sleep);
194 #endif /* CONFIG_SUSPEND */
195 
196 #ifdef CONFIG_PM_SLEEP_DEBUG
197 int pm_test_level = TEST_NONE;
198 
199 static const char * const pm_tests[__TEST_AFTER_LAST] = {
200 	[TEST_NONE] = "none",
201 	[TEST_CORE] = "core",
202 	[TEST_CPUS] = "processors",
203 	[TEST_PLATFORM] = "platform",
204 	[TEST_DEVICES] = "devices",
205 	[TEST_FREEZER] = "freezer",
206 };
207 
208 static ssize_t pm_test_show(struct kobject *kobj, struct kobj_attribute *attr,
209 				char *buf)
210 {
211 	char *s = buf;
212 	int level;
213 
214 	for (level = TEST_FIRST; level <= TEST_MAX; level++)
215 		if (pm_tests[level]) {
216 			if (level == pm_test_level)
217 				s += sprintf(s, "[%s] ", pm_tests[level]);
218 			else
219 				s += sprintf(s, "%s ", pm_tests[level]);
220 		}
221 
222 	if (s != buf)
223 		/* convert the last space to a newline */
224 		*(s-1) = '\n';
225 
226 	return (s - buf);
227 }
228 
229 static ssize_t pm_test_store(struct kobject *kobj, struct kobj_attribute *attr,
230 				const char *buf, size_t n)
231 {
232 	const char * const *s;
233 	int level;
234 	char *p;
235 	int len;
236 	int error = -EINVAL;
237 
238 	p = memchr(buf, '\n', n);
239 	len = p ? p - buf : n;
240 
241 	lock_system_sleep();
242 
243 	level = TEST_FIRST;
244 	for (s = &pm_tests[level]; level <= TEST_MAX; s++, level++)
245 		if (*s && len == strlen(*s) && !strncmp(buf, *s, len)) {
246 			pm_test_level = level;
247 			error = 0;
248 			break;
249 		}
250 
251 	unlock_system_sleep();
252 
253 	return error ? error : n;
254 }
255 
256 power_attr(pm_test);
257 #endif /* CONFIG_PM_SLEEP_DEBUG */
258 
259 #ifdef CONFIG_DEBUG_FS
260 static char *suspend_step_name(enum suspend_stat_step step)
261 {
262 	switch (step) {
263 	case SUSPEND_FREEZE:
264 		return "freeze";
265 	case SUSPEND_PREPARE:
266 		return "prepare";
267 	case SUSPEND_SUSPEND:
268 		return "suspend";
269 	case SUSPEND_SUSPEND_NOIRQ:
270 		return "suspend_noirq";
271 	case SUSPEND_RESUME_NOIRQ:
272 		return "resume_noirq";
273 	case SUSPEND_RESUME:
274 		return "resume";
275 	default:
276 		return "";
277 	}
278 }
279 
280 static int suspend_stats_show(struct seq_file *s, void *unused)
281 {
282 	int i, index, last_dev, last_errno, last_step;
283 
284 	last_dev = suspend_stats.last_failed_dev + REC_FAILED_NUM - 1;
285 	last_dev %= REC_FAILED_NUM;
286 	last_errno = suspend_stats.last_failed_errno + REC_FAILED_NUM - 1;
287 	last_errno %= REC_FAILED_NUM;
288 	last_step = suspend_stats.last_failed_step + REC_FAILED_NUM - 1;
289 	last_step %= REC_FAILED_NUM;
290 	seq_printf(s, "%s: %d\n%s: %d\n%s: %d\n%s: %d\n%s: %d\n"
291 			"%s: %d\n%s: %d\n%s: %d\n%s: %d\n%s: %d\n",
292 			"success", suspend_stats.success,
293 			"fail", suspend_stats.fail,
294 			"failed_freeze", suspend_stats.failed_freeze,
295 			"failed_prepare", suspend_stats.failed_prepare,
296 			"failed_suspend", suspend_stats.failed_suspend,
297 			"failed_suspend_late",
298 				suspend_stats.failed_suspend_late,
299 			"failed_suspend_noirq",
300 				suspend_stats.failed_suspend_noirq,
301 			"failed_resume", suspend_stats.failed_resume,
302 			"failed_resume_early",
303 				suspend_stats.failed_resume_early,
304 			"failed_resume_noirq",
305 				suspend_stats.failed_resume_noirq);
306 	seq_printf(s,	"failures:\n  last_failed_dev:\t%-s\n",
307 			suspend_stats.failed_devs[last_dev]);
308 	for (i = 1; i < REC_FAILED_NUM; i++) {
309 		index = last_dev + REC_FAILED_NUM - i;
310 		index %= REC_FAILED_NUM;
311 		seq_printf(s, "\t\t\t%-s\n",
312 			suspend_stats.failed_devs[index]);
313 	}
314 	seq_printf(s,	"  last_failed_errno:\t%-d\n",
315 			suspend_stats.errno[last_errno]);
316 	for (i = 1; i < REC_FAILED_NUM; i++) {
317 		index = last_errno + REC_FAILED_NUM - i;
318 		index %= REC_FAILED_NUM;
319 		seq_printf(s, "\t\t\t%-d\n",
320 			suspend_stats.errno[index]);
321 	}
322 	seq_printf(s,	"  last_failed_step:\t%-s\n",
323 			suspend_step_name(
324 				suspend_stats.failed_steps[last_step]));
325 	for (i = 1; i < REC_FAILED_NUM; i++) {
326 		index = last_step + REC_FAILED_NUM - i;
327 		index %= REC_FAILED_NUM;
328 		seq_printf(s, "\t\t\t%-s\n",
329 			suspend_step_name(
330 				suspend_stats.failed_steps[index]));
331 	}
332 
333 	return 0;
334 }
335 DEFINE_SHOW_ATTRIBUTE(suspend_stats);
336 
337 static int __init pm_debugfs_init(void)
338 {
339 	debugfs_create_file("suspend_stats", S_IFREG | S_IRUGO,
340 			NULL, NULL, &suspend_stats_fops);
341 	return 0;
342 }
343 
344 late_initcall(pm_debugfs_init);
345 #endif /* CONFIG_DEBUG_FS */
346 
347 #endif /* CONFIG_PM_SLEEP */
348 
349 #ifdef CONFIG_PM_SLEEP_DEBUG
350 /*
351  * pm_print_times: print time taken by devices to suspend and resume.
352  *
353  * show() returns whether printing of suspend and resume times is enabled.
354  * store() accepts 0 or 1.  0 disables printing and 1 enables it.
355  */
356 bool pm_print_times_enabled;
357 
358 static ssize_t pm_print_times_show(struct kobject *kobj,
359 				   struct kobj_attribute *attr, char *buf)
360 {
361 	return sprintf(buf, "%d\n", pm_print_times_enabled);
362 }
363 
364 static ssize_t pm_print_times_store(struct kobject *kobj,
365 				    struct kobj_attribute *attr,
366 				    const char *buf, size_t n)
367 {
368 	unsigned long val;
369 
370 	if (kstrtoul(buf, 10, &val))
371 		return -EINVAL;
372 
373 	if (val > 1)
374 		return -EINVAL;
375 
376 	pm_print_times_enabled = !!val;
377 	return n;
378 }
379 
380 power_attr(pm_print_times);
381 
382 static inline void pm_print_times_init(void)
383 {
384 	pm_print_times_enabled = !!initcall_debug;
385 }
386 
387 static ssize_t pm_wakeup_irq_show(struct kobject *kobj,
388 					struct kobj_attribute *attr,
389 					char *buf)
390 {
391 	return pm_wakeup_irq ? sprintf(buf, "%u\n", pm_wakeup_irq) : -ENODATA;
392 }
393 
394 power_attr_ro(pm_wakeup_irq);
395 
396 bool pm_debug_messages_on __read_mostly;
397 
398 static ssize_t pm_debug_messages_show(struct kobject *kobj,
399 				      struct kobj_attribute *attr, char *buf)
400 {
401 	return sprintf(buf, "%d\n", pm_debug_messages_on);
402 }
403 
404 static ssize_t pm_debug_messages_store(struct kobject *kobj,
405 				       struct kobj_attribute *attr,
406 				       const char *buf, size_t n)
407 {
408 	unsigned long val;
409 
410 	if (kstrtoul(buf, 10, &val))
411 		return -EINVAL;
412 
413 	if (val > 1)
414 		return -EINVAL;
415 
416 	pm_debug_messages_on = !!val;
417 	return n;
418 }
419 
420 power_attr(pm_debug_messages);
421 
422 /**
423  * __pm_pr_dbg - Print a suspend debug message to the kernel log.
424  * @defer: Whether or not to use printk_deferred() to print the message.
425  * @fmt: Message format.
426  *
427  * The message will be emitted if enabled through the pm_debug_messages
428  * sysfs attribute.
429  */
430 void __pm_pr_dbg(bool defer, const char *fmt, ...)
431 {
432 	struct va_format vaf;
433 	va_list args;
434 
435 	if (!pm_debug_messages_on)
436 		return;
437 
438 	va_start(args, fmt);
439 
440 	vaf.fmt = fmt;
441 	vaf.va = &args;
442 
443 	if (defer)
444 		printk_deferred(KERN_DEBUG "PM: %pV", &vaf);
445 	else
446 		printk(KERN_DEBUG "PM: %pV", &vaf);
447 
448 	va_end(args);
449 }
450 
451 #else /* !CONFIG_PM_SLEEP_DEBUG */
452 static inline void pm_print_times_init(void) {}
453 #endif /* CONFIG_PM_SLEEP_DEBUG */
454 
455 struct kobject *power_kobj;
456 
457 /**
458  * state - control system sleep states.
459  *
460  * show() returns available sleep state labels, which may be "mem", "standby",
461  * "freeze" and "disk" (hibernation).
462  * See Documentation/admin-guide/pm/sleep-states.rst for a description of
463  * what they mean.
464  *
465  * store() accepts one of those strings, translates it into the proper
466  * enumerated value, and initiates a suspend transition.
467  */
468 static ssize_t state_show(struct kobject *kobj, struct kobj_attribute *attr,
469 			  char *buf)
470 {
471 	char *s = buf;
472 #ifdef CONFIG_SUSPEND
473 	suspend_state_t i;
474 
475 	for (i = PM_SUSPEND_MIN; i < PM_SUSPEND_MAX; i++)
476 		if (pm_states[i])
477 			s += sprintf(s,"%s ", pm_states[i]);
478 
479 #endif
480 	if (hibernation_available())
481 		s += sprintf(s, "disk ");
482 	if (s != buf)
483 		/* convert the last space to a newline */
484 		*(s-1) = '\n';
485 	return (s - buf);
486 }
487 
488 static suspend_state_t decode_state(const char *buf, size_t n)
489 {
490 #ifdef CONFIG_SUSPEND
491 	suspend_state_t state;
492 #endif
493 	char *p;
494 	int len;
495 
496 	p = memchr(buf, '\n', n);
497 	len = p ? p - buf : n;
498 
499 	/* Check hibernation first. */
500 	if (len == 4 && !strncmp(buf, "disk", len))
501 		return PM_SUSPEND_MAX;
502 
503 #ifdef CONFIG_SUSPEND
504 	for (state = PM_SUSPEND_MIN; state < PM_SUSPEND_MAX; state++) {
505 		const char *label = pm_states[state];
506 
507 		if (label && len == strlen(label) && !strncmp(buf, label, len))
508 			return state;
509 	}
510 #endif
511 
512 	return PM_SUSPEND_ON;
513 }
514 
515 static ssize_t state_store(struct kobject *kobj, struct kobj_attribute *attr,
516 			   const char *buf, size_t n)
517 {
518 	suspend_state_t state;
519 	int error;
520 
521 	error = pm_autosleep_lock();
522 	if (error)
523 		return error;
524 
525 	if (pm_autosleep_state() > PM_SUSPEND_ON) {
526 		error = -EBUSY;
527 		goto out;
528 	}
529 
530 	state = decode_state(buf, n);
531 	if (state < PM_SUSPEND_MAX) {
532 		if (state == PM_SUSPEND_MEM)
533 			state = mem_sleep_current;
534 
535 		error = pm_suspend(state);
536 	} else if (state == PM_SUSPEND_MAX) {
537 		error = hibernate();
538 	} else {
539 		error = -EINVAL;
540 	}
541 
542  out:
543 	pm_autosleep_unlock();
544 	return error ? error : n;
545 }
546 
547 power_attr(state);
548 
549 #ifdef CONFIG_PM_SLEEP
550 /*
551  * The 'wakeup_count' attribute, along with the functions defined in
552  * drivers/base/power/wakeup.c, provides a means by which wakeup events can be
553  * handled in a non-racy way.
554  *
555  * If a wakeup event occurs when the system is in a sleep state, it simply is
556  * woken up.  In turn, if an event that would wake the system up from a sleep
557  * state occurs when it is undergoing a transition to that sleep state, the
558  * transition should be aborted.  Moreover, if such an event occurs when the
559  * system is in the working state, an attempt to start a transition to the
560  * given sleep state should fail during certain period after the detection of
561  * the event.  Using the 'state' attribute alone is not sufficient to satisfy
562  * these requirements, because a wakeup event may occur exactly when 'state'
563  * is being written to and may be delivered to user space right before it is
564  * frozen, so the event will remain only partially processed until the system is
565  * woken up by another event.  In particular, it won't cause the transition to
566  * a sleep state to be aborted.
567  *
568  * This difficulty may be overcome if user space uses 'wakeup_count' before
569  * writing to 'state'.  It first should read from 'wakeup_count' and store
570  * the read value.  Then, after carrying out its own preparations for the system
571  * transition to a sleep state, it should write the stored value to
572  * 'wakeup_count'.  If that fails, at least one wakeup event has occurred since
573  * 'wakeup_count' was read and 'state' should not be written to.  Otherwise, it
574  * is allowed to write to 'state', but the transition will be aborted if there
575  * are any wakeup events detected after 'wakeup_count' was written to.
576  */
577 
578 static ssize_t wakeup_count_show(struct kobject *kobj,
579 				struct kobj_attribute *attr,
580 				char *buf)
581 {
582 	unsigned int val;
583 
584 	return pm_get_wakeup_count(&val, true) ?
585 		sprintf(buf, "%u\n", val) : -EINTR;
586 }
587 
588 static ssize_t wakeup_count_store(struct kobject *kobj,
589 				struct kobj_attribute *attr,
590 				const char *buf, size_t n)
591 {
592 	unsigned int val;
593 	int error;
594 
595 	error = pm_autosleep_lock();
596 	if (error)
597 		return error;
598 
599 	if (pm_autosleep_state() > PM_SUSPEND_ON) {
600 		error = -EBUSY;
601 		goto out;
602 	}
603 
604 	error = -EINVAL;
605 	if (sscanf(buf, "%u", &val) == 1) {
606 		if (pm_save_wakeup_count(val))
607 			error = n;
608 		else
609 			pm_print_active_wakeup_sources();
610 	}
611 
612  out:
613 	pm_autosleep_unlock();
614 	return error;
615 }
616 
617 power_attr(wakeup_count);
618 
619 #ifdef CONFIG_PM_AUTOSLEEP
620 static ssize_t autosleep_show(struct kobject *kobj,
621 			      struct kobj_attribute *attr,
622 			      char *buf)
623 {
624 	suspend_state_t state = pm_autosleep_state();
625 
626 	if (state == PM_SUSPEND_ON)
627 		return sprintf(buf, "off\n");
628 
629 #ifdef CONFIG_SUSPEND
630 	if (state < PM_SUSPEND_MAX)
631 		return sprintf(buf, "%s\n", pm_states[state] ?
632 					pm_states[state] : "error");
633 #endif
634 #ifdef CONFIG_HIBERNATION
635 	return sprintf(buf, "disk\n");
636 #else
637 	return sprintf(buf, "error");
638 #endif
639 }
640 
641 static ssize_t autosleep_store(struct kobject *kobj,
642 			       struct kobj_attribute *attr,
643 			       const char *buf, size_t n)
644 {
645 	suspend_state_t state = decode_state(buf, n);
646 	int error;
647 
648 	if (state == PM_SUSPEND_ON
649 	    && strcmp(buf, "off") && strcmp(buf, "off\n"))
650 		return -EINVAL;
651 
652 	if (state == PM_SUSPEND_MEM)
653 		state = mem_sleep_current;
654 
655 	error = pm_autosleep_set_state(state);
656 	return error ? error : n;
657 }
658 
659 power_attr(autosleep);
660 #endif /* CONFIG_PM_AUTOSLEEP */
661 
662 #ifdef CONFIG_PM_WAKELOCKS
663 static ssize_t wake_lock_show(struct kobject *kobj,
664 			      struct kobj_attribute *attr,
665 			      char *buf)
666 {
667 	return pm_show_wakelocks(buf, true);
668 }
669 
670 static ssize_t wake_lock_store(struct kobject *kobj,
671 			       struct kobj_attribute *attr,
672 			       const char *buf, size_t n)
673 {
674 	int error = pm_wake_lock(buf);
675 	return error ? error : n;
676 }
677 
678 power_attr(wake_lock);
679 
680 static ssize_t wake_unlock_show(struct kobject *kobj,
681 				struct kobj_attribute *attr,
682 				char *buf)
683 {
684 	return pm_show_wakelocks(buf, false);
685 }
686 
687 static ssize_t wake_unlock_store(struct kobject *kobj,
688 				 struct kobj_attribute *attr,
689 				 const char *buf, size_t n)
690 {
691 	int error = pm_wake_unlock(buf);
692 	return error ? error : n;
693 }
694 
695 power_attr(wake_unlock);
696 
697 #endif /* CONFIG_PM_WAKELOCKS */
698 #endif /* CONFIG_PM_SLEEP */
699 
700 #ifdef CONFIG_PM_TRACE
701 int pm_trace_enabled;
702 
703 static ssize_t pm_trace_show(struct kobject *kobj, struct kobj_attribute *attr,
704 			     char *buf)
705 {
706 	return sprintf(buf, "%d\n", pm_trace_enabled);
707 }
708 
709 static ssize_t
710 pm_trace_store(struct kobject *kobj, struct kobj_attribute *attr,
711 	       const char *buf, size_t n)
712 {
713 	int val;
714 
715 	if (sscanf(buf, "%d", &val) == 1) {
716 		pm_trace_enabled = !!val;
717 		if (pm_trace_enabled) {
718 			pr_warn("PM: Enabling pm_trace changes system date and time during resume.\n"
719 				"PM: Correct system time has to be restored manually after resume.\n");
720 		}
721 		return n;
722 	}
723 	return -EINVAL;
724 }
725 
726 power_attr(pm_trace);
727 
728 static ssize_t pm_trace_dev_match_show(struct kobject *kobj,
729 				       struct kobj_attribute *attr,
730 				       char *buf)
731 {
732 	return show_trace_dev_match(buf, PAGE_SIZE);
733 }
734 
735 power_attr_ro(pm_trace_dev_match);
736 
737 #endif /* CONFIG_PM_TRACE */
738 
739 #ifdef CONFIG_FREEZER
740 static ssize_t pm_freeze_timeout_show(struct kobject *kobj,
741 				      struct kobj_attribute *attr, char *buf)
742 {
743 	return sprintf(buf, "%u\n", freeze_timeout_msecs);
744 }
745 
746 static ssize_t pm_freeze_timeout_store(struct kobject *kobj,
747 				       struct kobj_attribute *attr,
748 				       const char *buf, size_t n)
749 {
750 	unsigned long val;
751 
752 	if (kstrtoul(buf, 10, &val))
753 		return -EINVAL;
754 
755 	freeze_timeout_msecs = val;
756 	return n;
757 }
758 
759 power_attr(pm_freeze_timeout);
760 
761 #endif	/* CONFIG_FREEZER*/
762 
763 static struct attribute * g[] = {
764 	&state_attr.attr,
765 #ifdef CONFIG_PM_TRACE
766 	&pm_trace_attr.attr,
767 	&pm_trace_dev_match_attr.attr,
768 #endif
769 #ifdef CONFIG_PM_SLEEP
770 	&pm_async_attr.attr,
771 	&wakeup_count_attr.attr,
772 #ifdef CONFIG_SUSPEND
773 	&mem_sleep_attr.attr,
774 #endif
775 #ifdef CONFIG_PM_AUTOSLEEP
776 	&autosleep_attr.attr,
777 #endif
778 #ifdef CONFIG_PM_WAKELOCKS
779 	&wake_lock_attr.attr,
780 	&wake_unlock_attr.attr,
781 #endif
782 #ifdef CONFIG_PM_SLEEP_DEBUG
783 	&pm_test_attr.attr,
784 	&pm_print_times_attr.attr,
785 	&pm_wakeup_irq_attr.attr,
786 	&pm_debug_messages_attr.attr,
787 #endif
788 #endif
789 #ifdef CONFIG_FREEZER
790 	&pm_freeze_timeout_attr.attr,
791 #endif
792 	NULL,
793 };
794 
795 static const struct attribute_group attr_group = {
796 	.attrs = g,
797 };
798 
799 struct workqueue_struct *pm_wq;
800 EXPORT_SYMBOL_GPL(pm_wq);
801 
802 static int __init pm_start_workqueue(void)
803 {
804 	pm_wq = alloc_workqueue("pm", WQ_FREEZABLE, 0);
805 
806 	return pm_wq ? 0 : -ENOMEM;
807 }
808 
809 static int __init pm_init(void)
810 {
811 	int error = pm_start_workqueue();
812 	if (error)
813 		return error;
814 	hibernate_image_size_init();
815 	hibernate_reserved_size_init();
816 	pm_states_init();
817 	power_kobj = kobject_create_and_add("power", NULL);
818 	if (!power_kobj)
819 		return -ENOMEM;
820 	error = sysfs_create_group(power_kobj, &attr_group);
821 	if (error)
822 		return error;
823 	pm_print_times_init();
824 	return pm_autosleep_init();
825 }
826 
827 core_initcall(pm_init);
828