From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 1FB2CCF9C6B for ; Tue, 24 Sep 2024 07:15:14 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 4F9BB6B00A6; Tue, 24 Sep 2024 03:15:14 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 482A96B00A7; Tue, 24 Sep 2024 03:15:14 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 3235C6B00A8; Tue, 24 Sep 2024 03:15:14 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id 0E0016B00A6 for ; Tue, 24 Sep 2024 03:15:14 -0400 (EDT) Received: from smtpin26.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id 6944E141895 for ; Tue, 24 Sep 2024 07:15:13 +0000 (UTC) X-FDA: 82598770506.26.DB2C70D Received: from out-176.mta1.migadu.com (out-176.mta1.migadu.com [95.215.58.176]) by imf16.hostedemail.com (Postfix) with ESMTP id 23447180007 for ; Tue, 24 Sep 2024 07:15:09 +0000 (UTC) Authentication-Results: imf16.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b=GvYaS4II; dmarc=pass (policy=none) header.from=linux.dev; spf=pass (imf16.hostedemail.com: domain of muchun.song@linux.dev designates 95.215.58.176 as permitted sender) smtp.mailfrom=muchun.song@linux.dev ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1727162023; a=rsa-sha256; cv=none; b=mUoXYcrXvL5LluVn6mDiEjAFl2FmgsVjYQ38NznTskn5aI5JaOU9urfW7X+W0CFc1luRX5 eHWzrw93Tu+NPg4odAgNE8skWiQ1W1uPFWSc/TpEG/GevtHenbiWIIoir4G+a53PCl8rfN gkzq4O0jIRhO7UVprlFWYiAcwjVvjRA= ARC-Authentication-Results: i=1; imf16.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b=GvYaS4II; dmarc=pass (policy=none) header.from=linux.dev; spf=pass (imf16.hostedemail.com: domain of muchun.song@linux.dev designates 95.215.58.176 as permitted sender) smtp.mailfrom=muchun.song@linux.dev ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1727162023; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=Zp82X1gEUMsH0cTyMFodXGf6d6eN6K2y3H6Zo3CY6V4=; b=2AE2bYKsgpEly9BoD8o+p1Zdt4N7RYcZ6u7CMRZ/L22cfLY345gbamW5JTLPOYsPar2Pl3 mMVN1dHthFB86c00WV/vyXtpLTSxg0juiE79DWbf6JN0Ow5zMK7HIs/f4FrTmgGRhjK13F y8XMuMtpU+pdlg++iXwwUIO+IZ8oqi0= Content-Type: text/plain; charset=utf-8 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1727162106; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=Zp82X1gEUMsH0cTyMFodXGf6d6eN6K2y3H6Zo3CY6V4=; b=GvYaS4II90o9GYK0iIC3QYuCKDMNOPlhACCwBTXmCWQBvZjlyKPBPGlCFb0RWXghLLfHZW IhHdZAjaAOJhJfaIc+yWwY5pxLcX1yMPuxnDbZQ5WHYWUhOj2e9vlBrFcoz7xCj+XQZOdE O9XuikCg+BwKGuiqghMOTI64McSTg2E= Content-Transfer-Encoding: quoted-printable Mime-Version: 1.0 (1.0) Subject: Re: [PATCH v4 07/13] mm: khugepaged: collapse_pte_mapped_thp() use pte_offset_map_rw_nolock() X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. From: Muchun Song In-Reply-To: <07d975c50fe09c246e087303b39998430b1a66bd.1727148662.git.zhengqi.arch@bytedance.com> Cc: david@redhat.com, hughd@google.com, willy@infradead.org, vbabka@kernel.org, akpm@linux-foundation.org, rppt@kernel.org, vishal.moola@gmail.com, peterx@redhat.com, ryan.roberts@arm.com, christophe.leroy2@cs-soprasteria.com, linux-kernel@vger.kernel.org, linux-mm@kvack.org, linux-arm-kernel@lists.infradead.org, linuxppc-dev@lists.ozlabs.org Date: Tue, 24 Sep 2024 15:14:25 +0800 Message-Id: <79699B24-0D99-4051-91F3-5695D32D62AC@linux.dev> References: <07d975c50fe09c246e087303b39998430b1a66bd.1727148662.git.zhengqi.arch@bytedance.com> To: Qi Zheng X-Migadu-Flow: FLOW_OUT X-Rspamd-Queue-Id: 23447180007 X-Rspam-User: X-Rspamd-Server: rspam05 X-Stat-Signature: ho3u39u8gmtm4w8hwyf5pd1sagannhs3 X-HE-Tag: 1727162109-526576 X-HE-Meta: U2FsdGVkX1/dxdBtTRyamg+gwZTCOUNb8cRVsOOHI9nu6PS40rZMSPwZqV6KjXu/WS0Rwz4Swo8dklRRlN+0kmMIbzcEONFFc0YZY0SqVKEh1K98e/+bbFoMSq3ghh4xYbH/w7KhKcWnNYNg05LjDaCFp6rrZl1l4NmNdAfD8W7akJdogLFXduOZOUM6WFTiUvnwY24XhiMF0xurOI0DQyv5UDt9kf69CsYDPfmk7rSjNEXl59QzbJMjtJJPlDFnBIZRKOBuU/Olhdejl64tPt8wKtnG1elDp8q8PD2tSXnoO6QovBIIzx3bwAhxZMT2bi0Dg050opuaL9ThdfgyPOdGpap7xQq7jOQdymp2fkiqPQjLgs/vPQnHv+ynzxAJeVxIUQFYwlHr+IzlVJPlOdo4I8kcalPWLNBpXl0m5rT/L01t4NFsZ6dzgG2rwbSF5p8/ptBc/WNMKPye6JcniDTkVt9Sss8X6ifWLJsbkzOwHP2EUzx1Q1o1IkaoTWll6SiJ+ydA8jBddPM/WIYQaPh8i/DsdlF+HlnkqJAhwsjNxqCtODLStN9zVQkXi3Fn3O8oNTUUyNPFK/7dEL0b0P7gNVnfHQIhiMgmPlfxYLUKXDMi+zUdlMavlJyFtQ086iyomvObEPcQFA0S1lH71aBktzodYRpfTbDIG9xEbtsw2RrI5bhO9rc1w+FHKhjOacZsFHCg9ETesBOFIB9NeewLC617EnkG0JYHOR8uI5bYNoRqo8aHBQc+zDMYX1nwOxSv3Ji/b22HuqSEkuwlRv7oxWi981VzQtt8+IiZRo310ddD41JAWSRob3ShvqOAgUqiJ1P/AznpateAI4ujNNmDOpJbjVncFLCa9N2bMN7JIkluBuK/AsOc6o0WyvmtDeBk/TjPsBtjiHO3ZpMn1mSOd/dFztNqp8fBGFmd7iPZeNuu/ycAParW4Vr6ffKjTyWc7hEXH/rBt8eTF9q onfhiRq3 BcDvI5zGMbAv8oeEnfE3pLIftYiPwQ0KBPMsYI1NcCKysnUwZ7IaLIIuuFCNtMn2hbcWyKZjpYNJoqi+0mKx5oopyOdPmGPig8Pw43j02IG7eSjeeyPyP2Jl6II6bJAZ9Cy15BO9LKuYAlBjrItVaKrJUfpXYdYaOXWsCxlvNEFpiQthlqbvWjCmqSdbBzpM1EGW/YreZSLaf27uYv6Bz9zPyo7OaujRR5OuEQNXjIWHJs8xgiV53vwL+KSr9nBJFkNA41nIYkCH2zo3gZRGckGXa0lZt21JDLOU3rv5T/XA6S95anzV2PjoZgiFgOfKdWBXgXOChHQ6LHrtguF56ohHcS1bSsh+AvnqS X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: > On Sep 24, 2024, at 14:11, Qi Zheng wrote: > =EF=BB=BFIn collapse_pte_mapped_thp(), we may modify the pte and pmd entry= after > acquring the ptl, so convert it to using pte_offset_map_rw_nolock(). At > this time, the pte_same() check is not performed after the PTL held. So we= > should get pgt_pmd and do pmd_same() check after the ptl held. >=20 > Signed-off-by: Qi Zheng > --- > mm/khugepaged.c | 14 +++++++++++--- > 1 file changed, 11 insertions(+), 3 deletions(-) >=20 > diff --git a/mm/khugepaged.c b/mm/khugepaged.c > index 6498721d4783a..8ab79c13d077f 100644 > --- a/mm/khugepaged.c > +++ b/mm/khugepaged.c > @@ -1605,7 +1605,7 @@ int collapse_pte_mapped_thp(struct mm_struct *mm, un= signed long addr, > if (userfaultfd_armed(vma) && !(vma->vm_flags & VM_SHARED)) > pml =3D pmd_lock(mm, pmd); >=20 > - start_pte =3D pte_offset_map_nolock(mm, pmd, haddr, &ptl); > + start_pte =3D pte_offset_map_rw_nolock(mm, pmd, haddr, &pgt_pmd, &ptl= ); > if (!start_pte) /* mmap_lock + page lock should prevent this */ > goto abort; > if (!pml) > @@ -1613,6 +1613,9 @@ int collapse_pte_mapped_thp(struct mm_struct *mm, un= signed long addr, > else if (ptl !=3D pml) > spin_lock_nested(ptl, SINGLE_DEPTH_NESTING); >=20 > + if (unlikely(!pmd_same(pgt_pmd, pmdp_get_lockless(pmd)))) > + goto abort; > + > /* step 2: clear page table and adjust rmap */ > for (i =3D 0, addr =3D haddr, pte =3D start_pte; > i < HPAGE_PMD_NR; i++, addr +=3D PAGE_SIZE, pte++) { > @@ -1645,7 +1648,6 @@ int collapse_pte_mapped_thp(struct mm_struct *mm, un= signed long addr, > nr_ptes++; > } >=20 > - pte_unmap(start_pte); > if (!pml) > spin_unlock(ptl); >=20 > @@ -1658,13 +1660,19 @@ int collapse_pte_mapped_thp(struct mm_struct *mm, u= nsigned long addr, > /* step 4: remove empty page table */ > if (!pml) { > pml =3D pmd_lock(mm, pmd); > - if (ptl !=3D pml) > + if (ptl !=3D pml) { > spin_lock_nested(ptl, SINGLE_DEPTH_NESTING); > + if (unlikely(!pmd_same(pgt_pmd, pmdp_get_lockless(pmd)))) { > + spin_unlock(pml); > + goto abort; Drop the reference of folio and the mm counter twice at the label of abort a= nd the step 3. > + } > + } > } > pgt_pmd =3D pmdp_collapse_flush(vma, haddr, pmd); > pmdp_get_lockless_sync(); > if (ptl !=3D pml) > spin_unlock(ptl); > + pte_unmap(start_pte); > spin_unlock(pml); Why not? pte_unmap_unlock(start_pte, ptl); if (pml !=3D ptl) spin_unlock(pml); >=20 > mmu_notifier_invalidate_range_end(&range); > -- > 2.20.1