mm: thp: Avoid mapping a 64kB THP when anonymous COW-ed pages exist 72/270672/3
authorMarek Szyprowski <m.szyprowski@samsung.com>
Tue, 30 Nov 2021 12:41:31 +0000 (13:41 +0100)
committerSeung-Woo Kim <sw0312.kim@samsung.com>
Tue, 8 Feb 2022 07:22:39 +0000 (07:22 +0000)
commitd7fe4191b4dd1e6f2108727831864c7989235aec
treed25798e5fdec699164de0515771a497d6af4a1ad
parentd39987b460c30e406178e9510e265021752df2f5
mm: thp: Avoid mapping a 64kB THP when anonymous COW-ed pages exist

For the given read-only file there might exist copy-on-write anonymous
pages (e.g. when application has modified something in its .data
section).

Presence of such pages causes that the retract_page_tables() function in
mm/khugepaged.c skips retracting their PTE entries, even if the original
(unmodified) file pages have been replaced by the khugepaged with 64kB
THP. Those COW-ed pages remain mapped with 4kB entries.

When read-fault happens on the adjacent page, kernel checks if it can be
mapped with 64kB entry. Without a check for non-NULL vma->anon_vma the
4kB entries for the COW-ed pages will be replaced by the 64kB entries for
the unmodiffied pages of the original file.

This issue has not been observed for 2MB THPs, because PMD-fault (related
to 2MB THP size) doesn't happen if there are any pages still mapped with
4kB TLB entries.

This fixes the random crashes when CONFIG_THP_CONSERVATIVE mode is
enabled.

Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
Change-Id: Ic1d87b887f589894732e1c1066123aa88f4f582d
arch/arm64/include/asm/huge_mm.h