[PATCH] arm64: mm: Fix pte_mkclean, pte_mkdirty semantics

Catalin Marinas catalin.marinas at arm.com
Fri Dec 1 09:44:29 PST 2017


On Fri, Dec 01, 2017 at 05:22:14PM +0000, Steve Capper wrote:
> On systems with hardware dirty bit management, the ltp madvise09 unit
> test fails due to dirty bit information being lost and pages being
> incorrectly freed.
> 
> This was bisected to:
> 	arm64: Ignore hardware dirty bit updates in ptep_set_wrprotect()
> 
> Reverting this commit leads to a separate problem, that the unit test
> retains pages that should have been dropped due to the function
> madvise_free_pte_range(.) not cleaning pte's properly.
> 
> Currently pte_mkclean only clears the software dirty bit, thus the
> following code sequence can appear:
> 
> 	pte = pte_mkclean(pte);
> 	if (pte_dirty(pte))
> 		// this condition can return true with HW DBM!
> 
> This patch also adjusts pte_mkclean to set PTE_RDONLY thus effectively
> clearing both the SW and HW dirty information.
> 
> In order for this to function on systems without HW DBM, we need to
> also adjust pte_mkdirty to remove the read only bit from writable pte's
> to avoid infinite fault loops.
> 
> Reported-by: Bhupinder Thakur <bhupinder.thakur at linaro.org>
> Fixes: 64c26841b349 ("arm64: Ignore hardware dirty bit updates in
> ptep_set_wrprotect()")
> Signed-off-by: Steve Capper <steve.capper at arm.com>

Reviewed-by: Catalin Marinas <catalin.marinas at arm.com>



More information about the linux-arm-kernel mailing list