scsi: 3w-9xxx: Fix endianness issues in command packets
authorSamuel Holland <samuel@sholland.org>
Tue, 27 Apr 2021 23:59:15 +0000 (18:59 -0500)
committerMartin K. Petersen <martin.petersen@oracle.com>
Sat, 15 May 2021 22:01:34 +0000 (18:01 -0400)
commit05f7f1b9ee8273eab805da3d5e2d064872aa75b1
tree10e035dceb00bbbf649dfa00204df4619503feaf
parentd133b441488d30b0ee1848238a1f6e8da643e19c
scsi: 3w-9xxx: Fix endianness issues in command packets

The controller expects all data it sends/receives to be little-endian.
Therefore, the packet struct definitions should use the __le16/32/64
types. Once those are correct, sparse reports several issues with the
driver code, which are fixed here as well.

The main issue observed was at the call to scsi_set_resid(), where the
byteswapped parameter would eventually trigger the alignment check at
drivers/scsi/sd.c:2009. At that point, the kernel would continuously
complain about an "Unaligned partial completion", and no further I/O could
occur.

This gets the controller working on big endian powerpc64.

Link: https://lore.kernel.org/r/20210427235915.39211-4-samuel@sholland.org
Signed-off-by: Samuel Holland <samuel@sholland.org>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/3w-9xxx.c
drivers/scsi/3w-9xxx.h