From 018332e87198c94fda770b1e166ed14640b0b964 Mon Sep 17 00:00:00 2001 From: Bart Van Assche Date: Fri, 9 Jul 2021 11:10:28 -0700 Subject: [PATCH] ANDROID: Revert "scsi: block: Do not accept any requests while suspended" Commit "block: Do not accept any requests while suspended" broke the UFS driver. In the upstream kernel this has been fixed by commit b294ff3e3449 ("scsi: ufs: core: Enable power management for wlun"). Backporting that commit or backporting the entire v5.14-rc1 UFS driver is too risky. Hence revert the block layer patch that is incompatible with the v5.10 UFS driver power management code. This reverts commit d55d15a332ec651ccb49c42a8a10c03447fdf418. Bug: 193181075 Change-Id: Ic50d4e1df98d7ed393bf9797787225ae22e5d7a3 Signed-off-by: Bart Van Assche --- block/blk-core.c | 7 +++---- block/blk-pm.h | 14 +++++--------- include/linux/blkdev.h | 12 ------------ 3 files changed, 8 insertions(+), 25 deletions(-) diff --git a/block/blk-core.c b/block/blk-core.c index 2d53e2ff48ff..a00bce9f46d8 100644 --- a/block/blk-core.c +++ b/block/blk-core.c @@ -18,7 +18,6 @@ #include #include #include -#include #include #include #include @@ -441,8 +440,7 @@ int blk_queue_enter(struct request_queue *q, blk_mq_req_flags_t flags) * responsible for ensuring that that counter is * globally visible before the queue is unfrozen. */ - if ((pm && queue_rpm_status(q) != RPM_SUSPENDED) || - !blk_queue_pm_only(q)) { + if (pm || !blk_queue_pm_only(q)) { success = true; } else { percpu_ref_put(&q->q_usage_counter); @@ -467,7 +465,8 @@ int blk_queue_enter(struct request_queue *q, blk_mq_req_flags_t flags) wait_event(q->mq_freeze_wq, (!q->mq_freeze_depth && - blk_pm_resume_queue(pm, q)) || + (pm || (blk_pm_request_resume(q), + !blk_queue_pm_only(q)))) || blk_queue_dying(q)); if (blk_queue_dying(q)) return -ENODEV; diff --git a/block/blk-pm.h b/block/blk-pm.h index a2283cc9f716..ea5507d23e75 100644 --- a/block/blk-pm.h +++ b/block/blk-pm.h @@ -6,14 +6,11 @@ #include #ifdef CONFIG_PM -static inline int blk_pm_resume_queue(const bool pm, struct request_queue *q) +static inline void blk_pm_request_resume(struct request_queue *q) { - if (!q->dev || !blk_queue_pm_only(q)) - return 1; /* Nothing to do */ - if (pm && q->rpm_status != RPM_SUSPENDED) - return 1; /* Request allowed */ - pm_request_resume(q->dev); - return 0; + if (q->dev && (q->rpm_status == RPM_SUSPENDED || + q->rpm_status == RPM_SUSPENDING)) + pm_request_resume(q->dev); } static inline void blk_pm_mark_last_busy(struct request *rq) @@ -47,9 +44,8 @@ static inline void blk_pm_put_request(struct request *rq) --rq->q->nr_pending; } #else -static inline int blk_pm_resume_queue(const bool pm, struct request_queue *q) +static inline void blk_pm_request_resume(struct request_queue *q) { - return 1; } static inline void blk_pm_mark_last_busy(struct request *rq) diff --git a/include/linux/blkdev.h b/include/linux/blkdev.h index dcb7b342f0d3..433ae2605277 100644 --- a/include/linux/blkdev.h +++ b/include/linux/blkdev.h @@ -694,18 +694,6 @@ static inline bool queue_is_mq(struct request_queue *q) return q->mq_ops; } -#ifdef CONFIG_PM -static inline enum rpm_status queue_rpm_status(struct request_queue *q) -{ - return q->rpm_status; -} -#else -static inline enum rpm_status queue_rpm_status(struct request_queue *q) -{ - return RPM_ACTIVE; -} -#endif - static inline enum blk_zoned_model blk_queue_zoned_model(struct request_queue *q) {