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 X-Spam-Level: X-Spam-Status: No, score=-9.8 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED,USER_AGENT_GIT autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 6A971C352A3 for ; Wed, 5 Feb 2020 18:23:46 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 448322192A for ; Wed, 5 Feb 2020 18:23:46 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728039AbgBESXp (ORCPT ); Wed, 5 Feb 2020 13:23:45 -0500 Received: from mga09.intel.com ([134.134.136.24]:43402 "EHLO mga09.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727843AbgBESX2 (ORCPT ); Wed, 5 Feb 2020 13:23:28 -0500 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by orsmga102.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 05 Feb 2020 10:23:27 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.70,406,1574150400"; d="scan'208";a="343835191" Received: from yyu32-desk.sc.intel.com ([143.183.136.146]) by fmsmga001.fm.intel.com with ESMTP; 05 Feb 2020 10:23:26 -0800 From: Yu-cheng Yu To: x86@kernel.org, "H. Peter Anvin" , Thomas Gleixner , Ingo Molnar , linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org, linux-mm@kvack.org, linux-arch@vger.kernel.org, linux-api@vger.kernel.org, Arnd Bergmann , Andy Lutomirski , Balbir Singh , Borislav Petkov , Cyrill Gorcunov , Dave Hansen , Eugene Syromiatnikov , Florian Weimer , "H.J. Lu" , Jann Horn , Jonathan Corbet , Kees Cook , Mike Kravetz , Nadav Amit , Oleg Nesterov , Pavel Machek , Peter Zijlstra , Randy Dunlap , "Ravi V. Shankar" , Vedvyas Shanbhogue , Dave Martin , x86-patch-review@intel.com Cc: Yu-cheng Yu Subject: [RFC PATCH v9 6/7] mm: Update alloc_set_pte() for zero page Date: Wed, 5 Feb 2020 10:23:07 -0800 Message-Id: <20200205182308.4028-7-yu-cheng.yu@intel.com> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20200205182308.4028-1-yu-cheng.yu@intel.com> References: <20200205182308.4028-1-yu-cheng.yu@intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Update alloc_set_pte() for the zero-page case. A special mapping can also use a zero page for read. One use case is the Indirect Branch Tracking legacy code page (introduced next). Signed-off-by: Yu-cheng Yu --- mm/memory.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/mm/memory.c b/mm/memory.c index 6daa28614327..58c1e4b60991 100644 --- a/mm/memory.c +++ b/mm/memory.c @@ -3447,6 +3447,12 @@ vm_fault_t alloc_set_pte(struct vm_fault *vmf, struct mem_cgroup *memcg, flush_icache_page(vma, page); entry = mk_pte(page, vma->vm_page_prot); + + if (is_zero_pfn(pte_pfn(entry))) { + entry = pte_mkspecial(entry); + goto alloc_set_pte_out; + } + if (write) entry = maybe_mkwrite(pte_mkdirty(entry), vma); /* copy-on-write page */ @@ -3459,6 +3465,8 @@ vm_fault_t alloc_set_pte(struct vm_fault *vmf, struct mem_cgroup *memcg, inc_mm_counter_fast(vma->vm_mm, mm_counter_file(page)); page_add_file_rmap(page, false); } + +alloc_set_pte_out: set_pte_at(vma->vm_mm, vmf->address, vmf->pte, entry); /* no need to invalidate: a not-present page won't be cached */ -- 2.21.0 From mboxrd@z Thu Jan 1 00:00:00 1970 From: Yu-cheng Yu Subject: [RFC PATCH v9 6/7] mm: Update alloc_set_pte() for zero page Date: Wed, 5 Feb 2020 10:23:07 -0800 Message-ID: <20200205182308.4028-7-yu-cheng.yu@intel.com> References: <20200205182308.4028-1-yu-cheng.yu@intel.com> Mime-Version: 1.0 Content-Transfer-Encoding: 8bit Return-path: In-Reply-To: <20200205182308.4028-1-yu-cheng.yu@intel.com> Sender: linux-kernel-owner@vger.kernel.org To: x86@kernel.org, "H. Peter Anvin" , Thomas Gleixner , Ingo Molnar , linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org, linux-mm@kvack.org, linux-arch@vger.kernel.org, linux-api@vger.kernel.org, Arnd Bergmann , Andy Lutomirski , Balbir Singh , Borislav Petkov , Cyrill Gorcunov , Dave Hansen , Eugene Syromiatnikov , Florian Weimer , "H.J. Lu" , Jann Horn , Jonathan Corbet , Kees Cook , Mike Kravetz , Nadav Amit Cc: Yu-cheng Yu List-Id: linux-api@vger.kernel.org Update alloc_set_pte() for the zero-page case. A special mapping can also use a zero page for read. One use case is the Indirect Branch Tracking legacy code page (introduced next). Signed-off-by: Yu-cheng Yu --- mm/memory.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/mm/memory.c b/mm/memory.c index 6daa28614327..58c1e4b60991 100644 --- a/mm/memory.c +++ b/mm/memory.c @@ -3447,6 +3447,12 @@ vm_fault_t alloc_set_pte(struct vm_fault *vmf, struct mem_cgroup *memcg, flush_icache_page(vma, page); entry = mk_pte(page, vma->vm_page_prot); + + if (is_zero_pfn(pte_pfn(entry))) { + entry = pte_mkspecial(entry); + goto alloc_set_pte_out; + } + if (write) entry = maybe_mkwrite(pte_mkdirty(entry), vma); /* copy-on-write page */ @@ -3459,6 +3465,8 @@ vm_fault_t alloc_set_pte(struct vm_fault *vmf, struct mem_cgroup *memcg, inc_mm_counter_fast(vma->vm_mm, mm_counter_file(page)); page_add_file_rmap(page, false); } + +alloc_set_pte_out: set_pte_at(vma->vm_mm, vmf->address, vmf->pte, entry); /* no need to invalidate: a not-present page won't be cached */ -- 2.21.0 From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: From: Yu-cheng Yu Subject: [RFC PATCH v9 6/7] mm: Update alloc_set_pte() for zero page Date: Wed, 5 Feb 2020 10:23:07 -0800 Message-ID: <20200205182308.4028-7-yu-cheng.yu@intel.com> In-Reply-To: <20200205182308.4028-1-yu-cheng.yu@intel.com> References: <20200205182308.4028-1-yu-cheng.yu@intel.com> MIME-Version: 1.0 Sender: linux-doc-owner@vger.kernel.org Content-Transfer-Encoding: quoted-printable To: x86@kernel.org, "H. Peter Anvin" , Thomas Gleixner , Ingo Molnar , linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org, linux-mm@kvack.org, linux-arch@vger.kernel.org, linux-api@vger.kernel.org, Arnd Bergmann , Andy Lutomirski , Balbir Singh , Borislav Petkov , Cyrill Gorcunov , Dave Hansen , Eugene Syromiatnikov , Florian Weimer , "H.J. Lu" , Jann Horn , Jonathan Corbet , Kees Cook , Mike Kravetz , Nadav Amit , Oleg Nesterov , Pavel Machek , Peter Zijlstra , Randy Dunlap , "Ravi V. Shankar" , Vedvyas Shanbhogue , Dave Martin , x86-patch-review@intel.com Cc: Yu-cheng Yu List-ID: Message-ID: <20200205182307.C6YGWMOLfIDP_6VYWi1wkCkInjLmMlQ-C36R-IbjPdo@z> Update alloc_set_pte() for the zero-page case. A special mapping can als= o use a zero page for read. One use case is the Indirect Branch Tracking legacy code page (introduced next). Signed-off-by: Yu-cheng Yu --- mm/memory.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/mm/memory.c b/mm/memory.c index 6daa28614327..58c1e4b60991 100644 --- a/mm/memory.c +++ b/mm/memory.c @@ -3447,6 +3447,12 @@ vm_fault_t alloc_set_pte(struct vm_fault *vmf, str= uct mem_cgroup *memcg, flush_icache_page(vma, page); entry =3D mk_pte(page, vma->vm_page_prot); + + if (is_zero_pfn(pte_pfn(entry))) { + entry =3D pte_mkspecial(entry); + goto alloc_set_pte_out; + } + if (write) entry =3D maybe_mkwrite(pte_mkdirty(entry), vma); /* copy-on-write page */ @@ -3459,6 +3465,8 @@ vm_fault_t alloc_set_pte(struct vm_fault *vmf, stru= ct mem_cgroup *memcg, inc_mm_counter_fast(vma->vm_mm, mm_counter_file(page)); page_add_file_rmap(page, false); } + +alloc_set_pte_out: set_pte_at(vma->vm_mm, vmf->address, vmf->pte, entry); /* no need to invalidate: a not-present page won't be cached */ --=20 2.21.0