Message ID | cover.1616633712.git.asutoshd@codeaurora.org (mailing list archive) |
---|---|
Headers | show |
Series | Enable power management for ufs wlun | expand |
On 3/24/2021 6:39 PM, Asutosh Das wrote: > This patch attempts to fix a deadlock in ufs while sending SSU. > Recently, blk_queue_enter() added a check to not process requests if the > queue is suspended. That leads to a resume of the associated device which > is suspended. In ufs, that device is ufs device wlun and it's parent is > ufs_hba. This resume tries to resume ufs device wlun which in turn tries > to resume ufs_hba, which is already in the process of suspending, thus > causing a deadlock. > > This patch takes care of: > * Suspending the ufs device lun only after all other luns are suspended > * Sending SSU during ufs device wlun suspend > * Clearing uac for rpmb and ufs device wlun > * Not sending commands to the device during host suspend > > v12 -> v13: > - Addressed Adrian's comments > * Paired pm_runtime_get_noresume() with pm_runtime_put() > * no rpm_autosuspend for ufs device wlun > * Moved runtime-pm init functionality to ufshcd_wl_probe() > - Addressed Bart's comments > * Expanded abbrevs in commit message > Hi Adrian I did a limited testing on your fix in the pm framework along with this v13 patchset. I couldn't reproduce the issue. I'd appreciate if you can please take a look at the v13 changes. If all looks good in that, I'd do an extensive testing. Thanks, -asd > v11 -> v12: > - Addressed Adrian's comments > * Fixed ahit for Mediatek driver > * Fixed error handling in ufshcd_core_init() > * Tested this patch and the issue is still seen. > > v10 -> v11: > - Fixed supplier suspending before consumer race > - Addressed Adrian's comments > * Added proper resume/suspend cb to ufshcd_auto_hibern8_update() > * Cosmetic changes to ufshcd-pci.c > * Cleaned up ufshcd_system_suspend() > * Added ufshcd_debugfs_eh_exit to ufshcd_core_init() > > v9 -> v10: > - Addressed Adrian's comments > * Moved suspend/resume vops to __ufshcd_wl_[suspend/resume]() > * Added correct resume in ufs_bsg > > v8 -> v9: > - Addressed Adrian's comments > * Moved link transition to __ufshcd_wl_[suspend/resume]() > * Fixed the other minor comments > > v7 -> v8: > - Addressed Adrian's comments > * Removed separate autosuspend delay for ufs-device lun > * Fixed the ee handler getting scheduled during pm > * Always runtime resume in suspend_prepare() > * Added CONFIG_PM_SLEEP where needed > > v6 -> v7: > * Resume the ufs device before shutting it down > > v5 -> v6: > - Addressed Adrian's comments > * Added complete() cb > * Added suspend_prepare() and complete() to all drivers > * Moved suspend_prepare() and complete() to ufshcd > * .poweroff() uses ufhcd_wl_poweroff() > * Removed several forward declarations > * Moved scsi_register_driver() to ufshcd_core_init() > > v4 -> v5: > - Addressed Adrian's comments > * Used the rpmb driver contributed by Adrian > * Runtime-resume the ufs device during suspend to honor spm-lvl > * Unregister the scsi_driver in ufshcd_remove() > * Currently shutdown() puts the ufs device to power-down mode > so, just removed ufshcd_pci_poweroff() > * Quiesce the scsi device during shutdown instead of remove > > v3 RFC -> v4: > - Addressed Bart's comments > * Except that I didn't get any checkpatch failures > - Addressed Avri's comments > - Addressed Adrian's comments > * Added a check for deepsleep power mode > * Removed a couple of forward declarations > * Didn't separate the scsi drivers because in rpmb case it just sends uac > in resume and it seemed pretty neat to me. > - Added sysfs changes to resume the devices before accessing > > Asutosh Das (2): > scsi: ufs: Enable power management for wlun > ufs: sysfs: Resume the proper scsi device > > drivers/scsi/ufs/cdns-pltfrm.c | 2 + > drivers/scsi/ufs/tc-dwc-g210-pci.c | 2 + > drivers/scsi/ufs/ufs-debugfs.c | 2 +- > drivers/scsi/ufs/ufs-debugfs.h | 2 +- > drivers/scsi/ufs/ufs-exynos.c | 2 + > drivers/scsi/ufs/ufs-hisi.c | 2 + > drivers/scsi/ufs/ufs-mediatek.c | 12 +- > drivers/scsi/ufs/ufs-qcom.c | 2 + > drivers/scsi/ufs/ufs-sysfs.c | 30 +- > drivers/scsi/ufs/ufs_bsg.c | 6 +- > drivers/scsi/ufs/ufshcd-pci.c | 36 +-- > drivers/scsi/ufs/ufshcd.c | 627 ++++++++++++++++++++++++++----------- > drivers/scsi/ufs/ufshcd.h | 6 + > include/trace/events/ufs.h | 20 ++ > 14 files changed, 513 insertions(+), 238 deletions(-) >
On 30/03/21 1:48 am, Asutosh Das (asd) wrote: > On 3/24/2021 6:39 PM, Asutosh Das wrote: >> This patch attempts to fix a deadlock in ufs while sending SSU. >> Recently, blk_queue_enter() added a check to not process requests if the >> queue is suspended. That leads to a resume of the associated device which >> is suspended. In ufs, that device is ufs device wlun and it's parent is >> ufs_hba. This resume tries to resume ufs device wlun which in turn tries >> to resume ufs_hba, which is already in the process of suspending, thus >> causing a deadlock. >> >> This patch takes care of: >> * Suspending the ufs device lun only after all other luns are suspended >> * Sending SSU during ufs device wlun suspend >> * Clearing uac for rpmb and ufs device wlun >> * Not sending commands to the device during host suspend >> >> v12 -> v13: >> - Addressed Adrian's comments >> * Paired pm_runtime_get_noresume() with pm_runtime_put() >> * no rpm_autosuspend for ufs device wlun >> * Moved runtime-pm init functionality to ufshcd_wl_probe() >> - Addressed Bart's comments >> * Expanded abbrevs in commit message >> > > Hi Adrian > I did a limited testing on your fix in the pm framework along with this v13 patchset. I couldn't reproduce the issue. > > I'd appreciate if you can please take a look at the v13 changes. > If all looks good in that, I'd do an extensive testing. I made a couple of comments on the patch, but nothing major.