mirror of
https://github.com/torvalds/linux.git
synced 2024-11-15 00:21:59 +00:00
scsi: ufs: core: Print trs for pending requests in MCQ mode
We don't have outstanding_reqs bitmap in MCQ mode. Considering that the queue depth may increase beyond 64 in the future, rework ufshcd_print_trs() to get rid of bitmap usage so that we can print trs for pending requests in both SDB and MCQ mode. Signed-off-by: Ziqi Chen <quic_ziqichen@quicinc.com> Link: https://lore.kernel.org/r/1678865517-43139-1-git-send-email-quic_ziqichen@quicinc.com Reviewed-by: Bart Van Assche <bvanassche@acm.org> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
parent
cb38845d90
commit
127fd07da4
@ -533,48 +533,66 @@ static void ufshcd_print_evt_hist(struct ufs_hba *hba)
|
||||
}
|
||||
|
||||
static
|
||||
void ufshcd_print_trs(struct ufs_hba *hba, unsigned long bitmap, bool pr_prdt)
|
||||
void ufshcd_print_tr(struct ufs_hba *hba, int tag, bool pr_prdt)
|
||||
{
|
||||
const struct ufshcd_lrb *lrbp;
|
||||
int prdt_length;
|
||||
int tag;
|
||||
|
||||
for_each_set_bit(tag, &bitmap, hba->nutrs) {
|
||||
lrbp = &hba->lrb[tag];
|
||||
lrbp = &hba->lrb[tag];
|
||||
|
||||
dev_err(hba->dev, "UPIU[%d] - issue time %lld us\n",
|
||||
tag, div_u64(lrbp->issue_time_stamp_local_clock, 1000));
|
||||
dev_err(hba->dev, "UPIU[%d] - complete time %lld us\n",
|
||||
tag, div_u64(lrbp->compl_time_stamp_local_clock, 1000));
|
||||
dev_err(hba->dev,
|
||||
"UPIU[%d] - Transfer Request Descriptor phys@0x%llx\n",
|
||||
tag, (u64)lrbp->utrd_dma_addr);
|
||||
dev_err(hba->dev, "UPIU[%d] - issue time %lld us\n",
|
||||
tag, div_u64(lrbp->issue_time_stamp_local_clock, 1000));
|
||||
dev_err(hba->dev, "UPIU[%d] - complete time %lld us\n",
|
||||
tag, div_u64(lrbp->compl_time_stamp_local_clock, 1000));
|
||||
dev_err(hba->dev,
|
||||
"UPIU[%d] - Transfer Request Descriptor phys@0x%llx\n",
|
||||
tag, (u64)lrbp->utrd_dma_addr);
|
||||
|
||||
ufshcd_hex_dump("UPIU TRD: ", lrbp->utr_descriptor_ptr,
|
||||
sizeof(struct utp_transfer_req_desc));
|
||||
dev_err(hba->dev, "UPIU[%d] - Request UPIU phys@0x%llx\n", tag,
|
||||
(u64)lrbp->ucd_req_dma_addr);
|
||||
ufshcd_hex_dump("UPIU REQ: ", lrbp->ucd_req_ptr,
|
||||
sizeof(struct utp_upiu_req));
|
||||
dev_err(hba->dev, "UPIU[%d] - Response UPIU phys@0x%llx\n", tag,
|
||||
(u64)lrbp->ucd_rsp_dma_addr);
|
||||
ufshcd_hex_dump("UPIU RSP: ", lrbp->ucd_rsp_ptr,
|
||||
sizeof(struct utp_upiu_rsp));
|
||||
ufshcd_hex_dump("UPIU TRD: ", lrbp->utr_descriptor_ptr,
|
||||
sizeof(struct utp_transfer_req_desc));
|
||||
dev_err(hba->dev, "UPIU[%d] - Request UPIU phys@0x%llx\n", tag,
|
||||
(u64)lrbp->ucd_req_dma_addr);
|
||||
ufshcd_hex_dump("UPIU REQ: ", lrbp->ucd_req_ptr,
|
||||
sizeof(struct utp_upiu_req));
|
||||
dev_err(hba->dev, "UPIU[%d] - Response UPIU phys@0x%llx\n", tag,
|
||||
(u64)lrbp->ucd_rsp_dma_addr);
|
||||
ufshcd_hex_dump("UPIU RSP: ", lrbp->ucd_rsp_ptr,
|
||||
sizeof(struct utp_upiu_rsp));
|
||||
|
||||
prdt_length = le16_to_cpu(
|
||||
lrbp->utr_descriptor_ptr->prd_table_length);
|
||||
if (hba->quirks & UFSHCD_QUIRK_PRDT_BYTE_GRAN)
|
||||
prdt_length /= ufshcd_sg_entry_size(hba);
|
||||
prdt_length = le16_to_cpu(
|
||||
lrbp->utr_descriptor_ptr->prd_table_length);
|
||||
if (hba->quirks & UFSHCD_QUIRK_PRDT_BYTE_GRAN)
|
||||
prdt_length /= ufshcd_sg_entry_size(hba);
|
||||
|
||||
dev_err(hba->dev,
|
||||
"UPIU[%d] - PRDT - %d entries phys@0x%llx\n",
|
||||
tag, prdt_length,
|
||||
(u64)lrbp->ucd_prdt_dma_addr);
|
||||
dev_err(hba->dev,
|
||||
"UPIU[%d] - PRDT - %d entries phys@0x%llx\n",
|
||||
tag, prdt_length,
|
||||
(u64)lrbp->ucd_prdt_dma_addr);
|
||||
|
||||
if (pr_prdt)
|
||||
ufshcd_hex_dump("UPIU PRDT: ", lrbp->ucd_prdt_ptr,
|
||||
ufshcd_sg_entry_size(hba) * prdt_length);
|
||||
}
|
||||
if (pr_prdt)
|
||||
ufshcd_hex_dump("UPIU PRDT: ", lrbp->ucd_prdt_ptr,
|
||||
ufshcd_sg_entry_size(hba) * prdt_length);
|
||||
}
|
||||
|
||||
static bool ufshcd_print_tr_iter(struct request *req, void *priv)
|
||||
{
|
||||
struct scsi_device *sdev = req->q->queuedata;
|
||||
struct Scsi_Host *shost = sdev->host;
|
||||
struct ufs_hba *hba = shost_priv(shost);
|
||||
|
||||
ufshcd_print_tr(hba, req->tag, *(bool *)priv);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* ufshcd_print_trs_all - print trs for all started requests.
|
||||
* @hba: per-adapter instance.
|
||||
* @pr_prdt: need to print prdt or not.
|
||||
*/
|
||||
static void ufshcd_print_trs_all(struct ufs_hba *hba, bool pr_prdt)
|
||||
{
|
||||
blk_mq_tagset_busy_iter(&hba->host->tag_set, ufshcd_print_tr_iter, &pr_prdt);
|
||||
}
|
||||
|
||||
static void ufshcd_print_tmrs(struct ufs_hba *hba, unsigned long bitmap)
|
||||
@ -5331,7 +5349,7 @@ ufshcd_transfer_rsp_status(struct ufs_hba *hba, struct ufshcd_lrb *lrbp,
|
||||
|
||||
if ((host_byte(result) != DID_OK) &&
|
||||
(host_byte(result) != DID_REQUEUE) && !hba->silence_err_logs)
|
||||
ufshcd_print_trs(hba, 1 << lrbp->task_tag, true);
|
||||
ufshcd_print_tr(hba, lrbp->task_tag, true);
|
||||
return result;
|
||||
}
|
||||
|
||||
@ -6415,7 +6433,7 @@ again:
|
||||
ufshcd_print_pwr_info(hba);
|
||||
ufshcd_print_evt_hist(hba);
|
||||
ufshcd_print_tmrs(hba, hba->outstanding_tasks);
|
||||
ufshcd_print_trs(hba, hba->outstanding_reqs, pr_prdt);
|
||||
ufshcd_print_trs_all(hba, pr_prdt);
|
||||
spin_lock_irqsave(hba->host->host_lock, flags);
|
||||
}
|
||||
|
||||
@ -7444,9 +7462,9 @@ static int ufshcd_abort(struct scsi_cmnd *cmd)
|
||||
ufshcd_print_evt_hist(hba);
|
||||
ufshcd_print_host_state(hba);
|
||||
ufshcd_print_pwr_info(hba);
|
||||
ufshcd_print_trs(hba, 1 << tag, true);
|
||||
ufshcd_print_tr(hba, tag, true);
|
||||
} else {
|
||||
ufshcd_print_trs(hba, 1 << tag, false);
|
||||
ufshcd_print_tr(hba, tag, false);
|
||||
}
|
||||
hba->req_abort_count++;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user