Message ID | 20221220063658.19271-24-xin3.li@intel.com |
---|---|
State | New |
Headers |
Return-Path: <linux-kernel-owner@vger.kernel.org> Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:e747:0:0:0:0:0 with SMTP id c7csp2813803wrn; Mon, 19 Dec 2022 23:04:29 -0800 (PST) X-Google-Smtp-Source: AA0mqf6yGwrmvop4zQSZ7VoIPwEirv+W4UlToUNV1CLd7fNqsErLEhoot+lbgC4ucVzbbU2fQklA X-Received: by 2002:a17:90a:194b:b0:220:bbe1:1fde with SMTP id 11-20020a17090a194b00b00220bbe11fdemr41647387pjh.14.1671519869449; Mon, 19 Dec 2022 23:04:29 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1671519869; cv=none; d=google.com; s=arc-20160816; b=wtIvqonWlrk+rPbPtcWGV9S0FQHewXtWX/SylLnyK1cb1zuCTaSgSILLOtqGWo5HSM K/AK67ndTUW3yGq7iZ0zz5oBpb4WOkc3mIZbrwtj68EGYfz+ngWKb5ZWmD9mwjAmF5Pl ER56FwAMGI218VR3o6dh6Mh0aiAxOUkXlmhsIRft4uhmAkZDQdjHjN1BgSqmjV25LFaL 967ggU+UvU56beeMrPivaIlByjap2UVEziqJ+1e0Nh9P32YAZHlHn/Cat5Yy3aGp+vn6 vSGyyh+SZUYJEyrBtrkapSCE3nLCeYmaUJD9oqDnaWrOyl68yEFUMn6qMCJY31Cdzw2S KjSQ== 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=vXx+dnf4WU5OQzHQ0raiGThXbCsYCRVIaQy5cbzbjys=; b=w+Y8SYTbhqdAenkRYSIqkLzl5Uhn+DQmJBJDyEoDmO/WDZ+yxNhU6b881XswjkCya9 SpKgkR0AP8Knm/oJVRVJbNtKO5ff3WfQQODP+X4R48ma5qIrwJKE8Qg3olS0Fh0LuXK2 EUTV76avlT72nREWewqTRDMSSOn2/hx3e45FWE0W/jojOQH5IalkdAHi1inzTOhnYlwc fAkWTT2fwlOfWagjKfem7r0ZSg7nAAMz/ZeKpj5AdPPsYWIxOQ2YyHZLCFC2azEI5qwY jW1baj408SYVt48lHrG6ItO6YqO+xcgYOs9W38KQjYfjwIzt+WomjajxY6RLTTi088RY Qmbw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=a6fcbdcH; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 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 (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id li4-20020a17090b48c400b0020ab20c54fesi17737325pjb.114.2022.12.19.23.04.16; Mon, 19 Dec 2022 23:04:29 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=a6fcbdcH; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233656AbiLTHDm (ORCPT <rfc822;abdi.embedded@gmail.com> + 99 others); Tue, 20 Dec 2022 02:03:42 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:53534 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233284AbiLTHBn (ORCPT <rfc822;linux-kernel@vger.kernel.org>); Tue, 20 Dec 2022 02:01:43 -0500 Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5BED616486; Mon, 19 Dec 2022 23:01:39 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1671519699; x=1703055699; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=TP8n9pSqR9d/xRUDBC0wSmLuk1j6QLJ8duTmvudCB0o=; b=a6fcbdcH8dy0QBrarpcl7TcMNcyf3uvfacmtICPy340s8gAWo+0Zpl75 ECNaPzGkh7O5TMF/e0KEvcYHzBiunO8Tp1Z1oLsHvZh/oZH5/5chnzgi9 bJ9xtCx+j+qEHaxuizUj1XD8BxBXWL/3/5rFMVK+R/ybDe8065Fj+/mRF uFw17yu3wkyZGt01HhXDUYS7TTWeY3PVbRN8/CFIJzt2WUvYSfyRbxzo2 c5PnMzT+X9AJsBFpziEPwTBftCI1gXW5xcsUzEwN7HyKOXIptwv3hGdny ug/67oIGW4/edNN1fg+h4dxGAYDYmIYCpPbYKmFj0bjsOxKCRItAJQFjL g==; X-IronPort-AV: E=McAfee;i="6500,9779,10566"; a="302972109" X-IronPort-AV: E=Sophos;i="5.96,258,1665471600"; d="scan'208";a="302972109" Received: from orsmga007.jf.intel.com ([10.7.209.58]) by orsmga106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 19 Dec 2022 23:01:17 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6500,9779,10566"; a="644326522" X-IronPort-AV: E=Sophos;i="5.96,258,1665471600"; d="scan'208";a="644326522" Received: from unknown (HELO fred..) ([172.25.112.68]) by orsmga007.jf.intel.com with ESMTP; 19 Dec 2022 23:01:17 -0800 From: Xin Li <xin3.li@intel.com> To: linux-kernel@vger.kernel.org, x86@kernel.org, kvm@vger.kernel.org Cc: tglx@linutronix.de, mingo@redhat.com, bp@alien8.de, dave.hansen@linux.intel.com, hpa@zytor.com, peterz@infradead.org, andrew.cooper3@citrix.com, seanjc@google.com, pbonzini@redhat.com, ravi.v.shankar@intel.com Subject: [RFC PATCH 23/32] x86/fred: update MSR_IA32_FRED_RSP0 during task switch Date: Mon, 19 Dec 2022 22:36:49 -0800 Message-Id: <20221220063658.19271-24-xin3.li@intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20221220063658.19271-1-xin3.li@intel.com> References: <20221220063658.19271-1-xin3.li@intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,SPF_HELO_NONE, SPF_NONE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: <linux-kernel.vger.kernel.org> X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1752715618085616059?= X-GMAIL-MSGID: =?utf-8?q?1752715618085616059?= |
Series |
x86: enable FRED for x86-64
|
|
Commit Message
Li, Xin3
Dec. 20, 2022, 6:36 a.m. UTC
From: "H. Peter Anvin (Intel)" <hpa@zytor.com> MSR_IA32_FRED_RSP0 is used during ring 3 event delivery, and needs to be updated to point to the top of next task stack during task switch. Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com> Signed-off-by: Xin Li <xin3.li@intel.com> --- arch/x86/include/asm/switch_to.h | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-)
Comments
On Mon, Dec 19, 2022 at 10:36:49PM -0800, Xin Li wrote: > From: "H. Peter Anvin (Intel)" <hpa@zytor.com> > > MSR_IA32_FRED_RSP0 is used during ring 3 event delivery, and needs to > be updated to point to the top of next task stack during task switch. > > Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com> > Signed-off-by: Xin Li <xin3.li@intel.com> > --- > arch/x86/include/asm/switch_to.h | 8 ++++++-- > 1 file changed, 6 insertions(+), 2 deletions(-) > > diff --git a/arch/x86/include/asm/switch_to.h b/arch/x86/include/asm/switch_to.h > index c08eb0fdd11f..c28170d4fbba 100644 > --- a/arch/x86/include/asm/switch_to.h > +++ b/arch/x86/include/asm/switch_to.h > @@ -71,9 +71,13 @@ static inline void update_task_stack(struct task_struct *task) > else > this_cpu_write(cpu_tss_rw.x86_tss.sp1, task->thread.sp0); > #else > - /* Xen PV enters the kernel on the thread stack. */ > - if (static_cpu_has(X86_FEATURE_XENPV)) > + if (cpu_feature_enabled(X86_FEATURE_FRED)) { > + wrmsrl(MSR_IA32_FRED_RSP0, > + task_top_of_stack(task) + TOP_OF_KERNEL_STACK_PADDING); Urgh, I'm assuming this is a *fast* MSR ? > + } else if (static_cpu_has(X86_FEATURE_XENPV)) { > + /* Xen PV enters the kernel on the thread stack. */ > load_sp0(task_top_of_stack(task)); > + } > #endif
> > --- a/arch/x86/include/asm/switch_to.h > > +++ b/arch/x86/include/asm/switch_to.h > > @@ -71,9 +71,13 @@ static inline void update_task_stack(struct task_struct > *task) > > else > > this_cpu_write(cpu_tss_rw.x86_tss.sp1, task->thread.sp0); #else > > - /* Xen PV enters the kernel on the thread stack. */ > > - if (static_cpu_has(X86_FEATURE_XENPV)) > > + if (cpu_feature_enabled(X86_FEATURE_FRED)) { > > + wrmsrl(MSR_IA32_FRED_RSP0, > > + task_top_of_stack(task) + TOP_OF_KERNEL_STACK_PADDING); > > Urgh, I'm assuming this is a *fast* MSR ? You're right, however that is another feature under development AFAIK. Xin
On December 20, 2022 1:48:44 AM PST, Peter Zijlstra <peterz@infradead.org> wrote: >On Mon, Dec 19, 2022 at 10:36:49PM -0800, Xin Li wrote: >> From: "H. Peter Anvin (Intel)" <hpa@zytor.com> >> >> MSR_IA32_FRED_RSP0 is used during ring 3 event delivery, and needs to >> be updated to point to the top of next task stack during task switch. >> >> Signed-off-by: H. Peter Anvin (Intel) <hpa@zytor.com> >> Signed-off-by: Xin Li <xin3.li@intel.com> >> --- >> arch/x86/include/asm/switch_to.h | 8 ++++++-- >> 1 file changed, 6 insertions(+), 2 deletions(-) >> >> diff --git a/arch/x86/include/asm/switch_to.h b/arch/x86/include/asm/switch_to.h >> index c08eb0fdd11f..c28170d4fbba 100644 >> --- a/arch/x86/include/asm/switch_to.h >> +++ b/arch/x86/include/asm/switch_to.h >> @@ -71,9 +71,13 @@ static inline void update_task_stack(struct task_struct *task) >> else >> this_cpu_write(cpu_tss_rw.x86_tss.sp1, task->thread.sp0); >> #else >> - /* Xen PV enters the kernel on the thread stack. */ >> - if (static_cpu_has(X86_FEATURE_XENPV)) >> + if (cpu_feature_enabled(X86_FEATURE_FRED)) { >> + wrmsrl(MSR_IA32_FRED_RSP0, >> + task_top_of_stack(task) + TOP_OF_KERNEL_STACK_PADDING); > >Urgh, I'm assuming this is a *fast* MSR ? > >> + } else if (static_cpu_has(X86_FEATURE_XENPV)) { >> + /* Xen PV enters the kernel on the thread stack. */ >> load_sp0(task_top_of_stack(task)); >> + } >> #endif > > The performance here will be addressed by WRMSRNS/WRMSRLIST. It is not included in the FRED patchset simply because there is a separate, parallel enabling effort going on for those instructions (which are useful in their own right, especially for perf, and may be available before FRED) and we don't want unnecessary collisions. Those instructions weren't public when I wrote the first version of this patchset, but they are now in the ISE documentation. Xin, could you add that note to the patch documentation?
> >> diff --git a/arch/x86/include/asm/switch_to.h > >> b/arch/x86/include/asm/switch_to.h > >> index c08eb0fdd11f..c28170d4fbba 100644 > >> --- a/arch/x86/include/asm/switch_to.h > >> +++ b/arch/x86/include/asm/switch_to.h > >> @@ -71,9 +71,13 @@ static inline void update_task_stack(struct task_struct > *task) > >> else > >> this_cpu_write(cpu_tss_rw.x86_tss.sp1, task->thread.sp0); #else > >> - /* Xen PV enters the kernel on the thread stack. */ > >> - if (static_cpu_has(X86_FEATURE_XENPV)) > >> + if (cpu_feature_enabled(X86_FEATURE_FRED)) { > >> + wrmsrl(MSR_IA32_FRED_RSP0, > >> + task_top_of_stack(task) + > TOP_OF_KERNEL_STACK_PADDING); > > > >Urgh, I'm assuming this is a *fast* MSR ? > > > >> + } else if (static_cpu_has(X86_FEATURE_XENPV)) { > >> + /* Xen PV enters the kernel on the thread stack. */ > >> load_sp0(task_top_of_stack(task)); > >> + } > >> #endif > > > > > > The performance here will be addressed by WRMSRNS/WRMSRLIST. It is not > included in the FRED patchset simply because there is a separate, parallel > enabling effort going on for those instructions (which are useful in their own > right, especially for perf, and may be available before FRED) and we don't want > unnecessary collisions. > > Those instructions weren't public when I wrote the first version of this patchset, > but they are now in the ISE documentation. > > Xin, could you add that note to the patch documentation? Will do!
diff --git a/arch/x86/include/asm/switch_to.h b/arch/x86/include/asm/switch_to.h index c08eb0fdd11f..c28170d4fbba 100644 --- a/arch/x86/include/asm/switch_to.h +++ b/arch/x86/include/asm/switch_to.h @@ -71,9 +71,13 @@ static inline void update_task_stack(struct task_struct *task) else this_cpu_write(cpu_tss_rw.x86_tss.sp1, task->thread.sp0); #else - /* Xen PV enters the kernel on the thread stack. */ - if (static_cpu_has(X86_FEATURE_XENPV)) + if (cpu_feature_enabled(X86_FEATURE_FRED)) { + wrmsrl(MSR_IA32_FRED_RSP0, + task_top_of_stack(task) + TOP_OF_KERNEL_STACK_PADDING); + } else if (static_cpu_has(X86_FEATURE_XENPV)) { + /* Xen PV enters the kernel on the thread stack. */ load_sp0(task_top_of_stack(task)); + } #endif }