• Robin Murphy's avatar
    iommu/arm-smmu: Poll for TLB sync completion more effectively · 8513c893
    Robin Murphy authored
    On relatively slow development platforms and software models, the
    inefficiency of our TLB sync loop tends not to show up - for instance on
    a Juno r1 board I typically see the TLBI has completed of its own accord
    by the time we get to the sync, such that the latter finishes instantly.
    
    However, on larger systems doing real I/O, it's less realistic for the
    TLBs to go idle immediately, and at that point falling into the 1MHz
    polling loop turns out to throw away performance drastically. Let's
    strike a balance by polling more than once between pauses, such that we
    have much more chance of catching normal operations completing before
    committing to the fixed delay, but also backing off exponentially, since
    if a sync really hasn't completed within one or two "reasonable time"
    periods, it becomes increasingly unlikely that it ever will.
    Reviewed-by: default avatarJordan Crouse <jcrouse@codeaurora.org>
    Signed-off-by: default avatarRobin Murphy <robin.murphy@arm.com>
    Signed-off-by: default avatarWill Deacon <will.deacon@arm.com>
    8513c893
arm-smmu.c 63 KB