• Will Deacon's avatar
    vring: Force use of DMA API for ARM-based systems with legacy devices · 13e39d59
    Will Deacon authored
    commit c7070619 upstream.
    
    Booting Linux on an ARM fastmodel containing an SMMU emulation results
    in an unexpected I/O page fault from the legacy virtio-blk PCI device:
    
    [    1.211721] arm-smmu-v3 2b400000.smmu: event 0x10 received:
    [    1.211800] arm-smmu-v3 2b400000.smmu:	0x00000000fffff010
    [    1.211880] arm-smmu-v3 2b400000.smmu:	0x0000020800000000
    [    1.211959] arm-smmu-v3 2b400000.smmu:	0x00000008fa081002
    [    1.212075] arm-smmu-v3 2b400000.smmu:	0x0000000000000000
    [    1.212155] arm-smmu-v3 2b400000.smmu: event 0x10 received:
    [    1.212234] arm-smmu-v3 2b400000.smmu:	0x00000000fffff010
    [    1.212314] arm-smmu-v3 2b400000.smmu:	0x0000020800000000
    [    1.212394] arm-smmu-v3 2b400000.smmu:	0x00000008fa081000
    [    1.212471] arm-smmu-v3 2b400000.smmu:	0x0000000000000000
    
    <system hangs failing to read partition table>
    
    This is because the legacy virtio-blk device is behind an SMMU, so we
    have consequently swizzled its DMA ops and configured the SMMU to
    translate accesses. This then requires the vring code to use the DMA API
    to establish translations, otherwise all transactions will result in
    fatal faults and termination.
    
    Given that ARM-based systems only see an SMMU if one is really present
    (the topology is all described by firmware tables such as device-tree or
    IORT), then we can safely use the DMA API for all legacy virtio devices.
    Modern devices can advertise the prescense of an IOMMU using the
    VIRTIO_F_IOMMU_PLATFORM feature flag.
    
    Cc: Andy Lutomirski <luto@kernel.org>
    Cc: Michael S. Tsirkin <mst@redhat.com>
    Fixes: 876945db ("arm64: Hook up IOMMU dma_ops")
    Signed-off-by: default avatarWill Deacon <will.deacon@arm.com>
    Signed-off-by: default avatarMichael S. Tsirkin <mst@redhat.com>
    Acked-by: default avatarMarc Zyngier <marc.zyngier@arm.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    13e39d59
virtio_ring.c 33.4 KB