mm/gup: documentation corrections for gup/pup
Patch series "A few gup refactorings and documentation updates", v3. While reviewing some of the other things going on around gup.c, I noticed that the documentation was wrong for a few of the routines that I wrote. And then I noticed that there was some significant code duplication too. So this fixes those issues. This is not entirely risk-free, but after looking closely at this, I think it's actually a useful improvement, getting rid of the code duplication here. This patch (of 3): The documentation for try_grab_compound_head() and try_grab_page() has fallen a little out of date. Update and clarify a few points. Also make it kerneldoc-correct, by adding @args documentation. Link: https://lkml.kernel.org/r/20210813044133.1536842-1-jhubbard@nvidia.com Link: https://lkml.kernel.org/r/20210813044133.1536842-2-jhubbard@nvidia.com Signed-off-by: John Hubbard <jhubbard@nvidia.com> Cc: Matthew Wilcox <willy@infradead.org> Cc: Christoph Hellwig <hch@lst.de> Cc: Heiko Carstens <hca@linux.ibm.com> Cc: Vasily Gorbik <gor@linux.ibm.com> Cc: Christian Borntraeger <borntraeger@de.ibm.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
be51eb18b8
commit
3967db22ba
27
mm/gup.c
27
mm/gup.c
|
@ -92,10 +92,17 @@ static inline struct page *try_get_compound_head(struct page *page, int refs)
|
|||
return head;
|
||||
}
|
||||
|
||||
/*
|
||||
/**
|
||||
* try_grab_compound_head() - attempt to elevate a page's refcount, by a
|
||||
* flags-dependent amount.
|
||||
*
|
||||
* Even though the name includes "compound_head", this function is still
|
||||
* appropriate for callers that have a non-compound @page to get.
|
||||
*
|
||||
* @page: pointer to page to be grabbed
|
||||
* @refs: the value to (effectively) add to the page's refcount
|
||||
* @flags: gup flags: these are the FOLL_* flag values.
|
||||
*
|
||||
* "grab" names in this file mean, "look at flags to decide whether to use
|
||||
* FOLL_PIN or FOLL_GET behavior, when incrementing the page's refcount.
|
||||
*
|
||||
|
@ -103,8 +110,14 @@ static inline struct page *try_get_compound_head(struct page *page, int refs)
|
|||
* same time. (That's true throughout the get_user_pages*() and
|
||||
* pin_user_pages*() APIs.) Cases:
|
||||
*
|
||||
* FOLL_GET: page's refcount will be incremented by 1.
|
||||
* FOLL_PIN: page's refcount will be incremented by GUP_PIN_COUNTING_BIAS.
|
||||
* FOLL_GET: page's refcount will be incremented by @refs.
|
||||
*
|
||||
* FOLL_PIN on compound pages that are > two pages long: page's refcount will
|
||||
* be incremented by @refs, and page[2].hpage_pinned_refcount will be
|
||||
* incremented by @refs * GUP_PIN_COUNTING_BIAS.
|
||||
*
|
||||
* FOLL_PIN on normal pages, or compound pages that are two pages long:
|
||||
* page's refcount will be incremented by @refs * GUP_PIN_COUNTING_BIAS.
|
||||
*
|
||||
* Return: head page (with refcount appropriately incremented) for success, or
|
||||
* NULL upon failure. If neither FOLL_GET nor FOLL_PIN was set, that's
|
||||
|
@ -141,6 +154,8 @@ __maybe_unused struct page *try_grab_compound_head(struct page *page,
|
|||
*
|
||||
* However, be sure to *also* increment the normal page refcount
|
||||
* field at least once, so that the page really is pinned.
|
||||
* That's why the refcount from the earlier
|
||||
* try_get_compound_head() is left intact.
|
||||
*/
|
||||
if (hpage_pincount_available(page))
|
||||
hpage_pincount_add(page, refs);
|
||||
|
@ -184,10 +199,8 @@ static void put_compound_head(struct page *page, int refs, unsigned int flags)
|
|||
* @flags: gup flags: these are the FOLL_* flag values.
|
||||
*
|
||||
* Either FOLL_PIN or FOLL_GET (or neither) may be set, but not both at the same
|
||||
* time. Cases:
|
||||
*
|
||||
* FOLL_GET: page's refcount will be incremented by 1.
|
||||
* FOLL_PIN: page's refcount will be incremented by GUP_PIN_COUNTING_BIAS.
|
||||
* time. Cases: please see the try_grab_compound_head() documentation, with
|
||||
* "refs=1".
|
||||
*
|
||||
* Return: true for success, or if no action was required (if neither FOLL_PIN
|
||||
* nor FOLL_GET was set, nothing is done). False for failure: FOLL_GET or
|
||||
|
|
Loading…
Reference in New Issue