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 A3552CD5BA6 for ; Thu, 5 Sep 2024 10:55:28 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 3060E6B00AC; Thu, 5 Sep 2024 06:55:28 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 28FE56B00C2; Thu, 5 Sep 2024 06:55:28 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 13F676B00BE; Thu, 5 Sep 2024 06:55:28 -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 9C3856B028F for ; Thu, 5 Sep 2024 06:55:27 -0400 (EDT) Received: from smtpin04.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id 4CC1FC0F5B for ; Thu, 5 Sep 2024 10:55:27 +0000 (UTC) X-FDA: 82530378294.04.FE70896 Received: from mail-pj1-f51.google.com (mail-pj1-f51.google.com [209.85.216.51]) by imf02.hostedemail.com (Postfix) with ESMTP id 7EE9F80007 for ; Thu, 5 Sep 2024 10:55:24 +0000 (UTC) Authentication-Results: imf02.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=AjNF0C7L; spf=pass (imf02.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.216.51 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com; dmarc=pass (policy=quarantine) header.from=bytedance.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1725533628; 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=cXAtAu/pzenP53Rc519mW1EiWpptEkcfZ6dVtHtfUqo=; b=c++kZEbuBEoTeaxS1FAvBouhum/RNqdK4FOeN4azU+Y3K9CRvvbFnaOqtEz0RTJiWaCKOi CtF4/TWLHeEHY+Ihnarjoa4l/zzd4Ih+x7ZC0kQeZjgEaahkrBQ7RgDKcIOIjcILGa6rYB ORPCMGg3Z5o1SarMnzXaTgBCaicem34= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1725533628; a=rsa-sha256; cv=none; b=pw7EDJgArpqOzmVOd0p5QztHZApS09AcK5iscWg9v9Ie/V4zvypqaGYdi8oPKKA/fDuyFw byJDEEbXxDwWlhEVLMU399MaFI2w0+HqtNhtjf+K60gCSm2/9zAEk4iVnyU+SaGgOP2pbl 1e2mjjXljsdE05dGRhVPoFoYJL2EUBo= ARC-Authentication-Results: i=1; imf02.hostedemail.com; dkim=pass header.d=bytedance.com header.s=google header.b=AjNF0C7L; spf=pass (imf02.hostedemail.com: domain of zhengqi.arch@bytedance.com designates 209.85.216.51 as permitted sender) smtp.mailfrom=zhengqi.arch@bytedance.com; dmarc=pass (policy=quarantine) header.from=bytedance.com Received: by mail-pj1-f51.google.com with SMTP id 98e67ed59e1d1-2d8b679d7f2so455270a91.1 for ; Thu, 05 Sep 2024 03:55:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance.com; s=google; t=1725533721; x=1726138521; 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=cXAtAu/pzenP53Rc519mW1EiWpptEkcfZ6dVtHtfUqo=; b=AjNF0C7LRvpLejhVkzMV+uTKGqLxXGEOBuKDWg3VcSVMpuKCTMeeC8Qa8lh3o1/Kmz nsR7Q8ZC+j/iEamp3MMMydUgOA74aLrhQfTDTVHnDeNhDOxbZyUc2+RrX+wnRs4I1hKJ lqoz8Iz1i+aOh5lWnVJEhzeLtnLjgyd3Rd1zaaQ1uiNblamVzEoGl5fiCISiyhCIoEMo Pq8kWXznrIhfbxh/X7l4j5e80tG/6JIk8qAXMRV0KT5e0hP9BtJCppaxz4ipjOTXJmkf gV4V8j7T91XeQF+aQxL2Jng9nTWlVrJUyKNG5Pxn/Bc6ohVoCFg9Hc+D/ULiuOAf2A8c S0wg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1725533721; x=1726138521; 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=cXAtAu/pzenP53Rc519mW1EiWpptEkcfZ6dVtHtfUqo=; b=v4jxaxBhJkzNezuOXxjT33Jq9/qLv21bwAiCmkKhSux9doKaU35Ryi98PCJVQHeELu izMlI9V79IOlr+VcCNSbZsln6Ai779vGs4iBgCjRxlo1ZOgX3I1MkH72I2nzbdAYQbx5 RV4S5OoF78CtgQgEbhLPiAw/wlyomFqZVwddkrE4BLx4dEmDFMBa+AVXTXNeVhn7SBc5 xPh/4hzgBhtWSnhDrtZjSh60LLze0Fu5ycGwkUXTZvO/F4Zjlxx8dRgGBk5jRXGS3CIe BE5BWJ2wk2c9XvUgpiEJ5itrQa01yFFBmJ/qEZPpA/oyacuxJ3hFAkk/ToeM9iF5D+EY KpRw== X-Forwarded-Encrypted: i=1; AJvYcCXDHiqxiLRKROLDLlSeNnJuJ8FfSjX33DASVxyCd+BAPkCEcYbFwUP3KED66ZQ7DiWBEXkxu3jWSA==@kvack.org X-Gm-Message-State: AOJu0YzQpAkEcS3RisPJOPjzgC4rQR4Lahl6sImRZaXhAAkTeavOS8Kp M4KISunqwcnNiHo59VHir2gAAOtBzukQ3ivBoKnY/0afgEtsjE7Y7hcI3QZzKZg= X-Google-Smtp-Source: AGHT+IEWI9EEiau/fdkKJLT8cSCi5xdgACnD/Y6KuBmHJCn7wH50I5yB/XRIbn+3AgAGKvj46vvmDA== X-Received: by 2002:a17:90a:780b:b0:2d8:bb95:56f6 with SMTP id 98e67ed59e1d1-2da74cfc83dmr8851317a91.30.1725533721492; Thu, 05 Sep 2024 03:55:21 -0700 (PDT) Received: from [10.4.59.158] ([139.177.225.242]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-2d8b8fe1f68sm9312094a91.31.2024.09.05.03.55.15 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 05 Sep 2024 03:55:21 -0700 (PDT) Message-ID: <03ebc281-c8e1-461b-a716-be6162947d31@bytedance.com> Date: Thu, 5 Sep 2024 18:55:11 +0800 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v3 08/14] mm: copy_pte_range() 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-9-zhengqi.arch@bytedance.com> From: Qi Zheng In-Reply-To: Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-Rspam-User: X-Rspamd-Server: rspam04 X-Rspamd-Queue-Id: 7EE9F80007 X-Stat-Signature: 9dhhs3f1kcji3rg8r6arszpp5zwaicgq X-HE-Tag: 1725533724-803343 X-HE-Meta: U2FsdGVkX18RVOtLLJP806d0xQtLNiBOzVkQf6vThxDuvjyI5zThCS+6/yYUUWpM22IQcjoyKcmIjOv0On0l61gRgcprWyuFjGeYAHnnXMiYLraKauFA/4fQfDWPAsAAnsW4GkfDQGPrAIakvg2xuCJC54Uf3ggi5LHkzwLwook5KiE8MJnc9Qou2WT5hC+2Ihog3WvR3ECsS7XZy2+iy3fef0ijRh3OhL9xHKcWk9C3E6mZ3WmD7FuARhJtHlMoxpinV+Tj8gykw5rmAqbiP1AB7ymnDHrRvhcvbzKAh54Q6qAMrAdx9NM7uPesXXkEOo/xYba26/0egrhSrgot4zwKehvwGBxKvgnxZ/FugLM2ak1OLaT/sI+rs77u5pS5WQM04D90pa+j3DJqegt92AtS3E6so0WepMVLBEaM1EmZA6XA2SU8rht0KFjGafVIvwc4Xy7GaSmzeroHDnaaXeN4aweFjsPxRl6zq6qyHe3U7pm9SUq0k33lAem1oGlBGAJjslpBZkQRLuyy+vaNdPlowL+4a8NihYJQ/cBw1sqWUc0voXRY9yxPIjOztw3fN+ctWHZVpuwNy3XLwIkCy3zZ5+UxSdTyQ5gOT+QRPNrKukXOCN7PzehCKxRoSCNfBKJlJfEx6PkffdgIMwQtXA88VW7iNig1VAeKkHHyN5w0UhvzZkyVs83ECdcpANlhAEohP5cFzP63WTyA8GDj2LW/DdT1lGzbBtdWhXFzBcKbDz/nIr+rpPdAy5Z5gQLoxhWnkemJ9fqEjFD/5SRrLg21QOD/M3oShh69eDB7uep8PJy/r9TO8xozPb45kn8Oaz2cH/F9AR3HZt+zuEWW5FG4Imk+cplhwcItWJvOVsnbIbJ3gPYykNWHnziEUkAxBhfxT/iEV1jXaxQdcHm0JRqD6l8SbZEnHC45sdUE6D2g0R8zXajK/Q4NPvDWKStHehmN9K6uuvovvMIxh5U eqBWRVqJ k0jWzAUpd0YAPLUwWmEQRSwrXqCCkAW4lffO2CNiZmWXmhT+wVvvW7zJKQBl0YQA1ySbdPqG2EP0HqtMWrg0Y/JyrKmpERHaNMRiYsy5FznIPdb0CY2IFsFrnqpWYpDSa8OnJtjwsDh8Yscrpr186i41+acVyQZ07oXKTYZPN+EEFESefBoU3Uwr+easnpPtaEnPMPX0S58c8leEHPJ1pA0yx2JWlvEN4fa0AnCOYzB8oA5UGcnujndKdl5nqyE71K9pP0U0zuitYH/VKrRl5GZO4T6WRHfArtf/kUzL2ZXpL8HhRVlqD959CMw/pRl1F6f2ZakNd83Qmbcz9XqyPtn96ojz3ia8ItWm9Sn/0b1MTeakzI9jF2VfuV3LmQp0TtnZTy+0phJ0eY8DTjTwe5QOkKU6bwUuEktzohQI8bAm7D8ghc+UKVf8ffkr/CQiD+F7ZH5fv3xrT5HMbRAVK46RC4zs6W4geLCWsAgL96xGzne5JJVsiRrawFnBXxSzzDaUEbVkUso+4mY0= 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 16:57, Muchun Song wrote: > > > On 2024/9/4 16:40, Qi Zheng wrote: >> In copy_pte_range(), we may modify the src_pte entry after holding the >> src_ptl, so convert it to using pte_offset_map_rw_nolock(). Since we may >> free the PTE page in retract_page_tables() without holding the read lock >> of mmap_lock, so we still need to get pmdval and do pmd_same() check >> after >> the ptl is held. > > See commit 3db82b9374ca92, copy_pte_range and retract_page_tables > are using vma->anon_vma to be exclusive. > > retract_page_tables()                    copy_page_range() >     vma_interval_tree_foreach()              if (!vma_needs_copy()) >         if (READ_ONCE(vma->anon_vma))            return 0; >             continue;                        copy_pte_range() > > So I think mmap write lock here is also used for keeping ->anon_vma stable. > And we do not need pmd_same(). Indeed, will change it in v4. Thanks! > > Muchun, > Thanks. >> >> Signed-off-by: Qi Zheng >> --- >> Hi Muchun, since the code has changed, I dropped your Reviewed-by tag >> here. >> >>   mm/memory.c | 18 +++++++++++++++++- >>   1 file changed, 17 insertions(+), 1 deletion(-) >> >> diff --git a/mm/memory.c b/mm/memory.c >> index 06674f94b7a4e..47974cc4bd7f2 100644 >> --- a/mm/memory.c >> +++ b/mm/memory.c >> @@ -1082,6 +1082,7 @@ copy_pte_range(struct vm_area_struct *dst_vma, >> struct vm_area_struct *src_vma, >>       struct mm_struct *src_mm = src_vma->vm_mm; >>       pte_t *orig_src_pte, *orig_dst_pte; >>       pte_t *src_pte, *dst_pte; >> +    pmd_t pmdval; >>       pte_t ptent; >>       spinlock_t *src_ptl, *dst_ptl; >>       int progress, max_nr, ret = 0; >> @@ -1107,13 +1108,28 @@ copy_pte_range(struct vm_area_struct *dst_vma, >> struct vm_area_struct *src_vma, >>           ret = -ENOMEM; >>           goto out; >>       } >> -    src_pte = pte_offset_map_nolock(src_mm, src_pmd, addr, &src_ptl); >> + >> +    /* >> +     * Since we may free the PTE page in retract_page_tables() without >> +     * holding the read lock of mmap_lock, so we still need to do a >> +     * pmd_same() check after holding the PTL. >> +     */ >> +    src_pte = pte_offset_map_rw_nolock(src_mm, src_pmd, addr, &pmdval, >> +                       &src_ptl); >>       if (!src_pte) { >>           pte_unmap_unlock(dst_pte, dst_ptl); >>           /* ret == 0 */ >>           goto out; >>       } >>       spin_lock_nested(src_ptl, SINGLE_DEPTH_NESTING); >> + >> +    if (unlikely(!pmd_same(pmdval, pmdp_get_lockless(src_pmd)))) { >> +        pte_unmap_unlock(src_pte, src_ptl); >> +        pte_unmap_unlock(dst_pte, dst_ptl); >> +        /* ret == 0 */ >> +        goto out; >> +    } >> + >>       orig_src_pte = src_pte; >>       orig_dst_pte = dst_pte; >>       arch_enter_lazy_mmu_mode(); >