> The page cache caps folio order at MAX_PAGECACHE_ORDER, which sits below > the PMD order where a PMD is 512M -- arm64 with 64K base pages. A
"which is smaller than PMD order on arm64 with 64K pages" reads less ornately ;-) > PMD-sized page cache folio is then impossible, so MADV_COLLAPSE answers > -EINVAL and khugepaged passes over the range. The shmem cases ask for one > anyway, so four of them fail and the run bails out in the middle. shmem asks for one who? > The cap is one global, so it rules out every file mapping, not just shmem: > shmem_huge_global_enabled() drops the PMD order from what it allows, and > file_thp_enabled() refuses a regular file whose mapping cannot hold a PMD > folio. I had hard time parsing it beyound "the cap is global". > Skip both mem types when the PMD order has no per-order > shmem_enabled control, which is the readable form of the cap: that control > is created for the orders in THP_ORDERS_ALL_FILE_DEFAULT. A run left with > nothing to collapse into skips outright. This should be a paragraph on its own IMHO. -- Sincerely yours, Mike.

