mirror_ubuntu-kernels/arch/powerpc/mm/book3s64
Michael Ellerman 66b2ca0862 powerpc/64s/radix: Fix soft dirty tracking
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: b0b5e9b130 ("powerpc/mm/radix: Add radix pte #defines")
Cc: stable@vger.kernel.org # v4.7+
Reported-by: Dan Horák <dan@danny.cz>
Link: https://lore.kernel.org/r/20230511095558.56663a50f86bdc4cd97700b7@danny.cz
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://msgid.link/20230511114224.977423-1-mpe@ellerman.id.au
2023-05-11 22:17:38 +10:00
..
hash_4k.c powerpc/64s/hash: add stress_hpt kernel boot option to increase hash faults 2022-12-02 18:04:25 +11:00
hash_64k.c powerpc/64s/hash: add stress_hpt kernel boot option to increase hash faults 2022-12-02 18:04:25 +11:00
hash_hugepage.c powerpc/book3s64/kuap: Use Key 3 for kernel mapping with hash translation 2020-12-04 01:01:25 +11:00
hash_native.c powerpc/64s: make HPTE lock and native_tlbie_lock irq-safe 2022-10-18 22:46:18 +11:00
hash_pgtable.c powerpc/64s: Fix hash__change_memory_range preemption warning 2022-10-18 22:46:18 +11:00
hash_tlb.c powerpc/mm/book3s/hash: Rename flush_tlb_pmd_range 2022-09-30 18:35:52 +10:00
hash_utils.c Merge branch 'fixes' into next 2023-02-12 22:11:56 +11:00
hugetlbpage.c powerpc/mm: Update default hugetlb size early 2022-02-12 22:47:44 +11:00
internal.h powerpc/64s/hash: add stress_hpt kernel boot option to increase hash faults 2022-12-02 18:04:25 +11:00
iommu_api.c mm, treewide: redefine MAX_ORDER sanely 2023-04-05 19:42:46 -07:00
Makefile powerpc: Book3S 64-bit outline-only KASAN support 2022-05-22 15:58:29 +10:00
mmu_context.c powerpc/mm: Add __init attribute to eligible functions 2021-12-23 22:33:11 +11:00
pgtable.c powerpc: Remove find_current_mm_pte() 2022-11-24 23:12:18 +11:00
pkeys.c powerpc: Include asm/firmware.h in all users of firmware_has_feature() 2022-06-29 16:45:05 +10:00
radix_hugetlbpage.c powerpc/64s: POWER10 nest MMU can upgrade PTE access authority without TLB flush 2022-07-27 21:36:04 +10:00
radix_pgtable.c powerpc/64s/radix: Fix soft dirty tracking 2023-05-11 22:17:38 +10:00
radix_tlb.c lazy tlb: introduce lazy tlb mm refcount helper functions 2023-03-28 16:20:08 -07:00
slb.c powerpc: fix typos in comments 2022-05-05 22:12:44 +10:00
slice.c powerpc/mm: Enable full randomisation of memory mappings 2022-05-05 22:11:58 +10:00
subpage_prot.c mm: replace vma->vm_flags direct modifications with modifier calls 2023-02-09 16:51:39 -08:00
trace.c mm/migration: add trace events for THP migrations 2022-03-24 19:06:45 -07:00