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 E665DCF9C71 for ; Tue, 24 Sep 2024 08:40:15 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 4FB456B0088; Tue, 24 Sep 2024 04:40:15 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 4AA306B0093; Tue, 24 Sep 2024 04:40:15 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 3721A6B0096; Tue, 24 Sep 2024 04:40:15 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id 123BC6B0088 for ; Tue, 24 Sep 2024 04:40:15 -0400 (EDT) Received: from smtpin30.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id 8D072A1850 for ; Tue, 24 Sep 2024 08:40:14 +0000 (UTC) X-FDA: 82598984748.30.71BAF8A Received: from out-174.mta1.migadu.com (out-174.mta1.migadu.com [95.215.58.174]) by imf16.hostedemail.com (Postfix) with ESMTP id E2929180002 for ; Tue, 24 Sep 2024 08:40:10 +0000 (UTC) Authentication-Results: imf16.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b=qYRwuhju; dmarc=pass (policy=none) header.from=linux.dev; spf=pass (imf16.hostedemail.com: domain of muchun.song@linux.dev designates 95.215.58.174 as permitted sender) smtp.mailfrom=muchun.song@linux.dev ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1727167178; a=rsa-sha256; cv=none; b=bLb+Zn01IFvWOzkRFsHn9nYNR8N1Emx+tFDuDigjLjKnw/jPrJoylg+M6wWtlZzr83juq8 +5HQ9fxzQtC/l4d2ac5uPHvppxaUm/0BkRX8Q5lmHoPxBlbzn/WdruyUOfbzlvLTJQ5mpw ThTQA8DrekF93nv0cyNiqB46UaHNNmM= ARC-Authentication-Results: i=1; imf16.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b=qYRwuhju; dmarc=pass (policy=none) header.from=linux.dev; spf=pass (imf16.hostedemail.com: domain of muchun.song@linux.dev designates 95.215.58.174 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=1727167177; 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=4km3vsfny3o5BuNaxdFJ/U7V0O7MH61EKUY+GsV/2wA=; b=BtE4zfjbF9A1Po8gQ3DNgXW8C36bzWvkLEzhdKEAdw+mUKdFFCXdY9EYpOOGkUnrdo89Nu ZpwKEfyKiuEoKYEXuXf3+c/MYp+rRYpYDBrySiygoA10gr/GAZTKpMsXs6wRqMd1P+mYuq YNlu3UJ2QyZaA/NPsLBRRV81n+1NiW4= Content-Type: text/plain; charset=utf-8 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1727167205; 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=4km3vsfny3o5BuNaxdFJ/U7V0O7MH61EKUY+GsV/2wA=; b=qYRwuhjuDKlxnM/KJKgBrqSmqcTgbcxQ7HXl3g2JNtkOjZYV17+wRZDFCKQXqHc68L9c7v y8TrvQ77VqadFjPeqaHB9sWncvhGTmgHdZ5K8QdMTP+GIHeYhhbn1TR4K/B9KqlqdwXKd2 kbxVbvr+6D6xF8pktefXkU8cq0pwu1Y= Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3818.100.11.1.3\)) Subject: Re: [PATCH v4 10/13] mm: page_vma_mapped_walk: map_pte() 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: Date: Tue, 24 Sep 2024 16:39:13 +0800 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 Content-Transfer-Encoding: quoted-printable Message-Id: <2CBAEE27-9C4E-4902-B6BB-B6029FD42E8D@linux.dev> References: To: Qi Zheng X-Migadu-Flow: FLOW_OUT X-Rspam-User: X-Rspamd-Queue-Id: E2929180002 X-Rspamd-Server: rspam01 X-Stat-Signature: bu9esbyse3j9z85diepuomjjouph4fhg X-HE-Tag: 1727167210-477313 X-HE-Meta: U2FsdGVkX19L+oe80HKkvTawOYwaCwQ2sod9pSQ0L00Q5Gjte6H6LR5XDbbMIWIXGvLohznq/OfuYaXkdyJXPWx2qrYtvMPKLDtvpf9EIDBJhudc4U8BNQoTRk4o8zGOKCswT6Gmf0oGy8DM5bYLfiADiZLWtfUkSab0elR+VRZM+ZY4oZDL6Yw7xCkEz+wO43kS/Jze2PtBrqW2SoZ68uCdP4gm9XoVGZc7APJbAz+cghgonJ5et4lHaV3/4Uqfr1qH3+ArOuNWVVCTFdgxbW9TDX0YR6yacDudfdmDr4lSZQO/AfX3eYRwfGO0gVh9oOACTz6BuqUcZ5Xrf8BHvbOa9QTmHcQ2I7r7GgRRsYUlIgoYQPoG3Xmem2V2HyMVI2QiOZBOEIuLhbLlapo6EDwRgcmwBIf1AIsQFJLAD0gclJ3DG9VHZ104gcpE48vsRcOC1R6aY8dU4rSQdVNQDfN4yKXjU4G5ign8lYE4Fgv3YlUnr1gWxZ1xw69GP29SS7uWZ0hEhYLLAGWt4rNNPKLnNJv5FmkVLbeC6uzNmvQqFucGOkXzVvCbqRu7nz1+W3BM0lLbgkwCy9bDUssvzwk6KQyLOfHww80zT9Hc2slBcvU9rKuUcEU/1dj2YF4KrahBXFqg6l0v4Mx62aKYvgbmA+kWqjYvcKi+MMM8VNbsI0s+o8TaW3LY/MOKBLLmNyYJl46ewyPVJD7C/wRpx7HYF0CAnCo5/yaAawDP1vtWrXb+jXU2fKWW2ARdKaIzU9TC/vkVv0UQudkBzCBRniLuAASKouJbkN85iGYXL+SPBRnM8NSuuOF/O78Gspu/2TNmGM9mUDzMpqajt9H7gGRRVYKwouTBR/lEk4qyT6mpP0JEiuYQekmCNiPHyP2MIAuXn2xnRxk5dq2GFcRJW0yxys5YvSIAv5Kub+h4RAOkN91UvLnKsIxbRBVS9PrKHrr0SfgjseefXJifYL8 G7ZNfjru ivX11Jlq9AhVfKalUTGtj3sgQKLiPZVQWxtQGLtI0ftq6WQbPzB16g0eqI1TbQgRjdm9YDjFoEnEoKrqaWZ5E9LFIvSI1z/t+68YCgoW3jRBoH1uckDpBOGUGvl/l8/KnW73n3+zifqx+BfjRFIZfKUsxW84UKrMtAa7CMt34g/8yLcwLVygXtFFOhx/gFelEZucLlVdfy31hZuXpIm1l2GgDQw1mYIRgBZ2Axrha5LK4W3Qrd5uqiZHYMpSzctj1EtlK++jFaCNO5zRq3HFC31epWYQb4ewMvr6ErHme+t9nt6oSzdPAVuefLZZT9RzBEtOrIcPRSJtQsl7hZLb/ULPnB3XuKsD1nwQx 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 16:33, Qi Zheng = wrote: >=20 >=20 >=20 > On 2024/9/24 16:25, Muchun Song wrote: >>> On Sep 24, 2024, at 14:11, Qi Zheng = wrote: >>>=20 >>> =EF=BB=BFIn the caller of map_pte(), we may modify the pvmw->pte = after acquiring >>> the pvmw->ptl, so convert it to using pte_offset_map_rw_nolock(). At >>> this time, the pte_same() check is not performed after the pvmw->ptl = held, >>> so we should get pmdval and do pmd_same() check to ensure the = stability of >>> pvmw->pmd. >>>=20 >>> Signed-off-by: Qi Zheng >>> --- >>> mm/page_vma_mapped.c | 25 ++++++++++++++++++++----- >>> 1 file changed, 20 insertions(+), 5 deletions(-) >>>=20 >>> diff --git a/mm/page_vma_mapped.c b/mm/page_vma_mapped.c >>> index ae5cc42aa2087..6410f29b37c1b 100644 >>> --- a/mm/page_vma_mapped.c >>> +++ b/mm/page_vma_mapped.c >>> @@ -13,9 +13,11 @@ static inline bool not_found(struct = page_vma_mapped_walk *pvmw) >>> return false; >>> } >>>=20 >>> -static bool map_pte(struct page_vma_mapped_walk *pvmw, spinlock_t = **ptlp) >>> +static bool map_pte(struct page_vma_mapped_walk *pvmw, pmd_t = *pmdvalp, >>> + spinlock_t **ptlp) >>> { >>> pte_t ptent; >>> + pmd_t pmdval; >> Why declare a new variable? Can=E2=80=99t we use *pmdvalp instead? >=20 > It's just a coding habit, both are fine for me. Agree. But sometime it could make code look a little simpler. >=20 >>>=20 >>> if (pvmw->flags & PVMW_SYNC) { >>> /* Use the stricter lookup */ >>> @@ -25,6 +27,7 @@ static bool map_pte(struct page_vma_mapped_walk = *pvmw, spinlock_t **ptlp) >>> return !!pvmw->pte; >>> } >>>=20 >>> +again: >>> /* >>> * It is important to return the ptl corresponding to pte, >>> * in case *pvmw->pmd changes underneath us; so we need to >>> @@ -32,10 +35,11 @@ static bool map_pte(struct page_vma_mapped_walk = *pvmw, spinlock_t **ptlp) >>> * proceeds to loop over next ptes, and finds a match later. >>> * Though, in most cases, page lock already protects this. >>> */ >>> - pvmw->pte =3D pte_offset_map_nolock(pvmw->vma->vm_mm, = pvmw->pmd, >>> - pvmw->address, ptlp); >>> + pvmw->pte =3D pte_offset_map_rw_nolock(pvmw->vma->vm_mm, = pvmw->pmd, >>> + pvmw->address, &pmdval, ptlp); >>> if (!pvmw->pte) >>> return false; >>> + *pmdvalp =3D pmdval; For instance, here, it is unnecessary if pmdvalp is passed directly to pte_offset_map_rw_nolock. >>>=20 >>> ptent =3D ptep_get(pvmw->pte); >>>=20 >>> @@ -67,8 +71,13 @@ static bool map_pte(struct page_vma_mapped_walk = *pvmw, spinlock_t **ptlp) >>> } else if (!pte_present(ptent)) { >>> return false; >>> } >>> + spin_lock(*ptlp); >>> + if (unlikely(!pmd_same(pmdval, pmdp_get_lockless(pvmw->pmd)))) = { >>> + pte_unmap_unlock(pvmw->pte, *ptlp); >>> + goto again; >>> + } >>> pvmw->ptl =3D *ptlp; >>> - spin_lock(pvmw->ptl); >>> + >>> return true; >>> } >>>=20 >>> @@ -278,7 +287,7 @@ bool page_vma_mapped_walk(struct = page_vma_mapped_walk *pvmw) >>> step_forward(pvmw, PMD_SIZE); >>> continue; >>> } >>> - if (!map_pte(pvmw, &ptl)) { >>> + if (!map_pte(pvmw, &pmde, &ptl)) { >>> if (!pvmw->pte) >>> goto restart; >>> goto next_pte; >>> @@ -307,6 +316,12 @@ bool page_vma_mapped_walk(struct = page_vma_mapped_walk *pvmw) >>> if (!pvmw->ptl) { >>> pvmw->ptl =3D ptl; >>> spin_lock(pvmw->ptl); >>> + if (unlikely(!pmd_same(pmde, = pmdp_get_lockless(pvmw->pmd)))) { >>> + pte_unmap_unlock(pvmw->pte, pvmw->ptl); >>> + pvmw->ptl =3D NULL; >>> + pvmw->pte =3D NULL; >>> + goto restart; >>> + } >>> } >>> goto this_pte; >>> } while (pvmw->address < end); >>> -- >>> 2.20.1