• Sujit Reddy Thumma's avatar
    scsi: ufs: Fix broken task management command implementation · e2933132
    Sujit Reddy Thumma authored
    Currently, sending Task Management (TM) command to the card might
    be broken in some scenarios as listed below:
    
    Problem: If there are more than 8 TM commands the implementation
             returns error to the caller.
    Fix:     Wait for one of the slots to be emptied and send the command.
    
    Problem: Sometimes it is necessary for the caller to know the TM service
             response code to determine the task status.
    Fix:     Propogate the service response to the caller.
    
    Problem: If the TM command times out no proper error recovery is
             implemented.
    Fix:     Clear the command in the controller door-bell register, so that
             further commands for the same slot don't fail.
    
    Problem: While preparing the TM command descriptor, the task tag used
             should be unique across SCSI/NOP/QUERY/TM commands and not the
    	 task tag of the command which the TM command is trying to manage.
    Fix:     Use a unique task tag instead of task tag of SCSI command.
    
    Problem: Since the TM command involves H/W communication, abruptly ending
             the request on kill interrupt signal might cause h/w malfunction.
    Fix:     Wait for hardware completion interrupt with TASK_UNINTERRUPTIBLE
             set.
    Signed-off-by: default avatarSujit Reddy Thumma <sthumma@codeaurora.org>
    Reviewed-by: default avatarYaniv Gardi <ygardi@codeaurora.org>
    Tested-by: default avatarDolev Raviv <draviv@codeaurora.org>
    Acked-by: default avatarVinayak Holikatti <vinholikatti@gmail.com>
    Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
    e2933132
ufshcd.c 77.1 KB