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 D1669CF9C71 for ; Tue, 24 Sep 2024 08:45:16 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 3C6F36B0099; Tue, 24 Sep 2024 04:45:16 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 375716B009A; Tue, 24 Sep 2024 04:45:16 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 23CD76B009C; Tue, 24 Sep 2024 04:45:16 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id 071CB6B0099 for ; Tue, 24 Sep 2024 04:45:16 -0400 (EDT) Received: from smtpin27.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id 6C723A1877 for ; Tue, 24 Sep 2024 08:45:15 +0000 (UTC) X-FDA: 82598997390.27.B37E368 Received: from mail-pl1-f173.google.com (mail-pl1-f173.google.com [209.85.214.173]) by imf17.hostedemail.com (Postfix) with ESMTP id B6E7E40008 for ; Tue, 24 Sep 2024 08:45:12 +0000 (UTC) Authentication-Results: imf17.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=WbYgQR80; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf17.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.214.173 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1727167417; a=rsa-sha256; cv=none; b=de/R+BIkPzH4+BvroVdkw9rQ0TTtJci2UdkR8r66gEaFcw1bRaXJK/Zb9iQaMjL+30ktJm nRtx13lwMx60215fhNuK+JlRK8Fab4n09bROHS+VAAnfeOs+wcR1G3HGFWAbVZ3Uqjiv1W H5I7SnocfE5MpiVP1i1tutxNWJyhM3c= ARC-Authentication-Results: i=1; imf17.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=WbYgQR80; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf17.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.214.173 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1727167417; 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=y2nQE9aToLO8F86J/y/Pv+vvJWva/3rLYd5MS5wex68=; b=CtKHz5C1+ROPQONdmvkdx40Eqhg0qUsp1Kq0WpNjD6COjd81SgeQIZ0iN+4UtTLlXSvdp5 b5PIvLhCV0Ya0rrD/D0Gt8X5rhhQUy7SGYHVkv+3WdQlMK8DK9Do/zoa4nn0/Y/9q94M3j uElv9nSPTFxL+fVDZHYJPFfVwWnjddA= Received: by mail-pl1-f173.google.com with SMTP id d9443c01a7336-20536dcc6e9so33252455ad.2 for ; Tue, 24 Sep 2024 01:45:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1727167511; x=1727772311; darn=kvack.org; h=content-transfer-encoding:in-reply-to:from:references:cc:to :content-language:subject:user-agent:mime-version:date:message-id :from:to:cc:subject:date:message-id:reply-to; bh=y2nQE9aToLO8F86J/y/Pv+vvJWva/3rLYd5MS5wex68=; b=WbYgQR80AVeJg/H+ZxXSzqpKU3lkdh+Qgl3pbDefQoXOoI+CXewM1t6gl3C45fnsoD CfbjoFD46ncGOtIvLI/+l0bnT/Agfoeyc17DCVF2ekmQp0BE/VkMRqkiyAtqYhcFOLbw fHWTqy0p0GsQcC61vxuO9e4M0HsqUKU5WZn2MaRX/ulMIbdAFoULfzk9G4cTfoYEDhf2 rP/4Nq+oaZ1oln/RzTm4OjoXvGqVyTzPeVhPRd2rFzpqBXFYo8uiQJU1a6lR6zyz7aPg IfFCVBIq7Ysk+/l69ksZJdt27a92WD04B+axZie14WyD8pnsjrp1r8flfIM6eHWYhomx t7rA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1727167511; x=1727772311; h=content-transfer-encoding:in-reply-to:from:references:cc:to :content-language:subject:user-agent:mime-version:date:message-id :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=y2nQE9aToLO8F86J/y/Pv+vvJWva/3rLYd5MS5wex68=; b=ObgHb82FOO+Rb9xSwF2Gq3k3b+v9NyY82zERlszICg2bEIxuSCTJjp/qD2P18H9Bvv MSlnH6FTzwirKzzKBzZSW7BkqdyMxaNLH6c1Z+9Asc1KsscDFXadAab+cXILGPLVp0Cb XnOTm0V0osCqH8IxAqDaX6ViRa/LpgSn7RmbCxr5BoWBcU3Kvk8wDEvmsAEk99PdFNra E2G6jzM2cGrlb7tSSBJuAEOVWn9lxvfKwNgaK3DsBWrWNgbPvcx1cRLgSrLs355j/VCO 9ywgLRt4BSwVTjKlMJxFV3/9GbZ1tMPL2TLVbnzcr61EN/kxPdBSLSeFllMAwXyKNRzW 4geg== X-Forwarded-Encrypted: i=1; AJvYcCV1SoG8ZsAHBgvaPKNY3fsIpRZ8F7tm7HzDG8w6Py10UL0cil/IIDgFL7znWTCdZWGS7NUtQSs+2A==@kvack.org X-Gm-Message-State: AOJu0YyL7+9DnlLlhHyb+umiWgprIzpt8PdqJ8eFerJefbf015GUn9vB Vrl150T6u2hMQvyCXXyYIZ5qdigo6ZgzbY9xMJuX7IF0z9Jgh/ghQNcR0Oi5+nI= X-Google-Smtp-Source: AGHT+IHo2ftEdEocasBZgbxVxDZL2Zt2IqqMpv0cagmh9vhh6c4h0pR5iAzOHA5lidbuQIZfPE+d7A== X-Received: by 2002:a17:902:e543:b0:206:a574:b4fd with SMTP id d9443c01a7336-208d832a9bbmr214723865ad.9.1727167511212; Tue, 24 Sep 2024 01:45:11 -0700 (PDT) Received: from [10.68.125.128] ([63.216.146.178]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-20af17e3272sm6659695ad.179.2024.09.24.01.45.05 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 24 Sep 2024 01:45:10 -0700 (PDT) Message-ID: Date: Tue, 24 Sep 2024 16:45:03 +0800 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v4 10/13] mm: page_vma_mapped_walk: map_pte() use pte_offset_map_rw_nolock() Content-Language: en-US To: Muchun Song 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 References: <2CBAEE27-9C4E-4902-B6BB-B6029FD42E8D@linux.dev> From: Qi Zheng In-Reply-To: <2CBAEE27-9C4E-4902-B6BB-B6029FD42E8D@linux.dev> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-Rspamd-Server: rspam12 X-Rspamd-Queue-Id: B6E7E40008 X-Stat-Signature: ycad9cn1woimkghp66eeossw1topct8m X-Rspam-User: X-HE-Tag: 1727167512-36517 X-HE-Meta: U2FsdGVkX19f71qNMkqia9ylVmcPCohpdYazi2m9Kd7XuKgGf+ykpQLNYes2d7dS2pn4KlZWGvDl4/4C8LfqSMliDAHe5y+RK6FXhOmydWCKJqG0xW54NhrSRoBrHaK7zp96ljWlsv/iFWg88ymHLKkyxZ3/ytgpnzgjhwmPMD1xWRJDCmQih9Af24hG3RRwHQh3F2DUBGfFblw4p4W9kiAwblTN/4xOx+DFHYhE7VoQ2dU/LqyxyvuuPEux0d2MgQ0XYpKv2cFdnwB9UQCPqXervIE5lQLEcVy1yvHYsUCK7QEEU2krIlAgMEvLNm+nU3cVCx+/ruZh8XxjlMis1gBPqAILK25PLphQEcnM+ppTTQqN63kWKTNY3OONcPLbdAVzwdS8rqwfl3NKxb7VBGRfnUqEc/U8M0aA/nE0R5pimo+Dky9VaO5szlgI2ozksjn0tscpZthzwNLeoH6b2mLPvfMj3htWwCQDZzdl9JsSG/0HqDT6eLycesspU4Heq3A4XyoFNKZi1xVYA/1XCQlHZ+iYYH0/5uoGgLSdlYQgVBDmQ4AbGg0sU1Nrrq8iRoYLdbGbZc6i6TLxvunVa6P4OpdEjUpAlWVqqIbMnGiiRyseTLz97ljtm1XcuYwVgF//iv4X+CPhHbgSLB5gRCejxHuzdEfxFe5c11592QMYFbY/kTpj81wOr3F6wjNH9DfcZUYIbtyFSYzz8B13Jl5kKQfcThyuPp4x3a/4VIz9UhPe5pPSVdLG/gCKDdWpvdvIubMSdpa9XtfW9+EWN5uKaYr/9lDUuGotpiKgzVKkoYjVeU2v/mJ2C9D/b8y2G8e2OtpPc3LaukjcPHzNwix19xaAvDV1mAUzNHbtnOaC5Hw2qIpAAC8h3i7FoTZeFdUJrb3kyBfO3wKBjpu5f1mkHqNj8ybbVqmx7xxino0gaA/1aGpsr0JiUcBXFypNDxqo/OY59Ch3nqtwo/p lLU9bItE lD/9nQSewssb9SiaYz2MmscQZ4JNsAyUQ2H8SBVALBexn7zzXiUaAonGxqSzjHHzYFfgbd/B2wOuZrIt76OcR54NmKFHQkH9UeIIfyRWIfD5islUAaCFyTf/qUqnjowQkS3mTRHuotSLuAA8AFkZXrsumcNj1dOVQ5OjHzy5Noawhq5D9IaOjWRA1xmEX10eRRAH2QvNsjlVqqXRw9zR2Xrq4mLV4SWiVt9qtOe1rKRGJjMGNfGDQM77wtEg+porNQJLNz5Mj6kNco4RRs/w8TMz3c1fytbSI6969NY5HQyghbxBkcTN4fShGvRKCXk9wi5hcTRlclVb05PChVNVN0enZRfZ7Sy1Ie2yfHr7inu5HXPXzzc5u+MS/53GbKlD9R6XCWt53h9OJiaEaYSUSiZl22AvNXGnDAo1u2XmF7xt05lqVR3BzEXaEYCOF4RkfMsOMDg+IrK9eBXZuzY1vZ+3sQDqPE01EmbpdFqjcF2kkGsGEv/brbujRU0SF2R2Bkzt1/KWoHADn7preH9MJxZbCdQJ30ACh4Lqs 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 2024/9/24 16:39, Muchun Song wrote: > > >> On Sep 24, 2024, at 16:33, Qi Zheng wrote: >> >> >> >> On 2024/9/24 16:25, Muchun Song wrote: >>>> On Sep 24, 2024, at 14:11, Qi Zheng wrote: >>>> >>>> In 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. >>>> >>>> Signed-off-by: Qi Zheng >>>> --- >>>> mm/page_vma_mapped.c | 25 ++++++++++++++++++++----- >>>> 1 file changed, 20 insertions(+), 5 deletions(-) >>>> >>>> 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; >>>> } >>>> >>>> -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’t we use *pmdvalp instead? >> >> It's just a coding habit, both are fine for me. > > Agree. But sometime it could make code look a little simpler. > >> >>>> >>>> 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; >>>> } >>>> >>>> +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 = pte_offset_map_nolock(pvmw->vma->vm_mm, pvmw->pmd, >>>> - pvmw->address, ptlp); >>>> + pvmw->pte = pte_offset_map_rw_nolock(pvmw->vma->vm_mm, pvmw->pmd, >>>> + pvmw->address, &pmdval, ptlp); >>>> if (!pvmw->pte) >>>> return false; >>>> + *pmdvalp = pmdval; > > For instance, here, it is unnecessary if pmdvalp is passed directly to > pte_offset_map_rw_nolock. OK, will use pmdvalp directly. ;) > >>>> >>>> ptent = ptep_get(pvmw->pte); >>>> >>>> @@ -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 = *ptlp; >>>> - spin_lock(pvmw->ptl); >>>> + >>>> return true; >>>> } >>>> >>>> @@ -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 = ptl; >>>> spin_lock(pvmw->ptl); >>>> + if (unlikely(!pmd_same(pmde, pmdp_get_lockless(pvmw->pmd)))) { >>>> + pte_unmap_unlock(pvmw->pte, pvmw->ptl); >>>> + pvmw->ptl = NULL; >>>> + pvmw->pte = NULL; >>>> + goto restart; >>>> + } >>>> } >>>> goto this_pte; >>>> } while (pvmw->address < end); >>>> -- >>>> 2.20.1 > >