Message ID | 20230914044805.301390-9-xin3.li@intel.com |
---|---|
State | New |
Headers |
Return-Path: <linux-kernel-owner@vger.kernel.org> Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:612c:172:b0:3f2:4152:657d with SMTP id h50csp149267vqi; Wed, 13 Sep 2023 23:32:35 -0700 (PDT) X-Google-Smtp-Source: AGHT+IEts7zJBafCHkEiPDRha9OjBIgiJ5+ISRneYG61AIXUEE72QaF/ftuZ4BYUmcU5mKIINekZ X-Received: by 2002:a17:903:120b:b0:1bd:bba1:be78 with SMTP id l11-20020a170903120b00b001bdbba1be78mr5930987plh.23.1694673154862; Wed, 13 Sep 2023 23:32:34 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1694673154; cv=none; d=google.com; s=arc-20160816; b=Z+eRYlivRKh1D53biLZGsC7PYGUJ4bcVARpif0i5qBwb7bEAROaxh6UX5yUwBuq2hn afk9erCrAh7yE+UbKSjVomZBePe+BE+iWR9ak8d08ns9cuZvjLjmkhToSZQqXr9fDb9P Q9e+tpHvywCL992M6M7v+KD40UamIWoo+jbRtLFXg1kC307KbjcEuNvdVx67FWpcv9aQ 32cHExzujYRxp9LzVDZKwORJ5bmJUJaOPXprF9sCgHE3Prfw2BnLb0ArsJPXuGNsUvrA I0rCQxO7Pa3QoNHtJSphQhzaEb51abgbhXldTiLSpVSdCRGxUx+moS6zIeVRNxOqJu9N tXuQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=jELwGxJww6ZbR4pG0r3HAqZaJS9l8fYLYLYRpujkGaY=; fh=jqCbnajAXgJ+s7A1aA7DOHJD13/+EpD442pw8d+Ofss=; b=Qq5ZA8OFUs0jhdVieF5yb/foLY3oNCwBP4D+9mmm5AUhtmj6ElmJl1UPj0cU/C55Vo iePxIAwwhKwpLlioZqALvRzHg2//c6fhiHMc8SZqagi4uU+DQ6UimHZ3tfevfgUR3KhQ LFmp1QbDG/41yHXQHZXSdscouujZx4HJg5OrwaBL5BlSLsgD3g8oyj7lbfNiOh86H46Q +8zGpv0ER3q1zsFoC+RcE4OavpmHPYumWvgm5vZCxwQ/w8sSlF1v/DR6AsnP9vnGC8+/ PUF3tv6oFk21zDfObk8XAvV0nsLMEC1o/afo0WjfqKQ0godCxMhV0D4JoMMs9spgK3KW Enjg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=Hh049Uru; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:2 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from agentk.vger.email (agentk.vger.email. [2620:137:e000::3:2]) by mx.google.com with ESMTPS id p12-20020a170902e74c00b001bba53994acsi1078848plf.243.2023.09.13.23.32.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 13 Sep 2023 23:32:34 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:2 as permitted sender) client-ip=2620:137:e000::3:2; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=Hh049Uru; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:2 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by agentk.vger.email (Postfix) with ESMTP id 2EF4F820EA67; Wed, 13 Sep 2023 22:20:05 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at agentk.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234967AbjINFTe (ORCPT <rfc822;chrisfriedt@gmail.com> + 35 others); Thu, 14 Sep 2023 01:19:34 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49198 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234582AbjINFTT (ORCPT <rfc822;linux-kernel@vger.kernel.org>); Thu, 14 Sep 2023 01:19:19 -0400 Received: from mgamail.intel.com (mgamail.intel.com [134.134.136.65]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2CBD51BCD; Wed, 13 Sep 2023 22:19:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1694668755; x=1726204755; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=ZlGESG1ZjbxHp/2vGEpu7uzY2F9a0taEPQgxug8c1Qc=; b=Hh049Uru6vw5PJ+LfcSYO/H6uxwh4L+p0vVbPY/wQB1Yndwu5LRuyJ2o InZasxo7UPXakD7xu5Wl9OxTAw0n0Z/B+Z43/dU1JocnR+WQi6t/YNpQY AgRAOJtigvEwp2NEuug9d5+2kDRGFKJEJl7jn8fd8jG1oTzwVskHvgfgz S+pIrTu+XbvfmMZF9G6sSETqaaEv98JylgrIepRL4yq4ym52Hu+vhVdRz 0rkZFTvQsdoXbIsV4taLIQvNy2FkygBmBTs/thrzlSuSrOz2bzGoE3o9r EIdz4GxIAdAY1VvG6lr4+d872Nk4cfUx3IQtYOsSkTBSzn+tpnHtJUo8D g==; X-IronPort-AV: E=McAfee;i="6600,9927,10832"; a="382661167" X-IronPort-AV: E=Sophos;i="6.02,145,1688454000"; d="scan'208";a="382661167" Received: from orsmga001.jf.intel.com ([10.7.209.18]) by orsmga103.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 13 Sep 2023 22:17:33 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10832"; a="779488760" X-IronPort-AV: E=Sophos;i="6.02,145,1688454000"; d="scan'208";a="779488760" Received: from unknown (HELO fred..) ([172.25.112.68]) by orsmga001.jf.intel.com with ESMTP; 13 Sep 2023 22:17:32 -0700 From: Xin Li <xin3.li@intel.com> To: linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-edac@vger.kernel.org, linux-hyperv@vger.kernel.org, kvm@vger.kernel.org, xen-devel@lists.xenproject.org Cc: tglx@linutronix.de, mingo@redhat.com, bp@alien8.de, dave.hansen@linux.intel.com, x86@kernel.org, hpa@zytor.com, luto@kernel.org, pbonzini@redhat.com, seanjc@google.com, peterz@infradead.org, jgross@suse.com, ravi.v.shankar@intel.com, mhiramat@kernel.org, andrew.cooper3@citrix.com, jiangshanlai@gmail.com Subject: [PATCH v10 08/38] x86/cpufeatures: Add the cpu feature bit for FRED Date: Wed, 13 Sep 2023 21:47:35 -0700 Message-Id: <20230914044805.301390-9-xin3.li@intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230914044805.301390-1-xin3.li@intel.com> References: <20230914044805.301390-1-xin3.li@intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: <linux-kernel.vger.kernel.org> X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (agentk.vger.email [0.0.0.0]); Wed, 13 Sep 2023 22:20:05 -0700 (PDT) X-Spam-Status: No, score=-0.9 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on agentk.vger.email X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1776993598212070101 X-GMAIL-MSGID: 1776993598212070101 |
Series |
x86: enable FRED for x86-64
|
|
Commit Message
Li, Xin3
Sept. 14, 2023, 4:47 a.m. UTC
From: "H. Peter Anvin (Intel)" <hpa@zytor.com> Any FRED CPU will always have the following features as its baseline: 1) LKGS, load attributes of the GS segment but the base address into the IA32_KERNEL_GS_BASE MSR instead of the GS segment’s descriptor cache. 2) WRMSRNS, non-serializing WRMSR for faster MSR writes. Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com> Tested-by: Shan Kang <shan.kang@intel.com> Signed-off-by: Xin Li <xin3.li@intel.com> --- arch/x86/include/asm/cpufeatures.h | 1 + arch/x86/kernel/cpu/cpuid-deps.c | 2 ++ tools/arch/x86/include/asm/cpufeatures.h | 1 + 3 files changed, 4 insertions(+)
Comments
On 14.09.23 06:47, Xin Li wrote: > From: "H. Peter Anvin (Intel)" <hpa@zytor.com> > > Any FRED CPU will always have the following features as its baseline: > 1) LKGS, load attributes of the GS segment but the base address into > the IA32_KERNEL_GS_BASE MSR instead of the GS segment’s descriptor > cache. > 2) WRMSRNS, non-serializing WRMSR for faster MSR writes. > > Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com> > Tested-by: Shan Kang <shan.kang@intel.com> > Signed-off-by: Xin Li <xin3.li@intel.com> In order to avoid having to add paravirt support for FRED I think xen_init_capabilities() should gain: + setup_clear_cpu_cap(X86_FEATURE_FRED); Juergen > --- > arch/x86/include/asm/cpufeatures.h | 1 + > arch/x86/kernel/cpu/cpuid-deps.c | 2 ++ > tools/arch/x86/include/asm/cpufeatures.h | 1 + > 3 files changed, 4 insertions(+) > > diff --git a/arch/x86/include/asm/cpufeatures.h b/arch/x86/include/asm/cpufeatures.h > index 330876d34b68..57ae93dc1e52 100644 > --- a/arch/x86/include/asm/cpufeatures.h > +++ b/arch/x86/include/asm/cpufeatures.h > @@ -321,6 +321,7 @@ > #define X86_FEATURE_FZRM (12*32+10) /* "" Fast zero-length REP MOVSB */ > #define X86_FEATURE_FSRS (12*32+11) /* "" Fast short REP STOSB */ > #define X86_FEATURE_FSRC (12*32+12) /* "" Fast short REP {CMPSB,SCASB} */ > +#define X86_FEATURE_FRED (12*32+17) /* Flexible Return and Event Delivery */ > #define X86_FEATURE_LKGS (12*32+18) /* "" Load "kernel" (userspace) GS */ > #define X86_FEATURE_WRMSRNS (12*32+19) /* "" Non-Serializing Write to Model Specific Register instruction */ > #define X86_FEATURE_AMX_FP16 (12*32+21) /* "" AMX fp16 Support */ > diff --git a/arch/x86/kernel/cpu/cpuid-deps.c b/arch/x86/kernel/cpu/cpuid-deps.c > index e462c1d3800a..b7174209d855 100644 > --- a/arch/x86/kernel/cpu/cpuid-deps.c > +++ b/arch/x86/kernel/cpu/cpuid-deps.c > @@ -82,6 +82,8 @@ static const struct cpuid_dep cpuid_deps[] = { > { X86_FEATURE_XFD, X86_FEATURE_XGETBV1 }, > { X86_FEATURE_AMX_TILE, X86_FEATURE_XFD }, > { X86_FEATURE_SHSTK, X86_FEATURE_XSAVES }, > + { X86_FEATURE_FRED, X86_FEATURE_LKGS }, > + { X86_FEATURE_FRED, X86_FEATURE_WRMSRNS }, > {} > }; > > diff --git a/tools/arch/x86/include/asm/cpufeatures.h b/tools/arch/x86/include/asm/cpufeatures.h > index 1b9d86ba5bc2..18bab7987d7f 100644 > --- a/tools/arch/x86/include/asm/cpufeatures.h > +++ b/tools/arch/x86/include/asm/cpufeatures.h > @@ -317,6 +317,7 @@ > #define X86_FEATURE_FZRM (12*32+10) /* "" Fast zero-length REP MOVSB */ > #define X86_FEATURE_FSRS (12*32+11) /* "" Fast short REP STOSB */ > #define X86_FEATURE_FSRC (12*32+12) /* "" Fast short REP {CMPSB,SCASB} */ > +#define X86_FEATURE_FRED (12*32+17) /* Flexible Return and Event Delivery */ > #define X86_FEATURE_LKGS (12*32+18) /* "" Load "kernel" (userspace) GS */ > #define X86_FEATURE_WRMSRNS (12*32+19) /* "" Non-Serializing Write to Model Specific Register instruction */ > #define X86_FEATURE_AMX_FP16 (12*32+21) /* "" AMX fp16 Support */
On 14.09.2023 08:03, Juergen Gross wrote: > On 14.09.23 06:47, Xin Li wrote: >> From: "H. Peter Anvin (Intel)" <hpa@zytor.com> >> >> Any FRED CPU will always have the following features as its baseline: >> 1) LKGS, load attributes of the GS segment but the base address into >> the IA32_KERNEL_GS_BASE MSR instead of the GS segment’s descriptor >> cache. >> 2) WRMSRNS, non-serializing WRMSR for faster MSR writes. >> >> Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com> >> Tested-by: Shan Kang <shan.kang@intel.com> >> Signed-off-by: Xin Li <xin3.li@intel.com> > > In order to avoid having to add paravirt support for FRED I think > xen_init_capabilities() should gain: > > + setup_clear_cpu_cap(X86_FEATURE_FRED); I don't view it as very likely that Xen would expose FRED to PV guests (Andrew?), at which point such a precaution may not be necessary. Jan
On 14/09/2023 7:09 am, Jan Beulich wrote: > On 14.09.2023 08:03, Juergen Gross wrote: >> On 14.09.23 06:47, Xin Li wrote: >>> From: "H. Peter Anvin (Intel)" <hpa@zytor.com> >>> >>> Any FRED CPU will always have the following features as its baseline: >>> 1) LKGS, load attributes of the GS segment but the base address into >>> the IA32_KERNEL_GS_BASE MSR instead of the GS segment’s descriptor >>> cache. >>> 2) WRMSRNS, non-serializing WRMSR for faster MSR writes. >>> >>> Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com> >>> Tested-by: Shan Kang <shan.kang@intel.com> >>> Signed-off-by: Xin Li <xin3.li@intel.com> >> In order to avoid having to add paravirt support for FRED I think >> xen_init_capabilities() should gain: >> >> + setup_clear_cpu_cap(X86_FEATURE_FRED); > I don't view it as very likely that Xen would expose FRED to PV guests > (Andrew?), at which point such a precaution may not be necessary. PV guests are never going to see FRED (or LKGS for that matter) because it advertises too much stuff which simply traps because the kernel is in CPL3. That said, the 64bit PV ABI is a whole lot closer to FRED than it is to IDT delivery. (Almost as if we decided 15 years ago that giving the PV guest kernel a good stack and GSbase was the right thing to do...) In some copious free time, I think we ought to provide a minorly-paravirt FRED to PV guests because there are still some improvements available as low hanging fruit. My plan was to have a PV hypervisor leaf advertising paravirt versions of hardware features, so a guest could see "I don't have architectural FRED, but I do have paravirt-FRED which is as similar as we can reasonably make it". The same goes for a whole bunch of other features. ~Andrew
On Thu, Sep 14 2023 at 14:15, andrew wrote: > PV guests are never going to see FRED (or LKGS for that matter) because > it advertises too much stuff which simply traps because the kernel is in > CPL3. > > That said, the 64bit PV ABI is a whole lot closer to FRED than it is to > IDT delivery. (Almost as if we decided 15 years ago that giving the PV > guest kernel a good stack and GSbase was the right thing to do...) No argument about that. > In some copious free time, I think we ought to provide a > minorly-paravirt FRED to PV guests because there are still some > improvements available as low hanging fruit. > > My plan was to have a PV hypervisor leaf advertising paravirt versions > of hardware features, so a guest could see "I don't have architectural > FRED, but I do have paravirt-FRED which is as similar as we can > reasonably make it". The same goes for a whole bunch of other features. *GROAN* I told you before that we want less paravirt nonsense and not more. I'm serious about that. XENPV CPL3 virtualization is a dead horse from a technical POV. No point in wasting brain cycles to enhance the zombie unless you can get rid of the existing PV nonsense, which you can't for obvious reasons. That said, we can debate this once the more fundamental issues of XEN[PV] have been addressed. I expect that to happen quite some time after I retired :) Thanks, tglx
On 15.09.23 03:07, Thomas Gleixner wrote: > On Thu, Sep 14 2023 at 14:15, andrew wrote: >> PV guests are never going to see FRED (or LKGS for that matter) because >> it advertises too much stuff which simply traps because the kernel is in >> CPL3. >> >> That said, the 64bit PV ABI is a whole lot closer to FRED than it is to >> IDT delivery. (Almost as if we decided 15 years ago that giving the PV >> guest kernel a good stack and GSbase was the right thing to do...) > > No argument about that. > >> In some copious free time, I think we ought to provide a >> minorly-paravirt FRED to PV guests because there are still some >> improvements available as low hanging fruit. >> >> My plan was to have a PV hypervisor leaf advertising paravirt versions >> of hardware features, so a guest could see "I don't have architectural >> FRED, but I do have paravirt-FRED which is as similar as we can >> reasonably make it". The same goes for a whole bunch of other features. > > *GROAN* > > I told you before that we want less paravirt nonsense and not more. I agree. We will still have to support the PV stuff for non-FRED hypervisors even with pv-FRED being available on new Xen. So adding pv-FRED would just add more PV interfaces without the ability to remove old stuff. Juergen
diff --git a/arch/x86/include/asm/cpufeatures.h b/arch/x86/include/asm/cpufeatures.h index 330876d34b68..57ae93dc1e52 100644 --- a/arch/x86/include/asm/cpufeatures.h +++ b/arch/x86/include/asm/cpufeatures.h @@ -321,6 +321,7 @@ #define X86_FEATURE_FZRM (12*32+10) /* "" Fast zero-length REP MOVSB */ #define X86_FEATURE_FSRS (12*32+11) /* "" Fast short REP STOSB */ #define X86_FEATURE_FSRC (12*32+12) /* "" Fast short REP {CMPSB,SCASB} */ +#define X86_FEATURE_FRED (12*32+17) /* Flexible Return and Event Delivery */ #define X86_FEATURE_LKGS (12*32+18) /* "" Load "kernel" (userspace) GS */ #define X86_FEATURE_WRMSRNS (12*32+19) /* "" Non-Serializing Write to Model Specific Register instruction */ #define X86_FEATURE_AMX_FP16 (12*32+21) /* "" AMX fp16 Support */ diff --git a/arch/x86/kernel/cpu/cpuid-deps.c b/arch/x86/kernel/cpu/cpuid-deps.c index e462c1d3800a..b7174209d855 100644 --- a/arch/x86/kernel/cpu/cpuid-deps.c +++ b/arch/x86/kernel/cpu/cpuid-deps.c @@ -82,6 +82,8 @@ static const struct cpuid_dep cpuid_deps[] = { { X86_FEATURE_XFD, X86_FEATURE_XGETBV1 }, { X86_FEATURE_AMX_TILE, X86_FEATURE_XFD }, { X86_FEATURE_SHSTK, X86_FEATURE_XSAVES }, + { X86_FEATURE_FRED, X86_FEATURE_LKGS }, + { X86_FEATURE_FRED, X86_FEATURE_WRMSRNS }, {} }; diff --git a/tools/arch/x86/include/asm/cpufeatures.h b/tools/arch/x86/include/asm/cpufeatures.h index 1b9d86ba5bc2..18bab7987d7f 100644 --- a/tools/arch/x86/include/asm/cpufeatures.h +++ b/tools/arch/x86/include/asm/cpufeatures.h @@ -317,6 +317,7 @@ #define X86_FEATURE_FZRM (12*32+10) /* "" Fast zero-length REP MOVSB */ #define X86_FEATURE_FSRS (12*32+11) /* "" Fast short REP STOSB */ #define X86_FEATURE_FSRC (12*32+12) /* "" Fast short REP {CMPSB,SCASB} */ +#define X86_FEATURE_FRED (12*32+17) /* Flexible Return and Event Delivery */ #define X86_FEATURE_LKGS (12*32+18) /* "" Load "kernel" (userspace) GS */ #define X86_FEATURE_WRMSRNS (12*32+19) /* "" Non-Serializing Write to Model Specific Register instruction */ #define X86_FEATURE_AMX_FP16 (12*32+21) /* "" AMX fp16 Support */