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