lkml.org 
[lkml]   [2022]   [Jan]   [11]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    SubjectRe: [PATCH v2 28/28] gup: Convert check_and_migrate_movable_pages() to use a folio
    From
    On 1/9/22 20:24, Matthew Wilcox (Oracle) wrote:
    > Switch from head pages to folios. This removes an assumption that
    > THPs are the only way to have a high-order page.
    >
    > Signed-off-by: Matthew Wilcox (Oracle) <willy@infradead.org>
    > ---
    > mm/gup.c | 28 ++++++++++++++--------------
    > 1 file changed, 14 insertions(+), 14 deletions(-)

    Reviewed-by: John Hubbard <jhubbard@nvidia.com>


    thanks,
    --
    John Hubbard
    NVIDIA

    >
    > diff --git a/mm/gup.c b/mm/gup.c
    > index 1cdd5f2887a8..b2d109626c44 100644
    > --- a/mm/gup.c
    > +++ b/mm/gup.c
    > @@ -1801,41 +1801,41 @@ static long check_and_migrate_movable_pages(unsigned long nr_pages,
    > bool drain_allow = true;
    > LIST_HEAD(movable_page_list);
    > long ret = 0;
    > - struct page *prev_head = NULL;
    > - struct page *head;
    > + struct folio *folio, *prev_folio = NULL;
    > struct migration_target_control mtc = {
    > .nid = NUMA_NO_NODE,
    > .gfp_mask = GFP_USER | __GFP_NOWARN,
    > };
    >
    > for (i = 0; i < nr_pages; i++) {
    > - head = compound_head(pages[i]);
    > - if (head == prev_head)
    > + folio = page_folio(pages[i]);
    > + if (folio == prev_folio)
    > continue;
    > - prev_head = head;
    > + prev_folio = folio;
    > /*
    > * If we get a movable page, since we are going to be pinning
    > * these entries, try to move them out if possible.
    > */
    > - if (!is_pinnable_page(head)) {
    > - if (PageHuge(head)) {
    > - if (!isolate_huge_page(head, &movable_page_list))
    > + if (!is_pinnable_page(&folio->page)) {
    > + if (folio_test_hugetlb(folio)) {
    > + if (!isolate_huge_page(&folio->page,
    > + &movable_page_list))
    > isolation_error_count++;
    > } else {
    > - if (!PageLRU(head) && drain_allow) {
    > + if (!folio_test_lru(folio) && drain_allow) {
    > lru_add_drain_all();
    > drain_allow = false;
    > }
    >
    > - if (isolate_lru_page(head)) {
    > + if (isolate_lru_folio(folio)) {
    > isolation_error_count++;
    > continue;
    > }
    > - list_add_tail(&head->lru, &movable_page_list);
    > - mod_node_page_state(page_pgdat(head),
    > + list_add_tail(&folio->lru, &movable_page_list);
    > + node_stat_mod_folio(folio,
    > NR_ISOLATED_ANON +
    > - page_is_file_lru(head),
    > - thp_nr_pages(head));
    > + folio_is_file_lru(folio),
    > + folio_nr_pages(folio));
    > }
    > }
    > }

    \
     
     \ /
      Last update: 2022-01-11 08:53    [W:4.459 / U:0.540 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site