On 7/19/23 10:34 AM, Hugh Dickins wrote: > On Tue, 18 Jul 2023, Aneesh Kumar K.V wrote: >> Hugh Dickins <hughd@xxxxxxxxxx> writes: >> >>> Instead of pte_lockptr(), use the recently added pte_offset_map_nolock() >>> in assert_pte_locked(). BUG if pte_offset_map_nolock() fails: this is >>> stricter than the previous implementation, which skipped when pmd_none() >>> (with a comment on khugepaged collapse transitions): but wouldn't we want >>> to know, if an assert_pte_locked() caller can be racing such transitions? >>> >> >> The reason we had that pmd_none check there was to handle khugpaged. In >> case of khugepaged we do pmdp_collapse_flush and then do a ptep_clear. >> ppc64 had the assert_pte_locked check inside that ptep_clear. >> >> _pmd = pmdp_collapse_flush(vma, address, pmd); >> .. >> ptep_clear() >> -> asset_ptep_locked() >> ---> pmd_none >> -----> BUG >> >> >> The problem is how assert_pte_locked() verify whether we are holding >> ptl. It does that by walking the page table again and in this specific >> case by the time we call the function we already had cleared pmd . > > Aneesh, please clarify, I've spent hours on this. > > From all your use of past tense ("had"), I thought you were Acking my > patch; but now, after looking again at v3.11 source and today's, > I think you are NAKing my patch in its present form. > Sorry for the confusion my reply created. > You are pointing out that anon THP's __collapse_huge_page_copy_succeeded() > uses ptep_clear() at a point after pmdp_collapse_flush() already cleared > *pmd, so my patch now leads that one use of assert_pte_locked() to BUG. > Is that your point? > Yes. I haven't tested this yet to verify that it is indeed hitting that BUG. But a code inspection tells me we will hit that BUG on powerpc because of the above details. > I can easily restore that khugepaged comment (which had appeared to me > out of date at the time, but now looks still relevant) and pmd_none(*pmd) > check: but please clarify. > That is correct. if we add that pmd_none check back we should be good here. -aneesh