blob: ea5507d23e75976e0c234c1a4951fd443e86811c [file] [log] [blame]
Bart Van Asschebca6b062018-09-26 14:01:03 -07001/* SPDX-License-Identifier: GPL-2.0 */
2
3#ifndef _BLOCK_BLK_PM_H_
4#define _BLOCK_BLK_PM_H_
5
6#include <linux/pm_runtime.h>
7
8#ifdef CONFIG_PM
Bart Van Assche018332e2021-07-09 11:10:28 -07009static inline void blk_pm_request_resume(struct request_queue *q)
Bart Van Assche154b00d2018-09-26 14:01:05 -070010{
Bart Van Assche018332e2021-07-09 11:10:28 -070011 if (q->dev && (q->rpm_status == RPM_SUSPENDED ||
12 q->rpm_status == RPM_SUSPENDING))
13 pm_request_resume(q->dev);
Bart Van Assche154b00d2018-09-26 14:01:05 -070014}
15
16static inline void blk_pm_mark_last_busy(struct request *rq)
17{
18 if (rq->q->dev && !(rq->rq_flags & RQF_PM))
19 pm_runtime_mark_last_busy(rq->q->dev);
20}
21
Bart Van Asschebca6b062018-09-26 14:01:03 -070022static inline void blk_pm_requeue_request(struct request *rq)
23{
Christoph Hellwig0d945c12018-11-15 12:17:28 -070024 lockdep_assert_held(&rq->q->queue_lock);
Bart Van Assche154b00d2018-09-26 14:01:05 -070025
Bart Van Asschebca6b062018-09-26 14:01:03 -070026 if (rq->q->dev && !(rq->rq_flags & RQF_PM))
27 rq->q->nr_pending--;
28}
29
30static inline void blk_pm_add_request(struct request_queue *q,
31 struct request *rq)
32{
Christoph Hellwig0d945c12018-11-15 12:17:28 -070033 lockdep_assert_held(&q->queue_lock);
Bart Van Assche154b00d2018-09-26 14:01:05 -070034
35 if (q->dev && !(rq->rq_flags & RQF_PM))
36 q->nr_pending++;
Bart Van Asschebca6b062018-09-26 14:01:03 -070037}
38
39static inline void blk_pm_put_request(struct request *rq)
40{
Christoph Hellwig0d945c12018-11-15 12:17:28 -070041 lockdep_assert_held(&rq->q->queue_lock);
Bart Van Assche154b00d2018-09-26 14:01:05 -070042
43 if (rq->q->dev && !(rq->rq_flags & RQF_PM))
44 --rq->q->nr_pending;
Bart Van Asschebca6b062018-09-26 14:01:03 -070045}
46#else
Bart Van Assche018332e2021-07-09 11:10:28 -070047static inline void blk_pm_request_resume(struct request_queue *q)
Bart Van Assche154b00d2018-09-26 14:01:05 -070048{
49}
50
51static inline void blk_pm_mark_last_busy(struct request *rq)
52{
53}
54
Bart Van Asschebca6b062018-09-26 14:01:03 -070055static inline void blk_pm_requeue_request(struct request *rq)
56{
57}
58
59static inline void blk_pm_add_request(struct request_queue *q,
60 struct request *rq)
61{
62}
63
64static inline void blk_pm_put_request(struct request *rq)
65{
66}
67#endif
68
69#endif /* _BLOCK_BLK_PM_H_ */