]> asedeno.scripts.mit.edu Git - linux.git/blob - drivers/base/power/main.c
Merge tag 'devicetree-fixes-for-5.4-2' of git://git.kernel.org/pub/scm/linux/kernel...
[linux.git] / drivers / base / power / main.c
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * drivers/base/power/main.c - Where the driver meets power management.
4  *
5  * Copyright (c) 2003 Patrick Mochel
6  * Copyright (c) 2003 Open Source Development Lab
7  *
8  * The driver model core calls device_pm_add() when a device is registered.
9  * This will initialize the embedded device_pm_info object in the device
10  * and add it to the list of power-controlled devices. sysfs entries for
11  * controlling device power management will also be added.
12  *
13  * A separate list is used for keeping track of power info, because the power
14  * domain dependencies may differ from the ancestral dependencies that the
15  * subsystem list maintains.
16  */
17
18 #define pr_fmt(fmt) "PM: " fmt
19
20 #include <linux/device.h>
21 #include <linux/export.h>
22 #include <linux/mutex.h>
23 #include <linux/pm.h>
24 #include <linux/pm_runtime.h>
25 #include <linux/pm-trace.h>
26 #include <linux/pm_wakeirq.h>
27 #include <linux/interrupt.h>
28 #include <linux/sched.h>
29 #include <linux/sched/debug.h>
30 #include <linux/async.h>
31 #include <linux/suspend.h>
32 #include <trace/events/power.h>
33 #include <linux/cpufreq.h>
34 #include <linux/cpuidle.h>
35 #include <linux/devfreq.h>
36 #include <linux/timer.h>
37
38 #include "../base.h"
39 #include "power.h"
40
41 typedef int (*pm_callback_t)(struct device *);
42
43 /*
44  * The entries in the dpm_list list are in a depth first order, simply
45  * because children are guaranteed to be discovered after parents, and
46  * are inserted at the back of the list on discovery.
47  *
48  * Since device_pm_add() may be called with a device lock held,
49  * we must never try to acquire a device lock while holding
50  * dpm_list_mutex.
51  */
52
53 LIST_HEAD(dpm_list);
54 static LIST_HEAD(dpm_prepared_list);
55 static LIST_HEAD(dpm_suspended_list);
56 static LIST_HEAD(dpm_late_early_list);
57 static LIST_HEAD(dpm_noirq_list);
58
59 struct suspend_stats suspend_stats;
60 static DEFINE_MUTEX(dpm_list_mtx);
61 static pm_message_t pm_transition;
62
63 static int async_error;
64
65 static const char *pm_verb(int event)
66 {
67         switch (event) {
68         case PM_EVENT_SUSPEND:
69                 return "suspend";
70         case PM_EVENT_RESUME:
71                 return "resume";
72         case PM_EVENT_FREEZE:
73                 return "freeze";
74         case PM_EVENT_QUIESCE:
75                 return "quiesce";
76         case PM_EVENT_HIBERNATE:
77                 return "hibernate";
78         case PM_EVENT_THAW:
79                 return "thaw";
80         case PM_EVENT_RESTORE:
81                 return "restore";
82         case PM_EVENT_RECOVER:
83                 return "recover";
84         default:
85                 return "(unknown PM event)";
86         }
87 }
88
89 /**
90  * device_pm_sleep_init - Initialize system suspend-related device fields.
91  * @dev: Device object being initialized.
92  */
93 void device_pm_sleep_init(struct device *dev)
94 {
95         dev->power.is_prepared = false;
96         dev->power.is_suspended = false;
97         dev->power.is_noirq_suspended = false;
98         dev->power.is_late_suspended = false;
99         init_completion(&dev->power.completion);
100         complete_all(&dev->power.completion);
101         dev->power.wakeup = NULL;
102         INIT_LIST_HEAD(&dev->power.entry);
103 }
104
105 /**
106  * device_pm_lock - Lock the list of active devices used by the PM core.
107  */
108 void device_pm_lock(void)
109 {
110         mutex_lock(&dpm_list_mtx);
111 }
112
113 /**
114  * device_pm_unlock - Unlock the list of active devices used by the PM core.
115  */
116 void device_pm_unlock(void)
117 {
118         mutex_unlock(&dpm_list_mtx);
119 }
120
121 /**
122  * device_pm_add - Add a device to the PM core's list of active devices.
123  * @dev: Device to add to the list.
124  */
125 void device_pm_add(struct device *dev)
126 {
127         /* Skip PM setup/initialization. */
128         if (device_pm_not_required(dev))
129                 return;
130
131         pr_debug("Adding info for %s:%s\n",
132                  dev->bus ? dev->bus->name : "No Bus", dev_name(dev));
133         device_pm_check_callbacks(dev);
134         mutex_lock(&dpm_list_mtx);
135         if (dev->parent && dev->parent->power.is_prepared)
136                 dev_warn(dev, "parent %s should not be sleeping\n",
137                         dev_name(dev->parent));
138         list_add_tail(&dev->power.entry, &dpm_list);
139         dev->power.in_dpm_list = true;
140         mutex_unlock(&dpm_list_mtx);
141 }
142
143 /**
144  * device_pm_remove - Remove a device from the PM core's list of active devices.
145  * @dev: Device to be removed from the list.
146  */
147 void device_pm_remove(struct device *dev)
148 {
149         if (device_pm_not_required(dev))
150                 return;
151
152         pr_debug("Removing info for %s:%s\n",
153                  dev->bus ? dev->bus->name : "No Bus", dev_name(dev));
154         complete_all(&dev->power.completion);
155         mutex_lock(&dpm_list_mtx);
156         list_del_init(&dev->power.entry);
157         dev->power.in_dpm_list = false;
158         mutex_unlock(&dpm_list_mtx);
159         device_wakeup_disable(dev);
160         pm_runtime_remove(dev);
161         device_pm_check_callbacks(dev);
162 }
163
164 /**
165  * device_pm_move_before - Move device in the PM core's list of active devices.
166  * @deva: Device to move in dpm_list.
167  * @devb: Device @deva should come before.
168  */
169 void device_pm_move_before(struct device *deva, struct device *devb)
170 {
171         pr_debug("Moving %s:%s before %s:%s\n",
172                  deva->bus ? deva->bus->name : "No Bus", dev_name(deva),
173                  devb->bus ? devb->bus->name : "No Bus", dev_name(devb));
174         /* Delete deva from dpm_list and reinsert before devb. */
175         list_move_tail(&deva->power.entry, &devb->power.entry);
176 }
177
178 /**
179  * device_pm_move_after - Move device in the PM core's list of active devices.
180  * @deva: Device to move in dpm_list.
181  * @devb: Device @deva should come after.
182  */
183 void device_pm_move_after(struct device *deva, struct device *devb)
184 {
185         pr_debug("Moving %s:%s after %s:%s\n",
186                  deva->bus ? deva->bus->name : "No Bus", dev_name(deva),
187                  devb->bus ? devb->bus->name : "No Bus", dev_name(devb));
188         /* Delete deva from dpm_list and reinsert after devb. */
189         list_move(&deva->power.entry, &devb->power.entry);
190 }
191
192 /**
193  * device_pm_move_last - Move device to end of the PM core's list of devices.
194  * @dev: Device to move in dpm_list.
195  */
196 void device_pm_move_last(struct device *dev)
197 {
198         pr_debug("Moving %s:%s to end of list\n",
199                  dev->bus ? dev->bus->name : "No Bus", dev_name(dev));
200         list_move_tail(&dev->power.entry, &dpm_list);
201 }
202
203 static ktime_t initcall_debug_start(struct device *dev, void *cb)
204 {
205         if (!pm_print_times_enabled)
206                 return 0;
207
208         dev_info(dev, "calling %pS @ %i, parent: %s\n", cb,
209                  task_pid_nr(current),
210                  dev->parent ? dev_name(dev->parent) : "none");
211         return ktime_get();
212 }
213
214 static void initcall_debug_report(struct device *dev, ktime_t calltime,
215                                   void *cb, int error)
216 {
217         ktime_t rettime;
218         s64 nsecs;
219
220         if (!pm_print_times_enabled)
221                 return;
222
223         rettime = ktime_get();
224         nsecs = (s64) ktime_to_ns(ktime_sub(rettime, calltime));
225
226         dev_info(dev, "%pS returned %d after %Ld usecs\n", cb, error,
227                  (unsigned long long)nsecs >> 10);
228 }
229
230 /**
231  * dpm_wait - Wait for a PM operation to complete.
232  * @dev: Device to wait for.
233  * @async: If unset, wait only if the device's power.async_suspend flag is set.
234  */
235 static void dpm_wait(struct device *dev, bool async)
236 {
237         if (!dev)
238                 return;
239
240         if (async || (pm_async_enabled && dev->power.async_suspend))
241                 wait_for_completion(&dev->power.completion);
242 }
243
244 static int dpm_wait_fn(struct device *dev, void *async_ptr)
245 {
246         dpm_wait(dev, *((bool *)async_ptr));
247         return 0;
248 }
249
250 static void dpm_wait_for_children(struct device *dev, bool async)
251 {
252        device_for_each_child(dev, &async, dpm_wait_fn);
253 }
254
255 static void dpm_wait_for_suppliers(struct device *dev, bool async)
256 {
257         struct device_link *link;
258         int idx;
259
260         idx = device_links_read_lock();
261
262         /*
263          * If the supplier goes away right after we've checked the link to it,
264          * we'll wait for its completion to change the state, but that's fine,
265          * because the only things that will block as a result are the SRCU
266          * callbacks freeing the link objects for the links in the list we're
267          * walking.
268          */
269         list_for_each_entry_rcu(link, &dev->links.suppliers, c_node)
270                 if (READ_ONCE(link->status) != DL_STATE_DORMANT)
271                         dpm_wait(link->supplier, async);
272
273         device_links_read_unlock(idx);
274 }
275
276 static void dpm_wait_for_superior(struct device *dev, bool async)
277 {
278         dpm_wait(dev->parent, async);
279         dpm_wait_for_suppliers(dev, async);
280 }
281
282 static void dpm_wait_for_consumers(struct device *dev, bool async)
283 {
284         struct device_link *link;
285         int idx;
286
287         idx = device_links_read_lock();
288
289         /*
290          * The status of a device link can only be changed from "dormant" by a
291          * probe, but that cannot happen during system suspend/resume.  In
292          * theory it can change to "dormant" at that time, but then it is
293          * reasonable to wait for the target device anyway (eg. if it goes
294          * away, it's better to wait for it to go away completely and then
295          * continue instead of trying to continue in parallel with its
296          * unregistration).
297          */
298         list_for_each_entry_rcu(link, &dev->links.consumers, s_node)
299                 if (READ_ONCE(link->status) != DL_STATE_DORMANT)
300                         dpm_wait(link->consumer, async);
301
302         device_links_read_unlock(idx);
303 }
304
305 static void dpm_wait_for_subordinate(struct device *dev, bool async)
306 {
307         dpm_wait_for_children(dev, async);
308         dpm_wait_for_consumers(dev, async);
309 }
310
311 /**
312  * pm_op - Return the PM operation appropriate for given PM event.
313  * @ops: PM operations to choose from.
314  * @state: PM transition of the system being carried out.
315  */
316 static pm_callback_t pm_op(const struct dev_pm_ops *ops, pm_message_t state)
317 {
318         switch (state.event) {
319 #ifdef CONFIG_SUSPEND
320         case PM_EVENT_SUSPEND:
321                 return ops->suspend;
322         case PM_EVENT_RESUME:
323                 return ops->resume;
324 #endif /* CONFIG_SUSPEND */
325 #ifdef CONFIG_HIBERNATE_CALLBACKS
326         case PM_EVENT_FREEZE:
327         case PM_EVENT_QUIESCE:
328                 return ops->freeze;
329         case PM_EVENT_HIBERNATE:
330                 return ops->poweroff;
331         case PM_EVENT_THAW:
332         case PM_EVENT_RECOVER:
333                 return ops->thaw;
334                 break;
335         case PM_EVENT_RESTORE:
336                 return ops->restore;
337 #endif /* CONFIG_HIBERNATE_CALLBACKS */
338         }
339
340         return NULL;
341 }
342
343 /**
344  * pm_late_early_op - Return the PM operation appropriate for given PM event.
345  * @ops: PM operations to choose from.
346  * @state: PM transition of the system being carried out.
347  *
348  * Runtime PM is disabled for @dev while this function is being executed.
349  */
350 static pm_callback_t pm_late_early_op(const struct dev_pm_ops *ops,
351                                       pm_message_t state)
352 {
353         switch (state.event) {
354 #ifdef CONFIG_SUSPEND
355         case PM_EVENT_SUSPEND:
356                 return ops->suspend_late;
357         case PM_EVENT_RESUME:
358                 return ops->resume_early;
359 #endif /* CONFIG_SUSPEND */
360 #ifdef CONFIG_HIBERNATE_CALLBACKS
361         case PM_EVENT_FREEZE:
362         case PM_EVENT_QUIESCE:
363                 return ops->freeze_late;
364         case PM_EVENT_HIBERNATE:
365                 return ops->poweroff_late;
366         case PM_EVENT_THAW:
367         case PM_EVENT_RECOVER:
368                 return ops->thaw_early;
369         case PM_EVENT_RESTORE:
370                 return ops->restore_early;
371 #endif /* CONFIG_HIBERNATE_CALLBACKS */
372         }
373
374         return NULL;
375 }
376
377 /**
378  * pm_noirq_op - Return the PM operation appropriate for given PM event.
379  * @ops: PM operations to choose from.
380  * @state: PM transition of the system being carried out.
381  *
382  * The driver of @dev will not receive interrupts while this function is being
383  * executed.
384  */
385 static pm_callback_t pm_noirq_op(const struct dev_pm_ops *ops, pm_message_t state)
386 {
387         switch (state.event) {
388 #ifdef CONFIG_SUSPEND
389         case PM_EVENT_SUSPEND:
390                 return ops->suspend_noirq;
391         case PM_EVENT_RESUME:
392                 return ops->resume_noirq;
393 #endif /* CONFIG_SUSPEND */
394 #ifdef CONFIG_HIBERNATE_CALLBACKS
395         case PM_EVENT_FREEZE:
396         case PM_EVENT_QUIESCE:
397                 return ops->freeze_noirq;
398         case PM_EVENT_HIBERNATE:
399                 return ops->poweroff_noirq;
400         case PM_EVENT_THAW:
401         case PM_EVENT_RECOVER:
402                 return ops->thaw_noirq;
403         case PM_EVENT_RESTORE:
404                 return ops->restore_noirq;
405 #endif /* CONFIG_HIBERNATE_CALLBACKS */
406         }
407
408         return NULL;
409 }
410
411 static void pm_dev_dbg(struct device *dev, pm_message_t state, const char *info)
412 {
413         dev_dbg(dev, "%s%s%s\n", info, pm_verb(state.event),
414                 ((state.event & PM_EVENT_SLEEP) && device_may_wakeup(dev)) ?
415                 ", may wakeup" : "");
416 }
417
418 static void pm_dev_err(struct device *dev, pm_message_t state, const char *info,
419                         int error)
420 {
421         pr_err("Device %s failed to %s%s: error %d\n",
422                dev_name(dev), pm_verb(state.event), info, error);
423 }
424
425 static void dpm_show_time(ktime_t starttime, pm_message_t state, int error,
426                           const char *info)
427 {
428         ktime_t calltime;
429         u64 usecs64;
430         int usecs;
431
432         calltime = ktime_get();
433         usecs64 = ktime_to_ns(ktime_sub(calltime, starttime));
434         do_div(usecs64, NSEC_PER_USEC);
435         usecs = usecs64;
436         if (usecs == 0)
437                 usecs = 1;
438
439         pm_pr_dbg("%s%s%s of devices %s after %ld.%03ld msecs\n",
440                   info ?: "", info ? " " : "", pm_verb(state.event),
441                   error ? "aborted" : "complete",
442                   usecs / USEC_PER_MSEC, usecs % USEC_PER_MSEC);
443 }
444
445 static int dpm_run_callback(pm_callback_t cb, struct device *dev,
446                             pm_message_t state, const char *info)
447 {
448         ktime_t calltime;
449         int error;
450
451         if (!cb)
452                 return 0;
453
454         calltime = initcall_debug_start(dev, cb);
455
456         pm_dev_dbg(dev, state, info);
457         trace_device_pm_callback_start(dev, info, state.event);
458         error = cb(dev);
459         trace_device_pm_callback_end(dev, error);
460         suspend_report_result(cb, error);
461
462         initcall_debug_report(dev, calltime, cb, error);
463
464         return error;
465 }
466
467 #ifdef CONFIG_DPM_WATCHDOG
468 struct dpm_watchdog {
469         struct device           *dev;
470         struct task_struct      *tsk;
471         struct timer_list       timer;
472 };
473
474 #define DECLARE_DPM_WATCHDOG_ON_STACK(wd) \
475         struct dpm_watchdog wd
476
477 /**
478  * dpm_watchdog_handler - Driver suspend / resume watchdog handler.
479  * @t: The timer that PM watchdog depends on.
480  *
481  * Called when a driver has timed out suspending or resuming.
482  * There's not much we can do here to recover so panic() to
483  * capture a crash-dump in pstore.
484  */
485 static void dpm_watchdog_handler(struct timer_list *t)
486 {
487         struct dpm_watchdog *wd = from_timer(wd, t, timer);
488
489         dev_emerg(wd->dev, "**** DPM device timeout ****\n");
490         show_stack(wd->tsk, NULL);
491         panic("%s %s: unrecoverable failure\n",
492                 dev_driver_string(wd->dev), dev_name(wd->dev));
493 }
494
495 /**
496  * dpm_watchdog_set - Enable pm watchdog for given device.
497  * @wd: Watchdog. Must be allocated on the stack.
498  * @dev: Device to handle.
499  */
500 static void dpm_watchdog_set(struct dpm_watchdog *wd, struct device *dev)
501 {
502         struct timer_list *timer = &wd->timer;
503
504         wd->dev = dev;
505         wd->tsk = current;
506
507         timer_setup_on_stack(timer, dpm_watchdog_handler, 0);
508         /* use same timeout value for both suspend and resume */
509         timer->expires = jiffies + HZ * CONFIG_DPM_WATCHDOG_TIMEOUT;
510         add_timer(timer);
511 }
512
513 /**
514  * dpm_watchdog_clear - Disable suspend/resume watchdog.
515  * @wd: Watchdog to disable.
516  */
517 static void dpm_watchdog_clear(struct dpm_watchdog *wd)
518 {
519         struct timer_list *timer = &wd->timer;
520
521         del_timer_sync(timer);
522         destroy_timer_on_stack(timer);
523 }
524 #else
525 #define DECLARE_DPM_WATCHDOG_ON_STACK(wd)
526 #define dpm_watchdog_set(x, y)
527 #define dpm_watchdog_clear(x)
528 #endif
529
530 /*------------------------- Resume routines -------------------------*/
531
532 /**
533  * suspend_event - Return a "suspend" message for given "resume" one.
534  * @resume_msg: PM message representing a system-wide resume transition.
535  */
536 static pm_message_t suspend_event(pm_message_t resume_msg)
537 {
538         switch (resume_msg.event) {
539         case PM_EVENT_RESUME:
540                 return PMSG_SUSPEND;
541         case PM_EVENT_THAW:
542         case PM_EVENT_RESTORE:
543                 return PMSG_FREEZE;
544         case PM_EVENT_RECOVER:
545                 return PMSG_HIBERNATE;
546         }
547         return PMSG_ON;
548 }
549
550 /**
551  * dev_pm_may_skip_resume - System-wide device resume optimization check.
552  * @dev: Target device.
553  *
554  * Checks whether or not the device may be left in suspend after a system-wide
555  * transition to the working state.
556  */
557 bool dev_pm_may_skip_resume(struct device *dev)
558 {
559         return !dev->power.must_resume && pm_transition.event != PM_EVENT_RESTORE;
560 }
561
562 static pm_callback_t dpm_subsys_resume_noirq_cb(struct device *dev,
563                                                 pm_message_t state,
564                                                 const char **info_p)
565 {
566         pm_callback_t callback;
567         const char *info;
568
569         if (dev->pm_domain) {
570                 info = "noirq power domain ";
571                 callback = pm_noirq_op(&dev->pm_domain->ops, state);
572         } else if (dev->type && dev->type->pm) {
573                 info = "noirq type ";
574                 callback = pm_noirq_op(dev->type->pm, state);
575         } else if (dev->class && dev->class->pm) {
576                 info = "noirq class ";
577                 callback = pm_noirq_op(dev->class->pm, state);
578         } else if (dev->bus && dev->bus->pm) {
579                 info = "noirq bus ";
580                 callback = pm_noirq_op(dev->bus->pm, state);
581         } else {
582                 return NULL;
583         }
584
585         if (info_p)
586                 *info_p = info;
587
588         return callback;
589 }
590
591 static pm_callback_t dpm_subsys_suspend_noirq_cb(struct device *dev,
592                                                  pm_message_t state,
593                                                  const char **info_p);
594
595 static pm_callback_t dpm_subsys_suspend_late_cb(struct device *dev,
596                                                 pm_message_t state,
597                                                 const char **info_p);
598
599 /**
600  * device_resume_noirq - Execute a "noirq resume" callback for given device.
601  * @dev: Device to handle.
602  * @state: PM transition of the system being carried out.
603  * @async: If true, the device is being resumed asynchronously.
604  *
605  * The driver of @dev will not receive interrupts while this function is being
606  * executed.
607  */
608 static int device_resume_noirq(struct device *dev, pm_message_t state, bool async)
609 {
610         pm_callback_t callback;
611         const char *info;
612         bool skip_resume;
613         int error = 0;
614
615         TRACE_DEVICE(dev);
616         TRACE_RESUME(0);
617
618         if (dev->power.syscore || dev->power.direct_complete)
619                 goto Out;
620
621         if (!dev->power.is_noirq_suspended)
622                 goto Out;
623
624         dpm_wait_for_superior(dev, async);
625
626         skip_resume = dev_pm_may_skip_resume(dev);
627
628         callback = dpm_subsys_resume_noirq_cb(dev, state, &info);
629         if (callback)
630                 goto Run;
631
632         if (skip_resume)
633                 goto Skip;
634
635         if (dev_pm_smart_suspend_and_suspended(dev)) {
636                 pm_message_t suspend_msg = suspend_event(state);
637
638                 /*
639                  * If "freeze" callbacks have been skipped during a transition
640                  * related to hibernation, the subsequent "thaw" callbacks must
641                  * be skipped too or bad things may happen.  Otherwise, resume
642                  * callbacks are going to be run for the device, so its runtime
643                  * PM status must be changed to reflect the new state after the
644                  * transition under way.
645                  */
646                 if (!dpm_subsys_suspend_late_cb(dev, suspend_msg, NULL) &&
647                     !dpm_subsys_suspend_noirq_cb(dev, suspend_msg, NULL)) {
648                         if (state.event == PM_EVENT_THAW) {
649                                 skip_resume = true;
650                                 goto Skip;
651                         } else {
652                                 pm_runtime_set_active(dev);
653                         }
654                 }
655         }
656
657         if (dev->driver && dev->driver->pm) {
658                 info = "noirq driver ";
659                 callback = pm_noirq_op(dev->driver->pm, state);
660         }
661
662 Run:
663         error = dpm_run_callback(callback, dev, state, info);
664
665 Skip:
666         dev->power.is_noirq_suspended = false;
667
668         if (skip_resume) {
669                 /* Make the next phases of resume skip the device. */
670                 dev->power.is_late_suspended = false;
671                 dev->power.is_suspended = false;
672                 /*
673                  * The device is going to be left in suspend, but it might not
674                  * have been in runtime suspend before the system suspended, so
675                  * its runtime PM status needs to be updated to avoid confusing
676                  * the runtime PM framework when runtime PM is enabled for the
677                  * device again.
678                  */
679                 pm_runtime_set_suspended(dev);
680         }
681
682 Out:
683         complete_all(&dev->power.completion);
684         TRACE_RESUME(error);
685         return error;
686 }
687
688 static bool is_async(struct device *dev)
689 {
690         return dev->power.async_suspend && pm_async_enabled
691                 && !pm_trace_is_enabled();
692 }
693
694 static bool dpm_async_fn(struct device *dev, async_func_t func)
695 {
696         reinit_completion(&dev->power.completion);
697
698         if (is_async(dev)) {
699                 get_device(dev);
700                 async_schedule(func, dev);
701                 return true;
702         }
703
704         return false;
705 }
706
707 static void async_resume_noirq(void *data, async_cookie_t cookie)
708 {
709         struct device *dev = (struct device *)data;
710         int error;
711
712         error = device_resume_noirq(dev, pm_transition, true);
713         if (error)
714                 pm_dev_err(dev, pm_transition, " async", error);
715
716         put_device(dev);
717 }
718
719 static void dpm_noirq_resume_devices(pm_message_t state)
720 {
721         struct device *dev;
722         ktime_t starttime = ktime_get();
723
724         trace_suspend_resume(TPS("dpm_resume_noirq"), state.event, true);
725         mutex_lock(&dpm_list_mtx);
726         pm_transition = state;
727
728         /*
729          * Advanced the async threads upfront,
730          * in case the starting of async threads is
731          * delayed by non-async resuming devices.
732          */
733         list_for_each_entry(dev, &dpm_noirq_list, power.entry)
734                 dpm_async_fn(dev, async_resume_noirq);
735
736         while (!list_empty(&dpm_noirq_list)) {
737                 dev = to_device(dpm_noirq_list.next);
738                 get_device(dev);
739                 list_move_tail(&dev->power.entry, &dpm_late_early_list);
740                 mutex_unlock(&dpm_list_mtx);
741
742                 if (!is_async(dev)) {
743                         int error;
744
745                         error = device_resume_noirq(dev, state, false);
746                         if (error) {
747                                 suspend_stats.failed_resume_noirq++;
748                                 dpm_save_failed_step(SUSPEND_RESUME_NOIRQ);
749                                 dpm_save_failed_dev(dev_name(dev));
750                                 pm_dev_err(dev, state, " noirq", error);
751                         }
752                 }
753
754                 mutex_lock(&dpm_list_mtx);
755                 put_device(dev);
756         }
757         mutex_unlock(&dpm_list_mtx);
758         async_synchronize_full();
759         dpm_show_time(starttime, state, 0, "noirq");
760         trace_suspend_resume(TPS("dpm_resume_noirq"), state.event, false);
761 }
762
763 /**
764  * dpm_resume_noirq - Execute "noirq resume" callbacks for all devices.
765  * @state: PM transition of the system being carried out.
766  *
767  * Invoke the "noirq" resume callbacks for all devices in dpm_noirq_list and
768  * allow device drivers' interrupt handlers to be called.
769  */
770 void dpm_resume_noirq(pm_message_t state)
771 {
772         dpm_noirq_resume_devices(state);
773
774         resume_device_irqs();
775         device_wakeup_disarm_wake_irqs();
776
777         cpuidle_resume();
778 }
779
780 static pm_callback_t dpm_subsys_resume_early_cb(struct device *dev,
781                                                 pm_message_t state,
782                                                 const char **info_p)
783 {
784         pm_callback_t callback;
785         const char *info;
786
787         if (dev->pm_domain) {
788                 info = "early power domain ";
789                 callback = pm_late_early_op(&dev->pm_domain->ops, state);
790         } else if (dev->type && dev->type->pm) {
791                 info = "early type ";
792                 callback = pm_late_early_op(dev->type->pm, state);
793         } else if (dev->class && dev->class->pm) {
794                 info = "early class ";
795                 callback = pm_late_early_op(dev->class->pm, state);
796         } else if (dev->bus && dev->bus->pm) {
797                 info = "early bus ";
798                 callback = pm_late_early_op(dev->bus->pm, state);
799         } else {
800                 return NULL;
801         }
802
803         if (info_p)
804                 *info_p = info;
805
806         return callback;
807 }
808
809 /**
810  * device_resume_early - Execute an "early resume" callback for given device.
811  * @dev: Device to handle.
812  * @state: PM transition of the system being carried out.
813  * @async: If true, the device is being resumed asynchronously.
814  *
815  * Runtime PM is disabled for @dev while this function is being executed.
816  */
817 static int device_resume_early(struct device *dev, pm_message_t state, bool async)
818 {
819         pm_callback_t callback;
820         const char *info;
821         int error = 0;
822
823         TRACE_DEVICE(dev);
824         TRACE_RESUME(0);
825
826         if (dev->power.syscore || dev->power.direct_complete)
827                 goto Out;
828
829         if (!dev->power.is_late_suspended)
830                 goto Out;
831
832         dpm_wait_for_superior(dev, async);
833
834         callback = dpm_subsys_resume_early_cb(dev, state, &info);
835
836         if (!callback && dev->driver && dev->driver->pm) {
837                 info = "early driver ";
838                 callback = pm_late_early_op(dev->driver->pm, state);
839         }
840
841         error = dpm_run_callback(callback, dev, state, info);
842         dev->power.is_late_suspended = false;
843
844  Out:
845         TRACE_RESUME(error);
846
847         pm_runtime_enable(dev);
848         complete_all(&dev->power.completion);
849         return error;
850 }
851
852 static void async_resume_early(void *data, async_cookie_t cookie)
853 {
854         struct device *dev = (struct device *)data;
855         int error;
856
857         error = device_resume_early(dev, pm_transition, true);
858         if (error)
859                 pm_dev_err(dev, pm_transition, " async", error);
860
861         put_device(dev);
862 }
863
864 /**
865  * dpm_resume_early - Execute "early resume" callbacks for all devices.
866  * @state: PM transition of the system being carried out.
867  */
868 void dpm_resume_early(pm_message_t state)
869 {
870         struct device *dev;
871         ktime_t starttime = ktime_get();
872
873         trace_suspend_resume(TPS("dpm_resume_early"), state.event, true);
874         mutex_lock(&dpm_list_mtx);
875         pm_transition = state;
876
877         /*
878          * Advanced the async threads upfront,
879          * in case the starting of async threads is
880          * delayed by non-async resuming devices.
881          */
882         list_for_each_entry(dev, &dpm_late_early_list, power.entry)
883                 dpm_async_fn(dev, async_resume_early);
884
885         while (!list_empty(&dpm_late_early_list)) {
886                 dev = to_device(dpm_late_early_list.next);
887                 get_device(dev);
888                 list_move_tail(&dev->power.entry, &dpm_suspended_list);
889                 mutex_unlock(&dpm_list_mtx);
890
891                 if (!is_async(dev)) {
892                         int error;
893
894                         error = device_resume_early(dev, state, false);
895                         if (error) {
896                                 suspend_stats.failed_resume_early++;
897                                 dpm_save_failed_step(SUSPEND_RESUME_EARLY);
898                                 dpm_save_failed_dev(dev_name(dev));
899                                 pm_dev_err(dev, state, " early", error);
900                         }
901                 }
902                 mutex_lock(&dpm_list_mtx);
903                 put_device(dev);
904         }
905         mutex_unlock(&dpm_list_mtx);
906         async_synchronize_full();
907         dpm_show_time(starttime, state, 0, "early");
908         trace_suspend_resume(TPS("dpm_resume_early"), state.event, false);
909 }
910
911 /**
912  * dpm_resume_start - Execute "noirq" and "early" device callbacks.
913  * @state: PM transition of the system being carried out.
914  */
915 void dpm_resume_start(pm_message_t state)
916 {
917         dpm_resume_noirq(state);
918         dpm_resume_early(state);
919 }
920 EXPORT_SYMBOL_GPL(dpm_resume_start);
921
922 /**
923  * device_resume - Execute "resume" callbacks for given device.
924  * @dev: Device to handle.
925  * @state: PM transition of the system being carried out.
926  * @async: If true, the device is being resumed asynchronously.
927  */
928 static int device_resume(struct device *dev, pm_message_t state, bool async)
929 {
930         pm_callback_t callback = NULL;
931         const char *info = NULL;
932         int error = 0;
933         DECLARE_DPM_WATCHDOG_ON_STACK(wd);
934
935         TRACE_DEVICE(dev);
936         TRACE_RESUME(0);
937
938         if (dev->power.syscore)
939                 goto Complete;
940
941         if (dev->power.direct_complete) {
942                 /* Match the pm_runtime_disable() in __device_suspend(). */
943                 pm_runtime_enable(dev);
944                 goto Complete;
945         }
946
947         dpm_wait_for_superior(dev, async);
948         dpm_watchdog_set(&wd, dev);
949         device_lock(dev);
950
951         /*
952          * This is a fib.  But we'll allow new children to be added below
953          * a resumed device, even if the device hasn't been completed yet.
954          */
955         dev->power.is_prepared = false;
956
957         if (!dev->power.is_suspended)
958                 goto Unlock;
959
960         if (dev->pm_domain) {
961                 info = "power domain ";
962                 callback = pm_op(&dev->pm_domain->ops, state);
963                 goto Driver;
964         }
965
966         if (dev->type && dev->type->pm) {
967                 info = "type ";
968                 callback = pm_op(dev->type->pm, state);
969                 goto Driver;
970         }
971
972         if (dev->class && dev->class->pm) {
973                 info = "class ";
974                 callback = pm_op(dev->class->pm, state);
975                 goto Driver;
976         }
977
978         if (dev->bus) {
979                 if (dev->bus->pm) {
980                         info = "bus ";
981                         callback = pm_op(dev->bus->pm, state);
982                 } else if (dev->bus->resume) {
983                         info = "legacy bus ";
984                         callback = dev->bus->resume;
985                         goto End;
986                 }
987         }
988
989  Driver:
990         if (!callback && dev->driver && dev->driver->pm) {
991                 info = "driver ";
992                 callback = pm_op(dev->driver->pm, state);
993         }
994
995  End:
996         error = dpm_run_callback(callback, dev, state, info);
997         dev->power.is_suspended = false;
998
999  Unlock:
1000         device_unlock(dev);
1001         dpm_watchdog_clear(&wd);
1002
1003  Complete:
1004         complete_all(&dev->power.completion);
1005
1006         TRACE_RESUME(error);
1007
1008         return error;
1009 }
1010
1011 static void async_resume(void *data, async_cookie_t cookie)
1012 {
1013         struct device *dev = (struct device *)data;
1014         int error;
1015
1016         error = device_resume(dev, pm_transition, true);
1017         if (error)
1018                 pm_dev_err(dev, pm_transition, " async", error);
1019         put_device(dev);
1020 }
1021
1022 /**
1023  * dpm_resume - Execute "resume" callbacks for non-sysdev devices.
1024  * @state: PM transition of the system being carried out.
1025  *
1026  * Execute the appropriate "resume" callback for all devices whose status
1027  * indicates that they are suspended.
1028  */
1029 void dpm_resume(pm_message_t state)
1030 {
1031         struct device *dev;
1032         ktime_t starttime = ktime_get();
1033
1034         trace_suspend_resume(TPS("dpm_resume"), state.event, true);
1035         might_sleep();
1036
1037         mutex_lock(&dpm_list_mtx);
1038         pm_transition = state;
1039         async_error = 0;
1040
1041         list_for_each_entry(dev, &dpm_suspended_list, power.entry)
1042                 dpm_async_fn(dev, async_resume);
1043
1044         while (!list_empty(&dpm_suspended_list)) {
1045                 dev = to_device(dpm_suspended_list.next);
1046                 get_device(dev);
1047                 if (!is_async(dev)) {
1048                         int error;
1049
1050                         mutex_unlock(&dpm_list_mtx);
1051
1052                         error = device_resume(dev, state, false);
1053                         if (error) {
1054                                 suspend_stats.failed_resume++;
1055                                 dpm_save_failed_step(SUSPEND_RESUME);
1056                                 dpm_save_failed_dev(dev_name(dev));
1057                                 pm_dev_err(dev, state, "", error);
1058                         }
1059
1060                         mutex_lock(&dpm_list_mtx);
1061                 }
1062                 if (!list_empty(&dev->power.entry))
1063                         list_move_tail(&dev->power.entry, &dpm_prepared_list);
1064                 put_device(dev);
1065         }
1066         mutex_unlock(&dpm_list_mtx);
1067         async_synchronize_full();
1068         dpm_show_time(starttime, state, 0, NULL);
1069
1070         cpufreq_resume();
1071         devfreq_resume();
1072         trace_suspend_resume(TPS("dpm_resume"), state.event, false);
1073 }
1074
1075 /**
1076  * device_complete - Complete a PM transition for given device.
1077  * @dev: Device to handle.
1078  * @state: PM transition of the system being carried out.
1079  */
1080 static void device_complete(struct device *dev, pm_message_t state)
1081 {
1082         void (*callback)(struct device *) = NULL;
1083         const char *info = NULL;
1084
1085         if (dev->power.syscore)
1086                 return;
1087
1088         device_lock(dev);
1089
1090         if (dev->pm_domain) {
1091                 info = "completing power domain ";
1092                 callback = dev->pm_domain->ops.complete;
1093         } else if (dev->type && dev->type->pm) {
1094                 info = "completing type ";
1095                 callback = dev->type->pm->complete;
1096         } else if (dev->class && dev->class->pm) {
1097                 info = "completing class ";
1098                 callback = dev->class->pm->complete;
1099         } else if (dev->bus && dev->bus->pm) {
1100                 info = "completing bus ";
1101                 callback = dev->bus->pm->complete;
1102         }
1103
1104         if (!callback && dev->driver && dev->driver->pm) {
1105                 info = "completing driver ";
1106                 callback = dev->driver->pm->complete;
1107         }
1108
1109         if (callback) {
1110                 pm_dev_dbg(dev, state, info);
1111                 callback(dev);
1112         }
1113
1114         device_unlock(dev);
1115
1116         pm_runtime_put(dev);
1117 }
1118
1119 /**
1120  * dpm_complete - Complete a PM transition for all non-sysdev devices.
1121  * @state: PM transition of the system being carried out.
1122  *
1123  * Execute the ->complete() callbacks for all devices whose PM status is not
1124  * DPM_ON (this allows new devices to be registered).
1125  */
1126 void dpm_complete(pm_message_t state)
1127 {
1128         struct list_head list;
1129
1130         trace_suspend_resume(TPS("dpm_complete"), state.event, true);
1131         might_sleep();
1132
1133         INIT_LIST_HEAD(&list);
1134         mutex_lock(&dpm_list_mtx);
1135         while (!list_empty(&dpm_prepared_list)) {
1136                 struct device *dev = to_device(dpm_prepared_list.prev);
1137
1138                 get_device(dev);
1139                 dev->power.is_prepared = false;
1140                 list_move(&dev->power.entry, &list);
1141                 mutex_unlock(&dpm_list_mtx);
1142
1143                 trace_device_pm_callback_start(dev, "", state.event);
1144                 device_complete(dev, state);
1145                 trace_device_pm_callback_end(dev, 0);
1146
1147                 mutex_lock(&dpm_list_mtx);
1148                 put_device(dev);
1149         }
1150         list_splice(&list, &dpm_list);
1151         mutex_unlock(&dpm_list_mtx);
1152
1153         /* Allow device probing and trigger re-probing of deferred devices */
1154         device_unblock_probing();
1155         trace_suspend_resume(TPS("dpm_complete"), state.event, false);
1156 }
1157
1158 /**
1159  * dpm_resume_end - Execute "resume" callbacks and complete system transition.
1160  * @state: PM transition of the system being carried out.
1161  *
1162  * Execute "resume" callbacks for all devices and complete the PM transition of
1163  * the system.
1164  */
1165 void dpm_resume_end(pm_message_t state)
1166 {
1167         dpm_resume(state);
1168         dpm_complete(state);
1169 }
1170 EXPORT_SYMBOL_GPL(dpm_resume_end);
1171
1172
1173 /*------------------------- Suspend routines -------------------------*/
1174
1175 /**
1176  * resume_event - Return a "resume" message for given "suspend" sleep state.
1177  * @sleep_state: PM message representing a sleep state.
1178  *
1179  * Return a PM message representing the resume event corresponding to given
1180  * sleep state.
1181  */
1182 static pm_message_t resume_event(pm_message_t sleep_state)
1183 {
1184         switch (sleep_state.event) {
1185         case PM_EVENT_SUSPEND:
1186                 return PMSG_RESUME;
1187         case PM_EVENT_FREEZE:
1188         case PM_EVENT_QUIESCE:
1189                 return PMSG_RECOVER;
1190         case PM_EVENT_HIBERNATE:
1191                 return PMSG_RESTORE;
1192         }
1193         return PMSG_ON;
1194 }
1195
1196 static void dpm_superior_set_must_resume(struct device *dev)
1197 {
1198         struct device_link *link;
1199         int idx;
1200
1201         if (dev->parent)
1202                 dev->parent->power.must_resume = true;
1203
1204         idx = device_links_read_lock();
1205
1206         list_for_each_entry_rcu(link, &dev->links.suppliers, c_node)
1207                 link->supplier->power.must_resume = true;
1208
1209         device_links_read_unlock(idx);
1210 }
1211
1212 static pm_callback_t dpm_subsys_suspend_noirq_cb(struct device *dev,
1213                                                  pm_message_t state,
1214                                                  const char **info_p)
1215 {
1216         pm_callback_t callback;
1217         const char *info;
1218
1219         if (dev->pm_domain) {
1220                 info = "noirq power domain ";
1221                 callback = pm_noirq_op(&dev->pm_domain->ops, state);
1222         } else if (dev->type && dev->type->pm) {
1223                 info = "noirq type ";
1224                 callback = pm_noirq_op(dev->type->pm, state);
1225         } else if (dev->class && dev->class->pm) {
1226                 info = "noirq class ";
1227                 callback = pm_noirq_op(dev->class->pm, state);
1228         } else if (dev->bus && dev->bus->pm) {
1229                 info = "noirq bus ";
1230                 callback = pm_noirq_op(dev->bus->pm, state);
1231         } else {
1232                 return NULL;
1233         }
1234
1235         if (info_p)
1236                 *info_p = info;
1237
1238         return callback;
1239 }
1240
1241 static bool device_must_resume(struct device *dev, pm_message_t state,
1242                                bool no_subsys_suspend_noirq)
1243 {
1244         pm_message_t resume_msg = resume_event(state);
1245
1246         /*
1247          * If all of the device driver's "noirq", "late" and "early" callbacks
1248          * are invoked directly by the core, the decision to allow the device to
1249          * stay in suspend can be based on its current runtime PM status and its
1250          * wakeup settings.
1251          */
1252         if (no_subsys_suspend_noirq &&
1253             !dpm_subsys_suspend_late_cb(dev, state, NULL) &&
1254             !dpm_subsys_resume_early_cb(dev, resume_msg, NULL) &&
1255             !dpm_subsys_resume_noirq_cb(dev, resume_msg, NULL))
1256                 return !pm_runtime_status_suspended(dev) &&
1257                         (resume_msg.event != PM_EVENT_RESUME ||
1258                          (device_can_wakeup(dev) && !device_may_wakeup(dev)));
1259
1260         /*
1261          * The only safe strategy here is to require that if the device may not
1262          * be left in suspend, resume callbacks must be invoked for it.
1263          */
1264         return !dev->power.may_skip_resume;
1265 }
1266
1267 /**
1268  * __device_suspend_noirq - Execute a "noirq suspend" callback for given device.
1269  * @dev: Device to handle.
1270  * @state: PM transition of the system being carried out.
1271  * @async: If true, the device is being suspended asynchronously.
1272  *
1273  * The driver of @dev will not receive interrupts while this function is being
1274  * executed.
1275  */
1276 static int __device_suspend_noirq(struct device *dev, pm_message_t state, bool async)
1277 {
1278         pm_callback_t callback;
1279         const char *info;
1280         bool no_subsys_cb = false;
1281         int error = 0;
1282
1283         TRACE_DEVICE(dev);
1284         TRACE_SUSPEND(0);
1285
1286         dpm_wait_for_subordinate(dev, async);
1287
1288         if (async_error)
1289                 goto Complete;
1290
1291         if (dev->power.syscore || dev->power.direct_complete)
1292                 goto Complete;
1293
1294         callback = dpm_subsys_suspend_noirq_cb(dev, state, &info);
1295         if (callback)
1296                 goto Run;
1297
1298         no_subsys_cb = !dpm_subsys_suspend_late_cb(dev, state, NULL);
1299
1300         if (dev_pm_smart_suspend_and_suspended(dev) && no_subsys_cb)
1301                 goto Skip;
1302
1303         if (dev->driver && dev->driver->pm) {
1304                 info = "noirq driver ";
1305                 callback = pm_noirq_op(dev->driver->pm, state);
1306         }
1307
1308 Run:
1309         error = dpm_run_callback(callback, dev, state, info);
1310         if (error) {
1311                 async_error = error;
1312                 goto Complete;
1313         }
1314
1315 Skip:
1316         dev->power.is_noirq_suspended = true;
1317
1318         if (dev_pm_test_driver_flags(dev, DPM_FLAG_LEAVE_SUSPENDED)) {
1319                 dev->power.must_resume = dev->power.must_resume ||
1320                                 atomic_read(&dev->power.usage_count) > 1 ||
1321                                 device_must_resume(dev, state, no_subsys_cb);
1322         } else {
1323                 dev->power.must_resume = true;
1324         }
1325
1326         if (dev->power.must_resume)
1327                 dpm_superior_set_must_resume(dev);
1328
1329 Complete:
1330         complete_all(&dev->power.completion);
1331         TRACE_SUSPEND(error);
1332         return error;
1333 }
1334
1335 static void async_suspend_noirq(void *data, async_cookie_t cookie)
1336 {
1337         struct device *dev = (struct device *)data;
1338         int error;
1339
1340         error = __device_suspend_noirq(dev, pm_transition, true);
1341         if (error) {
1342                 dpm_save_failed_dev(dev_name(dev));
1343                 pm_dev_err(dev, pm_transition, " async", error);
1344         }
1345
1346         put_device(dev);
1347 }
1348
1349 static int device_suspend_noirq(struct device *dev)
1350 {
1351         if (dpm_async_fn(dev, async_suspend_noirq))
1352                 return 0;
1353
1354         return __device_suspend_noirq(dev, pm_transition, false);
1355 }
1356
1357 static int dpm_noirq_suspend_devices(pm_message_t state)
1358 {
1359         ktime_t starttime = ktime_get();
1360         int error = 0;
1361
1362         trace_suspend_resume(TPS("dpm_suspend_noirq"), state.event, true);
1363         mutex_lock(&dpm_list_mtx);
1364         pm_transition = state;
1365         async_error = 0;
1366
1367         while (!list_empty(&dpm_late_early_list)) {
1368                 struct device *dev = to_device(dpm_late_early_list.prev);
1369
1370                 get_device(dev);
1371                 mutex_unlock(&dpm_list_mtx);
1372
1373                 error = device_suspend_noirq(dev);
1374
1375                 mutex_lock(&dpm_list_mtx);
1376                 if (error) {
1377                         pm_dev_err(dev, state, " noirq", error);
1378                         dpm_save_failed_dev(dev_name(dev));
1379                         put_device(dev);
1380                         break;
1381                 }
1382                 if (!list_empty(&dev->power.entry))
1383                         list_move(&dev->power.entry, &dpm_noirq_list);
1384                 put_device(dev);
1385
1386                 if (async_error)
1387                         break;
1388         }
1389         mutex_unlock(&dpm_list_mtx);
1390         async_synchronize_full();
1391         if (!error)
1392                 error = async_error;
1393
1394         if (error) {
1395                 suspend_stats.failed_suspend_noirq++;
1396                 dpm_save_failed_step(SUSPEND_SUSPEND_NOIRQ);
1397         }
1398         dpm_show_time(starttime, state, error, "noirq");
1399         trace_suspend_resume(TPS("dpm_suspend_noirq"), state.event, false);
1400         return error;
1401 }
1402
1403 /**
1404  * dpm_suspend_noirq - Execute "noirq suspend" callbacks for all devices.
1405  * @state: PM transition of the system being carried out.
1406  *
1407  * Prevent device drivers' interrupt handlers from being called and invoke
1408  * "noirq" suspend callbacks for all non-sysdev devices.
1409  */
1410 int dpm_suspend_noirq(pm_message_t state)
1411 {
1412         int ret;
1413
1414         cpuidle_pause();
1415
1416         device_wakeup_arm_wake_irqs();
1417         suspend_device_irqs();
1418
1419         ret = dpm_noirq_suspend_devices(state);
1420         if (ret)
1421                 dpm_resume_noirq(resume_event(state));
1422
1423         return ret;
1424 }
1425
1426 static void dpm_propagate_wakeup_to_parent(struct device *dev)
1427 {
1428         struct device *parent = dev->parent;
1429
1430         if (!parent)
1431                 return;
1432
1433         spin_lock_irq(&parent->power.lock);
1434
1435         if (dev->power.wakeup_path && !parent->power.ignore_children)
1436                 parent->power.wakeup_path = true;
1437
1438         spin_unlock_irq(&parent->power.lock);
1439 }
1440
1441 static pm_callback_t dpm_subsys_suspend_late_cb(struct device *dev,
1442                                                 pm_message_t state,
1443                                                 const char **info_p)
1444 {
1445         pm_callback_t callback;
1446         const char *info;
1447
1448         if (dev->pm_domain) {
1449                 info = "late power domain ";
1450                 callback = pm_late_early_op(&dev->pm_domain->ops, state);
1451         } else if (dev->type && dev->type->pm) {
1452                 info = "late type ";
1453                 callback = pm_late_early_op(dev->type->pm, state);
1454         } else if (dev->class && dev->class->pm) {
1455                 info = "late class ";
1456                 callback = pm_late_early_op(dev->class->pm, state);
1457         } else if (dev->bus && dev->bus->pm) {
1458                 info = "late bus ";
1459                 callback = pm_late_early_op(dev->bus->pm, state);
1460         } else {
1461                 return NULL;
1462         }
1463
1464         if (info_p)
1465                 *info_p = info;
1466
1467         return callback;
1468 }
1469
1470 /**
1471  * __device_suspend_late - Execute a "late suspend" callback for given device.
1472  * @dev: Device to handle.
1473  * @state: PM transition of the system being carried out.
1474  * @async: If true, the device is being suspended asynchronously.
1475  *
1476  * Runtime PM is disabled for @dev while this function is being executed.
1477  */
1478 static int __device_suspend_late(struct device *dev, pm_message_t state, bool async)
1479 {
1480         pm_callback_t callback;
1481         const char *info;
1482         int error = 0;
1483
1484         TRACE_DEVICE(dev);
1485         TRACE_SUSPEND(0);
1486
1487         __pm_runtime_disable(dev, false);
1488
1489         dpm_wait_for_subordinate(dev, async);
1490
1491         if (async_error)
1492                 goto Complete;
1493
1494         if (pm_wakeup_pending()) {
1495                 async_error = -EBUSY;
1496                 goto Complete;
1497         }
1498
1499         if (dev->power.syscore || dev->power.direct_complete)
1500                 goto Complete;
1501
1502         callback = dpm_subsys_suspend_late_cb(dev, state, &info);
1503         if (callback)
1504                 goto Run;
1505
1506         if (dev_pm_smart_suspend_and_suspended(dev) &&
1507             !dpm_subsys_suspend_noirq_cb(dev, state, NULL))
1508                 goto Skip;
1509
1510         if (dev->driver && dev->driver->pm) {
1511                 info = "late driver ";
1512                 callback = pm_late_early_op(dev->driver->pm, state);
1513         }
1514
1515 Run:
1516         error = dpm_run_callback(callback, dev, state, info);
1517         if (error) {
1518                 async_error = error;
1519                 goto Complete;
1520         }
1521         dpm_propagate_wakeup_to_parent(dev);
1522
1523 Skip:
1524         dev->power.is_late_suspended = true;
1525
1526 Complete:
1527         TRACE_SUSPEND(error);
1528         complete_all(&dev->power.completion);
1529         return error;
1530 }
1531
1532 static void async_suspend_late(void *data, async_cookie_t cookie)
1533 {
1534         struct device *dev = (struct device *)data;
1535         int error;
1536
1537         error = __device_suspend_late(dev, pm_transition, true);
1538         if (error) {
1539                 dpm_save_failed_dev(dev_name(dev));
1540                 pm_dev_err(dev, pm_transition, " async", error);
1541         }
1542         put_device(dev);
1543 }
1544
1545 static int device_suspend_late(struct device *dev)
1546 {
1547         if (dpm_async_fn(dev, async_suspend_late))
1548                 return 0;
1549
1550         return __device_suspend_late(dev, pm_transition, false);
1551 }
1552
1553 /**
1554  * dpm_suspend_late - Execute "late suspend" callbacks for all devices.
1555  * @state: PM transition of the system being carried out.
1556  */
1557 int dpm_suspend_late(pm_message_t state)
1558 {
1559         ktime_t starttime = ktime_get();
1560         int error = 0;
1561
1562         trace_suspend_resume(TPS("dpm_suspend_late"), state.event, true);
1563         mutex_lock(&dpm_list_mtx);
1564         pm_transition = state;
1565         async_error = 0;
1566
1567         while (!list_empty(&dpm_suspended_list)) {
1568                 struct device *dev = to_device(dpm_suspended_list.prev);
1569
1570                 get_device(dev);
1571                 mutex_unlock(&dpm_list_mtx);
1572
1573                 error = device_suspend_late(dev);
1574
1575                 mutex_lock(&dpm_list_mtx);
1576                 if (!list_empty(&dev->power.entry))
1577                         list_move(&dev->power.entry, &dpm_late_early_list);
1578
1579                 if (error) {
1580                         pm_dev_err(dev, state, " late", error);
1581                         dpm_save_failed_dev(dev_name(dev));
1582                         put_device(dev);
1583                         break;
1584                 }
1585                 put_device(dev);
1586
1587                 if (async_error)
1588                         break;
1589         }
1590         mutex_unlock(&dpm_list_mtx);
1591         async_synchronize_full();
1592         if (!error)
1593                 error = async_error;
1594         if (error) {
1595                 suspend_stats.failed_suspend_late++;
1596                 dpm_save_failed_step(SUSPEND_SUSPEND_LATE);
1597                 dpm_resume_early(resume_event(state));
1598         }
1599         dpm_show_time(starttime, state, error, "late");
1600         trace_suspend_resume(TPS("dpm_suspend_late"), state.event, false);
1601         return error;
1602 }
1603
1604 /**
1605  * dpm_suspend_end - Execute "late" and "noirq" device suspend callbacks.
1606  * @state: PM transition of the system being carried out.
1607  */
1608 int dpm_suspend_end(pm_message_t state)
1609 {
1610         ktime_t starttime = ktime_get();
1611         int error;
1612
1613         error = dpm_suspend_late(state);
1614         if (error)
1615                 goto out;
1616
1617         error = dpm_suspend_noirq(state);
1618         if (error)
1619                 dpm_resume_early(resume_event(state));
1620
1621 out:
1622         dpm_show_time(starttime, state, error, "end");
1623         return error;
1624 }
1625 EXPORT_SYMBOL_GPL(dpm_suspend_end);
1626
1627 /**
1628  * legacy_suspend - Execute a legacy (bus or class) suspend callback for device.
1629  * @dev: Device to suspend.
1630  * @state: PM transition of the system being carried out.
1631  * @cb: Suspend callback to execute.
1632  * @info: string description of caller.
1633  */
1634 static int legacy_suspend(struct device *dev, pm_message_t state,
1635                           int (*cb)(struct device *dev, pm_message_t state),
1636                           const char *info)
1637 {
1638         int error;
1639         ktime_t calltime;
1640
1641         calltime = initcall_debug_start(dev, cb);
1642
1643         trace_device_pm_callback_start(dev, info, state.event);
1644         error = cb(dev, state);
1645         trace_device_pm_callback_end(dev, error);
1646         suspend_report_result(cb, error);
1647
1648         initcall_debug_report(dev, calltime, cb, error);
1649
1650         return error;
1651 }
1652
1653 static void dpm_clear_superiors_direct_complete(struct device *dev)
1654 {
1655         struct device_link *link;
1656         int idx;
1657
1658         if (dev->parent) {
1659                 spin_lock_irq(&dev->parent->power.lock);
1660                 dev->parent->power.direct_complete = false;
1661                 spin_unlock_irq(&dev->parent->power.lock);
1662         }
1663
1664         idx = device_links_read_lock();
1665
1666         list_for_each_entry_rcu(link, &dev->links.suppliers, c_node) {
1667                 spin_lock_irq(&link->supplier->power.lock);
1668                 link->supplier->power.direct_complete = false;
1669                 spin_unlock_irq(&link->supplier->power.lock);
1670         }
1671
1672         device_links_read_unlock(idx);
1673 }
1674
1675 /**
1676  * __device_suspend - Execute "suspend" callbacks for given device.
1677  * @dev: Device to handle.
1678  * @state: PM transition of the system being carried out.
1679  * @async: If true, the device is being suspended asynchronously.
1680  */
1681 static int __device_suspend(struct device *dev, pm_message_t state, bool async)
1682 {
1683         pm_callback_t callback = NULL;
1684         const char *info = NULL;
1685         int error = 0;
1686         DECLARE_DPM_WATCHDOG_ON_STACK(wd);
1687
1688         TRACE_DEVICE(dev);
1689         TRACE_SUSPEND(0);
1690
1691         dpm_wait_for_subordinate(dev, async);
1692
1693         if (async_error) {
1694                 dev->power.direct_complete = false;
1695                 goto Complete;
1696         }
1697
1698         /*
1699          * If a device configured to wake up the system from sleep states
1700          * has been suspended at run time and there's a resume request pending
1701          * for it, this is equivalent to the device signaling wakeup, so the
1702          * system suspend operation should be aborted.
1703          */
1704         if (pm_runtime_barrier(dev) && device_may_wakeup(dev))
1705                 pm_wakeup_event(dev, 0);
1706
1707         if (pm_wakeup_pending()) {
1708                 dev->power.direct_complete = false;
1709                 async_error = -EBUSY;
1710                 goto Complete;
1711         }
1712
1713         if (dev->power.syscore)
1714                 goto Complete;
1715
1716         /* Avoid direct_complete to let wakeup_path propagate. */
1717         if (device_may_wakeup(dev) || dev->power.wakeup_path)
1718                 dev->power.direct_complete = false;
1719
1720         if (dev->power.direct_complete) {
1721                 if (pm_runtime_status_suspended(dev)) {
1722                         pm_runtime_disable(dev);
1723                         if (pm_runtime_status_suspended(dev)) {
1724                                 pm_dev_dbg(dev, state, "direct-complete ");
1725                                 goto Complete;
1726                         }
1727
1728                         pm_runtime_enable(dev);
1729                 }
1730                 dev->power.direct_complete = false;
1731         }
1732
1733         dev->power.may_skip_resume = false;
1734         dev->power.must_resume = false;
1735
1736         dpm_watchdog_set(&wd, dev);
1737         device_lock(dev);
1738
1739         if (dev->pm_domain) {
1740                 info = "power domain ";
1741                 callback = pm_op(&dev->pm_domain->ops, state);
1742                 goto Run;
1743         }
1744
1745         if (dev->type && dev->type->pm) {
1746                 info = "type ";
1747                 callback = pm_op(dev->type->pm, state);
1748                 goto Run;
1749         }
1750
1751         if (dev->class && dev->class->pm) {
1752                 info = "class ";
1753                 callback = pm_op(dev->class->pm, state);
1754                 goto Run;
1755         }
1756
1757         if (dev->bus) {
1758                 if (dev->bus->pm) {
1759                         info = "bus ";
1760                         callback = pm_op(dev->bus->pm, state);
1761                 } else if (dev->bus->suspend) {
1762                         pm_dev_dbg(dev, state, "legacy bus ");
1763                         error = legacy_suspend(dev, state, dev->bus->suspend,
1764                                                 "legacy bus ");
1765                         goto End;
1766                 }
1767         }
1768
1769  Run:
1770         if (!callback && dev->driver && dev->driver->pm) {
1771                 info = "driver ";
1772                 callback = pm_op(dev->driver->pm, state);
1773         }
1774
1775         error = dpm_run_callback(callback, dev, state, info);
1776
1777  End:
1778         if (!error) {
1779                 dev->power.is_suspended = true;
1780                 if (device_may_wakeup(dev))
1781                         dev->power.wakeup_path = true;
1782
1783                 dpm_propagate_wakeup_to_parent(dev);
1784                 dpm_clear_superiors_direct_complete(dev);
1785         }
1786
1787         device_unlock(dev);
1788         dpm_watchdog_clear(&wd);
1789
1790  Complete:
1791         if (error)
1792                 async_error = error;
1793
1794         complete_all(&dev->power.completion);
1795         TRACE_SUSPEND(error);
1796         return error;
1797 }
1798
1799 static void async_suspend(void *data, async_cookie_t cookie)
1800 {
1801         struct device *dev = (struct device *)data;
1802         int error;
1803
1804         error = __device_suspend(dev, pm_transition, true);
1805         if (error) {
1806                 dpm_save_failed_dev(dev_name(dev));
1807                 pm_dev_err(dev, pm_transition, " async", error);
1808         }
1809
1810         put_device(dev);
1811 }
1812
1813 static int device_suspend(struct device *dev)
1814 {
1815         if (dpm_async_fn(dev, async_suspend))
1816                 return 0;
1817
1818         return __device_suspend(dev, pm_transition, false);
1819 }
1820
1821 /**
1822  * dpm_suspend - Execute "suspend" callbacks for all non-sysdev devices.
1823  * @state: PM transition of the system being carried out.
1824  */
1825 int dpm_suspend(pm_message_t state)
1826 {
1827         ktime_t starttime = ktime_get();
1828         int error = 0;
1829
1830         trace_suspend_resume(TPS("dpm_suspend"), state.event, true);
1831         might_sleep();
1832
1833         devfreq_suspend();
1834         cpufreq_suspend();
1835
1836         mutex_lock(&dpm_list_mtx);
1837         pm_transition = state;
1838         async_error = 0;
1839         while (!list_empty(&dpm_prepared_list)) {
1840                 struct device *dev = to_device(dpm_prepared_list.prev);
1841
1842                 get_device(dev);
1843                 mutex_unlock(&dpm_list_mtx);
1844
1845                 error = device_suspend(dev);
1846
1847                 mutex_lock(&dpm_list_mtx);
1848                 if (error) {
1849                         pm_dev_err(dev, state, "", error);
1850                         dpm_save_failed_dev(dev_name(dev));
1851                         put_device(dev);
1852                         break;
1853                 }
1854                 if (!list_empty(&dev->power.entry))
1855                         list_move(&dev->power.entry, &dpm_suspended_list);
1856                 put_device(dev);
1857                 if (async_error)
1858                         break;
1859         }
1860         mutex_unlock(&dpm_list_mtx);
1861         async_synchronize_full();
1862         if (!error)
1863                 error = async_error;
1864         if (error) {
1865                 suspend_stats.failed_suspend++;
1866                 dpm_save_failed_step(SUSPEND_SUSPEND);
1867         }
1868         dpm_show_time(starttime, state, error, NULL);
1869         trace_suspend_resume(TPS("dpm_suspend"), state.event, false);
1870         return error;
1871 }
1872
1873 /**
1874  * device_prepare - Prepare a device for system power transition.
1875  * @dev: Device to handle.
1876  * @state: PM transition of the system being carried out.
1877  *
1878  * Execute the ->prepare() callback(s) for given device.  No new children of the
1879  * device may be registered after this function has returned.
1880  */
1881 static int device_prepare(struct device *dev, pm_message_t state)
1882 {
1883         int (*callback)(struct device *) = NULL;
1884         int ret = 0;
1885
1886         if (dev->power.syscore)
1887                 return 0;
1888
1889         WARN_ON(!pm_runtime_enabled(dev) &&
1890                 dev_pm_test_driver_flags(dev, DPM_FLAG_SMART_SUSPEND |
1891                                               DPM_FLAG_LEAVE_SUSPENDED));
1892
1893         /*
1894          * If a device's parent goes into runtime suspend at the wrong time,
1895          * it won't be possible to resume the device.  To prevent this we
1896          * block runtime suspend here, during the prepare phase, and allow
1897          * it again during the complete phase.
1898          */
1899         pm_runtime_get_noresume(dev);
1900
1901         device_lock(dev);
1902
1903         dev->power.wakeup_path = false;
1904
1905         if (dev->power.no_pm_callbacks)
1906                 goto unlock;
1907
1908         if (dev->pm_domain)
1909                 callback = dev->pm_domain->ops.prepare;
1910         else if (dev->type && dev->type->pm)
1911                 callback = dev->type->pm->prepare;
1912         else if (dev->class && dev->class->pm)
1913                 callback = dev->class->pm->prepare;
1914         else if (dev->bus && dev->bus->pm)
1915                 callback = dev->bus->pm->prepare;
1916
1917         if (!callback && dev->driver && dev->driver->pm)
1918                 callback = dev->driver->pm->prepare;
1919
1920         if (callback)
1921                 ret = callback(dev);
1922
1923 unlock:
1924         device_unlock(dev);
1925
1926         if (ret < 0) {
1927                 suspend_report_result(callback, ret);
1928                 pm_runtime_put(dev);
1929                 return ret;
1930         }
1931         /*
1932          * A positive return value from ->prepare() means "this device appears
1933          * to be runtime-suspended and its state is fine, so if it really is
1934          * runtime-suspended, you can leave it in that state provided that you
1935          * will do the same thing with all of its descendants".  This only
1936          * applies to suspend transitions, however.
1937          */
1938         spin_lock_irq(&dev->power.lock);
1939         dev->power.direct_complete = state.event == PM_EVENT_SUSPEND &&
1940                 ((pm_runtime_suspended(dev) && ret > 0) ||
1941                  dev->power.no_pm_callbacks) &&
1942                 !dev_pm_test_driver_flags(dev, DPM_FLAG_NEVER_SKIP);
1943         spin_unlock_irq(&dev->power.lock);
1944         return 0;
1945 }
1946
1947 /**
1948  * dpm_prepare - Prepare all non-sysdev devices for a system PM transition.
1949  * @state: PM transition of the system being carried out.
1950  *
1951  * Execute the ->prepare() callback(s) for all devices.
1952  */
1953 int dpm_prepare(pm_message_t state)
1954 {
1955         int error = 0;
1956
1957         trace_suspend_resume(TPS("dpm_prepare"), state.event, true);
1958         might_sleep();
1959
1960         /*
1961          * Give a chance for the known devices to complete their probes, before
1962          * disable probing of devices. This sync point is important at least
1963          * at boot time + hibernation restore.
1964          */
1965         wait_for_device_probe();
1966         /*
1967          * It is unsafe if probing of devices will happen during suspend or
1968          * hibernation and system behavior will be unpredictable in this case.
1969          * So, let's prohibit device's probing here and defer their probes
1970          * instead. The normal behavior will be restored in dpm_complete().
1971          */
1972         device_block_probing();
1973
1974         mutex_lock(&dpm_list_mtx);
1975         while (!list_empty(&dpm_list)) {
1976                 struct device *dev = to_device(dpm_list.next);
1977
1978                 get_device(dev);
1979                 mutex_unlock(&dpm_list_mtx);
1980
1981                 trace_device_pm_callback_start(dev, "", state.event);
1982                 error = device_prepare(dev, state);
1983                 trace_device_pm_callback_end(dev, error);
1984
1985                 mutex_lock(&dpm_list_mtx);
1986                 if (error) {
1987                         if (error == -EAGAIN) {
1988                                 put_device(dev);
1989                                 error = 0;
1990                                 continue;
1991                         }
1992                         pr_info("Device %s not prepared for power transition: code %d\n",
1993                                 dev_name(dev), error);
1994                         put_device(dev);
1995                         break;
1996                 }
1997                 dev->power.is_prepared = true;
1998                 if (!list_empty(&dev->power.entry))
1999                         list_move_tail(&dev->power.entry, &dpm_prepared_list);
2000                 put_device(dev);
2001         }
2002         mutex_unlock(&dpm_list_mtx);
2003         trace_suspend_resume(TPS("dpm_prepare"), state.event, false);
2004         return error;
2005 }
2006
2007 /**
2008  * dpm_suspend_start - Prepare devices for PM transition and suspend them.
2009  * @state: PM transition of the system being carried out.
2010  *
2011  * Prepare all non-sysdev devices for system PM transition and execute "suspend"
2012  * callbacks for them.
2013  */
2014 int dpm_suspend_start(pm_message_t state)
2015 {
2016         ktime_t starttime = ktime_get();
2017         int error;
2018
2019         error = dpm_prepare(state);
2020         if (error) {
2021                 suspend_stats.failed_prepare++;
2022                 dpm_save_failed_step(SUSPEND_PREPARE);
2023         } else
2024                 error = dpm_suspend(state);
2025         dpm_show_time(starttime, state, error, "start");
2026         return error;
2027 }
2028 EXPORT_SYMBOL_GPL(dpm_suspend_start);
2029
2030 void __suspend_report_result(const char *function, void *fn, int ret)
2031 {
2032         if (ret)
2033                 pr_err("%s(): %pS returns %d\n", function, fn, ret);
2034 }
2035 EXPORT_SYMBOL_GPL(__suspend_report_result);
2036
2037 /**
2038  * device_pm_wait_for_dev - Wait for suspend/resume of a device to complete.
2039  * @subordinate: Device that needs to wait for @dev.
2040  * @dev: Device to wait for.
2041  */
2042 int device_pm_wait_for_dev(struct device *subordinate, struct device *dev)
2043 {
2044         dpm_wait(dev, subordinate->power.async_suspend);
2045         return async_error;
2046 }
2047 EXPORT_SYMBOL_GPL(device_pm_wait_for_dev);
2048
2049 /**
2050  * dpm_for_each_dev - device iterator.
2051  * @data: data for the callback.
2052  * @fn: function to be called for each device.
2053  *
2054  * Iterate over devices in dpm_list, and call @fn for each device,
2055  * passing it @data.
2056  */
2057 void dpm_for_each_dev(void *data, void (*fn)(struct device *, void *))
2058 {
2059         struct device *dev;
2060
2061         if (!fn)
2062                 return;
2063
2064         device_pm_lock();
2065         list_for_each_entry(dev, &dpm_list, power.entry)
2066                 fn(dev, data);
2067         device_pm_unlock();
2068 }
2069 EXPORT_SYMBOL_GPL(dpm_for_each_dev);
2070
2071 static bool pm_ops_is_empty(const struct dev_pm_ops *ops)
2072 {
2073         if (!ops)
2074                 return true;
2075
2076         return !ops->prepare &&
2077                !ops->suspend &&
2078                !ops->suspend_late &&
2079                !ops->suspend_noirq &&
2080                !ops->resume_noirq &&
2081                !ops->resume_early &&
2082                !ops->resume &&
2083                !ops->complete;
2084 }
2085
2086 void device_pm_check_callbacks(struct device *dev)
2087 {
2088         spin_lock_irq(&dev->power.lock);
2089         dev->power.no_pm_callbacks =
2090                 (!dev->bus || (pm_ops_is_empty(dev->bus->pm) &&
2091                  !dev->bus->suspend && !dev->bus->resume)) &&
2092                 (!dev->class || pm_ops_is_empty(dev->class->pm)) &&
2093                 (!dev->type || pm_ops_is_empty(dev->type->pm)) &&
2094                 (!dev->pm_domain || pm_ops_is_empty(&dev->pm_domain->ops)) &&
2095                 (!dev->driver || (pm_ops_is_empty(dev->driver->pm) &&
2096                  !dev->driver->suspend && !dev->driver->resume));
2097         spin_unlock_irq(&dev->power.lock);
2098 }
2099
2100 bool dev_pm_smart_suspend_and_suspended(struct device *dev)
2101 {
2102         return dev_pm_test_driver_flags(dev, DPM_FLAG_SMART_SUSPEND) &&
2103                 pm_runtime_status_suspended(dev);
2104 }