Message ID | 20230923094212.26520-36-xin3.li@intel.com |
---|---|
State | New |
Headers |
Return-Path: <linux-kernel-owner@vger.kernel.org> Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:cae8:0:b0:403:3b70:6f57 with SMTP id r8csp141273vqu; Sat, 23 Sep 2023 05:16:02 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFwWxTmq6YxT+L8C4+YQJ9LqXH1cDgjHVqezym27oIVo7Lya9XIU1lu6gWATWNZhMT9McYy X-Received: by 2002:a05:6a20:7d8b:b0:135:1af6:9a01 with SMTP id v11-20020a056a207d8b00b001351af69a01mr2247491pzj.8.1695471361648; Sat, 23 Sep 2023 05:16:01 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1695471361; cv=none; d=google.com; s=arc-20160816; b=N0hn6kt/QMqHrRYz6xCM8bZD7xId3f12MNpwIJUZmEwqVduFeiZZJWO4Xxs9LN6mkr UfFcRx6y+OjrPZ+TMAVAqTMipkh1kcUs1wIUXlEhKC2pTl7tYkh8HCY/8BDftcFf13Yq +S8DFl1rGkQRwTpN3plGj0nmSQ14CkOFVh0Tllg3XyEIwL+lJFtd8pzxMYGBdjsJrDeQ vK6kSx3YeQI+nLlwdKrcJnVPgxCODesl0iaqd6SkhH0Ob9pMi+xvnI+KURzslxv7IaeP 9gk0BtF5IakoPcFckxGtrl2Aje8EfH7sU+mJ6iryjGj6ssC4STo0r/ctOV5WWultUge2 x6Fg== 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=FvFD3QJscsfskvYYgTypOvwKQmxoIGlbOY3p5qV1no8=; fh=Tb1p8S3iOxe/kX/WSNC3xEJzSVgGJ5DaxSrKb+pzH+4=; b=piG7JvycpkRPXO4ed+asHnvlcC/PVP2Hx8MRE/CVClme+e11qR8uPHQ1mSPGMuN6ml Q0BTUPoFN8CxD/FL8hrcsAgqEm+EMKHNqnBVHp4qmLrgDqBxuzfoyBHaLRMiwlp+BiI/ 5npL+ryphcBA1Jzi9s9Ryq2DAeN0RBncaDy7z1GefgBKOdn7GLxQsyRNoqqVhIYYJ8f0 I+oIs4/sDZACMx2t15Ax5qOfEyktPexYH5W+BQ0iTRkTEwqcI/dGBhWeQphdoDPopVyS ea2yrjQSWdnXXfd3KDq/+sxP8bcmRRKSohYA8dwRaEMvbqO9EXTHMqi1GUhZY3Tzu/7n pRvw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=H0O7zSg5; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:7 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 snail.vger.email (snail.vger.email. [2620:137:e000::3:7]) by mx.google.com with ESMTPS id gl16-20020a17090b121000b0026b7d81b779si7803733pjb.152.2023.09.23.05.16.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 23 Sep 2023 05:16:01 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:7 as permitted sender) client-ip=2620:137:e000::3:7; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b=H0O7zSg5; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:7 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 snail.vger.email (Postfix) with ESMTP id 2872F8065018; Sat, 23 Sep 2023 03:15:31 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at snail.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231551AbjIWKP2 (ORCPT <rfc822;chrisfriedt@gmail.com> + 29 others); Sat, 23 Sep 2023 06:15:28 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60482 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231752AbjIWKPJ (ORCPT <rfc822;linux-kernel@vger.kernel.org>); Sat, 23 Sep 2023 06:15:09 -0400 Received: from mgamail.intel.com (mgamail.intel.com [134.134.136.100]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 63B4E10C3; Sat, 23 Sep 2023 03:12:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1695463920; x=1726999920; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=kgfFMDbJiu5q1BDcTkBjlFfGWj3DWiVrEUdh+fgWCfs=; b=H0O7zSg5PdybzX4KB8gp+ZBCg9RyACeRGF/B1Z6MCM+97CyvlLpShiun vFu3n6WliTaurPp4cj7GOn+vX40BbB8O8d9JLEjAT+K+zef81AszW+LM9 yMC7HL31mFFn7RvHZezYtiIZjNTQ497hmbOCjMgL3HW5bhwara4i7MUyZ 8qEmGAMqAUr2YHrqH/hzJt6R5wDKZqKQiN2sQ0HX8nio3nAM7tMSGRutN InPTDs1KOktSNSLDvnrbFVUE9K3Ole40Abk3rOcs9xPamNokZXa7kQwn5 NLqesP3aJruu2QA5Om5uOuyO/o993DRBPRcALi5g5+yzkdR8M2M3uhCJV w==; X-IronPort-AV: E=McAfee;i="6600,9927,10841"; a="447492497" X-IronPort-AV: E=Sophos;i="6.03,171,1694761200"; d="scan'208";a="447492497" Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by orsmga105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 23 Sep 2023 03:11:53 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10841"; a="813388236" X-IronPort-AV: E=Sophos;i="6.03,171,1694761200"; d="scan'208";a="813388236" Received: from unknown (HELO fred..) ([172.25.112.68]) by fmsmga008.fm.intel.com with ESMTP; 23 Sep 2023 03:11:53 -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, nik.borisov@suse.com Subject: [PATCH v11 35/37] x86/syscall: Split IDT syscall setup code into idt_syscall_init() Date: Sat, 23 Sep 2023 02:42:10 -0700 Message-Id: <20230923094212.26520-36-xin3.li@intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20230923094212.26520-1-xin3.li@intel.com> References: <20230923094212.26520-1-xin3.li@intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-4.4 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_MED, 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-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (snail.vger.email [0.0.0.0]); Sat, 23 Sep 2023 03:15:31 -0700 (PDT) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1777830578533584325 X-GMAIL-MSGID: 1777830578533584325 |
Series |
x86: enable FRED for x86-64
|
|
Commit Message
Li, Xin3
Sept. 23, 2023, 9:42 a.m. UTC
Because FRED uses the ring 3 FRED entrypoint for SYSCALL and SYSENTER and ERETU is the only legit instruction to return to ring 3, there is NO need to setup SYSCALL and SYSENTER MSRs for FRED, except the IA32_STAR MSR. Split IDT syscall setup code into idt_syscall_init() to make it easy to skip syscall setup code when FRED is enabled. Suggested-by: Thomas Gleixner <tglx@linutronix.de> Tested-by: Shan Kang <shan.kang@intel.com> Signed-off-by: Xin Li <xin3.li@intel.com> --- arch/x86/kernel/cpu/common.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-)
Comments
On September 23, 2023 2:42:10 AM PDT, Xin Li <xin3.li@intel.com> wrote: >Because FRED uses the ring 3 FRED entrypoint for SYSCALL and SYSENTER and >ERETU is the only legit instruction to return to ring 3, there is NO need >to setup SYSCALL and SYSENTER MSRs for FRED, except the IA32_STAR MSR. > >Split IDT syscall setup code into idt_syscall_init() to make it easy to >skip syscall setup code when FRED is enabled. > >Suggested-by: Thomas Gleixner <tglx@linutronix.de> >Tested-by: Shan Kang <shan.kang@intel.com> >Signed-off-by: Xin Li <xin3.li@intel.com> >--- > arch/x86/kernel/cpu/common.c | 13 ++++++++++--- > 1 file changed, 10 insertions(+), 3 deletions(-) > >diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c >index 20bbedbf6dcb..2ee4e7b597a3 100644 >--- a/arch/x86/kernel/cpu/common.c >+++ b/arch/x86/kernel/cpu/common.c >@@ -2071,10 +2071,8 @@ static void wrmsrl_cstar(unsigned long val) > wrmsrl(MSR_CSTAR, val); > } > >-/* May not be marked __init: used by software suspend */ >-void syscall_init(void) >+static inline void idt_syscall_init(void) > { >- wrmsr(MSR_STAR, 0, (__USER32_CS << 16) | __KERNEL_CS); > wrmsrl(MSR_LSTAR, (unsigned long)entry_SYSCALL_64); > > if (ia32_enabled()) { >@@ -2108,6 +2106,15 @@ void syscall_init(void) > X86_EFLAGS_AC|X86_EFLAGS_ID); > } > >+/* May not be marked __init: used by software suspend */ >+void syscall_init(void) >+{ >+ /* The default user and kernel segments */ >+ wrmsr(MSR_STAR, 0, (__USER32_CS << 16) | __KERNEL_CS); >+ >+ idt_syscall_init(); >+} >+ > #else /* CONFIG_X86_64 */ > > #ifdef CONFIG_STACKPROTECTOR Am I missing something, or is this patch a noop?
> >diff --git a/arch/x86/kernel/cpu/common.c > >b/arch/x86/kernel/cpu/common.c index 20bbedbf6dcb..2ee4e7b597a3 100644 > >--- a/arch/x86/kernel/cpu/common.c > >+++ b/arch/x86/kernel/cpu/common.c > >@@ -2071,10 +2071,8 @@ static void wrmsrl_cstar(unsigned long val) > > wrmsrl(MSR_CSTAR, val); > > } > > > >-/* May not be marked __init: used by software suspend */ -void > >syscall_init(void) > >+static inline void idt_syscall_init(void) > > { > >- wrmsr(MSR_STAR, 0, (__USER32_CS << 16) | __KERNEL_CS); > > wrmsrl(MSR_LSTAR, (unsigned long)entry_SYSCALL_64); > > > > if (ia32_enabled()) { > >@@ -2108,6 +2106,15 @@ void syscall_init(void) > > X86_EFLAGS_AC|X86_EFLAGS_ID); > > } > > > >+/* May not be marked __init: used by software suspend */ void > >+syscall_init(void) { > >+ /* The default user and kernel segments */ > >+ wrmsr(MSR_STAR, 0, (__USER32_CS << 16) | __KERNEL_CS); > >+ > >+ idt_syscall_init(); > >+} > >+ > > #else /* CONFIG_X86_64 */ > > > > #ifdef CONFIG_STACKPROTECTOR > > Am I missing something, or is this patch a noop? Yes, this is a noop, just a cleanup patch w/o functionality change.
On September 25, 2023 10:56:44 AM PDT, "Li, Xin3" <xin3.li@intel.com> wrote: >> >diff --git a/arch/x86/kernel/cpu/common.c >> >b/arch/x86/kernel/cpu/common.c index 20bbedbf6dcb..2ee4e7b597a3 100644 >> >--- a/arch/x86/kernel/cpu/common.c >> >+++ b/arch/x86/kernel/cpu/common.c >> >@@ -2071,10 +2071,8 @@ static void wrmsrl_cstar(unsigned long val) >> > wrmsrl(MSR_CSTAR, val); >> > } >> > >> >-/* May not be marked __init: used by software suspend */ -void >> >syscall_init(void) >> >+static inline void idt_syscall_init(void) >> > { >> >- wrmsr(MSR_STAR, 0, (__USER32_CS << 16) | __KERNEL_CS); >> > wrmsrl(MSR_LSTAR, (unsigned long)entry_SYSCALL_64); >> > >> > if (ia32_enabled()) { >> >@@ -2108,6 +2106,15 @@ void syscall_init(void) >> > X86_EFLAGS_AC|X86_EFLAGS_ID); >> > } >> > >> >+/* May not be marked __init: used by software suspend */ void >> >+syscall_init(void) { >> >+ /* The default user and kernel segments */ >> >+ wrmsr(MSR_STAR, 0, (__USER32_CS << 16) | __KERNEL_CS); >> >+ >> >+ idt_syscall_init(); >> >+} >> >+ >> > #else /* CONFIG_X86_64 */ >> > >> > #ifdef CONFIG_STACKPROTECTOR >> >> Am I missing something, or is this patch a noop? > >Yes, this is a noop, just a cleanup patch w/o functionality change. > > It just seems to be completely redundant. We can just drop it, no? If we aren't going to explicitly clobber the registers there is no harm in setting them up for IDT unconditionally.
> >Yes, this is a noop, just a cleanup patch w/o functionality change. > > > It just seems to be completely redundant. We can just drop it, no? If we aren't going > to explicitly clobber the registers there is no harm in setting them up for IDT > unconditionally. If no objection, I can make the change, i.e., unconditionally set these MSRs up for IDT.
On Mon, Sep 25 2023 at 09:07, H. Peter Anvin wrote: > On September 23, 2023 2:42:10 AM PDT, Xin Li <xin3.li@intel.com> wrote: >>+/* May not be marked __init: used by software suspend */ >>+void syscall_init(void) >>+{ >>+ /* The default user and kernel segments */ >>+ wrmsr(MSR_STAR, 0, (__USER32_CS << 16) | __KERNEL_CS); >>+ >>+ idt_syscall_init(); >>+} >>+ >> #else /* CONFIG_X86_64 */ >> >> #ifdef CONFIG_STACKPROTECTOR > > Am I missing something, or is this patch a noop? Yes. It's a noop at this point. Later on it gains a if (!fred) idt_syscall_init(); Sure we could do if (!fred) { write_msr(foo...); ... } too, but I prefer the separation. No strong opinion though. Thanks, tglx
diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c index 20bbedbf6dcb..2ee4e7b597a3 100644 --- a/arch/x86/kernel/cpu/common.c +++ b/arch/x86/kernel/cpu/common.c @@ -2071,10 +2071,8 @@ static void wrmsrl_cstar(unsigned long val) wrmsrl(MSR_CSTAR, val); } -/* May not be marked __init: used by software suspend */ -void syscall_init(void) +static inline void idt_syscall_init(void) { - wrmsr(MSR_STAR, 0, (__USER32_CS << 16) | __KERNEL_CS); wrmsrl(MSR_LSTAR, (unsigned long)entry_SYSCALL_64); if (ia32_enabled()) { @@ -2108,6 +2106,15 @@ void syscall_init(void) X86_EFLAGS_AC|X86_EFLAGS_ID); } +/* May not be marked __init: used by software suspend */ +void syscall_init(void) +{ + /* The default user and kernel segments */ + wrmsr(MSR_STAR, 0, (__USER32_CS << 16) | __KERNEL_CS); + + idt_syscall_init(); +} + #else /* CONFIG_X86_64 */ #ifdef CONFIG_STACKPROTECTOR