Received: by 10.223.185.116 with SMTP id b49csp3213347wrg; Mon, 5 Mar 2018 16:41:44 -0800 (PST) X-Google-Smtp-Source: AG47ELsdFztuKDT09Nz0hBTaAZwf6/U86mV4FAcOL/8aWhLaJceELjMel4AazetWq7OnNeYM6oBe X-Received: by 10.98.89.156 with SMTP id k28mr16831560pfj.130.1520296904567; Mon, 05 Mar 2018 16:41:44 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1520296904; cv=none; d=google.com; s=arc-20160816; b=DcGpXT7PHIyVbuwy8V0T+ZNIHo0po46sj4Lk1iZdg4KN0FzUvjqvrMZRxS6DRg9Uap z3j5db6O5V193+p9iDKlJqiZxf7dksoeyAzJz1otoKQGKPYuyFbD6/zz4eSJGcmCzcp5 6WaY2oe05j+46XV9PTHbl2MxBXjBzYPizJC9gBAaObvlL2fP5lQkZuOU4rsQPtnMJgoc ekzrzDd22rz9WGmxXk7Nfvt/3oxT1iSNtYouiA2RRyaGJ+m91bBAfTsOgPytPWTOZXz2 hJMPYRkkoWx8+JHKCw9r2GxaLWHgWfqjv3b3YLHCrzK0Qchaz7B2AW5zGDcULZUJlMVk THsg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:to:from:dkim-signature:arc-authentication-results; bh=vN+Qt0UQwlOJ+BaEhV4YeL2tvSderFbvl2fIT+FXHpY=; b=qZ/Vu9e+xFtchjqLjQlHEYrgsXjtidk8OuLuD04FzE884HVwkULE/Hkk+Qp3rds+AK q+phH42Rm+T3FJzz39bvxrlQyIrkZDHJpV6pAvXF8iYEzKtCBee7zyLJjjO+siZMBvKf 4DX4WgXOOxD9bu9ZWIfCRA/QkY5D0D1ZvJLtfIMOlTd+gmndHW3sVH7m0x3sLM84i80F oIFfAMvcNYPZZLxmVM61FJsYxGaa+WmqPf9NAuNM49G8PxLWiIO3ogZ76Cw/7Sictqqt dske3wY4vEbAnpf1BvY/9B/gREahhL93dNRvo/EJifW5nP2LqTLHQIU0MggPtprLrclV Oc/Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@oracle.com header.s=corp-2017-10-26 header.b=s17X40b0; 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=NONE sp=NONE dis=NONE) header.from=oracle.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id g27-v6si10039774plj.665.2018.03.05.16.41.27; Mon, 05 Mar 2018 16:41:44 -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; dkim=pass header.i=@oracle.com header.s=corp-2017-10-26 header.b=s17X40b0; 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=NONE sp=NONE dis=NONE) header.from=oracle.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S933516AbeCFAiS (ORCPT + 99 others); Mon, 5 Mar 2018 19:38:18 -0500 Received: from userp2130.oracle.com ([156.151.31.86]:40572 "EHLO userp2130.oracle.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933079AbeCFA0U (ORCPT ); Mon, 5 Mar 2018 19:26:20 -0500 Received: from pps.filterd (userp2130.oracle.com [127.0.0.1]) by userp2130.oracle.com (8.16.0.22/8.16.0.22) with SMTP id w260LS5U187145; Tue, 6 Mar 2018 00:26:17 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : subject : date : message-id : in-reply-to : references; s=corp-2017-10-26; bh=vN+Qt0UQwlOJ+BaEhV4YeL2tvSderFbvl2fIT+FXHpY=; b=s17X40b0gSZ79fsJx+Vpq3ts+cN2N2RLul/dTeAX0wxvXvu2Zuxe18BTWKs9gDFpJ5KU PJ0zXLxiJ2dZO1YgujiutnkuOAes1odcZ7D4Z5+b0D3tDbcxN2/k0eJqA9D6p0vcY5E9 4Ni4lCcI1fKTOqBR0ZZle0ROlQg9mMed0X38VDZmZSp0dvyLloJg7YIKMlJ9ZVDyugYA vxuZOr8TRpCqATK69c2h+FqDGBTzibePpGTdGBG6iUhfkjX7MqWZV7VyoL356IPApSQQ NXnPoE5AL6HYZw79qmfWBNZjUfIgIybVdWfBwLPH+BdhI9uIwBTSAighGXjJWn1pD4zr lw== Received: from userv0021.oracle.com (userv0021.oracle.com [156.151.31.71]) by userp2130.oracle.com with ESMTP id 2ghdxf8jqq-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 06 Mar 2018 00:26:16 +0000 Received: from userv0122.oracle.com (userv0122.oracle.com [156.151.31.75]) by userv0021.oracle.com (8.14.4/8.14.4) with ESMTP id w260QGTX025126 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=FAIL); Tue, 6 Mar 2018 00:26:16 GMT Received: from abhmp0008.oracle.com (abhmp0008.oracle.com [141.146.116.14]) by userv0122.oracle.com (8.14.4/8.14.4) with ESMTP id w260QF6s025057; Tue, 6 Mar 2018 00:26:16 GMT Received: from localhost.localdomain (/98.216.35.41) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Mon, 05 Mar 2018 16:26:15 -0800 From: Pavel Tatashin To: steven.sistare@oracle.com, daniel.m.jordan@oracle.com, linux-kernel@vger.kernel.org, Alexander.Levin@microsoft.com, dan.j.williams@intel.com, sathyanarayanan.kuppuswamy@intel.com, pankaj.laxminarayan.bharadiya@intel.com, akuster@mvista.com, cminyard@mvista.com, pasha.tatashin@oracle.com, gregkh@linuxfoundation.org, stable@vger.kernel.org Subject: [PATCH 4.1 20/65] x86/mm: Enable CR4.PCIDE on supported systems Date: Mon, 5 Mar 2018 19:24:53 -0500 Message-Id: <20180306002538.1761-21-pasha.tatashin@oracle.com> X-Mailer: git-send-email 2.16.2 In-Reply-To: <20180306002538.1761-1-pasha.tatashin@oracle.com> References: <20180306002538.1761-1-pasha.tatashin@oracle.com> X-Proofpoint-Virus-Version: vendor=nai engine=5900 definitions=8823 signatures=668683 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 suspectscore=0 malwarescore=0 phishscore=0 bulkscore=0 spamscore=0 mlxscore=0 mlxlogscore=999 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1711220000 definitions=main-1803060003 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Andy Lutomirski commit 660da7c9228f685b2ebe664f9fd69aaddcc420b5 upstream. We can use PCID if the CPU has PCID and PGE and we're not on Xen. By itself, this has no effect. A followup patch will start using PCID. Signed-off-by: Andy Lutomirski Reviewed-by: Nadav Amit Reviewed-by: Boris Ostrovsky Reviewed-by: Thomas Gleixner Cc: Andrew Morton Cc: Arjan van de Ven Cc: Borislav Petkov Cc: Dave Hansen Cc: Juergen Gross Cc: Linus Torvalds Cc: Mel Gorman Cc: Peter Zijlstra Cc: Rik van Riel Cc: linux-mm@kvack.org Link: http://lkml.kernel.org/r/6327ecd907b32f79d5aa0d466f04503bbec5df88.1498751203.git.luto@kernel.org Signed-off-by: Ingo Molnar Cc: Hugh Dickins Signed-off-by: Greg Kroah-Hartman (cherry picked from commit fd0504525efd2ce2063cd4229baabd3e3a56ecbc) Signed-off-by: Pavel Tatashin --- arch/x86/include/asm/tlbflush.h | 8 ++++++++ arch/x86/kernel/cpu/common.c | 22 ++++++++++++++++++++++ arch/x86/xen/enlighten.c | 6 ++++++ 3 files changed, 36 insertions(+) diff --git a/arch/x86/include/asm/tlbflush.h b/arch/x86/include/asm/tlbflush.h index 4f7017c9cae8..09a70d8d293e 100644 --- a/arch/x86/include/asm/tlbflush.h +++ b/arch/x86/include/asm/tlbflush.h @@ -183,6 +183,14 @@ static inline void __flush_tlb_all(void) __flush_tlb_global(); else __flush_tlb(); + + /* + * Note: if we somehow had PCID but not PGE, then this wouldn't work -- + * we'd end up flushing kernel translations for the current ASID but + * we might fail to flush kernel translations for other cached ASIDs. + * + * To avoid this issue, we force PCID off if PGE is off. + */ } static inline void __flush_tlb_one(unsigned long addr) diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c index 843be1de5ddb..f5647d238337 100644 --- a/arch/x86/kernel/cpu/common.c +++ b/arch/x86/kernel/cpu/common.c @@ -339,6 +339,25 @@ static __always_inline void setup_smap(struct cpuinfo_x86 *c) } } +static void setup_pcid(struct cpuinfo_x86 *c) +{ + if (cpu_has(c, X86_FEATURE_PCID)) { + if (cpu_has(c, X86_FEATURE_PGE)) { + cr4_set_bits(X86_CR4_PCIDE); + } else { + /* + * flush_tlb_all(), as currently implemented, won't + * work if PCID is on but PGE is not. Since that + * combination doesn't exist on real hardware, there's + * no reason to try to fully support it, but it's + * polite to avoid corrupting data if we're on + * an improperly configured VM. + */ + clear_cpu_cap(c, X86_FEATURE_PCID); + } + } +} + /* * Some CPU features depend on higher CPUID levels, which may not always * be available due to CPUID level capping or broken virtualization @@ -968,6 +987,9 @@ static void identify_cpu(struct cpuinfo_x86 *c) setup_smep(c); setup_smap(c); + /* Set up PCID */ + setup_pcid(c); + /* * The vendor-specific functions might have changed features. * Now we do "generic changes." diff --git a/arch/x86/xen/enlighten.c b/arch/x86/xen/enlighten.c index 1ecae556d4ed..809730c09e2b 100644 --- a/arch/x86/xen/enlighten.c +++ b/arch/x86/xen/enlighten.c @@ -432,6 +432,12 @@ static void __init xen_init_cpuid_mask(void) ~((1 << X86_FEATURE_MTRR) | /* disable MTRR */ (1 << X86_FEATURE_ACC)); /* thermal monitoring */ + /* + * Xen PV would need some work to support PCID: CR3 handling as well + * as xen_flush_tlb_others() would need updating. + */ + cpuid_leaf1_ecx_mask &= ~(1 << (X86_FEATURE_PCID % 32)); /* disable PCID */ + if (!xen_initial_domain()) cpuid_leaf1_edx_mask &= ~((1 << X86_FEATURE_ACPI)); /* disable ACPI */ -- 2.16.2