Received: by 10.213.65.68 with SMTP id h4csp35095imn; Tue, 3 Apr 2018 14:58:53 -0700 (PDT) X-Google-Smtp-Source: AIpwx4+ZWUM13NyV59MjUxTQjDi3q+IZViEYY03OeusUSbRx+IOMQNHjKBBKZ2glJ0g6NQCDmygB X-Received: by 2002:a17:902:b40d:: with SMTP id x13-v6mr159786plr.167.1522792733690; Tue, 03 Apr 2018 14:58:53 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1522792733; cv=none; d=google.com; s=arc-20160816; b=q3kmfGmAXBxJgki4o60UjBtQZQdrQO9AvN3dCXa7doBgu93TFm9q80I867aEk2jVgI IUzN7+HSkwnIiwra9/25fqg40nZ8Jzup+Q9oPoZ5/EQKTKU2Uoak27EzUHD0Pr1I/wM2 ryd86YyYIPlBEjnVxPrVKOY8Y1yiE2WggNZx1bHDGQQUYQB2C63qqiTgO96N1GwpS6/+ sYvq0BS9ZwSKHK7O6/sGqeCYLpAbOIyswtNV3mxwX+oGs30ZYll8CMQUTD+38BmaaJXq QppaOuUrrdxSSMGK9gNt3Ui76Xc1NUvM7Wk4ZzSSoZtoFIMqQkgnaHZ4YpPpMfQ23yom jQ8A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:user-agent:references :message-id:in-reply-to:subject:cc:to:from:date:dkim-signature :arc-authentication-results; bh=c6mMjo4F45hd9Kfn9m1GaWE9ix7PxYZZRcq4qygG+nY=; b=B6hZF9SKzEm75dI/PmGkpNCniJsI2nh6FRTwxkNhC7FKRQHv9QVJEF4Im423PbfYIg Tb1llBM/1lxQH2mkNQQ4pL1q57aB/uyWOnKH6YXrB/wAzjtgkQy7pKUp0M6GsxnPBalP fSoIMPQ8LzM4cBTAQP0AFidwqCwmsd54sDoyN9GyLBoNv2/2q4XsfZj/HGij6HBw+bs8 MHq1EAP++nQ3ISQtoJwDOcTWzrxKnZcbDQgTbuIehBDEWYx1lakIkiSEqnFhTuBd8YvY B7ToACA/Lecrs2fTQTW/kV7sYZmWnc9Apr58rqC+9fYAnYSA7/H3/Qik6Q3cbGVfgNyn TXtA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=O1GymsCd; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id k26si2584676pgn.502.2018.04.03.14.58.39; Tue, 03 Apr 2018 14:58:53 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=O1GymsCd; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753691AbeDCV5Y (ORCPT + 99 others); Tue, 3 Apr 2018 17:57:24 -0400 Received: from mail-pl0-f65.google.com ([209.85.160.65]:32936 "EHLO mail-pl0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753121AbeDCV5W (ORCPT ); Tue, 3 Apr 2018 17:57:22 -0400 Received: by mail-pl0-f65.google.com with SMTP id s10-v6so8978761plp.0 for ; Tue, 03 Apr 2018 14:57:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=date:from:to:cc:subject:in-reply-to:message-id:references :user-agent:mime-version; bh=c6mMjo4F45hd9Kfn9m1GaWE9ix7PxYZZRcq4qygG+nY=; b=O1GymsCd4fdTPIVIW8Y3h1OPvNAO6r6UVMQ1AZBWbDgqyMiFK6GH9hlMggZtwN8kr0 7pIlwRD5E57KOc1edMuhep5LAP9/kvjjWqZwp1ZUi7DDboeHnV0f39Xe6peVckD/2TgS MpU8q6/s2iT+YOSRjH3V+5KC+Hwqic7lE0hIhwtTjuYwWiRhng0liXRjNMaS8GaUejfp 1n0nFsbJWg0J/jHb2IdQvDnknc2ov05XGdiZyv2zsY7uNcmDefJ2N89CEs/OctBVS/au eYg2ZYzkBQzIorAeKshp+f/uq8GaRcOtdl1fys8a12WGxJyeP97nyZpJP9KY9wvPleEU Fc2g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:in-reply-to:message-id :references:user-agent:mime-version; bh=c6mMjo4F45hd9Kfn9m1GaWE9ix7PxYZZRcq4qygG+nY=; b=qf+3OQO3ggnBvfK2y79qnf9XCqqB/Lmoj8SDN7a1vZaMMO87PLs33Qy87t1oDOQcFz ssDifc1943GNZ/GqQz73RJD8Qf1++GAzXK4bzWNHB284PprXYqLDK/llQjE6OA0HPQiD UCGc0Zk7DYYJUzX1n8R9Iu9gXv8PdvE0HkeDAJxmfMnvX86jxHxzGTIT/HfV7Zr6ABot NyLnwnyO08ML9XfapTiznplyMgMTjgwtPeRPu70+51k6JQFIKz4s+Dfm/o5jOeZX+m2Y Iwf0qUAqNMQagqTUfZq/MVNfY5jzUhtBNgQ4Sfd36+14YNXbknwtMPcSDvx8kbCBfrCL 5Fmg== X-Gm-Message-State: AElRT7HsZJk1Y5IhlIY9C+h6RmeyVryn9xkJPdhcCKTxdygD8eLI/HS8 9mh1V/2gm9sCBrwxSlVGI1FO5A== X-Received: by 2002:a17:902:9894:: with SMTP id s20-v6mr8162539plp.196.1522792642180; Tue, 03 Apr 2018 14:57:22 -0700 (PDT) Received: from [2620:15c:17:3:3a5:23a7:5e32:4598] ([2620:15c:17:3:3a5:23a7:5e32:4598]) by smtp.gmail.com with ESMTPSA id q13sm6166049pgr.52.2018.04.03.14.57.20 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 03 Apr 2018 14:57:21 -0700 (PDT) Date: Tue, 3 Apr 2018 14:57:20 -0700 (PDT) From: David Rientjes X-X-Sender: rientjes@chino.kir.corp.google.com To: Laurent Dufour cc: paulmck@linux.vnet.ibm.com, peterz@infradead.org, akpm@linux-foundation.org, kirill@shutemov.name, ak@linux.intel.com, mhocko@kernel.org, dave@stgolabs.net, jack@suse.cz, Matthew Wilcox , benh@kernel.crashing.org, mpe@ellerman.id.au, paulus@samba.org, Thomas Gleixner , Ingo Molnar , hpa@zytor.com, Will Deacon , Sergey Senozhatsky , Andrea Arcangeli , Alexei Starovoitov , kemi.wang@intel.com, sergey.senozhatsky.work@gmail.com, Daniel Jordan , linux-kernel@vger.kernel.org, linux-mm@kvack.org, haren@linux.vnet.ibm.com, khandual@linux.vnet.ibm.com, npiggin@gmail.com, bsingharora@gmail.com, Tim Chen , linuxppc-dev@lists.ozlabs.org, x86@kernel.org Subject: Re: [PATCH v9 04/24] mm: Prepare for FAULT_FLAG_SPECULATIVE In-Reply-To: <361fa6e7-3c17-e1b8-8046-af72c4459613@linux.vnet.ibm.com> Message-ID: References: <1520963994-28477-1-git-send-email-ldufour@linux.vnet.ibm.com> <1520963994-28477-5-git-send-email-ldufour@linux.vnet.ibm.com> <361fa6e7-3c17-e1b8-8046-af72c4459613@linux.vnet.ibm.com> User-Agent: Alpine 2.20 (DEB 67 2015-01-07) MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Wed, 28 Mar 2018, Laurent Dufour wrote: > >> diff --git a/include/linux/mm.h b/include/linux/mm.h > >> index 4d02524a7998..2f3e98edc94a 100644 > >> --- a/include/linux/mm.h > >> +++ b/include/linux/mm.h > >> @@ -300,6 +300,7 @@ extern pgprot_t protection_map[16]; > >> #define FAULT_FLAG_USER 0x40 /* The fault originated in userspace */ > >> #define FAULT_FLAG_REMOTE 0x80 /* faulting for non current tsk/mm */ > >> #define FAULT_FLAG_INSTRUCTION 0x100 /* The fault was during an instruction fetch */ > >> +#define FAULT_FLAG_SPECULATIVE 0x200 /* Speculative fault, not holding mmap_sem */ > >> > >> #define FAULT_FLAG_TRACE \ > >> { FAULT_FLAG_WRITE, "WRITE" }, \ > > > > I think FAULT_FLAG_SPECULATIVE should be introduced in the patch that > > actually uses it. > > I think you're right, I'll move down this define in the series. > > >> diff --git a/mm/memory.c b/mm/memory.c > >> index e0ae4999c824..8ac241b9f370 100644 > >> --- a/mm/memory.c > >> +++ b/mm/memory.c > >> @@ -2288,6 +2288,13 @@ int apply_to_page_range(struct mm_struct *mm, unsigned long addr, > >> } > >> EXPORT_SYMBOL_GPL(apply_to_page_range); > >> > >> +static bool pte_map_lock(struct vm_fault *vmf) > > > > inline? > > Agreed. > Ignore this, the final form of the function after the full patchset shouldn't be inline. > >> +{ > >> + vmf->pte = pte_offset_map_lock(vmf->vma->vm_mm, vmf->pmd, > >> + vmf->address, &vmf->ptl); > >> + return true; > >> +} > >> + > >> /* > >> * handle_pte_fault chooses page fault handler according to an entry which was > >> * read non-atomically. Before making any commitment, on those architectures > >> @@ -2477,6 +2484,7 @@ static int wp_page_copy(struct vm_fault *vmf) > >> const unsigned long mmun_start = vmf->address & PAGE_MASK; > >> const unsigned long mmun_end = mmun_start + PAGE_SIZE; > >> struct mem_cgroup *memcg; > >> + int ret = VM_FAULT_OOM; > >> > >> if (unlikely(anon_vma_prepare(vma))) > >> goto oom; > >> @@ -2504,7 +2512,11 @@ static int wp_page_copy(struct vm_fault *vmf) > >> /* > >> * Re-check the pte - we dropped the lock > >> */ > >> - vmf->pte = pte_offset_map_lock(mm, vmf->pmd, vmf->address, &vmf->ptl); > >> + if (!pte_map_lock(vmf)) { > >> + mem_cgroup_cancel_charge(new_page, memcg, false); > >> + ret = VM_FAULT_RETRY; > >> + goto oom_free_new; > >> + } > > > > Ugh, but we aren't oom here, so maybe rename oom_free_new so that it makes > > sense for return values other than VM_FAULT_OOM? > > You're right, now this label name is not correct, I'll rename it to > "out_free_new" and rename also the label "oom" to "out" since it is generic too > now. > I think it would just be better to introduce a out_uncharge that handles the mem_cgroup_cancel_charge() in the exit path. diff --git a/mm/memory.c b/mm/memory.c --- a/mm/memory.c +++ b/mm/memory.c @@ -2645,9 +2645,8 @@ static int wp_page_copy(struct vm_fault *vmf) * Re-check the pte - we dropped the lock */ if (!pte_map_lock(vmf)) { - mem_cgroup_cancel_charge(new_page, memcg, false); ret = VM_FAULT_RETRY; - goto oom_free_new; + goto out_uncharge; } if (likely(pte_same(*vmf->pte, vmf->orig_pte))) { if (old_page) { @@ -2735,6 +2734,8 @@ static int wp_page_copy(struct vm_fault *vmf) put_page(old_page); } return page_copied ? VM_FAULT_WRITE : 0; +out_uncharge: + mem_cgroup_cancel_charge(new_page, memcg, false); oom_free_new: put_page(new_page); oom: