After this documentation was released in July 2003, I was approached
by Prentice Hall and asked to write a book on the Linux VM under the Bruce Peren's Open Book Series.
The book is available and called simply "Understanding The Linux Virtual
Memory Manager". There is a lot of additional material in the book that is
not available here, including details on later 2.4 kernels, introductions
to 2.6, a whole new chapter on the shared memory filesystem, coverage of TLB
management, a lot more code commentary, countless other additions and
clarifications and a CD with lots of cool stuff on it. This material (although
now dated and lacking in comparison to the book) will remain available
although I obviously encourge you to buy the book from your favourite book
store :-) . As the book is under the Bruce Perens Open Book Series, it will
be available 90 days after appearing on the book shelves which means it
is not available right now. When it is available, it will be downloadable
from http://www.phptr.com/perens
so check there for more information.
To be fully clear, this webpage is not the actual book.
Next: 10.4 Bounce Buffers
Up: 10. High Memory Management
Previous: 10.2 Mapping High Memory
  Contents
  Index
10.3 Mapping High Memory Pages Atomically
The use of kmap_atomic() is heavily discouraged but slots are
reserved for each CPU for when they are necessary, such as when bounce
buffers, are used by devices from interrupt. There are a varying number of
different requirements an architecture has for atomic high memory mapping
which are enumerated by km_type. The total number of uses is
KM_TYPE_NR10.3.
KM_TYPE_NR entries per processor are reserved at boot time for
atomic mapping at the location FIX_KMAP_BEGIN and ending
at FIX_KMAP_END. Obviously a user of an atomic kmap may not
sleep or exit before calling kunmap_atomic() as the next process
on the processor may try to use the same entry and fail.
The function kmap_atomic() has the very simple task of mapping
the requested page to the slot set aside in the page tables for the requested
type of operation and processor. The function kunmap_atomic()
is interesting as it will only clear the PTE with pte_clear()
if debugging is enabled. It is considered unnecessary to bother unmapping
atomic pages as the next call to kmap_atomic() will simply replace
it making TLB flushes unnecessary.
Footnotes
- ...KM_TYPE_NR10.3
- There are a total of six different uses
for atomic kmaps on the x86.
Next: 10.4 Bounce Buffers
Up: 10. High Memory Management
Previous: 10.2 Mapping High Memory
  Contents
  Index
Mel
2004-02-15