updated documentation: Splitting pinned folios

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 3/13/24 2:20 AM, David Hildenbrand wrote:
...
The description is wrong. Whoever calls split_huge_page_to_list() must hold a folio reference.

That folio reference will be transferred to @page (not the head page) once split. So @page can be used by the caller after the split succeeded.


David and all, does this updated draft comment look accurate?

/*
 * This function splits a huge page into normal pages. @page can point to any
 * subpage of the huge page to split. The split operation does not change the
 * position of @page.
 *
 * Prerequisites:
 *
 * 1) The caller must hold a reference on the @page's owning folio, also known as
 *    the huge page.
 *
 * 2) The huge page must be locked.
 *
 * 3) The folio must not be pinned. Pinned folios will not be split; instead,
 *    the caller will receive an -EBUSY.
 *
 * After splitting, the folio's refcount is transfered to @page (not the head
 * page, unless @page is actually the head page). The other subpages may be
 * freed if they are not mapped.
 *
 * If @list is null, tail pages will be added to LRU list, otherwise, to @list.
 *
 * Both head page and tail pages will inherit mapping, flags, and so on from the
 * hugepage.
 *
 * Returns 0 if the hugepage was split successfully.
 *
 * Returns -EBUSY if @page's folio is pinned, or if the anon_vma disappeared
 * from under us.
 */
int split_huge_page_to_list(struct page *page, struct list_head *list)
thanks,
--
John Hubbard
NVIDIA





[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [eCos]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux