Skip to content

Commit 84b86f6

Browse files
xp4ns3akpm00
authored andcommitted
Documentation/mm: rrefer kmap_local_page() and avoid kmap()
The reasoning for converting kmap() to kmap_local_page() was questioned recently.[1] There are two main problems with kmap(): (1) It comes with an overhead as mapping space is restricted and protected by a global lock for synchronization and (2) kmap() also requires global TLB invalidation when its pool wraps and it might block when the mapping space is fully utilized until a slot becomes available. Warn users to avoid the use of kmap() and instead use kmap_local_page(), by designing their code to map pages in the same context the mapping will be used. [1] https://lore.kernel.org/lkml/1891319.taCxCBeP46@opensuse/ Link: https://lkml.kernel.org/r/20220728154844.10874-6-fmdefrancesco@gmail.com Signed-off-by: Fabio M. De Francesco <fmdefrancesco@gmail.com> Suggested-by: Ira Weiny <ira.weiny@intel.com> Cc: Matthew Wilcox (Oracle) <willy@infradead.org> Cc: Mike Rapoport <rppt@linux.ibm.com> Cc: Sebastian Andrzej Siewior <bigeasy@linutronix.de> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Catalin Marinas <catalin.marinas@arm.com> Cc: Jonathan Corbet <corbet@lwn.net> Cc: Peter Collingbourne <pcc@google.com> Cc: Vlastimil Babka <vbabka@suse.cz> Cc: Will Deacon <will@kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
1 parent 6b3afe2 commit 84b86f6

File tree

1 file changed

+5
-0
lines changed

1 file changed

+5
-0
lines changed

Documentation/mm/highmem.rst

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,11 @@ list shows them in order of preference of use.
8484
be absolutely sure to keep the use of the return address local to the
8585
thread which mapped it.
8686

87+
Most code can be designed to use thread local mappings. User should
88+
therefore try to design their code to avoid the use of kmap() by mapping
89+
pages in the same thread the address will be used and prefer
90+
kmap_local_page().
91+
8792
Nesting kmap_local_page() and kmap_atomic() mappings is allowed to a certain
8893
extent (up to KMAP_TYPE_NR) but their invocations have to be strictly ordered
8994
because the map implementation is stack based. See kmap_local_page() kdocs

0 commit comments

Comments
 (0)