• Thomas Hellström's avatar
    drm/ttm: Add a generic TTM memcpy move for page-based iomem · 3bf3710e
    Thomas Hellström authored
    The internal ttm_bo_util memcpy uses ioremap functionality, and while it
    probably might be possible to use it for copying in- and out of
    sglist represented io memory, using io_mem_reserve() / io_mem_free()
    callbacks, that would cause problems with fault().
    Instead, implement a method mapping page-by-page using kmap_local()
    semantics. As an additional benefit we then avoid the occasional global
    TLB flushes of ioremap() and consuming ioremap space, elimination of a
    critical point of failure and with a slight change of semantics we could
    also push the memcpy out async for testing and async driver development
    purposes.
    
    A special linear iomem iterator is introduced internally to mimic the
    old ioremap behaviour for code-paths that can't immediately be ported
    over. This adds to the code size and should be considered a temporary
    solution.
    
    Looking at the code we have a lot of checks for iomap tagged pointers.
    Ideally we should extend the core memremap functions to also accept
    uncached memory and kmap_local functionality. Then we could strip a
    lot of code.
    
    Cc: Christian König <christian.koenig@amd.com>
    Signed-off-by: default avatarThomas Hellström <thomas.hellstrom@linux.intel.com>
    Reviewed-by: default avatarChristian König <christian.koenig@amd.com>
    Link: https://lore.kernel.org/r/20210602083818.241793-4-thomas.hellstrom@linux.intel.com
    3bf3710e
ttm_tt.c 11.6 KB