Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

scsi: ufs: fix endianness sparse warnings

Fix many warnings with incorrect endian assumptions
which makes the code unportable to new architectures.

The UFS specification defines the byte order as big-endian
for UPIU structure and little-endian for the host controller
transfer/task management descriptors.

Signed-off-by: Sujit Reddy Thumma <sthumma@codeaurora.org>
Signed-off-by: Dolev Raviv <draviv@codeaurora.org>
Signed-off-by: Christoph Hellwig <hch@lst.de>

authored by

Sujit Reddy Thumma and committed by
Christoph Hellwig
ea2aab24 7289f983

+4 -3
+4 -3
drivers/scsi/ufs/ufshcd.c
··· 464 464 /* data segment length */ 465 465 resp_len = be32_to_cpu(lrbp->ucd_rsp_ptr->header.dword_2) & 466 466 MASK_QUERY_DATA_SEG_LEN; 467 - buf_len = hba->dev_cmd.query.request.upiu_req.length; 467 + buf_len = be16_to_cpu( 468 + hba->dev_cmd.query.request.upiu_req.length); 468 469 if (likely(buf_len >= resp_len)) { 469 470 memcpy(hba->dev_cmd.query.descriptor, descp, resp_len); 470 471 } else { ··· 1343 1342 ufshcd_init_query(hba, &request, &response, opcode, idn, index, 1344 1343 selector); 1345 1344 hba->dev_cmd.query.descriptor = desc_buf; 1346 - request->upiu_req.length = *buf_len; 1345 + request->upiu_req.length = cpu_to_be16(*buf_len); 1347 1346 1348 1347 switch (opcode) { 1349 1348 case UPIU_QUERY_OPCODE_WRITE_DESC: ··· 1369 1368 } 1370 1369 1371 1370 hba->dev_cmd.query.descriptor = NULL; 1372 - *buf_len = response->upiu_res.length; 1371 + *buf_len = be16_to_cpu(response->upiu_res.length); 1373 1372 1374 1373 out_unlock: 1375 1374 mutex_unlock(&hba->dev_cmd.lock);