linux-imx/drivers/scsi/mpi3mr
Damien Le Moal 80d0624d0a scsi: mpi3mr: Avoid IOMMU page faults on REPORT ZONES
commit 1abc900ddd upstream.

Some firmware versions of the 9600 series SAS HBA byte-swap the REPORT
ZONES command reply buffer from ATA-ZAC devices by directly accessing the
buffer in the host memory. This does not respect the default command DMA
direction and causes IOMMU page faults on architectures with an IOMMU
enforcing write-only mappings for DMA_FROM_DEVICE DMA direction (e.g. AMD
hosts), leading to the device capacity to be dropped to 0:

scsi 18:0:58:0: Direct-Access-ZBC ATA      WDC  WSH722626AL W930 PQ: 0 ANSI: 7
scsi 18:0:58:0: Power-on or device reset occurred
sd 18:0:58:0: Attached scsi generic sg9 type 20
sd 18:0:58:0: [sdj] Host-managed zoned block device
mpi3mr 0000:c1:00.0: AMD-Vi: Event logged [IO_PAGE_FAULT domain=0x0001 address=0xfec0c400 flags=0x0050]
mpi3mr 0000:c1:00.0: AMD-Vi: Event logged [IO_PAGE_FAULT domain=0x0001 address=0xfec0c500 flags=0x0050]
sd 18:0:58:0: [sdj] REPORT ZONES start lba 0 failed
sd 18:0:58:0: [sdj] REPORT ZONES: Result: hostbyte=DID_SOFT_ERROR driverbyte=DRIVER_OK
sd 18:0:58:0: [sdj] 0 4096-byte logical blocks: (0 B/0 B)
sd 18:0:58:0: [sdj] Write Protect is off
sd 18:0:58:0: [sdj] Mode Sense: 6b 00 10 08
sd 18:0:58:0: [sdj] Write cache: enabled, read cache: enabled, supports DPO and FUA
sd 18:0:58:0: [sdj] Attached SCSI disk

Avoid this issue by always mapping the buffer of REPORT ZONES commands
using DMA_BIDIRECTIONAL, that is, using a read-write IOMMU mapping.

Suggested-by: Christoph Hellwig <hch@lst.de>
Fixes: 023ab2a9b4 ("scsi: mpi3mr: Add support for queue command processing")
Cc: stable@vger.kernel.org
Signed-off-by: Damien Le Moal <dlemoal@kernel.org>
Link: https://lore.kernel.org/r/20240719073913.179559-2-dlemoal@kernel.org
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Johannes Thumshirn <johannes.thumshirn@wdc.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2024-08-14 13:58:55 +02:00
..
mpi scsi: mpi3mr: Update MPI Headers to version 3.00.28 2023-08-07 21:41:48 -04:00
Kconfig
Makefile scsi: mpi3mr: Refer CONFIG_SCSI_MPI3MR in Makefile 2022-12-14 03:01:38 +00:00
mpi3mr_app.c scsi: mpi3mr: Fix ATA NCQ priority support 2024-06-21 14:38:25 +02:00
mpi3mr_debug.h scsi: mpi3mr: Update copyright year 2023-03-16 23:54:29 -04:00
mpi3mr_fw.c scsi: mpi3mr: Add PCI checks where SAS5116 diverges from SAS4116 2024-02-05 20:14:19 +00:00
mpi3mr_os.c scsi: mpi3mr: Avoid IOMMU page faults on REPORT ZONES 2024-08-14 13:58:55 +02:00
mpi3mr_transport.c scsi: mpi3mr: Use proper format specifier in mpi3mr_sas_port_add() 2024-07-11 12:49:15 +02:00
mpi3mr.h scsi: mpi3mr: Update driver version to 8.5.0.0.0 2023-08-07 21:41:48 -04:00