linux-scsi.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Santosh Y <santoshsy@gmail.com>
To: james.bottomley@hansenpartnership.com
Cc: linux-scsi@vger.kernel.org, yoshitake.kobayashi@toshiba.co.jp,
	vinholikatti@gmail.com, Santosh Y <santoshsy@gmail.com>
Subject: [PATCH 1/2] [SCSI] ufs: update Response UPIU length in dword
Date: Fri,  6 Apr 2012 17:57:20 +0530	[thread overview]
Message-ID: <1333715241-32346-1-git-send-email-santoshsy@gmail.com> (raw)

UFSHCI spec mentions that Response UPIU Length(RUL)
field in Transfer Request Descriptor should be in dword.

Query Response UPIU size is variable depending on the data
to be read/written and the size of a SCSI command Response
UPIU is fixed.

Currently response_upiu_length is being updated in bytes.
If a UFS host controller prepares a Query Response UPIU
with response_upiu_length, it will result in wrong Query
Response UPIU size corrupting the command descriptor list.

This issue will not affect the current UFSHCD Ver 0.1,
since Query function support is not yet implemented.
But this patch also ensures against command descriptor list
corruption if a UFS controller prepares SCSI Response UPIU
with response_upiu_length.

Reported-by: KOBAYASHI Yoshitake <yoshitake.kobayashi@toshiba.co.jp>
Reviewed-by: Vinayak Holikatti <vinholikatti@gmail.com>
Signed-off-by: Santosh Y <santoshsy@gmail.com>
---
 drivers/scsi/ufs/ufshcd.c |    7 +++++--
 1 files changed, 5 insertions(+), 2 deletions(-)

diff --git a/drivers/scsi/ufs/ufshcd.c b/drivers/scsi/ufs/ufshcd.c
index 52b96e8..1878cd8 100644
--- a/drivers/scsi/ufs/ufshcd.c
+++ b/drivers/scsi/ufs/ufshcd.c
@@ -830,13 +830,16 @@ static void ufshcd_host_memory_configure(struct ufs_hba *hba)
 		utrdlp[i].command_desc_base_addr_hi =
 				cpu_to_le32(upper_32_bits(cmd_desc_element_addr));
 
-		/* Response upiu and prdt offset should be in double words */
+		/*
+		 * Response upiu offset, prdt offset and response upiu length
+		 * should be in double words
+		 */
 		utrdlp[i].response_upiu_offset =
 				cpu_to_le16((response_offset >> 2));
 		utrdlp[i].prd_table_offset =
 				cpu_to_le16((prdt_offset >> 2));
 		utrdlp[i].response_upiu_length =
-				cpu_to_le16(ALIGNED_UPIU_SIZE);
+				cpu_to_le16(ALIGNED_UPIU_SIZE >> 2);
 
 		hba->lrb[i].utr_descriptor_ptr = (utrdlp + i);
 		hba->lrb[i].ucd_cmd_ptr =
-- 
1.7.5.4


             reply	other threads:[~2012-04-06 12:27 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-04-06 12:27 Santosh Y [this message]
2012-04-06 12:27 ` [PATCH 2/2] [SCSI] ufs: calculate read/write xfer len from cdb Santosh Y
2012-04-08  7:46   ` Namjae Jeon
2012-04-08  8:44   ` James Bottomley
2012-04-08 11:04     ` Santosh Y
2012-04-08  7:00 ` [PATCH 1/2] [SCSI] ufs: update Response UPIU length in dword Namjae Jeon

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1333715241-32346-1-git-send-email-santoshsy@gmail.com \
    --to=santoshsy@gmail.com \
    --cc=james.bottomley@hansenpartnership.com \
    --cc=linux-scsi@vger.kernel.org \
    --cc=vinholikatti@gmail.com \
    --cc=yoshitake.kobayashi@toshiba.co.jp \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).