@@ -154,11 +154,9 @@ suspending the device are satisfied) and to queue up a suspend request for the
154
154
device in that case. If there is no idle callback, or if the callback returns
155
155
0, then the PM core will attempt to carry out a runtime suspend of the device,
156
156
also respecting devices configured for autosuspend. In essence this means a
157
- call to pm_runtime_autosuspend() (do note that drivers needs to update the
158
- device last busy mark, pm_runtime_mark_last_busy(), to control the delay under
159
- this circumstance). To prevent this (for example, if the callback routine has
160
- started a delayed suspend), the routine must return a non-zero value. Negative
161
- error return codes are ignored by the PM core.
157
+ call to pm_runtime_autosuspend(). To prevent this (for example, if the callback
158
+ routine has started a delayed suspend), the routine must return a non-zero
159
+ value. Negative error return codes are ignored by the PM core.
162
160
163
161
The helper functions provided by the PM core, described in Section 4, guarantee
164
162
that the following constraints are met with respect to runtime PM callbacks for
@@ -330,10 +328,9 @@ drivers/base/power/runtime.c and include/linux/pm_runtime.h:
330
328
'power.disable_depth' is different from 0
331
329
332
330
`int pm_runtime_autosuspend(struct device *dev); `
333
- - same as pm_runtime_suspend() except that the autosuspend delay is taken
334
- `into account; ` if pm_runtime_autosuspend_expiration() says the delay has
335
- not yet expired then an autosuspend is scheduled for the appropriate time
336
- and 0 is returned
331
+ - same as pm_runtime_suspend() except that a call to
332
+ pm_runtime_mark_last_busy() is made and an autosuspend is scheduled for
333
+ the appropriate time and 0 is returned
337
334
338
335
`int pm_runtime_resume(struct device *dev); `
339
336
- execute the subsystem-level resume callback for the device; returns 0 on
@@ -357,9 +354,9 @@ drivers/base/power/runtime.c and include/linux/pm_runtime.h:
357
354
success or error code if the request has not been queued up
358
355
359
356
`int pm_request_autosuspend(struct device *dev); `
360
- - schedule the execution of the subsystem-level suspend callback for the
361
- device when the autosuspend delay has expired; if the delay has already
362
- expired then the work item is queued up immediately
357
+ - Call pm_runtime_mark_last_busy() and schedule the execution of the
358
+ subsystem-level suspend callback for the device when the autosuspend delay
359
+ expires
363
360
364
361
`int pm_schedule_suspend(struct device *dev, unsigned int delay); `
365
362
- schedule the execution of the subsystem-level suspend callback for the
@@ -411,8 +408,9 @@ drivers/base/power/runtime.c and include/linux/pm_runtime.h:
411
408
pm_request_idle(dev) and return its result
412
409
413
410
`int pm_runtime_put_autosuspend(struct device *dev); `
414
- - does the same as __pm_runtime_put_autosuspend() for now, but in the
415
- future, will also call pm_runtime_mark_last_busy() as well, DO NOT USE!
411
+ - set the power.last_busy field to the current time and decrement the
412
+ device's usage counter; if the result is 0 then run
413
+ pm_request_autosuspend(dev) and return its result
416
414
417
415
`int __pm_runtime_put_autosuspend(struct device *dev); `
418
416
- decrement the device's usage counter; if the result is 0 then run
@@ -427,7 +425,8 @@ drivers/base/power/runtime.c and include/linux/pm_runtime.h:
427
425
pm_runtime_suspend(dev) and return its result
428
426
429
427
`int pm_runtime_put_sync_autosuspend(struct device *dev); `
430
- - decrement the device's usage counter; if the result is 0 then run
428
+ - set the power.last_busy field to the current time and decrement the
429
+ device's usage counter; if the result is 0 then run
431
430
pm_runtime_autosuspend(dev) and return its result
432
431
433
432
`void pm_runtime_enable(struct device *dev); `
@@ -870,11 +869,9 @@ device is automatically suspended (the subsystem or driver still has to call
870
869
the appropriate PM routines); rather it means that runtime suspends will
871
870
automatically be delayed until the desired period of inactivity has elapsed.
872
871
873
- Inactivity is determined based on the power.last_busy field. Drivers should
874
- call pm_runtime_mark_last_busy() to update this field after carrying out I/O,
875
- typically just before calling __pm_runtime_put_autosuspend(). The desired
876
- length of the inactivity period is a matter of policy. Subsystems can set this
877
- length initially by calling pm_runtime_set_autosuspend_delay(), but after device
872
+ Inactivity is determined based on the power.last_busy field. The desired length
873
+ of the inactivity period is a matter of policy. Subsystems can set this length
874
+ initially by calling pm_runtime_set_autosuspend_delay(), but after device
878
875
registration the length should be controlled by user space, using the
879
876
/sys/devices/.../power/autosuspend_delay_ms attribute.
880
877
@@ -885,12 +882,13 @@ instead of the non-autosuspend counterparts::
885
882
886
883
Instead of: pm_runtime_suspend use: pm_runtime_autosuspend;
887
884
Instead of: pm_schedule_suspend use: pm_request_autosuspend;
888
- Instead of: pm_runtime_put use: __pm_runtime_put_autosuspend ;
885
+ Instead of: pm_runtime_put use: pm_runtime_put_autosuspend ;
889
886
Instead of: pm_runtime_put_sync use: pm_runtime_put_sync_autosuspend.
890
887
891
888
Drivers may also continue to use the non-autosuspend helper functions; they
892
889
will behave normally, which means sometimes taking the autosuspend delay into
893
- account (see pm_runtime_idle).
890
+ account (see pm_runtime_idle). The autosuspend variants of the functions also
891
+ call pm_runtime_mark_last_busy().
894
892
895
893
Under some circumstances a driver or subsystem may want to prevent a device
896
894
from autosuspending immediately, even though the usage counter is zero and the
@@ -922,12 +920,10 @@ Here is a schematic pseudo-code example::
922
920
foo_io_completion(struct foo_priv *foo, void *req)
923
921
{
924
922
lock(&foo->private_lock);
925
- if (--foo->num_pending_requests == 0) {
926
- pm_runtime_mark_last_busy(&foo->dev);
927
- __pm_runtime_put_autosuspend(&foo->dev);
928
- } else {
923
+ if (--foo->num_pending_requests == 0)
924
+ pm_runtime_put_autosuspend(&foo->dev);
925
+ else
929
926
foo_process_next_request(foo);
930
- }
931
927
unlock(&foo->private_lock);
932
928
/* Send req result back to the user ... */
933
929
}
0 commit comments