Re: [PATCH v9 1/2] scsi: ufs: Enable power management for wlun
From: Adrian Hunter <adrian.hunter@intel.com>
Date: 2021-03-02 16:39:20
Also in:
linux-arm-msm, linux-mediatek, linux-samsung-soc, linux-scsi, lkml
On 2/03/21 5:21 am, Asutosh Das wrote:
During runtime-suspend of ufs host, the scsi devices are already suspended and so are the queues associated with them. But the ufs host sends SSU to wlun during its runtime-suspend. During the process blk_queue_enter checks if the queue is not in suspended state. If so, it waits for the queue to resume, and never comes out of it. The commit (d55d15a33: scsi: block: Do not accept any requests while suspended) adds the check if the queue is in suspended state in blk_queue_enter(). Call trace: __switch_to+0x174/0x2c4 __schedule+0x478/0x764 schedule+0x9c/0xe0 blk_queue_enter+0x158/0x228 blk_mq_alloc_request+0x40/0xa4 blk_get_request+0x2c/0x70 __scsi_execute+0x60/0x1c4 ufshcd_set_dev_pwr_mode+0x124/0x1e4 ufshcd_suspend+0x208/0x83c ufshcd_runtime_suspend+0x40/0x154 ufshcd_pltfrm_runtime_suspend+0x14/0x20 pm_generic_runtime_suspend+0x28/0x3c __rpm_callback+0x80/0x2a4 rpm_suspend+0x308/0x614 rpm_idle+0x158/0x228 pm_runtime_work+0x84/0xac process_one_work+0x1f0/0x470 worker_thread+0x26c/0x4c8 kthread+0x13c/0x320 ret_from_fork+0x10/0x18 Fix this by registering ufs device wlun as a scsi driver and registering it for block runtime-pm. Also make this as a supplier for all other luns. That way, this device wlun suspends after all the consumers and resumes after hba resumes. Co-developed-by: Can Guo <redacted> Signed-off-by: Can Guo <redacted> Signed-off-by: Asutosh Das <redacted> ---
Now we need either to move the suspend/resume vops from ufshcd_suspend/resume to __ufshcd_wl_suspend/resume, assuming that would work for existing implementations of those callbacks, or otherwise create new vops ->wl_suspend() / ->wl_resume(), and then split the existing implementations of those callbacks. ufs_intel_resume() now needs to be invoked from __ufshcd_wl_resume(). I am not sure about the others: exynos_ufs_suspend() exynos_ufs_resume() ufs_hisi_suspend() ufs_hisi_resume() ufs_mtk_suspend() ufs_mtk_resume() ufs_qcom_suspend() ufs_qcom_resume() _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel