mm: migrate_device: use more folio in migrate_device_unmap()
authorKefeng Wang <wangkefeng.wang@huawei.com>
Mon, 26 Aug 2024 06:58:11 +0000 (14:58 +0800)
committerAndrew Morton <akpm@linux-foundation.org>
Mon, 9 Sep 2024 23:38:58 +0000 (16:38 -0700)
The page for migrate_device_unmap() already has a reference, so it is safe
to convert the page to folio to save a few calls to compound_head(), which
removes the last isolate_lru_page() call.

Link: https://lkml.kernel.org/r/20240826065814.1336616-4-wangkefeng.wang@huawei.com
Signed-off-by: Kefeng Wang <wangkefeng.wang@huawei.com>
Acked-by: David Hildenbrand <david@redhat.com>
Reviewed-by: Vishal Moola (Oracle) <vishal.moola@gmail.com>
Reviewed-by: Alistair Popple <apopple@nvidia.com>
Cc: Baolin Wang <baolin.wang@linux.alibaba.com>
Cc: Jonathan Corbet <corbet@lwn.net>
Cc: Matthew Wilcox (Oracle) <willy@infradead.org>
Cc: Zi Yan <ziy@nvidia.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
mm/migrate_device.c

index 66db28b89f9bbb1bf59613e450012476506e4177..b49f4956617a8f32cb878ad61b22373690612e23 100644 (file)
@@ -379,33 +379,33 @@ static unsigned long migrate_device_unmap(unsigned long *src_pfns,
                        continue;
                }
 
-               /* ZONE_DEVICE pages are not on LRU */
-               if (!is_zone_device_page(page)) {
-                       if (!PageLRU(page) && allow_drain) {
+               folio = page_folio(page);
+               /* ZONE_DEVICE folios are not on LRU */
+               if (!folio_is_zone_device(folio)) {
+                       if (!folio_test_lru(folio) && allow_drain) {
                                /* Drain CPU's lru cache */
                                lru_add_drain_all();
                                allow_drain = false;
                        }
 
-                       if (!isolate_lru_page(page)) {
+                       if (!folio_isolate_lru(folio)) {
                                src_pfns[i] &= ~MIGRATE_PFN_MIGRATE;
                                restore++;
                                continue;
                        }
 
                        /* Drop the reference we took in collect */
-                       put_page(page);
+                       folio_put(folio);
                }
 
-               folio = page_folio(page);
                if (folio_mapped(folio))
                        try_to_migrate(folio, 0);
 
-               if (page_mapped(page) ||
+               if (folio_mapped(folio) ||
                    !migrate_vma_check_page(page, fault_page)) {
-                       if (!is_zone_device_page(page)) {
-                               get_page(page);
-                               putback_lru_page(page);
+                       if (!folio_is_zone_device(folio)) {
+                               folio_get(folio);
+                               folio_putback_lru(folio);
                        }
 
                        src_pfns[i] &= ~MIGRATE_PFN_MIGRATE;