Thomas Hellström 3bf3710e37 drm/ttm: Add a generic TTM memcpy move for page-based iomem
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: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Reviewed-by: Christian König <christian.koenig@amd.com>
Link: https://lore.kernel.org/r/20210602083818.241793-4-thomas.hellstrom@linux.intel.com
2021-06-07 16:07:08 +02:00
..
2021-05-06 11:43:46 +02:00
2021-04-27 13:13:19 +02:00
2021-05-12 11:31:28 +02:00
2021-04-28 10:01:40 -07:00
2021-04-13 23:15:09 +02:00
2021-04-13 23:15:09 +02:00
2021-03-16 17:08:46 +10:00
2021-06-07 13:33:46 +02:00
2021-04-29 18:53:05 -03:00
2021-04-13 23:15:09 +02:00
2021-05-10 15:46:54 +02:00
2021-01-04 12:59:33 +01:00
2021-05-27 08:34:50 +02:00
2021-01-07 13:40:20 +01:00
2021-05-17 21:19:48 +02:00
2021-03-18 14:22:50 +01:00