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 CF3A2EEB576 for ; Thu, 12 Sep 2024 09:30:21 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 4379C6B007B; Thu, 12 Sep 2024 05:30:21 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 3E6CA6B0085; Thu, 12 Sep 2024 05:30:21 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 2B0306B0088; Thu, 12 Sep 2024 05:30:21 -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 0BDFB6B007B for ; Thu, 12 Sep 2024 05:30:21 -0400 (EDT) Received: from smtpin03.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id 778BD121DB9 for ; Thu, 12 Sep 2024 09:30:20 +0000 (UTC) X-FDA: 82555565400.03.FDC6D59 Received: from mail-pg1-f174.google.com (mail-pg1-f174.google.com [209.85.215.174]) by imf27.hostedemail.com (Postfix) with ESMTP id 78EDD40016 for ; Thu, 12 Sep 2024 09:30:18 +0000 (UTC) Authentication-Results: imf27.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=DnFb5Ja5; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf27.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.215.174 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1726133341; a=rsa-sha256; cv=none; b=w9iZE+F7h4bTtXYcCvu72Ov7h3KRUyYTRDdmNsFBND/8xndKfP0gzuqxw4ddGMs8zUM0Qb avBE274J43Ig1pV1h8GB2m4VZGx1ZKqag+8s0hs3u09zyahrv0Bzf9PYKXbox8c8Aj5R48 125PYWc1DJuDZRLlDsgaygAo94/vSxE= ARC-Authentication-Results: i=1; imf27.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=DnFb5Ja5; dmarc=pass (policy=quarantine) header.from=bytedance.com; spf=pass (imf27.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.215.174 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=1726133341; 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=ae1rrTLdcInpIDAaqOOlwPE8rza0PubUwEN95o/QYrw=; b=hl/dTsPMJNMB0+GVRvg1Z9XYMBUNRPs2J45vSJY2XKmaa0ovurLnlVeaXeq1acptw7p3kk QFyZGGB2nUhzK9FoHKAy2Al8FSpsEaDns8C6fxE5HPAx5pJyv62FglIPKKZhBGqLL3nKRb 5q+mPwKqnIJBvoUubAIVUD71NGQoIJo= Received: by mail-pg1-f174.google.com with SMTP id 41be03b00d2f7-7c691c8f8dcso528814a12.1 for ; Thu, 12 Sep 2024 02:30:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1726133417; x=1726738217; 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=ae1rrTLdcInpIDAaqOOlwPE8rza0PubUwEN95o/QYrw=; b=DnFb5Ja5I6zGHk3gvrjltqa+iD5xLjj5rIvFcOrBNNMbyubxhNx3KSspQMi7IzqSPx nBtZz6Nc4tZFzvTXcJm170riciMOXLU+Zgo39plxLNQSpALhHcF7reHebfbnWk/sQhRW DxBkE2Y4oL2oY+b/f11B3y3tI9t7KaDT7EhfA1nwvEhy/+r6jsSlj5WmrUuXCEBdXS+5 hySvWUM7z8hjj7dmzvwndYymP8gFgFa3TkCztlQPUojrzPaWo8RVPS3fDDI/pWdEQb59 gmbNfP9knYcdd1pY7+5WmXI179m+EbwaFodBaUUA2EJ1m7NBr0ukPCXxBIWDWE6sg+f9 Qo0w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1726133417; x=1726738217; 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=ae1rrTLdcInpIDAaqOOlwPE8rza0PubUwEN95o/QYrw=; b=ZRrByVMQ8RTsfLfxUJXhJNYr1Wf0ESJuiVkbuMSqvhwkrjiCPPvHzrCzjuwpkG44js aHvUkQHVhZ0XUYZdLtm06LbVGbHL4xuArROW0poa19jQHoxHJ2gPnsauBAKjUW62AFP7 97d8PFWfAuxepb0o47t7rbtyYCaEaIjWe2Gr1FnuDS9Aq/U6RtLX9YscxOMR2Z+DOi/J qE7m0+3TqJdz+UJ2BKAl+tZQuK6M0gWjrpRM11Z3TUrmYRN+jdkoNC7ENhQpZUtKcQSa Rf69DhrzhoS2zP/vw9XmnDz97ydEfv5RHXHgMeaBSizFpEfl1Bq7ns/FXFn8ckzG1CJO ftqw== X-Forwarded-Encrypted: i=1; AJvYcCV1eHgAHgNGz3IoJj7tYW/ci6jrzYthtu9bkyR0NPwoUdj2z2GUhRn7O1CxnxqcuuSTw97BQQbbfw==@kvack.org X-Gm-Message-State: AOJu0YyRGMrkkWATtV9FvDGMF7qfmizpFcC2h6mrrKlpxIR8HlyvSd8W RC9gF/rEmRYg60yfKz4dpASBIfVsXssa/nOhw//GMF0nCiw0HYGMuTk8jk3/Jr0= X-Google-Smtp-Source: AGHT+IFJCCHYcScGtt9lkjkAEywijnfIDFZg65ZPBIHqm1dzEPdlJO7/znVrMR8ooIQDztKe568nrw== X-Received: by 2002:a05:6a21:6b0a:b0:1cf:509c:496b with SMTP id adf61e73a8af0-1cf761e553bmr3124497637.38.1726133417121; Thu, 12 Sep 2024 02:30:17 -0700 (PDT) Received: from [10.4.59.158] ([139.177.225.242]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-2db043c0672sm9995203a91.22.2024.09.12.02.30.10 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 12 Sep 2024 02:30:16 -0700 (PDT) Message-ID: <7782bc62-a09f-465a-aa43-8179542ecc02@bytedance.com> Date: Thu, 12 Sep 2024 17:30:10 +0800 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v3 10/14] mm: page_vma_mapped_walk: map_pte() use pte_offset_map_rw_nolock() Content-Language: en-US To: Muchun Song Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org, linux-arm-kernel@lists.infradead.org, linuxppc-dev@lists.ozlabs.org, 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 References: <20240904084022.32728-1-zhengqi.arch@bytedance.com> <20240904084022.32728-11-zhengqi.arch@bytedance.com> From: Qi Zheng In-Reply-To: Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-Rspamd-Queue-Id: 78EDD40016 X-Rspam-User: X-Rspamd-Server: rspam05 X-Stat-Signature: r4c8191mjexxymaz19wo53btn1jwrntq X-HE-Tag: 1726133418-617904 X-HE-Meta: U2FsdGVkX18JHomEJycJUQexwDn1d89DxiRUPZHgPG/zZHavhfOMD5cEJEF41PIDhpOh5EcOpqf7OtOFb80m2CH8wZXLCIoJWus45ZVzfb5NSlnjkqsgpJUTEK3uUG5e71vI6BNBxLmnQSz03viEs6ei9zcE2ZLrkJAz3dqkOMe9dhsqaCVppN4PmJI5sYVqfvbRIE7vVfPfS8XJ8CjD5KjYg4PxAoxdRNZZxAlXipKeXFIwpjOvfjrA+l6W+KVulusZe+l4Qfm88CidkSN5kipHOL+1zRbQHy4h2hvIWb62QGk5ZGWmTvAN1+bQ84tUn6TbY4q7EuZ2x9hhjj6U8K0XzT6cCJ5vW8uPlVoMF69Gs1uKmT7pykXT4zC8b1OnOu/DYiqGMeDp8IqqBwH7zXAN2tclc/u+w+tsyi6SGm7AWBYOkjZlq9nDloFXQHSU25OpmGoxvlGXE4UUUb/QEQPC0I6MXmURwu6qYOfsTg/UFxE+4DfX0/L7DVku9ZLRxAOHDlTpTydidtZB0tkHe4H3RZlkwjItBBurE1PDYQEJLyFZFgXXnooOEC3ouT8CTkmje4w4uKsacOzwpSnRXsTuaaAJnHY2EHpB17nMv0yrIEdIQXxuTRw7LTLnpAvl1QoDzk70UBn3Qn14cl2E8PmLgMvIgWdlG+uP85cSvsv7dzc+91fzCbmv3m8DtpWQ1y/XBl1SNy53jAhQIA48HVJygarwmqcD6WUoCYEJFLhpIM0qYoI3w9YKKJT5BAvRZgpnbz/cSNlQ7NmS7Usgk2cmXtmNRKylyMnWAaa+fuDL+Xs4ghDRQdOuQQAEuMyUxr33a+XamyB+tg7TtKvAicrGeotdy4j9W+723QDGLKa3OjLoYgzcOcGrNHymHjLaNCsB4d6DpGvXe2t21OviSxeVA/N4F0ZdDRltdUULI0sD2afqF6fCko6+Q+0MaLZSXRoRgykX1THgu8XDh63 rhNS2WWa M9+5tXKaYhJBEqLf0cyJ01m/2dNY46M57BuJ0NLp+rpimO7DeP/ikRZlXjlD+2yrCsZAvAEj2pn/YZ7QNyD3dBQyQQl7B5hYoabJU7HyCH9xe91u/o3V7CsKwz+2W7iUKWqnbZYamItssuCL8u0u6WRTs8sU1xMYnY0YJoLlkHXRaPRuyZovrbS48JWn5LFhyRCELD8c7zhHULH6ZYgAeaneuAsgaP5PEaq87bSTa5KDtafV23gybOQ8Bb73PSdVLLgDldGtu+/+t/ikxAw8jO6GBLLVedPIiAqlJEXpNzLYtMXehoX04ORl3+iO74ioyHFEHi8b0i8LpQLVXiV8/99FBiR9mnRaR36Op5t4MMANhi17c4BWodzc9VMFysQs1lQv1gsLh4OdEq37O5SF48tRANSWbex0iudxGa8VuxbNUwLThA8ic327NfHXDW/CFW4p8m2zPREky/VO8SVSvOnylx3g8r/xLgG+c6bdgxj6e3oN2jGV+yl6TEA== 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/5 20:07, Muchun Song wrote: > > > On 2024/9/4 16:40, 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 | 24 ++++++++++++++++++++---- >>   1 file changed, 20 insertions(+), 4 deletions(-) >> >> diff --git a/mm/page_vma_mapped.c b/mm/page_vma_mapped.c >> index ae5cc42aa2087..f1d73fd448708 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; >>       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; >>       ptent = ptep_get(pvmw->pte); >> @@ -69,6 +73,12 @@ static bool map_pte(struct page_vma_mapped_walk >> *pvmw, spinlock_t **ptlp) >>       } >>       pvmw->ptl = *ptlp; >>       spin_lock(pvmw->ptl); >> + >> +    if (unlikely(!pmd_same(pmdval, pmdp_get_lockless(pvmw->pmd)))) { >> +        spin_unlock(pvmw->ptl); > > Forgot to clear pvmw->ptl? Or how about moving the assignment for it > to the place where the pmd_same check is successful? > >> +        goto again; >> +    } >> + > > Maybe here is the right place to assign pvmw->ptl. Right, will do in the v4. > > Muchun, > Thanks. > >>       return true; >>   } >> @@ -278,7 +288,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 +317,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); >