]> git.karo-electronics.de Git - karo-tx-linux.git/blob - drivers/base/power/runtime.c
Merge remote-tracking branch 'drm/drm-next'
[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. If the ->runtime_idle callback
262  * doesn't exist or if it returns 0, call rpm_suspend with the RPM_AUTO flag.
263  *
264  * This function must be called under dev->power.lock with interrupts disabled.
265  */
266 static int rpm_idle(struct device *dev, int rpmflags)
267 {
268         int (*callback)(struct device *);
269         int retval;
270
271         trace_rpm_idle(dev, rpmflags);
272         retval = rpm_check_suspend_allowed(dev);
273         if (retval < 0)
274                 ;       /* Conditions are wrong. */
275
276         /* Idle notifications are allowed only in the RPM_ACTIVE state. */
277         else if (dev->power.runtime_status != RPM_ACTIVE)
278                 retval = -EAGAIN;
279
280         /*
281          * Any pending request other than an idle notification takes
282          * precedence over us, except that the timer may be running.
283          */
284         else if (dev->power.request_pending &&
285             dev->power.request > RPM_REQ_IDLE)
286                 retval = -EAGAIN;
287
288         /* Act as though RPM_NOWAIT is always set. */
289         else if (dev->power.idle_notification)
290                 retval = -EINPROGRESS;
291         if (retval)
292                 goto out;
293
294         /* Pending requests need to be canceled. */
295         dev->power.request = RPM_REQ_NONE;
296
297         if (dev->power.no_callbacks)
298                 goto out;
299
300         /* Carry out an asynchronous or a synchronous idle notification. */
301         if (rpmflags & RPM_ASYNC) {
302                 dev->power.request = RPM_REQ_IDLE;
303                 if (!dev->power.request_pending) {
304                         dev->power.request_pending = true;
305                         queue_work(pm_wq, &dev->power.work);
306                 }
307                 trace_rpm_return_int(dev, _THIS_IP_, 0);
308                 return 0;
309         }
310
311         dev->power.idle_notification = true;
312
313         if (dev->pm_domain)
314                 callback = dev->pm_domain->ops.runtime_idle;
315         else if (dev->type && dev->type->pm)
316                 callback = dev->type->pm->runtime_idle;
317         else if (dev->class && dev->class->pm)
318                 callback = dev->class->pm->runtime_idle;
319         else if (dev->bus && dev->bus->pm)
320                 callback = dev->bus->pm->runtime_idle;
321         else
322                 callback = NULL;
323
324         if (!callback && dev->driver && dev->driver->pm)
325                 callback = dev->driver->pm->runtime_idle;
326
327         if (callback)
328                 retval = __rpm_callback(callback, dev);
329
330         dev->power.idle_notification = false;
331         wake_up_all(&dev->power.wait_queue);
332
333  out:
334         trace_rpm_return_int(dev, _THIS_IP_, retval);
335         return retval ? retval : rpm_suspend(dev, rpmflags | RPM_AUTO);
336 }
337
338 /**
339  * rpm_callback - Run a given runtime PM callback for a given device.
340  * @cb: Runtime PM callback to run.
341  * @dev: Device to run the callback for.
342  */
343 static int rpm_callback(int (*cb)(struct device *), struct device *dev)
344 {
345         int retval;
346
347         if (!cb)
348                 return -ENOSYS;
349
350         if (dev->power.memalloc_noio) {
351                 unsigned int noio_flag;
352
353                 /*
354                  * Deadlock might be caused if memory allocation with
355                  * GFP_KERNEL happens inside runtime_suspend and
356                  * runtime_resume callbacks of one block device's
357                  * ancestor or the block device itself. Network
358                  * device might be thought as part of iSCSI block
359                  * device, so network device and its ancestor should
360                  * be marked as memalloc_noio too.
361                  */
362                 noio_flag = memalloc_noio_save();
363                 retval = __rpm_callback(cb, dev);
364                 memalloc_noio_restore(noio_flag);
365         } else {
366                 retval = __rpm_callback(cb, dev);
367         }
368
369         dev->power.runtime_error = retval;
370         return retval != -EACCES ? retval : -EIO;
371 }
372
373 /**
374  * rpm_suspend - Carry out runtime suspend of given device.
375  * @dev: Device to suspend.
376  * @rpmflags: Flag bits.
377  *
378  * Check if the device's runtime PM status allows it to be suspended.
379  * Cancel a pending idle notification, autosuspend or suspend. If
380  * another suspend has been started earlier, either return immediately
381  * or wait for it to finish, depending on the RPM_NOWAIT and RPM_ASYNC
382  * flags. If the RPM_ASYNC flag is set then queue a suspend request;
383  * otherwise run the ->runtime_suspend() callback directly. When
384  * ->runtime_suspend succeeded, if a deferred resume was requested while
385  * the callback was running then carry it out, otherwise send an idle
386  * notification for its parent (if the suspend succeeded and both
387  * ignore_children of parent->power and irq_safe of dev->power are not set).
388  * If ->runtime_suspend failed with -EAGAIN or -EBUSY, and if the RPM_AUTO
389  * flag is set and the next autosuspend-delay expiration time is in the
390  * future, schedule another autosuspend attempt.
391  *
392  * This function must be called under dev->power.lock with interrupts disabled.
393  */
394 static int rpm_suspend(struct device *dev, int rpmflags)
395         __releases(&dev->power.lock) __acquires(&dev->power.lock)
396 {
397         int (*callback)(struct device *);
398         struct device *parent = NULL;
399         int retval;
400
401         trace_rpm_suspend(dev, rpmflags);
402
403  repeat:
404         retval = rpm_check_suspend_allowed(dev);
405
406         if (retval < 0)
407                 ;       /* Conditions are wrong. */
408
409         /* Synchronous suspends are not allowed in the RPM_RESUMING state. */
410         else if (dev->power.runtime_status == RPM_RESUMING &&
411             !(rpmflags & RPM_ASYNC))
412                 retval = -EAGAIN;
413         if (retval)
414                 goto out;
415
416         /* If the autosuspend_delay time hasn't expired yet, reschedule. */
417         if ((rpmflags & RPM_AUTO)
418             && dev->power.runtime_status != RPM_SUSPENDING) {
419                 unsigned long expires = pm_runtime_autosuspend_expiration(dev);
420
421                 if (expires != 0) {
422                         /* Pending requests need to be canceled. */
423                         dev->power.request = RPM_REQ_NONE;
424
425                         /*
426                          * Optimization: If the timer is already running and is
427                          * set to expire at or before the autosuspend delay,
428                          * avoid the overhead of resetting it.  Just let it
429                          * expire; pm_suspend_timer_fn() will take care of the
430                          * rest.
431                          */
432                         if (!(dev->power.timer_expires && time_before_eq(
433                             dev->power.timer_expires, expires))) {
434                                 dev->power.timer_expires = expires;
435                                 mod_timer(&dev->power.suspend_timer, expires);
436                         }
437                         dev->power.timer_autosuspends = 1;
438                         goto out;
439                 }
440         }
441
442         /* Other scheduled or pending requests need to be canceled. */
443         pm_runtime_cancel_pending(dev);
444
445         if (dev->power.runtime_status == RPM_SUSPENDING) {
446                 DEFINE_WAIT(wait);
447
448                 if (rpmflags & (RPM_ASYNC | RPM_NOWAIT)) {
449                         retval = -EINPROGRESS;
450                         goto out;
451                 }
452
453                 if (dev->power.irq_safe) {
454                         spin_unlock(&dev->power.lock);
455
456                         cpu_relax();
457
458                         spin_lock(&dev->power.lock);
459                         goto repeat;
460                 }
461
462                 /* Wait for the other suspend running in parallel with us. */
463                 for (;;) {
464                         prepare_to_wait(&dev->power.wait_queue, &wait,
465                                         TASK_UNINTERRUPTIBLE);
466                         if (dev->power.runtime_status != RPM_SUSPENDING)
467                                 break;
468
469                         spin_unlock_irq(&dev->power.lock);
470
471                         schedule();
472
473                         spin_lock_irq(&dev->power.lock);
474                 }
475                 finish_wait(&dev->power.wait_queue, &wait);
476                 goto repeat;
477         }
478
479         if (dev->power.no_callbacks)
480                 goto no_callback;       /* Assume success. */
481
482         /* Carry out an asynchronous or a synchronous suspend. */
483         if (rpmflags & RPM_ASYNC) {
484                 dev->power.request = (rpmflags & RPM_AUTO) ?
485                     RPM_REQ_AUTOSUSPEND : RPM_REQ_SUSPEND;
486                 if (!dev->power.request_pending) {
487                         dev->power.request_pending = true;
488                         queue_work(pm_wq, &dev->power.work);
489                 }
490                 goto out;
491         }
492
493         __update_runtime_status(dev, RPM_SUSPENDING);
494
495         if (dev->pm_domain)
496                 callback = dev->pm_domain->ops.runtime_suspend;
497         else if (dev->type && dev->type->pm)
498                 callback = dev->type->pm->runtime_suspend;
499         else if (dev->class && dev->class->pm)
500                 callback = dev->class->pm->runtime_suspend;
501         else if (dev->bus && dev->bus->pm)
502                 callback = dev->bus->pm->runtime_suspend;
503         else
504                 callback = NULL;
505
506         if (!callback && dev->driver && dev->driver->pm)
507                 callback = dev->driver->pm->runtime_suspend;
508
509         retval = rpm_callback(callback, dev);
510         if (retval)
511                 goto fail;
512
513  no_callback:
514         __update_runtime_status(dev, RPM_SUSPENDED);
515         pm_runtime_deactivate_timer(dev);
516
517         if (dev->parent) {
518                 parent = dev->parent;
519                 atomic_add_unless(&parent->power.child_count, -1, 0);
520         }
521         wake_up_all(&dev->power.wait_queue);
522
523         if (dev->power.deferred_resume) {
524                 dev->power.deferred_resume = false;
525                 rpm_resume(dev, 0);
526                 retval = -EAGAIN;
527                 goto out;
528         }
529
530         /* Maybe the parent is now able to suspend. */
531         if (parent && !parent->power.ignore_children && !dev->power.irq_safe) {
532                 spin_unlock(&dev->power.lock);
533
534                 spin_lock(&parent->power.lock);
535                 rpm_idle(parent, RPM_ASYNC);
536                 spin_unlock(&parent->power.lock);
537
538                 spin_lock(&dev->power.lock);
539         }
540
541  out:
542         trace_rpm_return_int(dev, _THIS_IP_, retval);
543
544         return retval;
545
546  fail:
547         __update_runtime_status(dev, RPM_ACTIVE);
548         dev->power.deferred_resume = false;
549         wake_up_all(&dev->power.wait_queue);
550
551         if (retval == -EAGAIN || retval == -EBUSY) {
552                 dev->power.runtime_error = 0;
553
554                 /*
555                  * If the callback routine failed an autosuspend, and
556                  * if the last_busy time has been updated so that there
557                  * is a new autosuspend expiration time, automatically
558                  * reschedule another autosuspend.
559                  */
560                 if ((rpmflags & RPM_AUTO) &&
561                     pm_runtime_autosuspend_expiration(dev) != 0)
562                         goto repeat;
563         } else {
564                 pm_runtime_cancel_pending(dev);
565         }
566         goto out;
567 }
568
569 /**
570  * rpm_resume - Carry out runtime resume of given device.
571  * @dev: Device to resume.
572  * @rpmflags: Flag bits.
573  *
574  * Check if the device's runtime PM status allows it to be resumed.  Cancel
575  * any scheduled or pending requests.  If another resume has been started
576  * earlier, either return immediately or wait for it to finish, depending on the
577  * RPM_NOWAIT and RPM_ASYNC flags.  Similarly, if there's a suspend running in
578  * parallel with this function, either tell the other process to resume after
579  * suspending (deferred_resume) or wait for it to finish.  If the RPM_ASYNC
580  * flag is set then queue a resume request; otherwise run the
581  * ->runtime_resume() callback directly.  Queue an idle notification for the
582  * device if the resume succeeded.
583  *
584  * This function must be called under dev->power.lock with interrupts disabled.
585  */
586 static int rpm_resume(struct device *dev, int rpmflags)
587         __releases(&dev->power.lock) __acquires(&dev->power.lock)
588 {
589         int (*callback)(struct device *);
590         struct device *parent = NULL;
591         int retval = 0;
592
593         trace_rpm_resume(dev, rpmflags);
594
595  repeat:
596         if (dev->power.runtime_error)
597                 retval = -EINVAL;
598         else if (dev->power.disable_depth == 1 && dev->power.is_suspended
599             && dev->power.runtime_status == RPM_ACTIVE)
600                 retval = 1;
601         else if (dev->power.disable_depth > 0)
602                 retval = -EACCES;
603         if (retval)
604                 goto out;
605
606         /*
607          * Other scheduled or pending requests need to be canceled.  Small
608          * optimization: If an autosuspend timer is running, leave it running
609          * rather than cancelling it now only to restart it again in the near
610          * future.
611          */
612         dev->power.request = RPM_REQ_NONE;
613         if (!dev->power.timer_autosuspends)
614                 pm_runtime_deactivate_timer(dev);
615
616         if (dev->power.runtime_status == RPM_ACTIVE) {
617                 retval = 1;
618                 goto out;
619         }
620
621         if (dev->power.runtime_status == RPM_RESUMING
622             || dev->power.runtime_status == RPM_SUSPENDING) {
623                 DEFINE_WAIT(wait);
624
625                 if (rpmflags & (RPM_ASYNC | RPM_NOWAIT)) {
626                         if (dev->power.runtime_status == RPM_SUSPENDING)
627                                 dev->power.deferred_resume = true;
628                         else
629                                 retval = -EINPROGRESS;
630                         goto out;
631                 }
632
633                 if (dev->power.irq_safe) {
634                         spin_unlock(&dev->power.lock);
635
636                         cpu_relax();
637
638                         spin_lock(&dev->power.lock);
639                         goto repeat;
640                 }
641
642                 /* Wait for the operation carried out in parallel with us. */
643                 for (;;) {
644                         prepare_to_wait(&dev->power.wait_queue, &wait,
645                                         TASK_UNINTERRUPTIBLE);
646                         if (dev->power.runtime_status != RPM_RESUMING
647                             && dev->power.runtime_status != RPM_SUSPENDING)
648                                 break;
649
650                         spin_unlock_irq(&dev->power.lock);
651
652                         schedule();
653
654                         spin_lock_irq(&dev->power.lock);
655                 }
656                 finish_wait(&dev->power.wait_queue, &wait);
657                 goto repeat;
658         }
659
660         /*
661          * See if we can skip waking up the parent.  This is safe only if
662          * power.no_callbacks is set, because otherwise we don't know whether
663          * the resume will actually succeed.
664          */
665         if (dev->power.no_callbacks && !parent && dev->parent) {
666                 spin_lock_nested(&dev->parent->power.lock, SINGLE_DEPTH_NESTING);
667                 if (dev->parent->power.disable_depth > 0
668                     || dev->parent->power.ignore_children
669                     || dev->parent->power.runtime_status == RPM_ACTIVE) {
670                         atomic_inc(&dev->parent->power.child_count);
671                         spin_unlock(&dev->parent->power.lock);
672                         retval = 1;
673                         goto no_callback;       /* Assume success. */
674                 }
675                 spin_unlock(&dev->parent->power.lock);
676         }
677
678         /* Carry out an asynchronous or a synchronous resume. */
679         if (rpmflags & RPM_ASYNC) {
680                 dev->power.request = RPM_REQ_RESUME;
681                 if (!dev->power.request_pending) {
682                         dev->power.request_pending = true;
683                         queue_work(pm_wq, &dev->power.work);
684                 }
685                 retval = 0;
686                 goto out;
687         }
688
689         if (!parent && dev->parent) {
690                 /*
691                  * Increment the parent's usage counter and resume it if
692                  * necessary.  Not needed if dev is irq-safe; then the
693                  * parent is permanently resumed.
694                  */
695                 parent = dev->parent;
696                 if (dev->power.irq_safe)
697                         goto skip_parent;
698                 spin_unlock(&dev->power.lock);
699
700                 pm_runtime_get_noresume(parent);
701
702                 spin_lock(&parent->power.lock);
703                 /*
704                  * We can resume if the parent's runtime PM is disabled or it
705                  * is set to ignore children.
706                  */
707                 if (!parent->power.disable_depth
708                     && !parent->power.ignore_children) {
709                         rpm_resume(parent, 0);
710                         if (parent->power.runtime_status != RPM_ACTIVE)
711                                 retval = -EBUSY;
712                 }
713                 spin_unlock(&parent->power.lock);
714
715                 spin_lock(&dev->power.lock);
716                 if (retval)
717                         goto out;
718                 goto repeat;
719         }
720  skip_parent:
721
722         if (dev->power.no_callbacks)
723                 goto no_callback;       /* Assume success. */
724
725         __update_runtime_status(dev, RPM_RESUMING);
726
727         if (dev->pm_domain)
728                 callback = dev->pm_domain->ops.runtime_resume;
729         else if (dev->type && dev->type->pm)
730                 callback = dev->type->pm->runtime_resume;
731         else if (dev->class && dev->class->pm)
732                 callback = dev->class->pm->runtime_resume;
733         else if (dev->bus && dev->bus->pm)
734                 callback = dev->bus->pm->runtime_resume;
735         else
736                 callback = NULL;
737
738         if (!callback && dev->driver && dev->driver->pm)
739                 callback = dev->driver->pm->runtime_resume;
740
741         retval = rpm_callback(callback, dev);
742         if (retval) {
743                 __update_runtime_status(dev, RPM_SUSPENDED);
744                 pm_runtime_cancel_pending(dev);
745         } else {
746  no_callback:
747                 __update_runtime_status(dev, RPM_ACTIVE);
748                 if (parent)
749                         atomic_inc(&parent->power.child_count);
750         }
751         wake_up_all(&dev->power.wait_queue);
752
753         if (retval >= 0)
754                 rpm_idle(dev, RPM_ASYNC);
755
756  out:
757         if (parent && !dev->power.irq_safe) {
758                 spin_unlock_irq(&dev->power.lock);
759
760                 pm_runtime_put(parent);
761
762                 spin_lock_irq(&dev->power.lock);
763         }
764
765         trace_rpm_return_int(dev, _THIS_IP_, retval);
766
767         return retval;
768 }
769
770 /**
771  * pm_runtime_work - Universal runtime PM work function.
772  * @work: Work structure used for scheduling the execution of this function.
773  *
774  * Use @work to get the device object the work is to be done for, determine what
775  * is to be done and execute the appropriate runtime PM function.
776  */
777 static void pm_runtime_work(struct work_struct *work)
778 {
779         struct device *dev = container_of(work, struct device, power.work);
780         enum rpm_request req;
781
782         spin_lock_irq(&dev->power.lock);
783
784         if (!dev->power.request_pending)
785                 goto out;
786
787         req = dev->power.request;
788         dev->power.request = RPM_REQ_NONE;
789         dev->power.request_pending = false;
790
791         switch (req) {
792         case RPM_REQ_NONE:
793                 break;
794         case RPM_REQ_IDLE:
795                 rpm_idle(dev, RPM_NOWAIT);
796                 break;
797         case RPM_REQ_SUSPEND:
798                 rpm_suspend(dev, RPM_NOWAIT);
799                 break;
800         case RPM_REQ_AUTOSUSPEND:
801                 rpm_suspend(dev, RPM_NOWAIT | RPM_AUTO);
802                 break;
803         case RPM_REQ_RESUME:
804                 rpm_resume(dev, RPM_NOWAIT);
805                 break;
806         }
807
808  out:
809         spin_unlock_irq(&dev->power.lock);
810 }
811
812 /**
813  * pm_suspend_timer_fn - Timer function for pm_schedule_suspend().
814  * @data: Device pointer passed by pm_schedule_suspend().
815  *
816  * Check if the time is right and queue a suspend request.
817  */
818 static void pm_suspend_timer_fn(unsigned long data)
819 {
820         struct device *dev = (struct device *)data;
821         unsigned long flags;
822         unsigned long expires;
823
824         spin_lock_irqsave(&dev->power.lock, flags);
825
826         expires = dev->power.timer_expires;
827         /* If 'expire' is after 'jiffies' we've been called too early. */
828         if (expires > 0 && !time_after(expires, jiffies)) {
829                 dev->power.timer_expires = 0;
830                 rpm_suspend(dev, dev->power.timer_autosuspends ?
831                     (RPM_ASYNC | RPM_AUTO) : RPM_ASYNC);
832         }
833
834         spin_unlock_irqrestore(&dev->power.lock, flags);
835 }
836
837 /**
838  * pm_schedule_suspend - Set up a timer to submit a suspend request in future.
839  * @dev: Device to suspend.
840  * @delay: Time to wait before submitting a suspend request, in milliseconds.
841  */
842 int pm_schedule_suspend(struct device *dev, unsigned int delay)
843 {
844         unsigned long flags;
845         int retval;
846
847         spin_lock_irqsave(&dev->power.lock, flags);
848
849         if (!delay) {
850                 retval = rpm_suspend(dev, RPM_ASYNC);
851                 goto out;
852         }
853
854         retval = rpm_check_suspend_allowed(dev);
855         if (retval)
856                 goto out;
857
858         /* Other scheduled or pending requests need to be canceled. */
859         pm_runtime_cancel_pending(dev);
860
861         dev->power.timer_expires = jiffies + msecs_to_jiffies(delay);
862         dev->power.timer_expires += !dev->power.timer_expires;
863         dev->power.timer_autosuspends = 0;
864         mod_timer(&dev->power.suspend_timer, dev->power.timer_expires);
865
866  out:
867         spin_unlock_irqrestore(&dev->power.lock, flags);
868
869         return retval;
870 }
871 EXPORT_SYMBOL_GPL(pm_schedule_suspend);
872
873 /**
874  * __pm_runtime_idle - Entry point for runtime idle operations.
875  * @dev: Device to send idle notification for.
876  * @rpmflags: Flag bits.
877  *
878  * If the RPM_GET_PUT flag is set, decrement the device's usage count and
879  * return immediately if it is larger than zero.  Then carry out an idle
880  * notification, either synchronous or asynchronous.
881  *
882  * This routine may be called in atomic context if the RPM_ASYNC flag is set,
883  * or if pm_runtime_irq_safe() has been called.
884  */
885 int __pm_runtime_idle(struct device *dev, int rpmflags)
886 {
887         unsigned long flags;
888         int retval;
889
890         might_sleep_if(!(rpmflags & RPM_ASYNC) && !dev->power.irq_safe);
891
892         if (rpmflags & RPM_GET_PUT) {
893                 if (!atomic_dec_and_test(&dev->power.usage_count))
894                         return 0;
895         }
896
897         spin_lock_irqsave(&dev->power.lock, flags);
898         retval = rpm_idle(dev, rpmflags);
899         spin_unlock_irqrestore(&dev->power.lock, flags);
900
901         return retval;
902 }
903 EXPORT_SYMBOL_GPL(__pm_runtime_idle);
904
905 /**
906  * __pm_runtime_suspend - Entry point for runtime put/suspend operations.
907  * @dev: Device to suspend.
908  * @rpmflags: Flag bits.
909  *
910  * If the RPM_GET_PUT flag is set, decrement the device's usage count and
911  * return immediately if it is larger than zero.  Then carry out a suspend,
912  * either synchronous or asynchronous.
913  *
914  * This routine may be called in atomic context if the RPM_ASYNC flag is set,
915  * or if pm_runtime_irq_safe() has been called.
916  */
917 int __pm_runtime_suspend(struct device *dev, int rpmflags)
918 {
919         unsigned long flags;
920         int retval;
921
922         might_sleep_if(!(rpmflags & RPM_ASYNC) && !dev->power.irq_safe);
923
924         if (rpmflags & RPM_GET_PUT) {
925                 if (!atomic_dec_and_test(&dev->power.usage_count))
926                         return 0;
927         }
928
929         spin_lock_irqsave(&dev->power.lock, flags);
930         retval = rpm_suspend(dev, rpmflags);
931         spin_unlock_irqrestore(&dev->power.lock, flags);
932
933         return retval;
934 }
935 EXPORT_SYMBOL_GPL(__pm_runtime_suspend);
936
937 /**
938  * __pm_runtime_resume - Entry point for runtime resume operations.
939  * @dev: Device to resume.
940  * @rpmflags: Flag bits.
941  *
942  * If the RPM_GET_PUT flag is set, increment the device's usage count.  Then
943  * carry out a resume, either synchronous or asynchronous.
944  *
945  * This routine may be called in atomic context if the RPM_ASYNC flag is set,
946  * or if pm_runtime_irq_safe() has been called.
947  */
948 int __pm_runtime_resume(struct device *dev, int rpmflags)
949 {
950         unsigned long flags;
951         int retval;
952
953         might_sleep_if(!(rpmflags & RPM_ASYNC) && !dev->power.irq_safe);
954
955         if (rpmflags & RPM_GET_PUT)
956                 atomic_inc(&dev->power.usage_count);
957
958         spin_lock_irqsave(&dev->power.lock, flags);
959         retval = rpm_resume(dev, rpmflags);
960         spin_unlock_irqrestore(&dev->power.lock, flags);
961
962         return retval;
963 }
964 EXPORT_SYMBOL_GPL(__pm_runtime_resume);
965
966 /**
967  * __pm_runtime_set_status - Set runtime PM status of a device.
968  * @dev: Device to handle.
969  * @status: New runtime PM status of the device.
970  *
971  * If runtime PM of the device is disabled or its power.runtime_error field is
972  * different from zero, the status may be changed either to RPM_ACTIVE, or to
973  * RPM_SUSPENDED, as long as that reflects the actual state of the device.
974  * However, if the device has a parent and the parent is not active, and the
975  * parent's power.ignore_children flag is unset, the device's status cannot be
976  * set to RPM_ACTIVE, so -EBUSY is returned in that case.
977  *
978  * If successful, __pm_runtime_set_status() clears the power.runtime_error field
979  * and the device parent's counter of unsuspended children is modified to
980  * reflect the new status.  If the new status is RPM_SUSPENDED, an idle
981  * notification request for the parent is submitted.
982  */
983 int __pm_runtime_set_status(struct device *dev, unsigned int status)
984 {
985         struct device *parent = dev->parent;
986         unsigned long flags;
987         bool notify_parent = false;
988         int error = 0;
989
990         if (status != RPM_ACTIVE && status != RPM_SUSPENDED)
991                 return -EINVAL;
992
993         spin_lock_irqsave(&dev->power.lock, flags);
994
995         if (!dev->power.runtime_error && !dev->power.disable_depth) {
996                 error = -EAGAIN;
997                 goto out;
998         }
999
1000         if (dev->power.runtime_status == status)
1001                 goto out_set;
1002
1003         if (status == RPM_SUSPENDED) {
1004                 /* It always is possible to set the status to 'suspended'. */
1005                 if (parent) {
1006                         atomic_add_unless(&parent->power.child_count, -1, 0);
1007                         notify_parent = !parent->power.ignore_children;
1008                 }
1009                 goto out_set;
1010         }
1011
1012         if (parent) {
1013                 spin_lock_nested(&parent->power.lock, SINGLE_DEPTH_NESTING);
1014
1015                 /*
1016                  * It is invalid to put an active child under a parent that is
1017                  * not active, has runtime PM enabled and the
1018                  * 'power.ignore_children' flag unset.
1019                  */
1020                 if (!parent->power.disable_depth
1021                     && !parent->power.ignore_children
1022                     && parent->power.runtime_status != RPM_ACTIVE)
1023                         error = -EBUSY;
1024                 else if (dev->power.runtime_status == RPM_SUSPENDED)
1025                         atomic_inc(&parent->power.child_count);
1026
1027                 spin_unlock(&parent->power.lock);
1028
1029                 if (error)
1030                         goto out;
1031         }
1032
1033  out_set:
1034         __update_runtime_status(dev, status);
1035         dev->power.runtime_error = 0;
1036  out:
1037         spin_unlock_irqrestore(&dev->power.lock, flags);
1038
1039         if (notify_parent)
1040                 pm_request_idle(parent);
1041
1042         return error;
1043 }
1044 EXPORT_SYMBOL_GPL(__pm_runtime_set_status);
1045
1046 /**
1047  * __pm_runtime_barrier - Cancel pending requests and wait for completions.
1048  * @dev: Device to handle.
1049  *
1050  * Flush all pending requests for the device from pm_wq and wait for all
1051  * runtime PM operations involving the device in progress to complete.
1052  *
1053  * Should be called under dev->power.lock with interrupts disabled.
1054  */
1055 static void __pm_runtime_barrier(struct device *dev)
1056 {
1057         pm_runtime_deactivate_timer(dev);
1058
1059         if (dev->power.request_pending) {
1060                 dev->power.request = RPM_REQ_NONE;
1061                 spin_unlock_irq(&dev->power.lock);
1062
1063                 cancel_work_sync(&dev->power.work);
1064
1065                 spin_lock_irq(&dev->power.lock);
1066                 dev->power.request_pending = false;
1067         }
1068
1069         if (dev->power.runtime_status == RPM_SUSPENDING
1070             || dev->power.runtime_status == RPM_RESUMING
1071             || dev->power.idle_notification) {
1072                 DEFINE_WAIT(wait);
1073
1074                 /* Suspend, wake-up or idle notification in progress. */
1075                 for (;;) {
1076                         prepare_to_wait(&dev->power.wait_queue, &wait,
1077                                         TASK_UNINTERRUPTIBLE);
1078                         if (dev->power.runtime_status != RPM_SUSPENDING
1079                             && dev->power.runtime_status != RPM_RESUMING
1080                             && !dev->power.idle_notification)
1081                                 break;
1082                         spin_unlock_irq(&dev->power.lock);
1083
1084                         schedule();
1085
1086                         spin_lock_irq(&dev->power.lock);
1087                 }
1088                 finish_wait(&dev->power.wait_queue, &wait);
1089         }
1090 }
1091
1092 /**
1093  * pm_runtime_barrier - Flush pending requests and wait for completions.
1094  * @dev: Device to handle.
1095  *
1096  * Prevent the device from being suspended by incrementing its usage counter and
1097  * if there's a pending resume request for the device, wake the device up.
1098  * Next, make sure that all pending requests for the device have been flushed
1099  * from pm_wq and wait for all runtime PM operations involving the device in
1100  * progress to complete.
1101  *
1102  * Return value:
1103  * 1, if there was a resume request pending and the device had to be woken up,
1104  * 0, otherwise
1105  */
1106 int pm_runtime_barrier(struct device *dev)
1107 {
1108         int retval = 0;
1109
1110         pm_runtime_get_noresume(dev);
1111         spin_lock_irq(&dev->power.lock);
1112
1113         if (dev->power.request_pending
1114             && dev->power.request == RPM_REQ_RESUME) {
1115                 rpm_resume(dev, 0);
1116                 retval = 1;
1117         }
1118
1119         __pm_runtime_barrier(dev);
1120
1121         spin_unlock_irq(&dev->power.lock);
1122         pm_runtime_put_noidle(dev);
1123
1124         return retval;
1125 }
1126 EXPORT_SYMBOL_GPL(pm_runtime_barrier);
1127
1128 /**
1129  * __pm_runtime_disable - Disable runtime PM of a device.
1130  * @dev: Device to handle.
1131  * @check_resume: If set, check if there's a resume request for the device.
1132  *
1133  * Increment power.disable_depth for the device and if was zero previously,
1134  * cancel all pending runtime PM requests for the device and wait for all
1135  * operations in progress to complete.  The device can be either active or
1136  * suspended after its runtime PM has been disabled.
1137  *
1138  * If @check_resume is set and there's a resume request pending when
1139  * __pm_runtime_disable() is called and power.disable_depth is zero, the
1140  * function will wake up the device before disabling its runtime PM.
1141  */
1142 void __pm_runtime_disable(struct device *dev, bool check_resume)
1143 {
1144         spin_lock_irq(&dev->power.lock);
1145
1146         if (dev->power.disable_depth > 0) {
1147                 dev->power.disable_depth++;
1148                 goto out;
1149         }
1150
1151         /*
1152          * Wake up the device if there's a resume request pending, because that
1153          * means there probably is some I/O to process and disabling runtime PM
1154          * shouldn't prevent the device from processing the I/O.
1155          */
1156         if (check_resume && dev->power.request_pending
1157             && dev->power.request == RPM_REQ_RESUME) {
1158                 /*
1159                  * Prevent suspends and idle notifications from being carried
1160                  * out after we have woken up the device.
1161                  */
1162                 pm_runtime_get_noresume(dev);
1163
1164                 rpm_resume(dev, 0);
1165
1166                 pm_runtime_put_noidle(dev);
1167         }
1168
1169         if (!dev->power.disable_depth++)
1170                 __pm_runtime_barrier(dev);
1171
1172  out:
1173         spin_unlock_irq(&dev->power.lock);
1174 }
1175 EXPORT_SYMBOL_GPL(__pm_runtime_disable);
1176
1177 /**
1178  * pm_runtime_enable - Enable runtime PM of a device.
1179  * @dev: Device to handle.
1180  */
1181 void pm_runtime_enable(struct device *dev)
1182 {
1183         unsigned long flags;
1184
1185         spin_lock_irqsave(&dev->power.lock, flags);
1186
1187         if (dev->power.disable_depth > 0)
1188                 dev->power.disable_depth--;
1189         else
1190                 dev_warn(dev, "Unbalanced %s!\n", __func__);
1191
1192         spin_unlock_irqrestore(&dev->power.lock, flags);
1193 }
1194 EXPORT_SYMBOL_GPL(pm_runtime_enable);
1195
1196 /**
1197  * pm_runtime_forbid - Block runtime PM of a device.
1198  * @dev: Device to handle.
1199  *
1200  * Increase the device's usage count and clear its power.runtime_auto flag,
1201  * so that it cannot be suspended at run time until pm_runtime_allow() is called
1202  * for it.
1203  */
1204 void pm_runtime_forbid(struct device *dev)
1205 {
1206         spin_lock_irq(&dev->power.lock);
1207         if (!dev->power.runtime_auto)
1208                 goto out;
1209
1210         dev->power.runtime_auto = false;
1211         atomic_inc(&dev->power.usage_count);
1212         rpm_resume(dev, 0);
1213
1214  out:
1215         spin_unlock_irq(&dev->power.lock);
1216 }
1217 EXPORT_SYMBOL_GPL(pm_runtime_forbid);
1218
1219 /**
1220  * pm_runtime_allow - Unblock runtime PM of a device.
1221  * @dev: Device to handle.
1222  *
1223  * Decrease the device's usage count and set its power.runtime_auto flag.
1224  */
1225 void pm_runtime_allow(struct device *dev)
1226 {
1227         spin_lock_irq(&dev->power.lock);
1228         if (dev->power.runtime_auto)
1229                 goto out;
1230
1231         dev->power.runtime_auto = true;
1232         if (atomic_dec_and_test(&dev->power.usage_count))
1233                 rpm_idle(dev, RPM_AUTO);
1234
1235  out:
1236         spin_unlock_irq(&dev->power.lock);
1237 }
1238 EXPORT_SYMBOL_GPL(pm_runtime_allow);
1239
1240 /**
1241  * pm_runtime_no_callbacks - Ignore runtime PM callbacks for a device.
1242  * @dev: Device to handle.
1243  *
1244  * Set the power.no_callbacks flag, which tells the PM core that this
1245  * device is power-managed through its parent and has no runtime PM
1246  * callbacks of its own.  The runtime sysfs attributes will be removed.
1247  */
1248 void pm_runtime_no_callbacks(struct device *dev)
1249 {
1250         spin_lock_irq(&dev->power.lock);
1251         dev->power.no_callbacks = 1;
1252         spin_unlock_irq(&dev->power.lock);
1253         if (device_is_registered(dev))
1254                 rpm_sysfs_remove(dev);
1255 }
1256 EXPORT_SYMBOL_GPL(pm_runtime_no_callbacks);
1257
1258 /**
1259  * pm_runtime_irq_safe - Leave interrupts disabled during callbacks.
1260  * @dev: Device to handle
1261  *
1262  * Set the power.irq_safe flag, which tells the PM core that the
1263  * ->runtime_suspend() and ->runtime_resume() callbacks for this device should
1264  * always be invoked with the spinlock held and interrupts disabled.  It also
1265  * causes the parent's usage counter to be permanently incremented, preventing
1266  * the parent from runtime suspending -- otherwise an irq-safe child might have
1267  * to wait for a non-irq-safe parent.
1268  */
1269 void pm_runtime_irq_safe(struct device *dev)
1270 {
1271         if (dev->parent)
1272                 pm_runtime_get_sync(dev->parent);
1273         spin_lock_irq(&dev->power.lock);
1274         dev->power.irq_safe = 1;
1275         spin_unlock_irq(&dev->power.lock);
1276 }
1277 EXPORT_SYMBOL_GPL(pm_runtime_irq_safe);
1278
1279 /**
1280  * update_autosuspend - Handle a change to a device's autosuspend settings.
1281  * @dev: Device to handle.
1282  * @old_delay: The former autosuspend_delay value.
1283  * @old_use: The former use_autosuspend value.
1284  *
1285  * Prevent runtime suspend if the new delay is negative and use_autosuspend is
1286  * set; otherwise allow it.  Send an idle notification if suspends are allowed.
1287  *
1288  * This function must be called under dev->power.lock with interrupts disabled.
1289  */
1290 static void update_autosuspend(struct device *dev, int old_delay, int old_use)
1291 {
1292         int delay = dev->power.autosuspend_delay;
1293
1294         /* Should runtime suspend be prevented now? */
1295         if (dev->power.use_autosuspend && delay < 0) {
1296
1297                 /* If it used to be allowed then prevent it. */
1298                 if (!old_use || old_delay >= 0) {
1299                         atomic_inc(&dev->power.usage_count);
1300                         rpm_resume(dev, 0);
1301                 }
1302         }
1303
1304         /* Runtime suspend should be allowed now. */
1305         else {
1306
1307                 /* If it used to be prevented then allow it. */
1308                 if (old_use && old_delay < 0)
1309                         atomic_dec(&dev->power.usage_count);
1310
1311                 /* Maybe we can autosuspend now. */
1312                 rpm_idle(dev, RPM_AUTO);
1313         }
1314 }
1315
1316 /**
1317  * pm_runtime_set_autosuspend_delay - Set a device's autosuspend_delay value.
1318  * @dev: Device to handle.
1319  * @delay: Value of the new delay in milliseconds.
1320  *
1321  * Set the device's power.autosuspend_delay value.  If it changes to negative
1322  * and the power.use_autosuspend flag is set, prevent runtime suspends.  If it
1323  * changes the other way, allow runtime suspends.
1324  */
1325 void pm_runtime_set_autosuspend_delay(struct device *dev, int delay)
1326 {
1327         int old_delay, old_use;
1328
1329         spin_lock_irq(&dev->power.lock);
1330         old_delay = dev->power.autosuspend_delay;
1331         old_use = dev->power.use_autosuspend;
1332         dev->power.autosuspend_delay = delay;
1333         update_autosuspend(dev, old_delay, old_use);
1334         spin_unlock_irq(&dev->power.lock);
1335 }
1336 EXPORT_SYMBOL_GPL(pm_runtime_set_autosuspend_delay);
1337
1338 /**
1339  * __pm_runtime_use_autosuspend - Set a device's use_autosuspend flag.
1340  * @dev: Device to handle.
1341  * @use: New value for use_autosuspend.
1342  *
1343  * Set the device's power.use_autosuspend flag, and allow or prevent runtime
1344  * suspends as needed.
1345  */
1346 void __pm_runtime_use_autosuspend(struct device *dev, bool use)
1347 {
1348         int old_delay, old_use;
1349
1350         spin_lock_irq(&dev->power.lock);
1351         old_delay = dev->power.autosuspend_delay;
1352         old_use = dev->power.use_autosuspend;
1353         dev->power.use_autosuspend = use;
1354         update_autosuspend(dev, old_delay, old_use);
1355         spin_unlock_irq(&dev->power.lock);
1356 }
1357 EXPORT_SYMBOL_GPL(__pm_runtime_use_autosuspend);
1358
1359 /**
1360  * pm_runtime_init - Initialize runtime PM fields in given device object.
1361  * @dev: Device object to initialize.
1362  */
1363 void pm_runtime_init(struct device *dev)
1364 {
1365         dev->power.runtime_status = RPM_SUSPENDED;
1366         dev->power.idle_notification = false;
1367
1368         dev->power.disable_depth = 1;
1369         atomic_set(&dev->power.usage_count, 0);
1370
1371         dev->power.runtime_error = 0;
1372
1373         atomic_set(&dev->power.child_count, 0);
1374         pm_suspend_ignore_children(dev, false);
1375         dev->power.runtime_auto = true;
1376
1377         dev->power.request_pending = false;
1378         dev->power.request = RPM_REQ_NONE;
1379         dev->power.deferred_resume = false;
1380         dev->power.accounting_timestamp = jiffies;
1381         INIT_WORK(&dev->power.work, pm_runtime_work);
1382
1383         dev->power.timer_expires = 0;
1384         setup_timer(&dev->power.suspend_timer, pm_suspend_timer_fn,
1385                         (unsigned long)dev);
1386
1387         init_waitqueue_head(&dev->power.wait_queue);
1388 }
1389
1390 /**
1391  * pm_runtime_remove - Prepare for removing a device from device hierarchy.
1392  * @dev: Device object being removed from device hierarchy.
1393  */
1394 void pm_runtime_remove(struct device *dev)
1395 {
1396         __pm_runtime_disable(dev, false);
1397
1398         /* Change the status back to 'suspended' to match the initial status. */
1399         if (dev->power.runtime_status == RPM_ACTIVE)
1400                 pm_runtime_set_suspended(dev);
1401         if (dev->power.irq_safe && dev->parent)
1402                 pm_runtime_put(dev->parent);
1403 }