@@ -1248,6 +1248,7 @@ static int hpage_collapse_scan_pmd(struct mm_struct *mm,
1248
1248
int result = SCAN_FAIL , referenced = 0 ;
1249
1249
int none_or_zero = 0 , shared = 0 ;
1250
1250
struct page * page = NULL ;
1251
+ struct folio * folio = NULL ;
1251
1252
unsigned long _address ;
1252
1253
spinlock_t * ptl ;
1253
1254
int node = NUMA_NO_NODE , unmapped = 0 ;
@@ -1334,29 +1335,28 @@ static int hpage_collapse_scan_pmd(struct mm_struct *mm,
1334
1335
}
1335
1336
}
1336
1337
1337
- page = compound_head (page );
1338
-
1338
+ folio = page_folio (page );
1339
1339
/*
1340
1340
* Record which node the original page is from and save this
1341
1341
* information to cc->node_load[].
1342
1342
* Khugepaged will allocate hugepage from the node has the max
1343
1343
* hit record.
1344
1344
*/
1345
- node = page_to_nid ( page );
1345
+ node = folio_nid ( folio );
1346
1346
if (hpage_collapse_scan_abort (node , cc )) {
1347
1347
result = SCAN_SCAN_ABORT ;
1348
1348
goto out_unmap ;
1349
1349
}
1350
1350
cc -> node_load [node ]++ ;
1351
- if (!PageLRU ( page )) {
1351
+ if (!folio_test_lru ( folio )) {
1352
1352
result = SCAN_PAGE_LRU ;
1353
1353
goto out_unmap ;
1354
1354
}
1355
- if (PageLocked ( page )) {
1355
+ if (folio_test_locked ( folio )) {
1356
1356
result = SCAN_PAGE_LOCK ;
1357
1357
goto out_unmap ;
1358
1358
}
1359
- if (!PageAnon ( page )) {
1359
+ if (!folio_test_anon ( folio )) {
1360
1360
result = SCAN_PAGE_ANON ;
1361
1361
goto out_unmap ;
1362
1362
}
@@ -1371,7 +1371,7 @@ static int hpage_collapse_scan_pmd(struct mm_struct *mm,
1371
1371
* has excessive GUP pins (i.e. 512). Anyway the same check
1372
1372
* will be done again later the risk seems low.
1373
1373
*/
1374
- if (!is_refcount_suitable (page )) {
1374
+ if (!is_refcount_suitable (& folio -> page )) {
1375
1375
result = SCAN_PAGE_COUNT ;
1376
1376
goto out_unmap ;
1377
1377
}
@@ -1381,8 +1381,8 @@ static int hpage_collapse_scan_pmd(struct mm_struct *mm,
1381
1381
* enough young pte to justify collapsing the page
1382
1382
*/
1383
1383
if (cc -> is_khugepaged &&
1384
- (pte_young (pteval ) || page_is_young ( page ) ||
1385
- PageReferenced ( page ) || mmu_notifier_test_young (vma -> vm_mm ,
1384
+ (pte_young (pteval ) || folio_test_young ( folio ) ||
1385
+ folio_test_referenced ( folio ) || mmu_notifier_test_young (vma -> vm_mm ,
1386
1386
address )))
1387
1387
referenced ++ ;
1388
1388
}
@@ -1404,7 +1404,7 @@ static int hpage_collapse_scan_pmd(struct mm_struct *mm,
1404
1404
* mmap_locked = false;
1405
1405
}
1406
1406
out :
1407
- trace_mm_khugepaged_scan_pmd (mm , page , writable , referenced ,
1407
+ trace_mm_khugepaged_scan_pmd (mm , & folio -> page , writable , referenced ,
1408
1408
none_or_zero , result , unmapped );
1409
1409
return result ;
1410
1410
}
0 commit comments