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 C705BC04FF9 for ; Wed, 17 Apr 2024 18:34:38 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id ED7BE6B0085; Wed, 17 Apr 2024 14:34:37 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id E88386B0087; Wed, 17 Apr 2024 14:34:37 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id D4E9D6B0088; Wed, 17 Apr 2024 14:34:37 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id B8C766B0085 for ; Wed, 17 Apr 2024 14:34:37 -0400 (EDT) Received: from smtpin24.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id 2D75D40F46 for ; Wed, 17 Apr 2024 18:34:37 +0000 (UTC) X-FDA: 82019874594.24.E5CC8CE Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by imf11.hostedemail.com (Postfix) with ESMTP id 267D34001E for ; Wed, 17 Apr 2024 18:34:33 +0000 (UTC) Authentication-Results: imf11.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=hsJGvSVf; dmarc=pass (policy=none) header.from=redhat.com; spf=pass (imf11.hostedemail.com: domain of peterx@redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=peterx@redhat.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1713378874; 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: in-reply-to:in-reply-to:references:references:dkim-signature; bh=dzquf4cKV+jgVERw/9qGw/Jg70CuZ1cgYM4pXEKghB0=; b=2I/EUHNEI/WOcKgq3chw3BRwTgHfuP3/QVCjMKSMbMWJzAyfudGmiP4oUqPaVk5XjhUlQo mDOW6Qvw37GVcMy0PnCARnVjW3HMwzaRB7JIzqawCym/a1YORptDE0V5PN5YJZoWIC6uag W0HbqOk/xztGhjgkjcQA7Fidxnwt6TE= ARC-Authentication-Results: i=1; imf11.hostedemail.com; dkim=pass header.d=redhat.com header.s=mimecast20190719 header.b=hsJGvSVf; dmarc=pass (policy=none) header.from=redhat.com; spf=pass (imf11.hostedemail.com: domain of peterx@redhat.com designates 170.10.129.124 as permitted sender) smtp.mailfrom=peterx@redhat.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1713378874; a=rsa-sha256; cv=none; b=2qgTmw17vTDz8HcX2IyaUU2d8tTlTfuwYyivSSQTxbJ0/HzZN2SuLOJsPcNZAwoH+kT1Qk 5pIcyhUuYt56ifVQtUuW+ZurKXNc5w8DdE2sQjhYOnd0JHjhH4qRL62hxXoYmMhSj0o0Dm M5vEeVBTvsFT+Pw6SSZVmTBIJBTzzx8= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1713378873; 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: in-reply-to:in-reply-to:references:references; bh=dzquf4cKV+jgVERw/9qGw/Jg70CuZ1cgYM4pXEKghB0=; b=hsJGvSVf1dad8+EDNfHW1yXaGTrop+9HXdg6Tm0gLL9oU7MKbQy37R5CyN5e1B2bTkh4qC cNTlguly+tmV6uc+4vXuykiG9asUsuSjxqmXBs4f54oP6P/8EmhJFjJcAe4o2QLB5UH6qd j3s+lLD5Pr2RrQWxlEH0e40ZCPq8GNA= Received: from mail-qt1-f199.google.com (mail-qt1-f199.google.com [209.85.160.199]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-367-whpjdrOPP5yf9LL41fMbQA-1; Wed, 17 Apr 2024 14:34:31 -0400 X-MC-Unique: whpjdrOPP5yf9LL41fMbQA-1 Received: by mail-qt1-f199.google.com with SMTP id d75a77b69052e-437618fda72so3521211cf.3 for ; Wed, 17 Apr 2024 11:34:31 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1713378871; x=1713983671; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=dzquf4cKV+jgVERw/9qGw/Jg70CuZ1cgYM4pXEKghB0=; b=FP9B88vQMbFSbBfseuIZhSRLLjGBtu0y2S7f1bvf56xXcaYjxLWdQkbk2+ETZSaypZ FDg65m2TC8M2X/ApwA98NVk6DvEF9FlkL3NOC4VmMrEOAoh7ikNn+/zEYX5e1o4vq5Rx qloGoPOYc6iVglIIBBFQhSjjubWTf22+CH1dx7BrTlD7iJlbGP1vA72a78d8kEV4cm3M NSFDXXEKzmaR+F16uHD82rpOaAsF8H4YpTXwsrthV3eQwbwYSCni8bmlNGF8R+E3zsNK cnImKVNdnfkxaOtMmW/Z4vgwjajHsNgfZ+QqGLxaX35UTGkkiHs+hC25XvojOw6oQJGp 0yUQ== X-Forwarded-Encrypted: i=1; AJvYcCVrHjHglPYDAxIOeik3KrZ1uSZB6r0tc1DY5zS2a1hVv4RazH4UdN9xHkZvGcNKuOoCdBTkayPMO/SaTVei49R5pkM= X-Gm-Message-State: AOJu0YxCYcgJWuhGSkZaqVRCT8dwBra3ncCCyVdVVKxor9HBG75wVP7c vQy9c041DxsRCXZfZFc4NKdOAKvh7FZD1L1uajnzUa+MSJiT2Jn4G0vZ+KIdphdPwjiTKomYpnV CLhiw7kJlLuvRnLi7E5uTxNVtP39XYhOr9PDLUpFnEHJSzvc6 X-Received: by 2002:a05:620a:f06:b0:78e:e4dd:b893 with SMTP id v6-20020a05620a0f0600b0078ee4ddb893mr238940qkl.5.1713378870592; Wed, 17 Apr 2024 11:34:30 -0700 (PDT) X-Google-Smtp-Source: AGHT+IHMnvWCo6Hvr/lflMKw2kv9ZFSxISvVxsWFyglBXU2MIbaQ92H5+fHibefVvwaKwho1POwZIA== X-Received: by 2002:a05:620a:f06:b0:78e:e4dd:b893 with SMTP id v6-20020a05620a0f0600b0078ee4ddb893mr238896qkl.5.1713378869930; Wed, 17 Apr 2024 11:34:29 -0700 (PDT) Received: from x1n (pool-99-254-121-117.cpe.net.cable.rogers.com. [99.254.121.117]) by smtp.gmail.com with ESMTPSA id k7-20020ae9f107000000b0078d65fbde2bsm5223405qkg.86.2024.04.17.11.34.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 17 Apr 2024 11:34:29 -0700 (PDT) Date: Wed, 17 Apr 2024 14:34:27 -0400 From: Peter Xu To: Kefeng Wang Cc: Andrew Morton , linux-mm@kvack.org Subject: Re: [PATCH] mm: memory: check userfaultfd_wp() in vmf_orig_pte_uffd_wp() Message-ID: References: <20240417082359.3413259-1-wangkefeng.wang@huawei.com> MIME-Version: 1.0 In-Reply-To: X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset=utf-8 Content-Disposition: inline X-Rspam-User: X-Rspamd-Server: rspam08 X-Rspamd-Queue-Id: 267D34001E X-Stat-Signature: 6buz3ujhruf4n3bw9y39jax8qh3z8sdj X-HE-Tag: 1713378873-799600 X-HE-Meta: U2FsdGVkX1/+nChBlvAA7t7rwYkPK+F1oUf05v8NfI+OrmxvBK2nnitlUCQ8Az/N0pca0Cw8qt4bHdlLiBsJUSxhLk4TBgqDujzs0LWPUsPVd/xXS4HND2X8zsP5luycQbOOcFl6KRKQOZODmq5Bv5pPjENvsabTxYFbLnr5y0fiFeNST/stXOyT9BcdlE0K0oShF9jb0QXeV9pFGlqAG3JYUaWus9LhF7XA1Xet7Ukwa846ndCW/hWo8Nyv5Ks6VJ1V9Isjt7k9AY7idvDT6bNKRNbpNxxklP5nP2fsV6ePRihfQLh6Vx8JhCsJCGGnNs4dSQ6Lc2NV8BSJnDuCEUlrOVxJd8QMNT/Bcp8C+cQrjGrxIAOGL2h7dlz+7IoAlLKm1hWp7hCS3LJsKOQoceke2S+CdDPAw6PMPR/6YxW/uiJ4o77RiOIdetM4dnE4kV27Iz+GFMtz1Vs9ua8s7xz05U6eTZ9KDVxUxB9feCJrdY8wm93p2Dsmoymfrv7/rLx0uV5R+NtLCSVfZjK8J5ZiU3BxbUaLImJPrBWEikKQTczgTgLWMnPpolvb3ZzFBZ7vdWnUERg82ouKAZe5xen0TuBK5lTrzAJvdPWTRQgaj+w9YsyLPqyjKjhNqvG2hl0JlwXKAfhfcPMrdNNIcMjW4ai5p1fbNYEHLEjBTpZBMv4oEwPWkQIiHtGU3tDZs2AMS7eG2PG+MuZMjQM08/jJZd6soKBX+kP43Jr/r7bRp44htobyXfUIXnBdUlSUC3OGrhXS0zs+MfO4kOqOFYPNerXxULZ6JrH8N3764O5CdS0j2Exrz/Z6o9GpD5ULBKlclmwElPfGc1NO9NllkJaRdneG0IUUVU6FtePjUVmb7+2ViNfLNxHdU4oPNSiF0VWvdi83nBySCY4jwVii3zxnhJFTHr1p/Vt6cZD/5zC7s+9VAhGrt0zIpV84lZ7ZQXGzEX8F3cmfdIJkhdd Go1YxjU8 2k0SujoBaP9C4A0smvcJuIQNf0T4RZDnDRPQ8q20xiDZAN6u1GrQDsuCzQ6USyx+wnSxziOAlYkk/HLUZAvUD1L/dolwbJzq3bt0c0uhreUAaZtfp5u/JFVq21201SOTpCiyp8d+feqTUsCt3fWyiHBEREk6xRZ6wtCM8yHX5guAtb5I/t16eC8d8y4Bc0LybwbxacOOTMZFb/0C2jMzVz/F1DJwlqPjVRMXFaYIQkO9ccJWO5BFN6TyM1UBXxVk1daHBhL3B62WqCBd+yW/w9v8lbPtgF1Q7f8Z63DIEuV4ksTzpzZtSA7Eo79xg0aD46UWXYbu9CO7qOl++JQPr0V460tZpo5ZynFj9j0/YhQsnCpBo8xV6E6skOnY4hp/HYAeX3W9S7fIHC/gqKhgPFA1wf0fnJTlWJgcxAP2hW7ZNlhZvDya/kw29XA== X-Bogosity: Ham, tests=bogofilter, spamicity=0.000018, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: Hi, Kefeng, On Wed, Apr 17, 2024 at 05:30:40PM +0800, Kefeng Wang wrote: > > > On 2024/4/17 16:23, Kefeng Wang wrote: > > Directly call vmf_orig_pte_uffd_wp() in do_anonymous_page() and > > set_pte_range() to save a uffd_wp and add userfaultfd_wp() check > > in vmf_orig_pte_uffd_wp() to avoid the unnecessary function calls > > in the most sense, lat_pagefault testcase does show improvement > > though very small(~1%). I'm ok with the change if that helps as big as 1%, but I'm a bit surprised to see such a difference, because for file pte_marker_uffd_wp() should check first on pte_none() then it should return already if uffd not even registered for the vma, while orig_pte should be hot too if valid. > > > > Signed-off-by: Kefeng Wang > > --- > > mm/memory.c | 9 +++++---- > > 1 file changed, 5 insertions(+), 4 deletions(-) > > > > diff --git a/mm/memory.c b/mm/memory.c > > index 5ae2409d3cb9..a6afc96001e6 100644 > > --- a/mm/memory.c > > +++ b/mm/memory.c > > @@ -117,6 +117,9 @@ static bool vmf_orig_pte_uffd_wp(struct vm_fault *vmf) > > > if (!IS_ENABLED(CONFIG_PTE_MARKER_UFFD_WP)) > return false; > > Will add config check too, pte_marker_uffd_wp() returns false when !PTE_MARKER_UFFD_WP, so kind of imply this. I assume you meant to avoid checking ORIG_PTE_VALID flag, but the flags is pretty hot too. Again, just want to double check with you on whether it can have such a huge difference, e.g., how that compares with the current code v.s. original patch v.s. this squashed. Thanks, > > > if (!(vmf->flags & FAULT_FLAG_ORIG_PTE_VALID)) > > return false; > > + if (!userfaultfd_wp(vmf->vma)) > > + return false; > > + > > but wait for review. > > > return pte_marker_uffd_wp(vmf->orig_pte); > > } > > @@ -4388,7 +4391,6 @@ static struct folio *alloc_anon_folio(struct vm_fault *vmf) > > */ > > static vm_fault_t do_anonymous_page(struct vm_fault *vmf) > > { > > - bool uffd_wp = vmf_orig_pte_uffd_wp(vmf); > > struct vm_area_struct *vma = vmf->vma; > > unsigned long addr = vmf->address; > > struct folio *folio; > > @@ -4488,7 +4490,7 @@ static vm_fault_t do_anonymous_page(struct vm_fault *vmf) > > folio_add_new_anon_rmap(folio, vma, addr); > > folio_add_lru_vma(folio, vma); > > setpte: > > - if (uffd_wp) > > + if (vmf_orig_pte_uffd_wp(vmf)) > > entry = pte_mkuffd_wp(entry); > > set_ptes(vma->vm_mm, addr, vmf->pte, entry, nr_pages); > > @@ -4663,7 +4665,6 @@ void set_pte_range(struct vm_fault *vmf, struct folio *folio, > > struct page *page, unsigned int nr, unsigned long addr) > > { > > struct vm_area_struct *vma = vmf->vma; > > - bool uffd_wp = vmf_orig_pte_uffd_wp(vmf); > > bool write = vmf->flags & FAULT_FLAG_WRITE; > > bool prefault = in_range(vmf->address, addr, nr * PAGE_SIZE); > > pte_t entry; > > @@ -4678,7 +4679,7 @@ void set_pte_range(struct vm_fault *vmf, struct folio *folio, > > if (write) > > entry = maybe_mkwrite(pte_mkdirty(entry), vma); > > - if (unlikely(uffd_wp)) > > + if (unlikely(vmf_orig_pte_uffd_wp(vmf))) > > entry = pte_mkuffd_wp(entry); > > /* copy-on-write page */ > > if (write && !(vma->vm_flags & VM_SHARED)) { > -- Peter Xu