On Mon, 24 Jun 2024 10:42:00 -0400 Peter Xu peterx@redhat.com wrote:
uffdio_api.features &= ~UFFD_FEATURE_WP_HUGETLBFS_SHMEM; uffdio_api.features &= ~UFFD_FEATURE_WP_UNPOPULATED; uffdio_api.features &= ~UFFD_FEATURE_WP_ASYNC;
#endif
If you run the userfaultfd selftests with the run_vmtests script we get several failures stemming from trying to call uffdio_regsiter with the flag UFFDIO_REGISTER_MODE_WP. However, the kernel ensures in vma_can_userfault() that if CONFIG_PTE_MARKER_UFFD_WP is disabled, only allow the VM_UFFD_WP - which is set when you pass the UFFDIO_REGISTER_MODE_WP flag - on anonymous vmas.
In parse_test_type_arg() I added the features check against UFFD_FEATURE_WP_UNPOPULATED as it seemed the most well know feature/flag. I'm more than happy to take any suggestions and adapt them if you have any!
There're documents for these features in the headers:
* UFFD_FEATURE_WP_HUGETLBFS_SHMEM indicates that userfaultfd * write-protection mode is supported on both shmem and hugetlbfs. * * UFFD_FEATURE_WP_UNPOPULATED indicates that userfaultfd * write-protection mode will always apply to unpopulated pages * (i.e. empty ptes). This will be the default behavior for shmem * & hugetlbfs, so this flag only affects anonymous memory behavior * when userfault write-protection mode is registered.
While in this context ("test_type != TEST_ANON") IIUC the accurate feature to check is UFFD_FEATURE_WP_HUGETLBFS_SHMEM.
In most kernels they should behave the same indeed, but note that since UNPOPULATED was introduced later than shmem/hugetlb support, it means on some kernel the result of checking these two features will be different.
I'm unsure what to do with this series. Peter, your review comments are unclear - do you request updates?
Also, the patches weren't cc:linux-mm which limits the audience. I'll drop this version. Audra, please continue to move this forward.