Shu Wang opened bugzilla 211287 [1] saying, When a memory region is mapped with huge pages, the softdirty bit is set only right after the huge pages is mapped. After the memory mapping, if the softdirty bit is cleared and the memory is written again, the softdirty bit is not set when reading from the process's pagemap. Their use case for hugetlb soft dirty is, We maps both PMEM and hugetlb DRAM to process’s address space to provide large amount of memory to the application. Periodically, we clear the soft dirty bit by writing ‘4’ to the clear_refs. Then, we check the page’s soft dirty bit from pagemap and use this information to track write activity to memory. We migrate the data between DRAM and PMEM based the write activity for better performance. A quick check of the code revealed, The /proc clear_refs code handles THP pages and 'normal' pages. There is no check/processing for hugetlb pages. All the code will do is clear the VM_SOFTDIRTY vma flag and vma_set_page_prot. None of the individual ptes or page flags are touched. The only soft dirty checking done by the /proc pagemap code is at the vma level. It checks the VM_SOFTDIRTY flag. It does not look for soft dirty on the individual ptes. That explains the behavior described in the bugzilla report. This series adds soft dirty support for hugetlb. It has only passed some very basic testing and likely needs more work. However, Axel Rasmussen's "userfaultfd: add minor fault handling" and Peter Xu's "userfaultfd-wp: Support shmem and hugetlbfs" work touch the same areas and have similiar issues. Therefore, code is being sent earlier than normal so that efforts in common areas can be coordinated. [1] https://bugzilla.kernel.org/show_bug.cgi?id=211287 Mike Kravetz (5): hugetlb: add hugetlb helpers for soft dirty support hugetlb: enhance hugetlb fault processing to support soft dirty mm proc/task_mmu.c: add soft dirty pte checks for hugetlb hugetlb: don't permit pmd sharing if soft dirty in use mm proc/task_mmu.c: add hugetlb specific routine for clear_refs arch/s390/include/asm/hugetlb.h | 30 +++++++++ fs/proc/task_mmu.c | 114 ++++++++++++++++++++++++++++++++ include/asm-generic/hugetlb.h | 30 +++++++++ include/linux/hugetlb.h | 1 + mm/hugetlb.c | 40 ++++++----- 5 files changed, 199 insertions(+), 16 deletions(-) -- 2.29.2