From nobody Fri May 17 08:39:36 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass header.i=@intel.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=intel.com ARC-Seal: i=1; a=rsa-sha256; t=1696233242; cv=none; d=zohomail.com; s=zohoarc; b=Fc7tEbqlIVrwlyycZaxGZT/frkn0J3wT8iZb7RBbrbgwEj2mNkMGmDiUXu7rFLt3UMRz5Y+3FIlsgDjHIAr/YXVCoE06EpUprPeLE2fU5v0gQR7ApMXo5s6Rcm03S/yNg3J4A80jSqXFg55g505gP712G1z1t/HfYxKfnZ3YefE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1696233242; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=YF0Pe32hy5hsYoP0zlFC86dGxHEMeA+M6I8yMkd1qdM=; b=nbZHUi4TtKDO9iteufDyS/UUEwzxpAb+Y59QlzvJfGbQwLxshtnWFjWivl6JOfCvjcWKHcJnP7IuxHINiAYmcW7Cmora0o2jbIA+gKKwAyTM6gRgzPxWfmZ7ZAnOn4ExOxEH0UFve5z9wS65hZzpi8cgrBCTmT+cAmhL+XijQJs= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=@intel.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1696233242009559.8092126476532; Mon, 2 Oct 2023 00:54:02 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1qnDjf-0000Uc-E9; Mon, 02 Oct 2023 03:52:59 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1qnDje-0000U9-7K for qemu-devel@nongnu.org; Mon, 02 Oct 2023 03:52:58 -0400 Received: from mgamail.intel.com ([192.55.52.136]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1qnDjc-0007db-7K for qemu-devel@nongnu.org; Mon, 02 Oct 2023 03:52:57 -0400 Received: from orsmga002.jf.intel.com ([10.7.209.21]) by fmsmga106.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 Oct 2023 00:52:49 -0700 Received: from unknown (HELO fred..) ([172.25.112.68]) by orsmga002.jf.intel.com with ESMTP; 02 Oct 2023 00:52:48 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1696233176; x=1727769176; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=7jVIr0RX8uSTRVo1NlkCjLmEGPtzBBSPnVjrRmu8AHQ=; b=Kl7FdlZQRzc8UIhcJf6Qk5pcqOZ8PrAM2HK4JiriwL8vfmyVizD8vZAE 59H5oKO4Wli+kzMTkTb4Kf1V6+l3eYZP/FcCh/HU8AkIrIuhNhBteMPFH 0zl74enzRdMw6wDVrWDh7yM6SuA7ru6YYNTemtXYHijnzH4vm+HSPFVbH WYP6vfSMxRYv+SR4+jGUHxAR/h5gEoDkbEk17/guNmxcZxSIr21PZuOVg GFF18iBtVaIAggK+418f1S5FVs7+jhRSY8ccH8kICgvHfP/X4md6f3PpT qxVOl7w78qsbbsNJrPHOiR3yZTntGy2bef6W1FZ0dTOaXn/ahN7UxOa/1 A==; X-IronPort-AV: E=McAfee;i="6600,9927,10850"; a="361975570" X-IronPort-AV: E=Sophos;i="6.03,193,1694761200"; d="scan'208";a="361975570" X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10850"; a="750511623" X-IronPort-AV: E=Sophos;i="6.03,193,1694761200"; d="scan'208";a="750511623" From: Xin Li To: qemu-devel@nongnu.org Cc: kvm@vger.kernel.org, richard.henderson@linaro.org, pbonzini@redhat.com, eduardo@habkost.net, seanjc@google.com, chao.gao@intel.com, hpa@zytor.com, xiaoyao.li@intel.com, weijiang.yang@intel.com Subject: [PATCH v2 1/4] target/i386: add support for FRED in CPUID enumeration Date: Mon, 2 Oct 2023 00:23:10 -0700 Message-Id: <20231002072313.17603-2-xin3.li@intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20231002072313.17603-1-xin3.li@intel.com> References: <20231002072313.17603-1-xin3.li@intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=192.55.52.136; envelope-from=xin3.li@intel.com; helo=mgamail.intel.com X-Spam_score_int: -43 X-Spam_score: -4.4 X-Spam_bar: ---- X-Spam_report: (-4.4 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @intel.com) X-ZM-MESSAGEID: 1696233243071100002 Content-Type: text/plain; charset="utf-8" FRED, i.e., the Intel flexible return and event delivery architecture, defines simple new transitions that change privilege level (ring transitions). The new transitions defined by the FRED architecture are FRED event delivery and, for returning from events, two FRED return instructions. FRED event delivery can effect a transition from ring 3 to ring 0, but it is used also to deliver events incident to ring 0. One FRED instruction (ERETU) effects a return from ring 0 to ring 3, while the other (ERETS) returns while remaining in ring 0. Collectively, FRED event delivery and the FRED return instructions are FRED transitions. In addition to these transitions, the FRED architecture defines a new instruction (LKGS) for managing the state of the GS segment register. The LKGS instruction can be used by 64-bit operating systems that do not use the new FRED transitions. Search for the latest FRED spec in most search engines with this search pattern: site:intel.com FRED (flexible return and event delivery) specification The CPUID feature flag CPUID.(EAX=3D7,ECX=3D1):EAX[17] enumerates FRED, and the CPUID feature flag CPUID.(EAX=3D7,ECX=3D1):EAX[18] enumerates LKGS. Add CPUID definitions for FRED/LKGS, and expose them to KVM guests only. Because FRED relies on LKGS, add it to feature dependency map. Tested-by: Shan Kang Signed-off-by: Xin Li --- target/i386/cpu.c | 6 +++++- target/i386/cpu.h | 4 ++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/target/i386/cpu.c b/target/i386/cpu.c index ed72883bf3..59fdb2a01a 100644 --- a/target/i386/cpu.c +++ b/target/i386/cpu.c @@ -963,7 +963,7 @@ FeatureWordInfo feature_word_info[FEATURE_WORDS] =3D { "avx-vnni", "avx512-bf16", NULL, "cmpccxadd", NULL, NULL, "fzrm", "fsrs", "fsrc", NULL, NULL, NULL, - NULL, NULL, NULL, NULL, + NULL, "fred", "lkgs", NULL, NULL, "amx-fp16", NULL, "avx-ifma", NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, @@ -1550,6 +1550,10 @@ static FeatureDep feature_dependencies[] =3D { .from =3D { FEAT_VMX_SECONDARY_CTLS, VMX_SECONDARY_EXEC_ENABLE_US= ER_WAIT_PAUSE }, .to =3D { FEAT_7_0_ECX, CPUID_7_0_ECX_WAITPKG }, }, + { + .from =3D { FEAT_7_1_EAX, CPUID_7_1_EAX_LKGS }, + .to =3D { FEAT_7_1_EAX, CPUID_7_1_EAX_FRED }, + }, }; =20 typedef struct X86RegisterInfo32 { diff --git a/target/i386/cpu.h b/target/i386/cpu.h index d3f377d48a..e2946f1d6b 100644 --- a/target/i386/cpu.h +++ b/target/i386/cpu.h @@ -934,6 +934,10 @@ uint64_t x86_cpu_get_supported_feature_word(FeatureWor= d w, #define CPUID_7_1_EDX_AMX_COMPLEX (1U << 8) /* PREFETCHIT0/1 Instructions */ #define CPUID_7_1_EDX_PREFETCHITI (1U << 14) +/* Flexible return and event delivery (FRED) */ +#define CPUID_7_1_EAX_FRED (1U << 17) +/* Load into IA32_KERNEL_GS_BASE (LKGS) */ +#define CPUID_7_1_EAX_LKGS (1U << 18) =20 /* Do not exhibit MXCSR Configuration Dependent Timing (MCDT) behavior */ #define CPUID_7_2_EDX_MCDT_NO (1U << 5) --=20 2.34.1 From nobody Fri May 17 08:39:36 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass header.i=@intel.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=intel.com ARC-Seal: i=1; a=rsa-sha256; t=1696233242; cv=none; d=zohomail.com; s=zohoarc; b=V14eBHyJ8fJTsDIGXbQ3Id7axiV+zoRmEaDsnq0qHRqaMKDHFVLQrVVDFmwIIPlD7waqEDYTnQfvwb/VSNwVgPZiIjIWFeVt2X1tb3AfvT0OCeTczEKdw9hVsEwwiKNNe4OFGn65SUJladOw+TLlddyIYP65v+iiSMpRF0xRLY8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1696233242; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=Qea8pZPd+CjhXjXN6N6f8tv/Z78aUkkGnglDVVg3TxQ=; b=XwZev2wtu+Rwl4ctSDPf6IWK59qOV5+xXlO3MEzbXldswGoXScp0rqHpG6nryI96yQeNMXSJkM0y93CdWjlQWCIK1gxxuZGwz849bVxW2gtt9bgxnwe23AMleiOLF7Quq+2L4kV9NEUCIrkkCxXv6A9WCiCJOT+PvG+Zy+yKl0E= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=@intel.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1696233242979221.38142523288525; Mon, 2 Oct 2023 00:54:02 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1qnDjg-0000XE-Rx; Mon, 02 Oct 2023 03:53:00 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1qnDjf-0000UQ-6w for qemu-devel@nongnu.org; Mon, 02 Oct 2023 03:52:59 -0400 Received: from mgamail.intel.com ([192.55.52.136]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1qnDjd-0007eV-E0 for qemu-devel@nongnu.org; Mon, 02 Oct 2023 03:52:58 -0400 Received: from orsmga002.jf.intel.com ([10.7.209.21]) by fmsmga106.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 Oct 2023 00:52:49 -0700 Received: from unknown (HELO fred..) ([172.25.112.68]) by orsmga002.jf.intel.com with ESMTP; 02 Oct 2023 00:52:49 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1696233177; x=1727769177; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=4tKHv5OEKwpSrHxLYdaqKvaovIBLgPE2/VnUpwq6398=; b=B7JVZc3ErudwCdSqQ55Cew01e1s8Ai30ijnV7v6lMjp2OxlFaqx0e7lf mP2zhzWKNd/TZzySePFLSIeHOuLVNa+q2syH2I4NQTU2HlhdrBkX6Madb bUHihEv8mtpzA1noe/P5AXsWT3veQqd0I/l2UAL1TdX4b2575uPyCjOPU tvNM6l4zWlwNi5kkQKk+hDw3H6bb5bTdMbohwDeJF4/l7IdcANzJYYqCK Na4gGPYmbgNNBV1BHlm5KFH/By36m/314vne6SOApptMhzE0OO4V56F5W rMsrPwAj0bWKPNZmb2ANyMF3/yH5cBGEIbh6YXLs80fdHKZKp/DcPJs4E A==; X-IronPort-AV: E=McAfee;i="6600,9927,10850"; a="361975573" X-IronPort-AV: E=Sophos;i="6.03,193,1694761200"; d="scan'208";a="361975573" X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10850"; a="750511627" X-IronPort-AV: E=Sophos;i="6.03,193,1694761200"; d="scan'208";a="750511627" From: Xin Li To: qemu-devel@nongnu.org Cc: kvm@vger.kernel.org, richard.henderson@linaro.org, pbonzini@redhat.com, eduardo@habkost.net, seanjc@google.com, chao.gao@intel.com, hpa@zytor.com, xiaoyao.li@intel.com, weijiang.yang@intel.com Subject: [PATCH v2 2/4] target/i386: mark CR4.FRED not reserved Date: Mon, 2 Oct 2023 00:23:11 -0700 Message-Id: <20231002072313.17603-3-xin3.li@intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20231002072313.17603-1-xin3.li@intel.com> References: <20231002072313.17603-1-xin3.li@intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=192.55.52.136; envelope-from=xin3.li@intel.com; helo=mgamail.intel.com X-Spam_score_int: -43 X-Spam_score: -4.4 X-Spam_bar: ---- X-Spam_report: (-4.4 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @intel.com) X-ZM-MESSAGEID: 1696233243938100005 Content-Type: text/plain; charset="utf-8" The CR4.FRED bit, i.e., CR4[32], is no longer a reserved bit when FRED is exposed to guests, otherwise it is still a reserved bit. Tested-by: Shan Kang Signed-off-by: Xin Li --- target/i386/cpu.h | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/target/i386/cpu.h b/target/i386/cpu.h index e2946f1d6b..322547aa49 100644 --- a/target/i386/cpu.h +++ b/target/i386/cpu.h @@ -262,6 +262,12 @@ typedef enum X86Seg { #define CR4_PKE_MASK (1U << 22) #define CR4_PKS_MASK (1U << 24) =20 +#ifdef TARGET_X86_64 +#define CR4_FRED_MASK (1ULL << 32) +#else +#define CR4_FRED_MASK 0 +#endif + #define CR4_RESERVED_MASK \ (~(target_ulong)(CR4_VME_MASK | CR4_PVI_MASK | CR4_TSD_MASK \ | CR4_DE_MASK | CR4_PSE_MASK | CR4_PAE_MASK \ @@ -269,7 +275,8 @@ typedef enum X86Seg { | CR4_OSFXSR_MASK | CR4_OSXMMEXCPT_MASK | CR4_UMIP_MASK \ | CR4_LA57_MASK \ | CR4_FSGSBASE_MASK | CR4_PCIDE_MASK | CR4_OSXSAVE_MASK \ - | CR4_SMEP_MASK | CR4_SMAP_MASK | CR4_PKE_MASK | CR4_PKS_M= ASK)) + | CR4_SMEP_MASK | CR4_SMAP_MASK | CR4_PKE_MASK | CR4_PKS_M= ASK \ + | CR4_FRED_MASK)) =20 #define DR6_BD (1 << 13) #define DR6_BS (1 << 14) @@ -2484,6 +2491,9 @@ static inline uint64_t cr4_reserved_bits(CPUX86State = *env) if (!(env->features[FEAT_7_0_ECX] & CPUID_7_0_ECX_PKS)) { reserved_bits |=3D CR4_PKS_MASK; } + if (!(env->features[FEAT_7_1_EAX] & CPUID_7_1_EAX_FRED)) { + reserved_bits |=3D CR4_FRED_MASK; + } return reserved_bits; } =20 --=20 2.34.1 From nobody Fri May 17 08:39:36 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass header.i=@intel.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=intel.com ARC-Seal: i=1; a=rsa-sha256; t=1696233251; cv=none; d=zohomail.com; s=zohoarc; b=Tj0VOrq8CbeUKZRy3/5WL0V8nYiH8DuYsqMnJoxh06czDWLzASOn987Vz9BL+MqMzspj1Rr9AzkjguCna123ctQPY+mDjbTnoCTGrTyQbnMfUeFTeCAOliX3BQYIKF5q+7+76zZvE8UynO28mnj2HdHq5qugWBFZUBQgcMgxT5k= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1696233251; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=3K8BOT/38UXgraNRRk41nblPcAWdpYF+jDjYqCI+bQ0=; b=LMInxp9ntGzKb/J2AuWSF0EALsJg6tpn3kxcVT5FVXi5tILn3p0XnWVbafczlyiWfqJnUEV8DSea063ipYXbdS78HiwFgqXQ/aJy+uVrfPdScKP3udZSv7u4jEyB49xrZx2yIB8wGRtyYNAwpvLnmGV1M2PrU2/BAXjOE9ccjkQ= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=@intel.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 169623325151467.53592528382751; Mon, 2 Oct 2023 00:54:11 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1qnDji-0000Y3-30; Mon, 02 Oct 2023 03:53:02 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1qnDjg-0000W0-7z for qemu-devel@nongnu.org; Mon, 02 Oct 2023 03:53:00 -0400 Received: from mgamail.intel.com ([192.55.52.136]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1qnDje-0007db-Iu for qemu-devel@nongnu.org; Mon, 02 Oct 2023 03:52:59 -0400 Received: from orsmga002.jf.intel.com ([10.7.209.21]) by fmsmga106.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 Oct 2023 00:52:50 -0700 Received: from unknown (HELO fred..) ([172.25.112.68]) by orsmga002.jf.intel.com with ESMTP; 02 Oct 2023 00:52:49 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1696233178; x=1727769178; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=Ne8O60ozJokQr2WgOKMMWCA/CTrneWREah0s6x/I350=; b=BGIE0t1Q/E3tW2ZwPupZhXj3S3kdgTVbDNlBlENxDjPEYxNbhdBP9fMm QvzB1MeLQcorBMMGvJ+lXZy+ch7e58EtCPrPBi4moaARHMB8a4AGOmtFe LubUmRsy5g6VfFOyl4leeFYVHDuO4JdysBLZ1m1cBe67COq0n9aTA7EWo X0XRtrpRThMTpmRlCwHxqwt1dP7AimzFwgvkPt/9aqrvWlldiNacv6Fxv 8RcK+nMbXMZTR7cM+0SE6hznG2yMX8tJpKA4ccRezLOj0t2OhdlKbunZK W4pFiXYPzhgGUaopnaUK9VsC84j1reJbVgtpXErha2BLVniFRdKF+Ovf4 g==; X-IronPort-AV: E=McAfee;i="6600,9927,10850"; a="361975581" X-IronPort-AV: E=Sophos;i="6.03,193,1694761200"; d="scan'208";a="361975581" X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10850"; a="750511630" X-IronPort-AV: E=Sophos;i="6.03,193,1694761200"; d="scan'208";a="750511630" From: Xin Li To: qemu-devel@nongnu.org Cc: kvm@vger.kernel.org, richard.henderson@linaro.org, pbonzini@redhat.com, eduardo@habkost.net, seanjc@google.com, chao.gao@intel.com, hpa@zytor.com, xiaoyao.li@intel.com, weijiang.yang@intel.com Subject: [PATCH v2 3/4] target/i386: enumerate VMX nested-exception support Date: Mon, 2 Oct 2023 00:23:12 -0700 Message-Id: <20231002072313.17603-4-xin3.li@intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20231002072313.17603-1-xin3.li@intel.com> References: <20231002072313.17603-1-xin3.li@intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=192.55.52.136; envelope-from=xin3.li@intel.com; helo=mgamail.intel.com X-Spam_score_int: -43 X-Spam_score: -4.4 X-Spam_bar: ---- X-Spam_report: (-4.4 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @intel.com) X-ZM-MESSAGEID: 1696233252830100003 Content-Type: text/plain; charset="utf-8" Allow VMX nested-exception support to be exposed in KVM guests, thus nested KVM guests can enumerate it. Tested-by: Shan Kang Signed-off-by: Xin Li --- scripts/kvm/vmxcap | 1 + target/i386/cpu.c | 1 + target/i386/cpu.h | 1 + 3 files changed, 3 insertions(+) diff --git a/scripts/kvm/vmxcap b/scripts/kvm/vmxcap index 3fb4d5b342..97097518a8 100755 --- a/scripts/kvm/vmxcap +++ b/scripts/kvm/vmxcap @@ -116,6 +116,7 @@ controls =3D [ 54: 'INS/OUTS instruction information', 55: 'IA32_VMX_TRUE_*_CTLS support', 56: 'Skip checks on event error code', + 58: 'VMX nested exception support', }, msr =3D MSR_IA32_VMX_BASIC, ), diff --git a/target/i386/cpu.c b/target/i386/cpu.c index 59fdb2a01a..da0876842f 100644 --- a/target/i386/cpu.c +++ b/target/i386/cpu.c @@ -1341,6 +1341,7 @@ FeatureWordInfo feature_word_info[FEATURE_WORDS] =3D { [54] =3D "vmx-ins-outs", [55] =3D "vmx-true-ctls", [56] =3D "vmx-any-errcode", + [58] =3D "vmx-nested-exception", }, .msr =3D { .index =3D MSR_IA32_VMX_BASIC, diff --git a/target/i386/cpu.h b/target/i386/cpu.h index 322547aa49..f4f0c57574 100644 --- a/target/i386/cpu.h +++ b/target/i386/cpu.h @@ -1051,6 +1051,7 @@ uint64_t x86_cpu_get_supported_feature_word(FeatureWo= rd w, #define MSR_VMX_BASIC_INS_OUTS (1ULL << 54) #define MSR_VMX_BASIC_TRUE_CTLS (1ULL << 55) #define MSR_VMX_BASIC_ANY_ERRCODE (1ULL << 56) +#define MSR_VMX_BASIC_NESTED_EXCEPTION (1ULL << 58) =20 #define MSR_VMX_MISC_PREEMPTION_TIMER_SHIFT_MASK 0x1Full #define MSR_VMX_MISC_STORE_LMA (1ULL << 5) --=20 2.34.1 From nobody Fri May 17 08:39:36 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass header.i=@intel.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=intel.com ARC-Seal: i=1; a=rsa-sha256; t=1696233261; cv=none; d=zohomail.com; s=zohoarc; b=L61lCXy27UjxXX5HZoliYPxtHi11Ip+O6AN6XcgxUM/D29VEw1Yvi06BhZIiT+lUjmV/F0PFbLGdV3MDdV6m5BSoXxNxAoGYCvKM6qB2Xao/jaJ41X12AFLQHOGoDA4wPSIMZUcOrE9hnw+hVgsee/62FRcjTWnosDJ/hNMi++Y= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1696233261; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=42Wi0rUIbk0nJso2v3RoCXa0yTpfO2S1Gj2mANm8vRo=; b=kgEnlprHZtJWDYOkvpdV+64Mqc8/5mhbY1Q/kcY46OREi8oNUz6XAjZiAcfDOIS+I2nSUZHR4jpuJ854w8K7dPbDR4RRFM0DyjcfWy+KGZVOED+m7zUzn7C3o/uA7uHI+LIZ+mX2VX4LjxgmXwtU4w+ya/JASsRbamhJuUsYouM= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=@intel.com; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1696233261372879.0112931899648; Mon, 2 Oct 2023 00:54:21 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1qnDji-0000Y9-LA; Mon, 02 Oct 2023 03:53:02 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1qnDjh-0000XX-4U for qemu-devel@nongnu.org; Mon, 02 Oct 2023 03:53:01 -0400 Received: from mgamail.intel.com ([192.55.52.136]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1qnDjf-0007fN-5V for qemu-devel@nongnu.org; Mon, 02 Oct 2023 03:53:00 -0400 Received: from orsmga002.jf.intel.com ([10.7.209.21]) by fmsmga106.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 Oct 2023 00:52:50 -0700 Received: from unknown (HELO fred..) ([172.25.112.68]) by orsmga002.jf.intel.com with ESMTP; 02 Oct 2023 00:52:50 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1696233179; x=1727769179; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=kw/yjSYXiI7ySaJO66BP5TFzDlJrtu/QbJsPliJ4Iec=; b=K2ryY995kHzceFeenCv9GnbonvUmvuulnJFz1irlBYXFPReG3blpW11A Hr/BkdNtcUj2y7Zkpv5lJDHFlWalJ5IoYljIVC7m6q+Q3DYbKWM1qFPy4 EmU7Ses1G46JzSoYQTa4RTmRUf0wmn8hRwlyM869pv8W8sUrQRm6rA1+O m+K+PSR5VUsUgGJyyWsFjU0f4qoish4VPtXbzO2J4IT54YM+JygqWnays uq6vmCdHlls+etnPFazcQ0RuM6RcjEMFDMxtJWLpZ07+m2m4G2KMrXCqE IFa216E3P8iObBwihxQL74oo573NRNG6lGqzxiAAJrK11494AJOM2ubt4 Q==; X-IronPort-AV: E=McAfee;i="6600,9927,10850"; a="361975587" X-IronPort-AV: E=Sophos;i="6.03,193,1694761200"; d="scan'208";a="361975587" X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10850"; a="750511633" X-IronPort-AV: E=Sophos;i="6.03,193,1694761200"; d="scan'208";a="750511633" From: Xin Li To: qemu-devel@nongnu.org Cc: kvm@vger.kernel.org, richard.henderson@linaro.org, pbonzini@redhat.com, eduardo@habkost.net, seanjc@google.com, chao.gao@intel.com, hpa@zytor.com, xiaoyao.li@intel.com, weijiang.yang@intel.com Subject: [PATCH v2 4/4] target/i386: Add get/set/migrate support for FRED MSRs Date: Mon, 2 Oct 2023 00:23:13 -0700 Message-Id: <20231002072313.17603-5-xin3.li@intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20231002072313.17603-1-xin3.li@intel.com> References: <20231002072313.17603-1-xin3.li@intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=192.55.52.136; envelope-from=xin3.li@intel.com; helo=mgamail.intel.com X-Spam_score_int: -43 X-Spam_score: -4.4 X-Spam_bar: ---- X-Spam_report: (-4.4 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @intel.com) X-ZM-MESSAGEID: 1696233263081100001 Content-Type: text/plain; charset="utf-8" FRED CPU states are managed in 9 new FRED MSRs, in addtion to a few existing CPU registers and MSRs, e.g., CR4.FRED and MSR_IA32_PL0_SSP. Save/restore/migrate FRED MSRs if FRED is exposed to the guest. Tested-by: Shan Kang Signed-off-by: Xin Li --- target/i386/cpu.h | 26 +++++++++++++++++++++ target/i386/kvm/kvm.c | 54 +++++++++++++++++++++++++++++++++++++++++++ target/i386/machine.c | 29 +++++++++++++++++++++++ 3 files changed, 109 insertions(+) diff --git a/target/i386/cpu.h b/target/i386/cpu.h index f4f0c57574..48e713ecc1 100644 --- a/target/i386/cpu.h +++ b/target/i386/cpu.h @@ -529,6 +529,20 @@ typedef enum X86Seg { #define MSR_IA32_XFD 0x000001c4 #define MSR_IA32_XFD_ERR 0x000001c5 =20 +#define MSR_IA32_PL0_SSP 0x000006a4 /* Stack level 0 = shadow stack pointer in ring 0 */ + +/* FRED MSRs */ +#define MSR_IA32_FRED_RSP0 0x000001cc /* Stack level 0 = regular stack pointer */ +#define MSR_IA32_FRED_RSP1 0x000001cd /* Stack level 1 = regular stack pointer */ +#define MSR_IA32_FRED_RSP2 0x000001ce /* Stack level 2 = regular stack pointer */ +#define MSR_IA32_FRED_RSP3 0x000001cf /* Stack level 3 = regular stack pointer */ +#define MSR_IA32_FRED_STKLVLS 0x000001d0 /* FRED exception= stack levels */ +#define MSR_IA32_FRED_SSP0 MSR_IA32_PL0_SSP /* Stack level 0 = shadow stack pointer in ring 0 */ +#define MSR_IA32_FRED_SSP1 0x000001d1 /* Stack level 1 = shadow stack pointer in ring 0 */ +#define MSR_IA32_FRED_SSP2 0x000001d2 /* Stack level 2 = shadow stack pointer in ring 0 */ +#define MSR_IA32_FRED_SSP3 0x000001d3 /* Stack level 3 = shadow stack pointer in ring 0 */ +#define MSR_IA32_FRED_CONFIG 0x000001d4 /* FRED Entrypoin= t and interrupt stack level */ + #define MSR_IA32_BNDCFGS 0x00000d90 #define MSR_IA32_XSS 0x00000da0 #define MSR_IA32_UMWAIT_CONTROL 0xe1 @@ -1684,6 +1698,18 @@ typedef struct CPUArchState { target_ulong cstar; target_ulong fmask; target_ulong kernelgsbase; + + /* FRED MSRs */ + uint64_t fred_rsp0; + uint64_t fred_rsp1; + uint64_t fred_rsp2; + uint64_t fred_rsp3; + uint64_t fred_stklvls; + uint64_t fred_ssp0; + uint64_t fred_ssp1; + uint64_t fred_ssp2; + uint64_t fred_ssp3; + uint64_t fred_config; #endif =20 uint64_t tsc_adjust; diff --git a/target/i386/kvm/kvm.c b/target/i386/kvm/kvm.c index f6c7f7e268..6ee3369a93 100644 --- a/target/i386/kvm/kvm.c +++ b/target/i386/kvm/kvm.c @@ -3399,6 +3399,18 @@ static int kvm_put_msrs(X86CPU *cpu, int level) kvm_msr_entry_add(cpu, MSR_KERNELGSBASE, env->kernelgsbase); kvm_msr_entry_add(cpu, MSR_FMASK, env->fmask); kvm_msr_entry_add(cpu, MSR_LSTAR, env->lstar); + if (env->features[FEAT_7_1_EAX] & CPUID_7_1_EAX_FRED) { + kvm_msr_entry_add(cpu, MSR_IA32_FRED_RSP0, env->fred_rsp0); + kvm_msr_entry_add(cpu, MSR_IA32_FRED_RSP1, env->fred_rsp1); + kvm_msr_entry_add(cpu, MSR_IA32_FRED_RSP2, env->fred_rsp2); + kvm_msr_entry_add(cpu, MSR_IA32_FRED_RSP3, env->fred_rsp3); + kvm_msr_entry_add(cpu, MSR_IA32_FRED_STKLVLS, env->fred_stklvl= s); + kvm_msr_entry_add(cpu, MSR_IA32_FRED_SSP0, env->fred_ssp0); + kvm_msr_entry_add(cpu, MSR_IA32_FRED_SSP1, env->fred_ssp1); + kvm_msr_entry_add(cpu, MSR_IA32_FRED_SSP2, env->fred_ssp2); + kvm_msr_entry_add(cpu, MSR_IA32_FRED_SSP3, env->fred_ssp3); + kvm_msr_entry_add(cpu, MSR_IA32_FRED_CONFIG, env->fred_config); + } } #endif =20 @@ -3897,6 +3909,18 @@ static int kvm_get_msrs(X86CPU *cpu) kvm_msr_entry_add(cpu, MSR_KERNELGSBASE, 0); kvm_msr_entry_add(cpu, MSR_FMASK, 0); kvm_msr_entry_add(cpu, MSR_LSTAR, 0); + if (env->features[FEAT_7_1_EAX] & CPUID_7_1_EAX_FRED) { + kvm_msr_entry_add(cpu, MSR_IA32_FRED_RSP0, 0); + kvm_msr_entry_add(cpu, MSR_IA32_FRED_RSP1, 0); + kvm_msr_entry_add(cpu, MSR_IA32_FRED_RSP2, 0); + kvm_msr_entry_add(cpu, MSR_IA32_FRED_RSP3, 0); + kvm_msr_entry_add(cpu, MSR_IA32_FRED_STKLVLS, 0); + kvm_msr_entry_add(cpu, MSR_IA32_FRED_SSP0, 0); + kvm_msr_entry_add(cpu, MSR_IA32_FRED_SSP1, 0); + kvm_msr_entry_add(cpu, MSR_IA32_FRED_SSP2, 0); + kvm_msr_entry_add(cpu, MSR_IA32_FRED_SSP3, 0); + kvm_msr_entry_add(cpu, MSR_IA32_FRED_CONFIG, 0); + } } #endif kvm_msr_entry_add(cpu, MSR_KVM_SYSTEM_TIME, 0); @@ -4118,6 +4142,36 @@ static int kvm_get_msrs(X86CPU *cpu) case MSR_LSTAR: env->lstar =3D msrs[i].data; break; + case MSR_IA32_FRED_RSP0: + env->fred_rsp0 =3D msrs[i].data; + break; + case MSR_IA32_FRED_RSP1: + env->fred_rsp1 =3D msrs[i].data; + break; + case MSR_IA32_FRED_RSP2: + env->fred_rsp2 =3D msrs[i].data; + break; + case MSR_IA32_FRED_RSP3: + env->fred_rsp3 =3D msrs[i].data; + break; + case MSR_IA32_FRED_STKLVLS: + env->fred_stklvls =3D msrs[i].data; + break; + case MSR_IA32_FRED_SSP0: + env->fred_ssp0 =3D msrs[i].data; + break; + case MSR_IA32_FRED_SSP1: + env->fred_ssp1 =3D msrs[i].data; + break; + case MSR_IA32_FRED_SSP2: + env->fred_ssp2 =3D msrs[i].data; + break; + case MSR_IA32_FRED_SSP3: + env->fred_ssp3 =3D msrs[i].data; + break; + case MSR_IA32_FRED_CONFIG: + env->fred_config =3D msrs[i].data; + break; #endif case MSR_IA32_TSC: env->tsc =3D msrs[i].data; diff --git a/target/i386/machine.c b/target/i386/machine.c index a1041ef828..695e402246 100644 --- a/target/i386/machine.c +++ b/target/i386/machine.c @@ -1544,6 +1544,34 @@ static const VMStateDescription vmstate_msr_xfd =3D { }; =20 #ifdef TARGET_X86_64 +static bool intel_fred_msrs_needed(void *opaque) +{ + X86CPU *cpu =3D opaque; + CPUX86State *env =3D &cpu->env; + + return !!(env->features[FEAT_7_1_EAX] & CPUID_7_1_EAX_FRED); +} + +static const VMStateDescription vmstate_msr_fred =3D { + .name =3D "cpu/fred", + .version_id =3D 1, + .minimum_version_id =3D 1, + .needed =3D intel_fred_msrs_needed, + .fields =3D (VMStateField[]) { + VMSTATE_UINT64(env.fred_rsp0, X86CPU), + VMSTATE_UINT64(env.fred_rsp1, X86CPU), + VMSTATE_UINT64(env.fred_rsp2, X86CPU), + VMSTATE_UINT64(env.fred_rsp3, X86CPU), + VMSTATE_UINT64(env.fred_stklvls, X86CPU), + VMSTATE_UINT64(env.fred_ssp0, X86CPU), + VMSTATE_UINT64(env.fred_ssp1, X86CPU), + VMSTATE_UINT64(env.fred_ssp2, X86CPU), + VMSTATE_UINT64(env.fred_ssp3, X86CPU), + VMSTATE_UINT64(env.fred_config, X86CPU), + VMSTATE_END_OF_LIST() + } + }; + static bool amx_xtile_needed(void *opaque) { X86CPU *cpu =3D opaque; @@ -1747,6 +1775,7 @@ const VMStateDescription vmstate_x86_cpu =3D { &vmstate_pdptrs, &vmstate_msr_xfd, #ifdef TARGET_X86_64 + &vmstate_msr_fred, &vmstate_amx_xtile, #endif &vmstate_arch_lbr, --=20 2.34.1