> +     /* Fast path: category_mask == return_mask == PAGE_IS_WRITTEN. */
> +     ret = pagemap_ioctl(mem, hpage_size, regions, ARRAY_SIZE(regions), 0, 0,
> +                         PAGE_IS_WRITTEN, 0, 0, PAGE_IS_WRITTEN);
> +     for (i = 0; ret > 0 && i < ret; i++)
> +             fast += LEN(regions[i]);
> +
> +     /* Generic path: same query expressed via category_anyof_mask. */
> +     ret = pagemap_ioctl(mem, hpage_size, regions, ARRAY_SIZE(regions), 0, 0,
> +                         0, PAGE_IS_WRITTEN, 0, PAGE_IS_WRITTEN);
> +     for (i = 0; ret > 0 && i < ret; i++)
> +             slow += LEN(regions[i]);
> +
> +     ksft_test_result(fast == npages && slow == npages,
> +                      "%s pmd-hole reported written by both paths (%ld, %ld 
> of %d)\n",
> +                      __func__, fast, slow, npages);
> +out:
> +     wp_free(mem, hpage_size);
> +     munmap(area, 2 * hpage_size);
> +}

Sorry if I wasn't clear. I think unpopulated_thp_scan_test() can actually reuse
bits of unpopulated_scan_test().

Either by having a magical "use_thp" parameter or by factoring stuff out into a
helper.

Or am I missing an important point why that would not work or be really ugly?

-- 
Cheers,

David

Reply via email to