From 2110145a33c763e7578d65b26f5bec475cb2f2bb Mon Sep 17 00:00:00 2001 From: Kiwoong Kim Date: Wed, 19 Feb 2020 10:16:33 +0900 Subject: [PATCH] FROMLIST: ufs: fix a bug on printing PRDT In some architectures, an unit of PRDTO and PRDTL in UFSHCI spec assume bytes, not double word specified in the spec. W/o this patch, when the driver executes this, kernel panic occurres because of abnormal accesses. Bug: 149797634 Link: https://lore.kernel.org/linux-scsi/20200218224307.8017-1-kwmad.kim@samsung.com/ Signed-off-by: Kiwoong Kim Signed-off-by: Greg Kroah-Hartman (cherry picked from android-mainline commit 8ec7bddd873f393ea94a3bc9dde9781e5e0fbfe1) Change-Id: I58ffa07535df8011b8d357135b80030833e725f9 Signed-off-by: Eric Biggers --- drivers/scsi/ufs/ufshcd.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c index 5899f061246a..07d4d76c3f01 100644 --- a/drivers/scsi/ufs/ufshcd.c +++ b/drivers/scsi/ufs/ufshcd.c @@ -474,8 +474,11 @@ void ufshcd_print_trs(struct ufs_hba *hba, unsigned long bitmap, bool pr_prdt) 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); + prdt_length = + le16_to_cpu(lrbp->utr_descriptor_ptr->prd_table_length); + if (hba->quirks & UFSHCD_QUIRK_PRDT_BYTE_GRAN) + prdt_length /= sizeof(struct ufshcd_sg_entry); + dev_err(hba->dev, "UPIU[%d] - PRDT - %d entries phys@0x%llx\n", tag, prdt_length,