mirror of
https://git.proxmox.com/git/mirror_ubuntu-kernels.git
synced 2025-12-03 05:38:10 +00:00
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 | ||