From nobody Sun May 19 09:08:43 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass(p=reject dis=none) header.from=citrix.com ARC-Seal: i=1; a=rsa-sha256; t=1683140346; cv=none; d=zohomail.com; s=zohoarc; b=jiNDEY6N/LJdZWYKCcYsoFQZStxT/LfCkrZ2XWzZGj82JlJYOdGzzLQE+zBdIYrQxPHPcyLK2Arbx/HrhZns2FEqHswm0+3t7zx3q7/vkkfwvQAucs7MjE/U6uyquUfowhzBozYWQ3Twn4cnkLC/b5rfA8WEwjVjLQyoYAzmuTk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1683140346; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Sender:Subject:To; bh=c1z9qeD+m1vwoFFxDlVqReiLROdW0szlJkqjgC7k6ec=; b=baV+rOmI6OgDDQ9y8vUJ/zvDv7TUhiZhPA2B4yjJSCFEBsHnnmLCIdKQNQziyfZANJDhFgcSb34/GzPs8pdyTd7lH0UHPnSm+coXx1dNrJaRmgRy1R1uXs7N17nEtOTGyALXr3f5kJk97qxvHBmHh9hjGVS4iy24UDk3EHXWYT0= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1683140346364547.410929879273; Wed, 3 May 2023 11:59:06 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.529455.823884 (Exim 4.92) (envelope-from ) id 1puHgL-0001X2-Ck; Wed, 03 May 2023 18:58:29 +0000 Received: by outflank-mailman (output) from mailman id 529455.823884; Wed, 03 May 2023 18:58:29 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1puHgL-0001Wv-9i; Wed, 03 May 2023 18:58:29 +0000 Received: by outflank-mailman (input) for mailman id 529455; Wed, 03 May 2023 18:58:28 +0000 Received: from se1-gles-sth1-in.inumbo.com ([159.253.27.254] helo=se1-gles-sth1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1puHgJ-0001Wp-Sn for xen-devel@lists.xenproject.org; Wed, 03 May 2023 18:58:28 +0000 Received: from esa4.hc3370-68.iphmx.com (esa4.hc3370-68.iphmx.com [216.71.155.144]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 7a7728d0-e9e4-11ed-b226-6b7b168915f2; Wed, 03 May 2023 20:58:25 +0200 (CEST) X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 7a7728d0-e9e4-11ed-b226-6b7b168915f2 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=citrix.com; s=securemail; t=1683140305; h=from:to:cc:subject:date:message-id:mime-version: content-transfer-encoding; bh=TZ0uzHXRe5NFf4mFFjml7I3UzuX0lFxn2xNYPMCq6gY=; b=a2QIiL5KdIyMuroyjjK4+MXSGFEJrKCyxdl/o1kLvWMN8s4I4ueCjYP4 hCIxpASNXch9cBuWjPq7TbUVUQm3jqQuT/IR3X2LtedyIa8D522MjNqlc poCq2jo6+9VHIpr75H0oSgbw+btwuw0iL5hx6j87QVvK8IGFpIjc7hrUu E=; Authentication-Results: esa4.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none X-SBRS: 4.0 X-MesageID: 110204666 X-Ironport-Server: esa4.hc3370-68.iphmx.com X-Remote-IP: 162.221.156.123 X-Policy: $RELAYED IronPort-Data: A9a23:8svK163+VERbbQF1EPbD5atxkn2cJEfYwER7XKvMYLTBsI5bpzMFx mAbWDvTaPePazb1L951OYS2pk8Gvp6Hx9I3Hlc4pC1hF35El5HIVI+TRqvS04F+DeWYFR46s J9OAjXkBJppJpMJjk71atANlVEliefTAOK6ULWeUsxIbVcMYD87jh5+kPIOjIdtgNyoayuAo tq3qMDEULOf82cc3lk8tuTS+XuDgNyo4GlD5gFmPqgQ1LPjvyJ94Kw3dPnZw0TQGuG4LsbiL 87fwbew+H/u/htFIrtJRZ6iLyXm6paLVeS/oiI+t5qK23CulQRrukoPD9IOaF8/ttm8t4sZJ OOhF3CHYVxB0qXkwIzxWvTDes10FfUuFLTveRBTvSEPpqFvnrSFL/hGVSkL0YMkFulfDGhBx P40JyI0X1OGl9Ob7L/mb+J+mZF2RCXrFNt3VnBIyDjYCbAtQIzZQrWM7thdtNsyrpkQR7CEP ZNfMGcxKk2aOHWjOX9OYH46tM6uimPybHtzr1WNqLBsy2PS0BZwwP7mN9+9ltmiHJwNxB7E+ DyYl4j/KjQBJMSazzPYyy2Pr8PMrA/cdZ0dJqLto5aGh3XMnzdOWXX6T2CTvv2RmkO4HdVFJ CQ86ico6KQ/6kGvZt38RAGj5m6JuAYGXNhdGPF87xuCooL2yQuEAmkPThZadccr8sQxQFQXO kShxo2zQ2Y16fvMFCzbr+3Pxd+vBcQLBWILah4GYQQX2uigpZECoz7CE/NoArHg27UZBgrML yC2QDkW3utD1pZSjfXkojgrkBr3+MGXE1ddChH/Gzv8s1gnPNPNi5mAswCz0BpWEGqOorBtV lAgktPW0u0BBIrleMelELRUR+HBCxpo3VThbb9T83oJrW7FF4aLJ9w43d2EGG9nM9wfZRjia 1LJtAVa6fd7ZSX6NvcqON/oUZ5zncAM8OjYug38NIISMvCdiifelM2RWaJg9z+0yxV9+U3OE ZyabdytHR4nNEiT9xLvH711+eZylkgDKZb7GciT5w65yoCXeHP9Ye5DaDNimMhltvLbyOgUm v4DX/a3J+J3CbCnPnWKqtZMdTjn7xETXPjLliCeTcbbSiIOJY3rI6W5LW8JE2C9o5loqw== IronPort-HdrOrdr: A9a23:5hNiYKgNQUymdnn2984wpRfx6XBQXuQji2hC6mlwRA09TyX4ra GTdZEgvnXJYVkqKRIdcLy7VZVoOEmsk6KdgrN+AV7BZmXbUQKTRelfBeGL+UyYJ8SUzIFgPM lbE5SXBLXLfDpHZcuT2njeLz4rqOP3lZxBio/lvhNQcT0= X-Talos-CUID: 9a23:RltK3GEu6OG/keIfqmJq/UElGOwqYETsj3LAEmKUBDtMQ6+KHAo= X-Talos-MUID: 9a23:Yh4tvwVtzxDBkFbq/Br3lClnMs412vuNIWwOoLkhltaLBzMlbg== X-IronPort-AV: E=Sophos;i="5.99,248,1677560400"; d="scan'208";a="110204666" From: Andrew Cooper To: Xen-devel CC: Andrew Cooper , Jan Beulich , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= , Wei Liu Subject: [PATCH] x86/ucode: Refresh raw CPU policy after microcode load Date: Wed, 3 May 2023 19:58:13 +0100 Message-ID: <20230503185813.3050382-1-andrew.cooper3@citrix.com> X-Mailer: git-send-email 2.30.2 MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @citrix.com) X-ZM-MESSAGEID: 1683140347464100001 Loading microcode can cause new features to appear. This has happened routinely since Spectre/Meltdown, and even the presence of new status bits = can mean the administrator has no further work to perform. Refresh the raw CPU policy after late microcode load, so xen-cpuid can refl= ect the updated state of the system. Signed-off-by: Andrew Cooper Reviewed-by: Jan Beulich --- CC: Jan Beulich CC: Roger Pau Monn=C3=A9 CC: Wei Liu This is also the first step of being able to livepatch support for new functionality in microcode. --- xen/arch/x86/cpu-policy.c | 6 +++--- xen/arch/x86/cpu/microcode/core.c | 4 ++++ xen/arch/x86/include/asm/cpu-policy.h | 6 ++++++ 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/xen/arch/x86/cpu-policy.c b/xen/arch/x86/cpu-policy.c index a58bf6cad54e..ef6a2d0d180a 100644 --- a/xen/arch/x86/cpu-policy.c +++ b/xen/arch/x86/cpu-policy.c @@ -15,7 +15,7 @@ #include #include =20 -struct cpu_policy __ro_after_init raw_cpu_policy; +struct cpu_policy __read_mostly raw_cpu_policy; struct cpu_policy __ro_after_init host_cpu_policy; #ifdef CONFIG_PV struct cpu_policy __ro_after_init pv_max_cpu_policy; @@ -343,7 +343,7 @@ static void recalculate_misc(struct cpu_policy *p) } } =20 -static void __init calculate_raw_policy(void) +void calculate_raw_cpu_policy(void) { struct cpu_policy *p =3D &raw_cpu_policy; =20 @@ -655,7 +655,7 @@ static void __init calculate_hvm_def_policy(void) =20 void __init init_guest_cpu_policies(void) { - calculate_raw_policy(); + calculate_raw_cpu_policy(); calculate_host_policy(); =20 if ( IS_ENABLED(CONFIG_PV) ) diff --git a/xen/arch/x86/cpu/microcode/core.c b/xen/arch/x86/cpu/microcode= /core.c index 61cd36d601d6..cd456c476fbf 100644 --- a/xen/arch/x86/cpu/microcode/core.c +++ b/xen/arch/x86/cpu/microcode/core.c @@ -34,6 +34,7 @@ #include =20 #include +#include #include #include #include @@ -677,6 +678,9 @@ static long cf_check microcode_update_helper(void *data) spin_lock(µcode_mutex); microcode_update_cache(patch); spin_unlock(µcode_mutex); + + /* Refresh the raw CPU policy, in case the features have changed. = */ + calculate_raw_cpu_policy(); } else microcode_free_patch(patch); diff --git a/xen/arch/x86/include/asm/cpu-policy.h b/xen/arch/x86/include/a= sm/cpu-policy.h index b361537a602b..99d5a8e67eeb 100644 --- a/xen/arch/x86/include/asm/cpu-policy.h +++ b/xen/arch/x86/include/asm/cpu-policy.h @@ -24,4 +24,10 @@ void init_dom0_cpuid_policy(struct domain *d); /* Clamp the CPUID policy to reality. */ void recalculate_cpuid_policy(struct domain *d); =20 +/* + * Collect the raw CPUID and MSR values. Called during boot, and after la= te + * microcode loading. + */ +void calculate_raw_cpu_policy(void); + #endif /* X86_CPU_POLICY_H */ --=20 2.30.2