On Mon, Oct 12, 2020 at 09:28:29AM -0700, Dave Hansen wrote:
kmap_atomic() is always preferred over kmap()/kmap_thread(). kmap_atomic() is _much_ more lightweight since its TLB invalidation is always CPU-local and never broadcast.
So, basically, unless you *must* sleep while the mapping is in place, kmap_atomic() is preferred.
But kmap_atomic() disables preemption, so the _ideal_ interface would map it only locally, then on preemption make it global. I don't even know if that _can_ be done. But this email makes it seem like kmap_atomic() has no downsides.