aboutsummaryrefslogtreecommitdiff
path: root/scripts/gcc-plugins/latent_entropy_plugin.c
diff options
context:
space:
mode:
authorJohn Hubbard <[email protected]>2020-04-01 21:05:29 -0700
committerLinus Torvalds <[email protected]>2020-04-02 09:35:27 -0700
commit3faa52c03f440d1b9ddef18c4f189f4790d52d7e (patch)
treebb6a2fef66352f853961d6a90c379f01b0a9ada4 /scripts/gcc-plugins/latent_entropy_plugin.c
parent94202f126f698691f8865906ad6a68203e5dde8c (diff)
mm/gup: track FOLL_PIN pages
Add tracking of pages that were pinned via FOLL_PIN. This tracking is implemented via overloading of page->_refcount: pins are added by adding GUP_PIN_COUNTING_BIAS (1024) to the refcount. This provides a fuzzy indication of pinning, and it can have false positives (and that's OK). Please see the pre-existing Documentation/core-api/pin_user_pages.rst for details. As mentioned in pin_user_pages.rst, callers who effectively set FOLL_PIN (typically via pin_user_pages*()) are required to ultimately free such pages via unpin_user_page(). Please also note the limitation, discussed in pin_user_pages.rst under the "TODO: for 1GB and larger huge pages" section. (That limitation will be removed in a following patch.) The effect of a FOLL_PIN flag is similar to that of FOLL_GET, and may be thought of as "FOLL_GET for DIO and/or RDMA use". Pages that have been pinned via FOLL_PIN are identifiable via a new function call: bool page_maybe_dma_pinned(struct page *page); What to do in response to encountering such a page, is left to later patchsets. There is discussion about this in [1], [2], [3], and [4]. This also changes a BUG_ON(), to a WARN_ON(), in follow_page_mask(). [1] Some slow progress on get_user_pages() (Apr 2, 2019): https://lwn.net/Articles/784574/ [2] DMA and get_user_pages() (LPC: Dec 12, 2018): https://lwn.net/Articles/774411/ [3] The trouble with get_user_pages() (Apr 30, 2018): https://lwn.net/Articles/753027/ [4] LWN kernel index: get_user_pages(): https://lwn.net/Kernel/Index/#Memory_management-get_user_pages [[email protected]: add kerneldoc] Link: http://lkml.kernel.org/r/[email protected] [[email protected]: if pin fails, we need to unpin, a simple put_page will not be enough] Link: http://lkml.kernel.org/r/[email protected] [[email protected]: fix put_compound_head defined but not used] Suggested-by: Jan Kara <[email protected]> Suggested-by: Jérôme Glisse <[email protected]> Signed-off-by: John Hubbard <[email protected]> Signed-off-by: Claudio Imbrenda <[email protected]> Signed-off-by: Andrew Morton <[email protected]> Reviewed-by: Jan Kara <[email protected]> Acked-by: Kirill A. Shutemov <[email protected]> Cc: Ira Weiny <[email protected]> Cc: "Matthew Wilcox (Oracle)" <[email protected]> Cc: Al Viro <[email protected]> Cc: Christoph Hellwig <[email protected]> Cc: Dan Williams <[email protected]> Cc: Dave Chinner <[email protected]> Cc: Jason Gunthorpe <[email protected]> Cc: Jonathan Corbet <[email protected]> Cc: Michal Hocko <[email protected]> Cc: Mike Kravetz <[email protected]> Cc: Shuah Khan <[email protected]> Cc: Vlastimil Babka <[email protected]> Link: http://lkml.kernel.org/r/[email protected] Signed-off-by: Linus Torvalds <[email protected]>
Diffstat (limited to 'scripts/gcc-plugins/latent_entropy_plugin.c')
0 files changed, 0 insertions, 0 deletions