On Sun, Feb 5, 2012 at 1:07 PM, Namjae Jeon <linkinjeon@xxxxxxxxx> wrote: >> + >> +/** >> + * ufshcd_abort - abort a specific command >> + * @cmd: SCSI command pointer >> + * >> + * Returns 0 on success, non-zero value on failure >> + */ >> +static int ufshcd_abort(struct scsi_cmnd *cmd) >> +{ >> + struct Scsi_Host *host; >> + struct ufs_hba *hba; >> + unsigned long flags; >> + unsigned int tag; >> + unsigned int pos; >> + int err; >> + >> + host = cmd->device->host; >> + hba = (struct ufs_hba *) host->hostdata; >> + tag = cmd->request->tag; >> + >> + spin_lock_irqsave(host->host_lock, flags); >> + pos = (1 << tag); >> + >> + /* check if command is still pending */ >> + if (!(hba->outstanding_reqs & pos)) { >> + err = -1; >> + spin_unlock_irqrestore(host->host_lock, flags); >> + goto out; >> + } >> + >> + err = ufshcd_issue_tm_cmd(hba, &hba->lrb[tag], UFS_ABORT_TASK); > Hi. > You called spin_lock_irqsave in ufshcd_issue_tm_cmd() without > spin_unlock_irqrestore. Thanks for reviewing the code. We'll correct it. Please let us know your comments on the other patches too. > >> + if (!err) { >> + spin_lock_irqsave(host->host_lock, flags); > This case is same also. > Thanks. >> + scsi_dma_unmap(cmd); >> + >> + /* clear the respective UTRLCLR bit */ >> + writel(~pos, >> + (UFSHCD_MMIO_BASE + >> + REG_UTP_TRANSFER_REQ_LIST_CLEAR)); >> + hba->outstanding_reqs &= ~pos; >> + hba->lrb[tag].cmd = NULL; >> + spin_unlock_irqrestore(host->host_lock, flags); >> + } >> +out: >> + return err; >> +} >> + -- ~Santosh -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html