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 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/ufs-qcom.c | 2 + drivers/scsi/ufs/ufs-sysfs.c | 26 ++- drivers/scsi/ufs/ufshcd-pci.c | 24 -- drivers/scsi/ufs/ufshcd-pltfrm.c | 29 +++ drivers/scsi/ufs/ufshcd-pltfrm.h | 4 + drivers/scsi/ufs/ufshcd.c | 491 +++++++++++++++++++++++++++++++-------- drivers/scsi/ufs/ufshcd.h | 5 + include/trace/events/ufs.h | 20 ++ 8 files changed, 469 insertions(+), 132 deletions(-) -- Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, a Linux Foundation Collaborative Project.