• Robin Murphy's avatar
    iommu/dma: Add config for PCI SAC address trick · 4bf7fda4
    Robin Murphy authored
    For devices stuck behind a conventional PCI bus, saving extra cycles at
    33MHz is probably fairly significant. However since native PCI Express
    is now the norm for high-performance devices, the optimisation to always
    prefer 32-bit addresses for the sake of avoiding DAC is starting to look
    rather anachronistic. Technically 32-bit addresses do have shorter TLPs
    on PCIe, but unless the device is saturating its link bandwidth with
    small transfers it seems unlikely that the difference is appreciable.
    
    What definitely is appreciable, however, is that the IOVA allocator
    doesn't behave all that well once the 32-bit space starts getting full.
    As DMA working sets get bigger, this optimisation increasingly backfires
    and adds considerable overhead to the dma_map path for use-cases like
    high-bandwidth networking. We've increasingly bandaged the allocator
    in attempts to mitigate this, but it remains fundamentally at odds with
    other valid requirements to try as hard as possible to satisfy a request
    within the given limit; what we really need is to just avoid this odd
    notion of a speculative allocation when it isn't beneficial anyway.
    
    Unfortunately that's where things get awkward... Having been present on
    x86 for 15 years or so now, it turns out there are systems which fail to
    properly define the upper limit of usable IOVA space for certain devices
    and this trick was the only thing letting them work OK. I had a similar
    ulterior motive for a couple of early arm64 systems when originally
    adding it to iommu-dma, but those really should be fixed with proper
    firmware bindings by now. Let's be brave and default it to off in the
    hope that CI systems and developers will find and fix those bugs, but
    expect that desktop-focused distro configs are likely to want to turn
    it back on for maximum compatibility.
    Signed-off-by: default avatarRobin Murphy <robin.murphy@arm.com>
    Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
    Reviewed-by: default avatarJohn Garry <john.garry@huawei.com>
    Link: https://lore.kernel.org/r/3f06994f9f370f9d35b2630ab75171ecd2065621.1654782107.git.robin.murphy@arm.comSigned-off-by: default avatarJoerg Roedel <jroedel@suse.de>
    4bf7fda4
Kconfig 16 KB