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