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