+       /*
+        * To challenge spitting code, we will mremap page[x] of the
+        * thp[x] into a smaller area, and trigger the split from that
+        * smaller area. This will end up replacing the PMD mappings in
+        * the thp_area by PTE mappings first, leaving the THPs unsplit.
+        */
+       page_area = mmap(NULL, page_area_size, PROT_READ | PROT_WRITE,
+                       MAP_ANONYMOUS | MAP_PRIVATE, -1, 0);
+       if (page_area == MAP_FAILED) {
+               ksft_test_result_fail("Fail to allocate memory: %s\n", 
strerror(errno));
+               goto out;
+       }
-               if (i % pagesize == 0 &&
-                   !is_backed_by_folio(&pte_mapped[i], 0, pagemap_fd, 
kpageflags_fd))
-                       thp_size++;
+       for (i = 0; i < nr_thps; i++) {
+               tmp = mremap(thp_area + pmd_pagesize * i + pagesize * i,
+                            pagesize, pagesize, MREMAP_MAYMOVE|MREMAP_FIXED,
+                            page_area + pagesize * i);

Would this create one hole at the beginning of each 2M range and cause
splitting underlining THP?

Yes, it will create a hole (this also happens in the old code).

As the comment above it now states: "leaving the THPs unsplit"

There is a check verifying that after this mremap code.

--
Cheers

David / dhildenb


Reply via email to