On Tue, Sep 02, 2025 at 09:49:48AM +0200, David Hildenbrand wrote: >> > + /* >> > + * 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. >> > + */
This confuse me a little. How about move "and trigger the split from that smaller area" to the end? So that I know mremap convert to pte-mapping and leave thp unsplit. Then we do the split. >> > + 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. > Thanks for clarifying. One nit to the comment above. -- Wei Yang Help you, Help me