• Damien Le Moal's avatar
    scsi: mpi3mr: Avoid IOMMU page faults on REPORT ZONES · 1abc900d
    Damien Le Moal authored
    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: default avatarChristoph Hellwig <hch@lst.de>
    Fixes: 023ab2a9 ("scsi: mpi3mr: Add support for queue command processing")
    Cc: stable@vger.kernel.org
    Signed-off-by: default avatarDamien Le Moal <dlemoal@kernel.org>
    Link: https://lore.kernel.org/r/20240719073913.179559-2-dlemoal@kernel.orgReviewed-by: default avatarChristoph Hellwig <hch@lst.de>
    Reviewed-by: default avatarJohannes Thumshirn <johannes.thumshirn@wdc.com>
    Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
    1abc900d
mpi3mr_os.c 166 KB