Received: by 10.223.185.116 with SMTP id b49csp2372000wrg; Thu, 22 Feb 2018 12:38:32 -0800 (PST) X-Google-Smtp-Source: AH8x2244fvLR56OOLj6EnOtm0KLbvJpRkOG50+MxULMfjBnEl8RU3jHcABpdbdtEMHGcxcQlKj1r X-Received: by 2002:a17:902:123:: with SMTP id 32-v6mr7897454plb.278.1519331912659; Thu, 22 Feb 2018 12:38:32 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1519331912; cv=none; d=google.com; s=arc-20160816; b=DanRJGfFDghF7Tf2b/VIslgNQ4oHdKqAThQsur35ZD1cYckJF7xD1v37Y4XGaOpaPk 4Ri4t7htOwkXtb/n1iFr3W24Gcf2o0hVhjgmVUb5HJ/1YdLV7iRk0VYJ22KjwdaQiQ3g EefcAPo3yGs4SIPNVSEMgta4rCaTlYcGK00vILub+S2cz6Pc61rRRU0dVmdjbMGwD9GC 9960oxwpefsZFKoNFs4xasmsbeDwXa+yd/v9EkuJnP29VCmFklxeSxCn2S6jk+EGMar9 rcyKj8VnO9d86XFbyoDsupis5zXf6VU4zyOrxQt/0Z/+VwGIiJsMcNcNfvEfvr+4K6wf rUeg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:in-reply-to:references:date :from:cc:to:subject:arc-authentication-results; bh=3cTsYRmGxZ10hpZI9SRnQxlk7t+bzD9PWX4at3q4owA=; b=w77Y6ueK53p7sZh8dpk4T6NHlf/obbQpay3jEDV0G6UBA5hbayTsfTHEOSIRmu5s6n Kog+dKr6R9CU2MVpwh4u5rbpQ1cc5fqV5A0C2+7N/WxLWwVyc9qJsIyHHPdlrDzJj966 arPLBjI2JJU01WkmFsUtQY/6Mghv3jHG6swzp8mBtLeNrvtSw/1+KdpcqlwICiRy3Ufg VWO7J1z6fy3Gwzc71fm/Syukx+YfVtBrKlmOsFg05L/BVVUV9twKNRrw3TDE6tOg1PBk au/6h0V0Ki4griFfpPqRnL/BfE6BtK9CarMoxKx6xaroLB39bT/dl97icpLxuUstW4lW J4Rg== ARC-Authentication-Results: i=1; mx.google.com; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id o86si551957pfi.370.2018.02.22.12.38.16; Thu, 22 Feb 2018 12:38:32 -0800 (PST) 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; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751527AbeBVUhV (ORCPT + 99 others); Thu, 22 Feb 2018 15:37:21 -0500 Received: from mga17.intel.com ([192.55.52.151]:38777 "EHLO mga17.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751463AbeBVUhP (ORCPT ); Thu, 22 Feb 2018 15:37:15 -0500 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga002.jf.intel.com ([10.7.209.21]) by fmsmga107.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 22 Feb 2018 12:37:13 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.47,378,1515484800"; d="scan'208";a="36730235" Received: from viggo.jf.intel.com (HELO localhost.localdomain) ([10.54.39.119]) by orsmga002.jf.intel.com with ESMTP; 22 Feb 2018 12:37:13 -0800 Subject: [RFC][PATCH 09/10] x86/pti: enable global pages for shared areas To: linux-kernel@vger.kernel.org Cc: Dave Hansen , aarcange@redhat.com, luto@kernel.org, torvalds@linux-foundation.org, keescook@google.com, hughd@google.com, jgross@suse.com, x86@kernel.org, namit@vmware.com From: Dave Hansen Date: Thu, 22 Feb 2018 12:37:05 -0800 References: <20180222203651.B776810C@viggo.jf.intel.com> In-Reply-To: <20180222203651.B776810C@viggo.jf.intel.com> Message-Id: <20180222203705.E4AE8A0B@viggo.jf.intel.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Dave Hansen The entry/exit text and cpu_entry_area are mapped into userspace and the kernel. But, they are not _PAGE_GLOBAL. This creates unnecessary TLB misses. Add the _PAGE_GLOBAL flag for these areas. Signed-off-by: Dave Hansen Cc: Andrea Arcangeli Cc: Andy Lutomirski Cc: Linus Torvalds Cc: Kees Cook Cc: Hugh Dickins Cc: Juergen Gross Cc: x86@kernel.org Cc: Nadav Amit --- b/arch/x86/mm/cpu_entry_area.c | 10 +++++++++- b/arch/x86/mm/pti.c | 9 ++++++++- 2 files changed, 17 insertions(+), 2 deletions(-) diff -puN arch/x86/mm/cpu_entry_area.c~kpti-why-no-global arch/x86/mm/cpu_entry_area.c --- a/arch/x86/mm/cpu_entry_area.c~kpti-why-no-global 2018-02-22 12:36:22.067036545 -0800 +++ b/arch/x86/mm/cpu_entry_area.c 2018-02-22 12:36:22.072036545 -0800 @@ -27,8 +27,16 @@ EXPORT_SYMBOL(get_cpu_entry_area); void cea_set_pte(void *cea_vaddr, phys_addr_t pa, pgprot_t flags) { unsigned long va = (unsigned long) cea_vaddr; + pte_t pte = pfn_pte(pa >> PAGE_SHIFT, flags); - set_pte_vaddr(va, pfn_pte(pa >> PAGE_SHIFT, flags)); + /* + * The cpu_entry_area is shared between the user and kernel + * page tables. All of its ptes can safely be global. + */ + if (boot_cpu_has(X86_FEATURE_PGE)) + pte = pte_set_flags(pte, _PAGE_GLOBAL); + + set_pte_vaddr(va, pte); } static void __init diff -puN arch/x86/mm/pti.c~kpti-why-no-global arch/x86/mm/pti.c --- a/arch/x86/mm/pti.c~kpti-why-no-global 2018-02-22 12:36:22.069036545 -0800 +++ b/arch/x86/mm/pti.c 2018-02-22 12:36:22.072036545 -0800 @@ -300,6 +300,13 @@ pti_clone_pmds(unsigned long start, unsi return; /* + * Setting 'target_pmd' below creates a mapping in both + * the user and kernel page tables. It is effectively + * global, so set it as global in both copies. + */ + *pmd = pmd_set_flags(*pmd, _PAGE_GLOBAL); + + /* * Copy the PMD. That is, the kernelmode and usermode * tables will share the last-level page tables of this * address range @@ -348,7 +355,7 @@ static void __init pti_clone_entry_text( { pti_clone_pmds((unsigned long) __entry_text_start, (unsigned long) __irqentry_text_end, - _PAGE_RW | _PAGE_GLOBAL); + _PAGE_RW); } /* _