mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-11 12:28:41 +08:00
66b2ca0862
It was reported that soft dirty tracking doesn't work when using the
Radix MMU.
The tracking is supposed to work by clearing the soft dirty bit for a
mapping and then write protecting the PTE. If/when the page is written
to, a page fault occurs and the soft dirty bit is added back via
pte_mkdirty(). For example in wp_page_reuse():
entry = maybe_mkwrite(pte_mkdirty(entry), vma);
if (ptep_set_access_flags(vma, vmf->address, vmf->pte, entry, 1))
update_mmu_cache(vma, vmf->address, vmf->pte);
Unfortunately on radix _PAGE_SOFTDIRTY is being dropped by
radix__ptep_set_access_flags(), called from ptep_set_access_flags(),
meaning the soft dirty bit is not set even though the page has been
written to.
Fix it by adding _PAGE_SOFTDIRTY to the set of bits that are able to be
changed in radix__ptep_set_access_flags().
Fixes:
|
||
---|---|---|
.. | ||
book3s32 | ||
book3s64 | ||
kasan | ||
nohash | ||
ptdump | ||
cacheflush.c | ||
copro_fault.c | ||
dma-noncoherent.c | ||
drmem.c | ||
fault.c | ||
hugetlbpage.c | ||
init_32.c | ||
init_64.c | ||
init-common.c | ||
ioremap_32.c | ||
ioremap_64.c | ||
ioremap.c | ||
maccess.c | ||
Makefile | ||
mem.c | ||
mmu_context.c | ||
mmu_decl.h | ||
numa.c | ||
pageattr.c | ||
pgtable_32.c | ||
pgtable_64.c | ||
pgtable-frag.c | ||
pgtable.c |