]> git.karo-electronics.de Git - karo-tx-linux.git/blob - drivers/base/power/runtime.c
pm / runtime: introduce pm_runtime_set_memalloc_noio()
[karo-tx-linux.git] / drivers / base / power / runtime.c
1 /*
2  * drivers/base/power/runtime.c - Helper functions for device runtime PM
3  *
4  * Copyright (c) 2009 Rafael J. Wysocki <rjw@sisk.pl>, Novell Inc.
5  * Copyright (C) 2010 Alan Stern <stern@rowland.harvard.edu>
6  *
7  * This file is released under the GPLv2.
8  */
9
10 #include <linux/sched.h>
11 #include <linux/export.h>
12 #include <linux/pm_runtime.h>
13 #include <trace/events/rpm.h>
14 #include "power.h"
15
16 static int rpm_resume(struct device *dev, int rpmflags);
17 static int rpm_suspend(struct device *dev, int rpmflags);
18
19 /**
20  * update_pm_runtime_accounting - Update the time accounting of power states
21  * @dev: Device to update the accounting for
22  *
23  * In order to be able to have time accounting of the various power states
24  * (as used by programs such as PowerTOP to show the effectiveness of runtime
25  * PM), we need to track the time spent in each state.
26  * update_pm_runtime_accounting must be called each time before the
27  * runtime_status field is updated, to account the time in the old state
28  * correctly.
29  */
30 void update_pm_runtime_accounting(struct device *dev)
31 {
32         unsigned long now = jiffies;
33         unsigned long delta;
34
35         delta = now - dev->power.accounting_timestamp;
36
37         dev->power.accounting_timestamp = now;
38
39         if (dev->power.disable_depth > 0)
40                 return;
41
42         if (dev->power.runtime_status == RPM_SUSPENDED)
43                 dev->power.suspended_jiffies += delta;
44         else
45                 dev->power.active_jiffies += delta;
46 }
47
48 static void __update_runtime_status(struct device *dev, enum rpm_status status)
49 {
50         update_pm_runtime_accounting(dev);
51         dev->power.runtime_status = status;
52 }
53
54 /**
55  * pm_runtime_deactivate_timer - Deactivate given device's suspend timer.
56  * @dev: Device to handle.
57  */
58 static void pm_runtime_deactivate_timer(struct device *dev)
59 {
60         if (dev->power.timer_expires > 0) {
61                 del_timer(&dev->power.suspend_timer);
62                 dev->power.timer_expires = 0;
63         }
64 }
65
66 /**
67  * pm_runtime_cancel_pending - Deactivate suspend timer and cancel requests.
68  * @dev: Device to handle.
69  */
70 static void pm_runtime_cancel_pending(struct device *dev)
71 {
72         pm_runtime_deactivate_timer(dev);
73         /*
74          * In case there's a request pending, make sure its work function will
75          * return without doing anything.
76          */
77         dev->power.request = RPM_REQ_NONE;
78 }
79
80 /*
81  * pm_runtime_autosuspend_expiration - Get a device's autosuspend-delay expiration time.
82  * @dev: Device to handle.
83  *
84  * Compute the autosuspend-delay expiration time based on the device's
85  * power.last_busy time.  If the delay has already expired or is disabled
86  * (negative) or the power.use_autosuspend flag isn't set, return 0.
87  * Otherwise return the expiration time in jiffies (adjusted to be nonzero).
88  *
89  * This function may be called either with or without dev->power.lock held.
90  * Either way it can be racy, since power.last_busy may be updated at any time.
91  */
92 unsigned long pm_runtime_autosuspend_expiration(struct device *dev)
93 {
94         int autosuspend_delay;
95         long elapsed;
96         unsigned long last_busy;
97         unsigned long expires = 0;
98
99         if (!dev->power.use_autosuspend)
100                 goto out;
101
102         autosuspend_delay = ACCESS_ONCE(dev->power.autosuspend_delay);
103         if (autosuspend_delay < 0)
104                 goto out;
105
106         last_busy = ACCESS_ONCE(dev->power.last_busy);
107         elapsed = jiffies - last_busy;
108         if (elapsed < 0)
109                 goto out;       /* jiffies has wrapped around. */
110
111         /*
112          * If the autosuspend_delay is >= 1 second, align the timer by rounding
113          * up to the nearest second.
114          */
115         expires = last_busy + msecs_to_jiffies(autosuspend_delay);
116         if (autosuspend_delay >= 1000)
117                 expires = round_jiffies(expires);
118         expires += !expires;
119         if (elapsed >= expires - last_busy)
120                 expires = 0;    /* Already expired. */
121
122  out:
123         return expires;
124 }
125 EXPORT_SYMBOL_GPL(pm_runtime_autosuspend_expiration);
126
127 static int dev_memalloc_noio(struct device *dev, void *data)
128 {
129         return dev->power.memalloc_noio;
130 }
131
132 /*
133  * pm_runtime_set_memalloc_noio - Set a device's memalloc_noio flag.
134  * @dev: Device to handle.
135  * @enable: True for setting the flag and False for clearing the flag.
136  *
137  * Set the flag for all devices in the path from the device to the
138  * root device in the device tree if @enable is true, otherwise clear
139  * the flag for devices in the path whose siblings don't set the flag.
140  *
141  * The function should only be called by block device, or network
142  * device driver for solving the deadlock problem during runtime
143  * resume/suspend:
144  *
145  *     If memory allocation with GFP_KERNEL is called inside runtime
146  *     resume/suspend callback of any one of its ancestors(or the
147  *     block device itself), the deadlock may be triggered inside the
148  *     memory allocation since it might not complete until the block
149  *     device becomes active and the involed page I/O finishes. The
150  *     situation is pointed out first by Alan Stern. Network device
151  *     are involved in iSCSI kind of situation.
152  *
153  * The lock of dev_hotplug_mutex is held in the function for handling
154  * hotplug race because pm_runtime_set_memalloc_noio() may be called
155  * in async probe().
156  *
157  * The function should be called between device_add() and device_del()
158  * on the affected device(block/network device).
159  */
160 void pm_runtime_set_memalloc_noio(struct device *dev, bool enable)
161 {
162         static DEFINE_MUTEX(dev_hotplug_mutex);
163
164         mutex_lock(&dev_hotplug_mutex);
165         for (;;) {
166                 bool enabled;
167
168                 /* hold power lock since bitfield is not SMP-safe. */
169                 spin_lock_irq(&dev->power.lock);
170                 enabled = dev->power.memalloc_noio;
171                 dev->power.memalloc_noio = enable;
172                 spin_unlock_irq(&dev->power.lock);
173
174                 /*
175                  * not need to enable ancestors any more if the device
176                  * has been enabled.
177                  */
178                 if (enabled && enable)
179                         break;
180
181                 dev = dev->parent;
182
183                 /*
184                  * clear flag of the parent device only if all the
185                  * children don't set the flag because ancestor's
186                  * flag was set by any one of the descendants.
187                  */
188                 if (!dev || (!enable &&
189                              device_for_each_child(dev, NULL,
190                                                    dev_memalloc_noio)))
191                         break;
192         }
193         mutex_unlock(&dev_hotplug_mutex);
194 }
195 EXPORT_SYMBOL_GPL(pm_runtime_set_memalloc_noio);
196
197 /**
198  * rpm_check_suspend_allowed - Test whether a device may be suspended.
199  * @dev: Device to test.
200  */
201 static int rpm_check_suspend_allowed(struct device *dev)
202 {
203         int retval = 0;
204
205         if (dev->power.runtime_error)
206                 retval = -EINVAL;
207         else if (dev->power.disable_depth > 0)
208                 retval = -EACCES;
209         else if (atomic_read(&dev->power.usage_count) > 0)
210                 retval = -EAGAIN;
211         else if (!pm_children_suspended(dev))
212                 retval = -EBUSY;
213
214         /* Pending resume requests take precedence over suspends. */
215         else if ((dev->power.deferred_resume
216                         && dev->power.runtime_status == RPM_SUSPENDING)
217             || (dev->power.request_pending
218                         && dev->power.request == RPM_REQ_RESUME))
219                 retval = -EAGAIN;
220         else if (__dev_pm_qos_read_value(dev) < 0)
221                 retval = -EPERM;
222         else if (dev->power.runtime_status == RPM_SUSPENDED)
223                 retval = 1;
224
225         return retval;
226 }
227
228 /**
229  * __rpm_callback - Run a given runtime PM callback for a given device.
230  * @cb: Runtime PM callback to run.
231  * @dev: Device to run the callback for.
232  */
233 static int __rpm_callback(int (*cb)(struct device *), struct device *dev)
234         __releases(&dev->power.lock) __acquires(&dev->power.lock)
235 {
236         int retval;
237
238         if (dev->power.irq_safe)
239                 spin_unlock(&dev->power.lock);
240         else
241                 spin_unlock_irq(&dev->power.lock);
242
243         retval = cb(dev);
244
245         if (dev->power.irq_safe)
246                 spin_lock(&dev->power.lock);
247         else
248                 spin_lock_irq(&dev->power.lock);
249
250         return retval;
251 }
252
253 /**
254  * rpm_idle - Notify device bus type if the device can be suspended.
255  * @dev: Device to notify the bus type about.
256  * @rpmflags: Flag bits.
257  *
258  * Check if the device's runtime PM status allows it to be suspended.  If
259  * another idle notification has been started earlier, return immediately.  If
260  * the RPM_ASYNC flag is set then queue an idle-notification request; otherwise
261  * run the ->runtime_idle() callback directly.
262  *
263  * This function must be called under dev->power.lock with interrupts disabled.
264  */
265 static int rpm_idle(struct device *dev, int rpmflags)
266 {
267         int (*callback)(struct device *);
268         int retval;
269
270         trace_rpm_idle(dev, rpmflags);
271         retval = rpm_check_suspend_allowed(dev);
272         if (retval < 0)
273                 ;       /* Conditions are wrong. */
274
275         /* Idle notifications are allowed only in the RPM_ACTIVE state. */
276         else if (dev->power.runtime_status != RPM_ACTIVE)
277                 retval = -EAGAIN;
278
279         /*
280          * Any pending request other than an idle notification takes
281          * precedence over us, except that the timer may be running.
282          */
283         else if (dev->power.request_pending &&
284             dev->power.request > RPM_REQ_IDLE)
285                 retval = -EAGAIN;
286
287         /* Act as though RPM_NOWAIT is always set. */
288         else if (dev->power.idle_notification)
289                 retval = -EINPROGRESS;
290         if (retval)
291                 goto out;
292
293         /* Pending requests need to be canceled. */
294         dev->power.request = RPM_REQ_NONE;
295
296         if (dev->power.no_callbacks) {
297                 /* Assume ->runtime_idle() callback would have suspended. */
298                 retval = rpm_suspend(dev, rpmflags);
299                 goto out;
300         }
301
302         /* Carry out an asynchronous or a synchronous idle notification. */
303         if (rpmflags & RPM_ASYNC) {
304                 dev->power.request = RPM_REQ_IDLE;
305                 if (!dev->power.request_pending) {
306                         dev->power.request_pending = true;
307                         queue_work(pm_wq, &dev->power.work);
308                 }
309                 goto out;
310         }
311
312         dev->power.idle_notification = true;
313
314         if (dev->pm_domain)
315                 callback = dev->pm_domain->ops.runtime_idle;
316         else if (dev->type && dev->type->pm)
317                 callback = dev->type->pm->runtime_idle;
318         else if (dev->class && dev->class->pm)
319                 callback = dev->class->pm->runtime_idle;
320         else if (dev->bus && dev->bus->pm)
321                 callback = dev->bus->pm->runtime_idle;
322         else
323                 callback = NULL;
324
325         if (!callback && dev->driver && dev->driver->pm)
326                 callback = dev->driver->pm->runtime_idle;
327
328         if (callback)
329                 __rpm_callback(callback, dev);
330
331         dev->power.idle_notification = false;
332         wake_up_all(&dev->power.wait_queue);
333
334  out:
335         trace_rpm_return_int(dev, _THIS_IP_, retval);
336         return retval;
337 }
338
339 /**
340  * rpm_callback - Run a given runtime PM callback for a given device.
341  * @cb: Runtime PM callback to run.
342  * @dev: Device to run the callback for.
343  */
344 static int rpm_callback(int (*cb)(struct device *), struct device *dev)
345 {
346         int retval;
347
348         if (!cb)
349                 return -ENOSYS;
350
351         retval = __rpm_callback(cb, dev);
352
353         dev->power.runtime_error = retval;
354         return retval != -EACCES ? retval : -EIO;
355 }
356
357 /**
358  * rpm_suspend - Carry out runtime suspend of given device.
359  * @dev: Device to suspend.
360  * @rpmflags: Flag bits.
361  *
362  * Check if the device's runtime PM status allows it to be suspended.
363  * Cancel a pending idle notification, autosuspend or suspend. If
364  * another suspend has been started earlier, either return immediately
365  * or wait for it to finish, depending on the RPM_NOWAIT and RPM_ASYNC
366  * flags. If the RPM_ASYNC flag is set then queue a suspend request;
367  * otherwise run the ->runtime_suspend() callback directly. When
368  * ->runtime_suspend succeeded, if a deferred resume was requested while
369  * the callback was running then carry it out, otherwise send an idle
370  * notification for its parent (if the suspend succeeded and both
371  * ignore_children of parent->power and irq_safe of dev->power are not set).
372  * If ->runtime_suspend failed with -EAGAIN or -EBUSY, and if the RPM_AUTO
373  * flag is set and the next autosuspend-delay expiration time is in the
374  * future, schedule another autosuspend attempt.
375  *
376  * This function must be called under dev->power.lock with interrupts disabled.
377  */
378 static int rpm_suspend(struct device *dev, int rpmflags)
379         __releases(&dev->power.lock) __acquires(&dev->power.lock)
380 {
381         int (*callback)(struct device *);
382         struct device *parent = NULL;
383         int retval;
384
385         trace_rpm_suspend(dev, rpmflags);
386
387  repeat:
388         retval = rpm_check_suspend_allowed(dev);
389
390         if (retval < 0)
391                 ;       /* Conditions are wrong. */
392
393         /* Synchronous suspends are not allowed in the RPM_RESUMING state. */
394         else if (dev->power.runtime_status == RPM_RESUMING &&
395             !(rpmflags & RPM_ASYNC))
396                 retval = -EAGAIN;
397         if (retval)
398                 goto out;
399
400         /* If the autosuspend_delay time hasn't expired yet, reschedule. */
401         if ((rpmflags & RPM_AUTO)
402             && dev->power.runtime_status != RPM_SUSPENDING) {
403                 unsigned long expires = pm_runtime_autosuspend_expiration(dev);
404
405                 if (expires != 0) {
406                         /* Pending requests need to be canceled. */
407                         dev->power.request = RPM_REQ_NONE;
408
409                         /*
410                          * Optimization: If the timer is already running and is
411                          * set to expire at or before the autosuspend delay,
412                          * avoid the overhead of resetting it.  Just let it
413                          * expire; pm_suspend_timer_fn() will take care of the
414                          * rest.
415                          */
416                         if (!(dev->power.timer_expires && time_before_eq(
417                             dev->power.timer_expires, expires))) {
418                                 dev->power.timer_expires = expires;
419                                 mod_timer(&dev->power.suspend_timer, expires);
420                         }
421                         dev->power.timer_autosuspends = 1;
422                         goto out;
423                 }
424         }
425
426         /* Other scheduled or pending requests need to be canceled. */
427         pm_runtime_cancel_pending(dev);
428
429         if (dev->power.runtime_status == RPM_SUSPENDING) {
430                 DEFINE_WAIT(wait);
431
432                 if (rpmflags & (RPM_ASYNC | RPM_NOWAIT)) {
433                         retval = -EINPROGRESS;
434                         goto out;
435                 }
436
437                 if (dev->power.irq_safe) {
438                         spin_unlock(&dev->power.lock);
439
440                         cpu_relax();
441
442                         spin_lock(&dev->power.lock);
443                         goto repeat;
444                 }
445
446                 /* Wait for the other suspend running in parallel with us. */
447                 for (;;) {
448                         prepare_to_wait(&dev->power.wait_queue, &wait,
449                                         TASK_UNINTERRUPTIBLE);
450                         if (dev->power.runtime_status != RPM_SUSPENDING)
451                                 break;
452
453                         spin_unlock_irq(&dev->power.lock);
454
455                         schedule();
456
457                         spin_lock_irq(&dev->power.lock);
458                 }
459                 finish_wait(&dev->power.wait_queue, &wait);
460                 goto repeat;
461         }
462
463         if (dev->power.no_callbacks)
464                 goto no_callback;       /* Assume success. */
465
466         /* Carry out an asynchronous or a synchronous suspend. */
467         if (rpmflags & RPM_ASYNC) {
468                 dev->power.request = (rpmflags & RPM_AUTO) ?
469                     RPM_REQ_AUTOSUSPEND : RPM_REQ_SUSPEND;
470                 if (!dev->power.request_pending) {
471                         dev->power.request_pending = true;
472                         queue_work(pm_wq, &dev->power.work);
473                 }
474                 goto out;
475         }
476
477         __update_runtime_status(dev, RPM_SUSPENDING);
478
479         if (dev->pm_domain)
480                 callback = dev->pm_domain->ops.runtime_suspend;
481         else if (dev->type && dev->type->pm)
482                 callback = dev->type->pm->runtime_suspend;
483         else if (dev->class && dev->class->pm)
484                 callback = dev->class->pm->runtime_suspend;
485         else if (dev->bus && dev->bus->pm)
486                 callback = dev->bus->pm->runtime_suspend;
487         else
488                 callback = NULL;
489
490         if (!callback && dev->driver && dev->driver->pm)
491                 callback = dev->driver->pm->runtime_suspend;
492
493         retval = rpm_callback(callback, dev);
494         if (retval)
495                 goto fail;
496
497  no_callback:
498         __update_runtime_status(dev, RPM_SUSPENDED);
499         pm_runtime_deactivate_timer(dev);
500
501         if (dev->parent) {
502                 parent = dev->parent;
503                 atomic_add_unless(&parent->power.child_count, -1, 0);
504         }
505         wake_up_all(&dev->power.wait_queue);
506
507         if (dev->power.deferred_resume) {
508                 dev->power.deferred_resume = false;
509                 rpm_resume(dev, 0);
510                 retval = -EAGAIN;
511                 goto out;
512         }
513
514         /* Maybe the parent is now able to suspend. */
515         if (parent && !parent->power.ignore_children && !dev->power.irq_safe) {
516                 spin_unlock(&dev->power.lock);
517
518                 spin_lock(&parent->power.lock);
519                 rpm_idle(parent, RPM_ASYNC);
520                 spin_unlock(&parent->power.lock);
521
522                 spin_lock(&dev->power.lock);
523         }
524
525  out:
526         trace_rpm_return_int(dev, _THIS_IP_, retval);
527
528         return retval;
529
530  fail:
531         __update_runtime_status(dev, RPM_ACTIVE);
532         dev->power.deferred_resume = false;
533         wake_up_all(&dev->power.wait_queue);
534
535         if (retval == -EAGAIN || retval == -EBUSY) {
536                 dev->power.runtime_error = 0;
537
538                 /*
539                  * If the callback routine failed an autosuspend, and
540                  * if the last_busy time has been updated so that there
541                  * is a new autosuspend expiration time, automatically
542                  * reschedule another autosuspend.
543                  */
544                 if ((rpmflags & RPM_AUTO) &&
545                     pm_runtime_autosuspend_expiration(dev) != 0)
546                         goto repeat;
547         } else {
548                 pm_runtime_cancel_pending(dev);
549         }
550         goto out;
551 }
552
553 /**
554  * rpm_resume - Carry out runtime resume of given device.
555  * @dev: Device to resume.
556  * @rpmflags: Flag bits.
557  *
558  * Check if the device's runtime PM status allows it to be resumed.  Cancel
559  * any scheduled or pending requests.  If another resume has been started
560  * earlier, either return immediately or wait for it to finish, depending on the
561  * RPM_NOWAIT and RPM_ASYNC flags.  Similarly, if there's a suspend running in
562  * parallel with this function, either tell the other process to resume after
563  * suspending (deferred_resume) or wait for it to finish.  If the RPM_ASYNC
564  * flag is set then queue a resume request; otherwise run the
565  * ->runtime_resume() callback directly.  Queue an idle notification for the
566  * device if the resume succeeded.
567  *
568  * This function must be called under dev->power.lock with interrupts disabled.
569  */
570 static int rpm_resume(struct device *dev, int rpmflags)
571         __releases(&dev->power.lock) __acquires(&dev->power.lock)
572 {
573         int (*callback)(struct device *);
574         struct device *parent = NULL;
575         int retval = 0;
576
577         trace_rpm_resume(dev, rpmflags);
578
579  repeat:
580         if (dev->power.runtime_error)
581                 retval = -EINVAL;
582         else if (dev->power.disable_depth == 1 && dev->power.is_suspended
583             && dev->power.runtime_status == RPM_ACTIVE)
584                 retval = 1;
585         else if (dev->power.disable_depth > 0)
586                 retval = -EACCES;
587         if (retval)
588                 goto out;
589
590         /*
591          * Other scheduled or pending requests need to be canceled.  Small
592          * optimization: If an autosuspend timer is running, leave it running
593          * rather than cancelling it now only to restart it again in the near
594          * future.
595          */
596         dev->power.request = RPM_REQ_NONE;
597         if (!dev->power.timer_autosuspends)
598                 pm_runtime_deactivate_timer(dev);
599
600         if (dev->power.runtime_status == RPM_ACTIVE) {
601                 retval = 1;
602                 goto out;
603         }
604
605         if (dev->power.runtime_status == RPM_RESUMING
606             || dev->power.runtime_status == RPM_SUSPENDING) {
607                 DEFINE_WAIT(wait);
608
609                 if (rpmflags & (RPM_ASYNC | RPM_NOWAIT)) {
610                         if (dev->power.runtime_status == RPM_SUSPENDING)
611                                 dev->power.deferred_resume = true;
612                         else
613                                 retval = -EINPROGRESS;
614                         goto out;
615                 }
616
617                 if (dev->power.irq_safe) {
618                         spin_unlock(&dev->power.lock);
619
620                         cpu_relax();
621
622                         spin_lock(&dev->power.lock);
623                         goto repeat;
624                 }
625
626                 /* Wait for the operation carried out in parallel with us. */
627                 for (;;) {
628                         prepare_to_wait(&dev->power.wait_queue, &wait,
629                                         TASK_UNINTERRUPTIBLE);
630                         if (dev->power.runtime_status != RPM_RESUMING
631                             && dev->power.runtime_status != RPM_SUSPENDING)
632                                 break;
633
634                         spin_unlock_irq(&dev->power.lock);
635
636                         schedule();
637
638                         spin_lock_irq(&dev->power.lock);
639                 }
640                 finish_wait(&dev->power.wait_queue, &wait);
641                 goto repeat;
642         }
643
644         /*
645          * See if we can skip waking up the parent.  This is safe only if
646          * power.no_callbacks is set, because otherwise we don't know whether
647          * the resume will actually succeed.
648          */
649         if (dev->power.no_callbacks && !parent && dev->parent) {
650                 spin_lock_nested(&dev->parent->power.lock, SINGLE_DEPTH_NESTING);
651                 if (dev->parent->power.disable_depth > 0
652                     || dev->parent->power.ignore_children
653                     || dev->parent->power.runtime_status == RPM_ACTIVE) {
654                         atomic_inc(&dev->parent->power.child_count);
655                         spin_unlock(&dev->parent->power.lock);
656                         retval = 1;
657                         goto no_callback;       /* Assume success. */
658                 }
659                 spin_unlock(&dev->parent->power.lock);
660         }
661
662         /* Carry out an asynchronous or a synchronous resume. */
663         if (rpmflags & RPM_ASYNC) {
664                 dev->power.request = RPM_REQ_RESUME;
665                 if (!dev->power.request_pending) {
666                         dev->power.request_pending = true;
667                         queue_work(pm_wq, &dev->power.work);
668                 }
669                 retval = 0;
670                 goto out;
671         }
672
673         if (!parent && dev->parent) {
674                 /*
675                  * Increment the parent's usage counter and resume it if
676                  * necessary.  Not needed if dev is irq-safe; then the
677                  * parent is permanently resumed.
678                  */
679                 parent = dev->parent;
680                 if (dev->power.irq_safe)
681                         goto skip_parent;
682                 spin_unlock(&dev->power.lock);
683
684                 pm_runtime_get_noresume(parent);
685
686                 spin_lock(&parent->power.lock);
687                 /*
688                  * We can resume if the parent's runtime PM is disabled or it
689                  * is set to ignore children.
690                  */
691                 if (!parent->power.disable_depth
692                     && !parent->power.ignore_children) {
693                         rpm_resume(parent, 0);
694                         if (parent->power.runtime_status != RPM_ACTIVE)
695                                 retval = -EBUSY;
696                 }
697                 spin_unlock(&parent->power.lock);
698
699                 spin_lock(&dev->power.lock);
700                 if (retval)
701                         goto out;
702                 goto repeat;
703         }
704  skip_parent:
705
706         if (dev->power.no_callbacks)
707                 goto no_callback;       /* Assume success. */
708
709         __update_runtime_status(dev, RPM_RESUMING);
710
711         if (dev->pm_domain)
712                 callback = dev->pm_domain->ops.runtime_resume;
713         else if (dev->type && dev->type->pm)
714                 callback = dev->type->pm->runtime_resume;
715         else if (dev->class && dev->class->pm)
716                 callback = dev->class->pm->runtime_resume;
717         else if (dev->bus && dev->bus->pm)
718                 callback = dev->bus->pm->runtime_resume;
719         else
720                 callback = NULL;
721
722         if (!callback && dev->driver && dev->driver->pm)
723                 callback = dev->driver->pm->runtime_resume;
724
725         retval = rpm_callback(callback, dev);
726         if (retval) {
727                 __update_runtime_status(dev, RPM_SUSPENDED);
728                 pm_runtime_cancel_pending(dev);
729         } else {
730  no_callback:
731                 __update_runtime_status(dev, RPM_ACTIVE);
732                 if (parent)
733                         atomic_inc(&parent->power.child_count);
734         }
735         wake_up_all(&dev->power.wait_queue);
736
737         if (retval >= 0)
738                 rpm_idle(dev, RPM_ASYNC);
739
740  out:
741         if (parent && !dev->power.irq_safe) {
742                 spin_unlock_irq(&dev->power.lock);
743
744                 pm_runtime_put(parent);
745
746                 spin_lock_irq(&dev->power.lock);
747         }
748
749         trace_rpm_return_int(dev, _THIS_IP_, retval);
750
751         return retval;
752 }
753
754 /**
755  * pm_runtime_work - Universal runtime PM work function.
756  * @work: Work structure used for scheduling the execution of this function.
757  *
758  * Use @work to get the device object the work is to be done for, determine what
759  * is to be done and execute the appropriate runtime PM function.
760  */
761 static void pm_runtime_work(struct work_struct *work)
762 {
763         struct device *dev = container_of(work, struct device, power.work);
764         enum rpm_request req;
765
766         spin_lock_irq(&dev->power.lock);
767
768         if (!dev->power.request_pending)
769                 goto out;
770
771         req = dev->power.request;
772         dev->power.request = RPM_REQ_NONE;
773         dev->power.request_pending = false;
774
775         switch (req) {
776         case RPM_REQ_NONE:
777                 break;
778         case RPM_REQ_IDLE:
779                 rpm_idle(dev, RPM_NOWAIT);
780                 break;
781         case RPM_REQ_SUSPEND:
782                 rpm_suspend(dev, RPM_NOWAIT);
783                 break;
784         case RPM_REQ_AUTOSUSPEND:
785                 rpm_suspend(dev, RPM_NOWAIT | RPM_AUTO);
786                 break;
787         case RPM_REQ_RESUME:
788                 rpm_resume(dev, RPM_NOWAIT);
789                 break;
790         }
791
792  out:
793         spin_unlock_irq(&dev->power.lock);
794 }
795
796 /**
797  * pm_suspend_timer_fn - Timer function for pm_schedule_suspend().
798  * @data: Device pointer passed by pm_schedule_suspend().
799  *
800  * Check if the time is right and queue a suspend request.
801  */
802 static void pm_suspend_timer_fn(unsigned long data)
803 {
804         struct device *dev = (struct device *)data;
805         unsigned long flags;
806         unsigned long expires;
807
808         spin_lock_irqsave(&dev->power.lock, flags);
809
810         expires = dev->power.timer_expires;
811         /* If 'expire' is after 'jiffies' we've been called too early. */
812         if (expires > 0 && !time_after(expires, jiffies)) {
813                 dev->power.timer_expires = 0;
814                 rpm_suspend(dev, dev->power.timer_autosuspends ?
815                     (RPM_ASYNC | RPM_AUTO) : RPM_ASYNC);
816         }
817
818         spin_unlock_irqrestore(&dev->power.lock, flags);
819 }
820
821 /**
822  * pm_schedule_suspend - Set up a timer to submit a suspend request in future.
823  * @dev: Device to suspend.
824  * @delay: Time to wait before submitting a suspend request, in milliseconds.
825  */
826 int pm_schedule_suspend(struct device *dev, unsigned int delay)
827 {
828         unsigned long flags;
829         int retval;
830
831         spin_lock_irqsave(&dev->power.lock, flags);
832
833         if (!delay) {
834                 retval = rpm_suspend(dev, RPM_ASYNC);
835                 goto out;
836         }
837
838         retval = rpm_check_suspend_allowed(dev);
839         if (retval)
840                 goto out;
841
842         /* Other scheduled or pending requests need to be canceled. */
843         pm_runtime_cancel_pending(dev);
844
845         dev->power.timer_expires = jiffies + msecs_to_jiffies(delay);
846         dev->power.timer_expires += !dev->power.timer_expires;
847         dev->power.timer_autosuspends = 0;
848         mod_timer(&dev->power.suspend_timer, dev->power.timer_expires);
849
850  out:
851         spin_unlock_irqrestore(&dev->power.lock, flags);
852
853         return retval;
854 }
855 EXPORT_SYMBOL_GPL(pm_schedule_suspend);
856
857 /**
858  * __pm_runtime_idle - Entry point for runtime idle operations.
859  * @dev: Device to send idle notification for.
860  * @rpmflags: Flag bits.
861  *
862  * If the RPM_GET_PUT flag is set, decrement the device's usage count and
863  * return immediately if it is larger than zero.  Then carry out an idle
864  * notification, either synchronous or asynchronous.
865  *
866  * This routine may be called in atomic context if the RPM_ASYNC flag is set,
867  * or if pm_runtime_irq_safe() has been called.
868  */
869 int __pm_runtime_idle(struct device *dev, int rpmflags)
870 {
871         unsigned long flags;
872         int retval;
873
874         might_sleep_if(!(rpmflags & RPM_ASYNC) && !dev->power.irq_safe);
875
876         if (rpmflags & RPM_GET_PUT) {
877                 if (!atomic_dec_and_test(&dev->power.usage_count))
878                         return 0;
879         }
880
881         spin_lock_irqsave(&dev->power.lock, flags);
882         retval = rpm_idle(dev, rpmflags);
883         spin_unlock_irqrestore(&dev->power.lock, flags);
884
885         return retval;
886 }
887 EXPORT_SYMBOL_GPL(__pm_runtime_idle);
888
889 /**
890  * __pm_runtime_suspend - Entry point for runtime put/suspend operations.
891  * @dev: Device to suspend.
892  * @rpmflags: Flag bits.
893  *
894  * If the RPM_GET_PUT flag is set, decrement the device's usage count and
895  * return immediately if it is larger than zero.  Then carry out a suspend,
896  * either synchronous or asynchronous.
897  *
898  * This routine may be called in atomic context if the RPM_ASYNC flag is set,
899  * or if pm_runtime_irq_safe() has been called.
900  */
901 int __pm_runtime_suspend(struct device *dev, int rpmflags)
902 {
903         unsigned long flags;
904         int retval;
905
906         might_sleep_if(!(rpmflags & RPM_ASYNC) && !dev->power.irq_safe);
907
908         if (rpmflags & RPM_GET_PUT) {
909                 if (!atomic_dec_and_test(&dev->power.usage_count))
910                         return 0;
911         }
912
913         spin_lock_irqsave(&dev->power.lock, flags);
914         retval = rpm_suspend(dev, rpmflags);
915         spin_unlock_irqrestore(&dev->power.lock, flags);
916
917         return retval;
918 }
919 EXPORT_SYMBOL_GPL(__pm_runtime_suspend);
920
921 /**
922  * __pm_runtime_resume - Entry point for runtime resume operations.
923  * @dev: Device to resume.
924  * @rpmflags: Flag bits.
925  *
926  * If the RPM_GET_PUT flag is set, increment the device's usage count.  Then
927  * carry out a resume, either synchronous or asynchronous.
928  *
929  * This routine may be called in atomic context if the RPM_ASYNC flag is set,
930  * or if pm_runtime_irq_safe() has been called.
931  */
932 int __pm_runtime_resume(struct device *dev, int rpmflags)
933 {
934         unsigned long flags;
935         int retval;
936
937         might_sleep_if(!(rpmflags & RPM_ASYNC) && !dev->power.irq_safe);
938
939         if (rpmflags & RPM_GET_PUT)
940                 atomic_inc(&dev->power.usage_count);
941
942         spin_lock_irqsave(&dev->power.lock, flags);
943         retval = rpm_resume(dev, rpmflags);
944         spin_unlock_irqrestore(&dev->power.lock, flags);
945
946         return retval;
947 }
948 EXPORT_SYMBOL_GPL(__pm_runtime_resume);
949
950 /**
951  * __pm_runtime_set_status - Set runtime PM status of a device.
952  * @dev: Device to handle.
953  * @status: New runtime PM status of the device.
954  *
955  * If runtime PM of the device is disabled or its power.runtime_error field is
956  * different from zero, the status may be changed either to RPM_ACTIVE, or to
957  * RPM_SUSPENDED, as long as that reflects the actual state of the device.
958  * However, if the device has a parent and the parent is not active, and the
959  * parent's power.ignore_children flag is unset, the device's status cannot be
960  * set to RPM_ACTIVE, so -EBUSY is returned in that case.
961  *
962  * If successful, __pm_runtime_set_status() clears the power.runtime_error field
963  * and the device parent's counter of unsuspended children is modified to
964  * reflect the new status.  If the new status is RPM_SUSPENDED, an idle
965  * notification request for the parent is submitted.
966  */
967 int __pm_runtime_set_status(struct device *dev, unsigned int status)
968 {
969         struct device *parent = dev->parent;
970         unsigned long flags;
971         bool notify_parent = false;
972         int error = 0;
973
974         if (status != RPM_ACTIVE && status != RPM_SUSPENDED)
975                 return -EINVAL;
976
977         spin_lock_irqsave(&dev->power.lock, flags);
978
979         if (!dev->power.runtime_error && !dev->power.disable_depth) {
980                 error = -EAGAIN;
981                 goto out;
982         }
983
984         if (dev->power.runtime_status == status)
985                 goto out_set;
986
987         if (status == RPM_SUSPENDED) {
988                 /* It always is possible to set the status to 'suspended'. */
989                 if (parent) {
990                         atomic_add_unless(&parent->power.child_count, -1, 0);
991                         notify_parent = !parent->power.ignore_children;
992                 }
993                 goto out_set;
994         }
995
996         if (parent) {
997                 spin_lock_nested(&parent->power.lock, SINGLE_DEPTH_NESTING);
998
999                 /*
1000                  * It is invalid to put an active child under a parent that is
1001                  * not active, has runtime PM enabled and the
1002                  * 'power.ignore_children' flag unset.
1003                  */
1004                 if (!parent->power.disable_depth
1005                     && !parent->power.ignore_children
1006                     && parent->power.runtime_status != RPM_ACTIVE)
1007                         error = -EBUSY;
1008                 else if (dev->power.runtime_status == RPM_SUSPENDED)
1009                         atomic_inc(&parent->power.child_count);
1010
1011                 spin_unlock(&parent->power.lock);
1012
1013                 if (error)
1014                         goto out;
1015         }
1016
1017  out_set:
1018         __update_runtime_status(dev, status);
1019         dev->power.runtime_error = 0;
1020  out:
1021         spin_unlock_irqrestore(&dev->power.lock, flags);
1022
1023         if (notify_parent)
1024                 pm_request_idle(parent);
1025
1026         return error;
1027 }
1028 EXPORT_SYMBOL_GPL(__pm_runtime_set_status);
1029
1030 /**
1031  * __pm_runtime_barrier - Cancel pending requests and wait for completions.
1032  * @dev: Device to handle.
1033  *
1034  * Flush all pending requests for the device from pm_wq and wait for all
1035  * runtime PM operations involving the device in progress to complete.
1036  *
1037  * Should be called under dev->power.lock with interrupts disabled.
1038  */
1039 static void __pm_runtime_barrier(struct device *dev)
1040 {
1041         pm_runtime_deactivate_timer(dev);
1042
1043         if (dev->power.request_pending) {
1044                 dev->power.request = RPM_REQ_NONE;
1045                 spin_unlock_irq(&dev->power.lock);
1046
1047                 cancel_work_sync(&dev->power.work);
1048
1049                 spin_lock_irq(&dev->power.lock);
1050                 dev->power.request_pending = false;
1051         }
1052
1053         if (dev->power.runtime_status == RPM_SUSPENDING
1054             || dev->power.runtime_status == RPM_RESUMING
1055             || dev->power.idle_notification) {
1056                 DEFINE_WAIT(wait);
1057
1058                 /* Suspend, wake-up or idle notification in progress. */
1059                 for (;;) {
1060                         prepare_to_wait(&dev->power.wait_queue, &wait,
1061                                         TASK_UNINTERRUPTIBLE);
1062                         if (dev->power.runtime_status != RPM_SUSPENDING
1063                             && dev->power.runtime_status != RPM_RESUMING
1064                             && !dev->power.idle_notification)
1065                                 break;
1066                         spin_unlock_irq(&dev->power.lock);
1067
1068                         schedule();
1069
1070                         spin_lock_irq(&dev->power.lock);
1071                 }
1072                 finish_wait(&dev->power.wait_queue, &wait);
1073         }
1074 }
1075
1076 /**
1077  * pm_runtime_barrier - Flush pending requests and wait for completions.
1078  * @dev: Device to handle.
1079  *
1080  * Prevent the device from being suspended by incrementing its usage counter and
1081  * if there's a pending resume request for the device, wake the device up.
1082  * Next, make sure that all pending requests for the device have been flushed
1083  * from pm_wq and wait for all runtime PM operations involving the device in
1084  * progress to complete.
1085  *
1086  * Return value:
1087  * 1, if there was a resume request pending and the device had to be woken up,
1088  * 0, otherwise
1089  */
1090 int pm_runtime_barrier(struct device *dev)
1091 {
1092         int retval = 0;
1093
1094         pm_runtime_get_noresume(dev);
1095         spin_lock_irq(&dev->power.lock);
1096
1097         if (dev->power.request_pending
1098             && dev->power.request == RPM_REQ_RESUME) {
1099                 rpm_resume(dev, 0);
1100                 retval = 1;
1101         }
1102
1103         __pm_runtime_barrier(dev);
1104
1105         spin_unlock_irq(&dev->power.lock);
1106         pm_runtime_put_noidle(dev);
1107
1108         return retval;
1109 }
1110 EXPORT_SYMBOL_GPL(pm_runtime_barrier);
1111
1112 /**
1113  * __pm_runtime_disable - Disable runtime PM of a device.
1114  * @dev: Device to handle.
1115  * @check_resume: If set, check if there's a resume request for the device.
1116  *
1117  * Increment power.disable_depth for the device and if was zero previously,
1118  * cancel all pending runtime PM requests for the device and wait for all
1119  * operations in progress to complete.  The device can be either active or
1120  * suspended after its runtime PM has been disabled.
1121  *
1122  * If @check_resume is set and there's a resume request pending when
1123  * __pm_runtime_disable() is called and power.disable_depth is zero, the
1124  * function will wake up the device before disabling its runtime PM.
1125  */
1126 void __pm_runtime_disable(struct device *dev, bool check_resume)
1127 {
1128         spin_lock_irq(&dev->power.lock);
1129
1130         if (dev->power.disable_depth > 0) {
1131                 dev->power.disable_depth++;
1132                 goto out;
1133         }
1134
1135         /*
1136          * Wake up the device if there's a resume request pending, because that
1137          * means there probably is some I/O to process and disabling runtime PM
1138          * shouldn't prevent the device from processing the I/O.
1139          */
1140         if (check_resume && dev->power.request_pending
1141             && dev->power.request == RPM_REQ_RESUME) {
1142                 /*
1143                  * Prevent suspends and idle notifications from being carried
1144                  * out after we have woken up the device.
1145                  */
1146                 pm_runtime_get_noresume(dev);
1147
1148                 rpm_resume(dev, 0);
1149
1150                 pm_runtime_put_noidle(dev);
1151         }
1152
1153         if (!dev->power.disable_depth++)
1154                 __pm_runtime_barrier(dev);
1155
1156  out:
1157         spin_unlock_irq(&dev->power.lock);
1158 }
1159 EXPORT_SYMBOL_GPL(__pm_runtime_disable);
1160
1161 /**
1162  * pm_runtime_enable - Enable runtime PM of a device.
1163  * @dev: Device to handle.
1164  */
1165 void pm_runtime_enable(struct device *dev)
1166 {
1167         unsigned long flags;
1168
1169         spin_lock_irqsave(&dev->power.lock, flags);
1170
1171         if (dev->power.disable_depth > 0)
1172                 dev->power.disable_depth--;
1173         else
1174                 dev_warn(dev, "Unbalanced %s!\n", __func__);
1175
1176         spin_unlock_irqrestore(&dev->power.lock, flags);
1177 }
1178 EXPORT_SYMBOL_GPL(pm_runtime_enable);
1179
1180 /**
1181  * pm_runtime_forbid - Block runtime PM of a device.
1182  * @dev: Device to handle.
1183  *
1184  * Increase the device's usage count and clear its power.runtime_auto flag,
1185  * so that it cannot be suspended at run time until pm_runtime_allow() is called
1186  * for it.
1187  */
1188 void pm_runtime_forbid(struct device *dev)
1189 {
1190         spin_lock_irq(&dev->power.lock);
1191         if (!dev->power.runtime_auto)
1192                 goto out;
1193
1194         dev->power.runtime_auto = false;
1195         atomic_inc(&dev->power.usage_count);
1196         rpm_resume(dev, 0);
1197
1198  out:
1199         spin_unlock_irq(&dev->power.lock);
1200 }
1201 EXPORT_SYMBOL_GPL(pm_runtime_forbid);
1202
1203 /**
1204  * pm_runtime_allow - Unblock runtime PM of a device.
1205  * @dev: Device to handle.
1206  *
1207  * Decrease the device's usage count and set its power.runtime_auto flag.
1208  */
1209 void pm_runtime_allow(struct device *dev)
1210 {
1211         spin_lock_irq(&dev->power.lock);
1212         if (dev->power.runtime_auto)
1213                 goto out;
1214
1215         dev->power.runtime_auto = true;
1216         if (atomic_dec_and_test(&dev->power.usage_count))
1217                 rpm_idle(dev, RPM_AUTO);
1218
1219  out:
1220         spin_unlock_irq(&dev->power.lock);
1221 }
1222 EXPORT_SYMBOL_GPL(pm_runtime_allow);
1223
1224 /**
1225  * pm_runtime_no_callbacks - Ignore runtime PM callbacks for a device.
1226  * @dev: Device to handle.
1227  *
1228  * Set the power.no_callbacks flag, which tells the PM core that this
1229  * device is power-managed through its parent and has no runtime PM
1230  * callbacks of its own.  The runtime sysfs attributes will be removed.
1231  */
1232 void pm_runtime_no_callbacks(struct device *dev)
1233 {
1234         spin_lock_irq(&dev->power.lock);
1235         dev->power.no_callbacks = 1;
1236         spin_unlock_irq(&dev->power.lock);
1237         if (device_is_registered(dev))
1238                 rpm_sysfs_remove(dev);
1239 }
1240 EXPORT_SYMBOL_GPL(pm_runtime_no_callbacks);
1241
1242 /**
1243  * pm_runtime_irq_safe - Leave interrupts disabled during callbacks.
1244  * @dev: Device to handle
1245  *
1246  * Set the power.irq_safe flag, which tells the PM core that the
1247  * ->runtime_suspend() and ->runtime_resume() callbacks for this device should
1248  * always be invoked with the spinlock held and interrupts disabled.  It also
1249  * causes the parent's usage counter to be permanently incremented, preventing
1250  * the parent from runtime suspending -- otherwise an irq-safe child might have
1251  * to wait for a non-irq-safe parent.
1252  */
1253 void pm_runtime_irq_safe(struct device *dev)
1254 {
1255         if (dev->parent)
1256                 pm_runtime_get_sync(dev->parent);
1257         spin_lock_irq(&dev->power.lock);
1258         dev->power.irq_safe = 1;
1259         spin_unlock_irq(&dev->power.lock);
1260 }
1261 EXPORT_SYMBOL_GPL(pm_runtime_irq_safe);
1262
1263 /**
1264  * update_autosuspend - Handle a change to a device's autosuspend settings.
1265  * @dev: Device to handle.
1266  * @old_delay: The former autosuspend_delay value.
1267  * @old_use: The former use_autosuspend value.
1268  *
1269  * Prevent runtime suspend if the new delay is negative and use_autosuspend is
1270  * set; otherwise allow it.  Send an idle notification if suspends are allowed.
1271  *
1272  * This function must be called under dev->power.lock with interrupts disabled.
1273  */
1274 static void update_autosuspend(struct device *dev, int old_delay, int old_use)
1275 {
1276         int delay = dev->power.autosuspend_delay;
1277
1278         /* Should runtime suspend be prevented now? */
1279         if (dev->power.use_autosuspend && delay < 0) {
1280
1281                 /* If it used to be allowed then prevent it. */
1282                 if (!old_use || old_delay >= 0) {
1283                         atomic_inc(&dev->power.usage_count);
1284                         rpm_resume(dev, 0);
1285                 }
1286         }
1287
1288         /* Runtime suspend should be allowed now. */
1289         else {
1290
1291                 /* If it used to be prevented then allow it. */
1292                 if (old_use && old_delay < 0)
1293                         atomic_dec(&dev->power.usage_count);
1294
1295                 /* Maybe we can autosuspend now. */
1296                 rpm_idle(dev, RPM_AUTO);
1297         }
1298 }
1299
1300 /**
1301  * pm_runtime_set_autosuspend_delay - Set a device's autosuspend_delay value.
1302  * @dev: Device to handle.
1303  * @delay: Value of the new delay in milliseconds.
1304  *
1305  * Set the device's power.autosuspend_delay value.  If it changes to negative
1306  * and the power.use_autosuspend flag is set, prevent runtime suspends.  If it
1307  * changes the other way, allow runtime suspends.
1308  */
1309 void pm_runtime_set_autosuspend_delay(struct device *dev, int delay)
1310 {
1311         int old_delay, old_use;
1312
1313         spin_lock_irq(&dev->power.lock);
1314         old_delay = dev->power.autosuspend_delay;
1315         old_use = dev->power.use_autosuspend;
1316         dev->power.autosuspend_delay = delay;
1317         update_autosuspend(dev, old_delay, old_use);
1318         spin_unlock_irq(&dev->power.lock);
1319 }
1320 EXPORT_SYMBOL_GPL(pm_runtime_set_autosuspend_delay);
1321
1322 /**
1323  * __pm_runtime_use_autosuspend - Set a device's use_autosuspend flag.
1324  * @dev: Device to handle.
1325  * @use: New value for use_autosuspend.
1326  *
1327  * Set the device's power.use_autosuspend flag, and allow or prevent runtime
1328  * suspends as needed.
1329  */
1330 void __pm_runtime_use_autosuspend(struct device *dev, bool use)
1331 {
1332         int old_delay, old_use;
1333
1334         spin_lock_irq(&dev->power.lock);
1335         old_delay = dev->power.autosuspend_delay;
1336         old_use = dev->power.use_autosuspend;
1337         dev->power.use_autosuspend = use;
1338         update_autosuspend(dev, old_delay, old_use);
1339         spin_unlock_irq(&dev->power.lock);
1340 }
1341 EXPORT_SYMBOL_GPL(__pm_runtime_use_autosuspend);
1342
1343 /**
1344  * pm_runtime_init - Initialize runtime PM fields in given device object.
1345  * @dev: Device object to initialize.
1346  */
1347 void pm_runtime_init(struct device *dev)
1348 {
1349         dev->power.runtime_status = RPM_SUSPENDED;
1350         dev->power.idle_notification = false;
1351
1352         dev->power.disable_depth = 1;
1353         atomic_set(&dev->power.usage_count, 0);
1354
1355         dev->power.runtime_error = 0;
1356
1357         atomic_set(&dev->power.child_count, 0);
1358         pm_suspend_ignore_children(dev, false);
1359         dev->power.runtime_auto = true;
1360
1361         dev->power.request_pending = false;
1362         dev->power.request = RPM_REQ_NONE;
1363         dev->power.deferred_resume = false;
1364         dev->power.accounting_timestamp = jiffies;
1365         INIT_WORK(&dev->power.work, pm_runtime_work);
1366
1367         dev->power.timer_expires = 0;
1368         setup_timer(&dev->power.suspend_timer, pm_suspend_timer_fn,
1369                         (unsigned long)dev);
1370
1371         init_waitqueue_head(&dev->power.wait_queue);
1372 }
1373
1374 /**
1375  * pm_runtime_remove - Prepare for removing a device from device hierarchy.
1376  * @dev: Device object being removed from device hierarchy.
1377  */
1378 void pm_runtime_remove(struct device *dev)
1379 {
1380         __pm_runtime_disable(dev, false);
1381
1382         /* Change the status back to 'suspended' to match the initial status. */
1383         if (dev->power.runtime_status == RPM_ACTIVE)
1384                 pm_runtime_set_suspended(dev);
1385         if (dev->power.irq_safe && dev->parent)
1386                 pm_runtime_put_sync(dev->parent);
1387 }