![John Hubbard](/assets/img/avatar_default.png)
Introduce pin_user_pages*() variations of get_user_pages*() calls, and also pin_longterm_pages*() variations. For now, these are placeholder calls, until the various call sites are converted to use the correct get_user_pages*() or pin_user_pages*() API. These variants will eventually all set FOLL_PIN, which is also introduced, and thoroughly documented. pin_user_pages() pin_user_pages_remote() pin_user_pages_fast() All pages that are pinned via the above calls, must be unpinned via put_user_page(). The underlying rules are: * FOLL_PIN is a gup-internal flag, so the call sites should not directly set it. That behavior is enforced with assertions. * Call sites that want to indicate that they are going to do DirectIO ("DIO") or something with similar characteristics, should call a get_user_pages()-like wrapper call that sets FOLL_PIN. These wrappers will: * Start with "pin_user_pages" instead of "get_user_pages". That makes it easy to find and audit the call sites. * Set FOLL_PIN * For pages that are received via FOLL_PIN, those pages must be returned via put_user_page(). Thanks to Jan Kara and Vlastimil Babka for explaining the 4 cases in this documentation. (I've reworded it and expanded upon it.) Link: http://lkml.kernel.org/r/20200107224558.2362728-12-jhubbard@nvidia.com Signed-off-by: John Hubbard <jhubbard@nvidia.com> Reviewed-by: Jan Kara <jack@suse.cz> Reviewed-by: Mike Rapoport <rppt@linux.ibm.com> [Documentation] Reviewed-by: Jérôme Glisse <jglisse@redhat.com> Cc: Jonathan Corbet <corbet@lwn.net> Cc: Ira Weiny <ira.weiny@intel.com> Cc: Alex Williamson <alex.williamson@redhat.com> Cc: Aneesh Kumar K.V <aneesh.kumar@linux.ibm.com> Cc: Björn Töpel <bjorn.topel@intel.com> Cc: Christoph Hellwig <hch@lst.de> Cc: Daniel Vetter <daniel.vetter@ffwll.ch> Cc: Dan Williams <dan.j.williams@intel.com> Cc: Hans Verkuil <hverkuil-cisco@xs4all.nl> Cc: Jason Gunthorpe <jgg@mellanox.com> Cc: Jason Gunthorpe <jgg@ziepe.ca> Cc: Jens Axboe <axboe@kernel.dk> Cc: Kirill A. Shutemov <kirill@shutemov.name> Cc: Leon Romanovsky <leonro@mellanox.com> Cc: Mauro Carvalho Chehab <mchehab@kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
62 lines
935 B
ReStructuredText
62 lines
935 B
ReStructuredText
======================
|
|
Core API Documentation
|
|
======================
|
|
|
|
This is the beginning of a manual for core kernel APIs. The conversion
|
|
(and writing!) of documents for this manual is much appreciated!
|
|
|
|
Core utilities
|
|
==============
|
|
|
|
.. toctree::
|
|
:maxdepth: 1
|
|
|
|
kernel-api
|
|
assoc_array
|
|
atomic_ops
|
|
cachetlb
|
|
refcount-vs-atomic
|
|
cpu_hotplug
|
|
idr
|
|
local_ops
|
|
workqueue
|
|
genericirq
|
|
xarray
|
|
librs
|
|
genalloc
|
|
errseq
|
|
packing
|
|
printk-formats
|
|
circular-buffers
|
|
generic-radix-tree
|
|
memory-allocation
|
|
mm-api
|
|
pin_user_pages
|
|
gfp_mask-from-fs-io
|
|
timekeeping
|
|
boot-time-mm
|
|
memory-hotplug
|
|
protection-keys
|
|
../RCU/index
|
|
gcc-plugins
|
|
symbol-namespaces
|
|
padata
|
|
ioctl
|
|
|
|
|
|
Interfaces for kernel debugging
|
|
===============================
|
|
|
|
.. toctree::
|
|
:maxdepth: 1
|
|
|
|
debug-objects
|
|
tracepoint
|
|
|
|
.. only:: subproject and html
|
|
|
|
Indices
|
|
=======
|
|
|
|
* :ref:`genindex`
|