mirror of
https://git.proxmox.com/git/mirror_ubuntu-kernels.git
synced 2025-12-08 01:08:45 +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:
|
||
|---|---|---|
| .. | ||
| hash_4k.c | ||
| hash_64k.c | ||
| hash_hugepage.c | ||
| hash_native.c | ||
| hash_pgtable.c | ||
| hash_tlb.c | ||
| hash_utils.c | ||
| hugetlbpage.c | ||
| internal.h | ||
| iommu_api.c | ||
| Makefile | ||
| mmu_context.c | ||
| pgtable.c | ||
| pkeys.c | ||
| radix_hugetlbpage.c | ||
| radix_pgtable.c | ||
| radix_tlb.c | ||
| slb.c | ||
| slice.c | ||
| subpage_prot.c | ||
| trace.c | ||