From nobody Mon Feb 9 08:08:02 2026 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=1754684627; cv=none; d=zohomail.com; s=zohoarc; b=ZHnnHNhyDBU00YecRQi+6bYy1ytlyqxlf4x+akixWYZOvXkyXKOrvYIRnACuNzbQGUBQBSvIQhVybpkMx7wO+9fp7KfvJBjxcD6aDEW7AfdP3n+cr2agRj7JHyrSgWgxvJy/eASQDd7Ar4O2g3FTtPo28+DUc9V2YgDeUyLaBIE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1754684627; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=0H7WNQDzd5coV9BflfHCTzf9vlWwg8AwlAqm3G08bnQ=; b=fHfDHDjdpo0oqmczHVy4sGfpGjdJWfyFPGUTHuD+PB/xPfHaImSlWHdRzc33L7QEVPMZjerGm01AcV0I1jRyRejFux+LWN3mKriZYpVl/Fgg+floT8XE1mhcIyL2kaTbgJMjvXH+mGLsq8e1wHeYTXJuE/5HooWr+vtP8R1oEXM= 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 1754684627945744.830544354452; Fri, 8 Aug 2025 13:23:47 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1075017.1437451 (Exim 4.92) (envelope-from ) id 1ukTca-0005tj-R6; Fri, 08 Aug 2025 20:23:24 +0000 Received: by outflank-mailman (output) from mailman id 1075017.1437451; Fri, 08 Aug 2025 20:23:24 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1ukTca-0005tc-NV; Fri, 08 Aug 2025 20:23:24 +0000 Received: by outflank-mailman (input) for mailman id 1075017; Fri, 08 Aug 2025 20:23:23 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1ukTcZ-0005tJ-8i for xen-devel@lists.xenproject.org; Fri, 08 Aug 2025 20:23:23 +0000 Received: from mail-wm1-x32c.google.com (mail-wm1-x32c.google.com [2a00:1450:4864:20::32c]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id 86dfa4cb-7495-11f0-b898-0df219b8e170; Fri, 08 Aug 2025 22:23:21 +0200 (CEST) Received: by mail-wm1-x32c.google.com with SMTP id 5b1f17b1804b1-451d41e1ad1so17066065e9.1 for ; Fri, 08 Aug 2025 13:23:21 -0700 (PDT) Received: from localhost.localdomain (host-195-149-20-212.as13285.net. [195.149.20.212]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-459e075047fsm103989805e9.1.2025.08.08.13.23.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 Aug 2025 13:23:19 -0700 (PDT) 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: 86dfa4cb-7495-11f0-b898-0df219b8e170 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.com; s=google; t=1754684600; x=1755289400; darn=lists.xenproject.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=0H7WNQDzd5coV9BflfHCTzf9vlWwg8AwlAqm3G08bnQ=; b=madKix2vVa20HxRrrLSBG3Q9AYjwXFOyUL5BooaPEJcXx9K7GparuWqTEFLpgbG3Px Ct2gS+W4TDJjsxROH6CsSnYEtBozQbM+ICztduMapP/ZV1F455bip/4Kg7H5+TpbYRx6 dEFcqofiF0lRw8+xDLjTuqsc70opWEhwn3TMI= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754684600; x=1755289400; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=0H7WNQDzd5coV9BflfHCTzf9vlWwg8AwlAqm3G08bnQ=; b=xL5gwTQbbnBptFWgSbtV6HSTO0RfEZPNGJtFBGXT1GvhBCqomqn+S1Jy4iIg3BErhE xGnyox4IHhEInzXMIDtUS/76Q8NtjT+w5uwQPMqihrWXlP7d4iALAQqFoeSWCQAht2aI jHVJfgYFHmf3TbhDKrQTPZbtgK/K9dPZsEcgYy/4gGpKjzsfd0caeW/YsDA2Ut5T4AfA mAu3QHD9MLI26nn54Zi4J1I/Dtrygn2y6HBvJHP7Efi6kzMS+BmKjeyCd105fe5vG5Ae bs6xAxp4Zvyg3BiWNVC5/VDF86OhxZOqyUbXugc5BM7MtWeTC9yRer6p40Ahgz+XMBu2 TAnw== X-Gm-Message-State: AOJu0YxZqmSj2XGNB6Bq5GVvAsvIppUaPZ5MxxgNjAIs9Ffd006coMfM J7DSxbONdTN6OG/1E2EszDFkY+0P4olBN4gqNuZT88Dh9j/xieBQ2OWjwBVweyOxhZtZqkOAaEN szhYV9pQ= X-Gm-Gg: ASbGnctgYT2NhoJyxt5rPoD+xBb47X580+AII+AS7+sx0qzNYDZX+yjZdulTINPZrrf Skqyb0zw5mj/kPaMMKAd1OzNd71dumoTZew8jc2JDx4AodEfkZQ/buNUGTg2pFiIsKvtTbWjd+d 7kAkbuAMVgURtWmEuT57Q8Ed0mtZ9veGQQI5SZQcgKsjcgHD+o8IqtNF0t4nf7QAEKid4LLnxPr XCkS/V3FZztuPq7AqOiFT4NZdaJraX8ViaxOS9K+xajgWPQss6j3FBw6UMCPKzbhj5ohV1h8dNE JWUkDLyEy56hxpIMrHs5yd0tPWVJ8zKq+4Q8h8TwdNW76Qkh7HdxG7aYr+PAfMilPfweuOj0uom +cTmts6MkYv9/4cJegtkasPZuz7nSnb5XCYuW9L11rKYtLFHIqry+Wt+yegmQPZkXqcidESqkJ2 Hi X-Google-Smtp-Source: AGHT+IH6yG/YuCvIOBCxqVl+zkEoGEh5lVQi4A1hkpcjzwyoBm/xu52KU+29D/n5OkKNzCyeruYPKQ== X-Received: by 2002:a05:600c:1d01:b0:458:be62:dcd3 with SMTP id 5b1f17b1804b1-459f4f9bd34mr45225575e9.17.1754684600251; Fri, 08 Aug 2025 13:23:20 -0700 (PDT) From: Andrew Cooper To: Xen-devel Cc: Andrew Cooper , Jan Beulich , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= Subject: [PATCH 01/22] x86/msr: Rename MSR_INTERRUPT_SSP_TABLE to MSR_ISST Date: Fri, 8 Aug 2025 21:22:53 +0100 Message-Id: <20250808202314.1045968-2-andrew.cooper3@citrix.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250808202314.1045968-1-andrew.cooper3@citrix.com> References: <20250808202314.1045968-1-andrew.cooper3@citrix.com> 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: 1754684630303124100 The name AMD chose is rather more concise. No functional change. Signed-off-by: Andrew Cooper Acked-by: Jan Beulich --- CC: Jan Beulich CC: Roger Pau Monn=C3=A9 --- xen/arch/x86/cpu/common.c | 2 +- xen/arch/x86/include/asm/msr-index.h | 2 +- xen/arch/x86/msr.c | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/xen/arch/x86/cpu/common.c b/xen/arch/x86/cpu/common.c index 97bdda1d4a25..f6ec5c9df522 100644 --- a/xen/arch/x86/cpu/common.c +++ b/xen/arch/x86/cpu/common.c @@ -933,7 +933,7 @@ void load_system_tables(void) wrss(df_ssp, _p(df_ssp)); } =20 - wrmsrl(MSR_INTERRUPT_SSP_TABLE, (unsigned long)ist_ssp); + wrmsrl(MSR_ISST, (unsigned long)ist_ssp); } =20 BUILD_BUG_ON(sizeof(*tss) <=3D 0x67); /* Mandated by the architecture. */ diff --git a/xen/arch/x86/include/asm/msr-index.h b/xen/arch/x86/include/as= m/msr-index.h index 2e7e2aff9a33..428d993ee89b 100644 --- a/xen/arch/x86/include/asm/msr-index.h +++ b/xen/arch/x86/include/asm/msr-index.h @@ -157,7 +157,7 @@ #define MSR_PL1_SSP 0x000006a5 #define MSR_PL2_SSP 0x000006a6 #define MSR_PL3_SSP 0x000006a7 -#define MSR_INTERRUPT_SSP_TABLE 0x000006a8 +#define MSR_ISST 0x000006a8 =20 #define MSR_PKRS 0x000006e1 =20 diff --git a/xen/arch/x86/msr.c b/xen/arch/x86/msr.c index 2cd46b6c8afa..1bf117cbd80f 100644 --- a/xen/arch/x86/msr.c +++ b/xen/arch/x86/msr.c @@ -138,7 +138,7 @@ int guest_rdmsr(struct vcpu *v, uint32_t msr, uint64_t = *val) case MSR_RTIT_OUTPUT_BASE ... MSR_RTIT_ADDR_B(7): case MSR_U_CET: case MSR_S_CET: - case MSR_PL0_SSP ... MSR_INTERRUPT_SSP_TABLE: + case MSR_PL0_SSP ... MSR_ISST: case MSR_AMD64_LWP_CFG: case MSR_AMD64_LWP_CBADDR: case MSR_PPIN_CTL: @@ -442,7 +442,7 @@ int guest_wrmsr(struct vcpu *v, uint32_t msr, uint64_t = val) case MSR_RTIT_OUTPUT_BASE ... MSR_RTIT_ADDR_B(7): case MSR_U_CET: case MSR_S_CET: - case MSR_PL0_SSP ... MSR_INTERRUPT_SSP_TABLE: + case MSR_PL0_SSP ... MSR_ISST: case MSR_AMD64_LWP_CFG: case MSR_AMD64_LWP_CBADDR: case MSR_PPIN_CTL: --=20 2.39.5 From nobody Mon Feb 9 08:08:02 2026 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=1754684638; cv=none; d=zohomail.com; s=zohoarc; b=ND/5EYwH00LltwbOkxyqoFZ2/JToGL8ngS5+DLlqSfs/U7T6XTo/XXWbNqXolB3leIxrCrXi/0xnCwjIaGC1prm0ISKuL6daYjVNYoqC3Jxzu5kXsIj/LVTASMONWT6aVbtZgCjIBm+AwdWZoecR6zW/Hun4AeW7J2P2ECmDxOo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1754684638; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=6XPZdbzmMxNNc6YJDmmLb0VrWoSZ8jhqn1MaPLISSgE=; b=Xj/ZeibceD+vNHZpNQIkPD1f0o1dpxOKyqIfDJ5Rez3tk0CZ168Q7GG2ob+JF4e4Xz7ejaRHbgqH9xOPuEBfuVDVdtGCjfPtvBuz8gjsCZML8Cn6mmCEwGguZA3wdW2iFFC0mohEtwJD2peLPf+ntGKw7oaUF9VPjp55Tf0VmzQ= 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 1754684638217572.5959602139849; Fri, 8 Aug 2025 13:23:58 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1075018.1437455 (Exim 4.92) (envelope-from ) id 1ukTcb-0005ww-2t; Fri, 08 Aug 2025 20:23:25 +0000 Received: by outflank-mailman (output) from mailman id 1075018.1437455; Fri, 08 Aug 2025 20:23:25 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1ukTca-0005wb-VA; Fri, 08 Aug 2025 20:23:24 +0000 Received: by outflank-mailman (input) for mailman id 1075018; Fri, 08 Aug 2025 20:23:23 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1ukTcZ-0005tJ-TR for xen-devel@lists.xenproject.org; Fri, 08 Aug 2025 20:23:23 +0000 Received: from mail-wm1-x331.google.com (mail-wm1-x331.google.com [2a00:1450:4864:20::331]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id 8774018f-7495-11f0-b898-0df219b8e170; Fri, 08 Aug 2025 22:23:22 +0200 (CEST) Received: by mail-wm1-x331.google.com with SMTP id 5b1f17b1804b1-45994a72356so19662905e9.0 for ; Fri, 08 Aug 2025 13:23:22 -0700 (PDT) Received: from localhost.localdomain (host-195-149-20-212.as13285.net. [195.149.20.212]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-459e075047fsm103989805e9.1.2025.08.08.13.23.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 Aug 2025 13:23:20 -0700 (PDT) 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: 8774018f-7495-11f0-b898-0df219b8e170 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.com; s=google; t=1754684601; x=1755289401; darn=lists.xenproject.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=6XPZdbzmMxNNc6YJDmmLb0VrWoSZ8jhqn1MaPLISSgE=; b=pl7zeZzauvFfYNP2aRlxBVf/rMBY6t/hnALX1fIDn1dEEw/PDMoxidWZ2SM6RCR9R0 R5z2fRigiG0a62BfO8o31Fc8Xrh3CTrsPBLQlbqSTt1RKprSp5ay7da5XKJVqoDGL+sx cBjlQ9yRWaRLG1ZNfQViCC2uB+8CxiiJ/N/ug= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754684601; x=1755289401; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=6XPZdbzmMxNNc6YJDmmLb0VrWoSZ8jhqn1MaPLISSgE=; b=vFCOnVrguvRwszygC49Yj1ygLJyHWXVIPbzSgyQHDOOlF7awWg2q/W2bQMs7GZGSpM y3s0tSGl6q1oduZqcmjW28tJ8e443dN1eXU12ut5oaBCMPkgyuISjRBIH8CmdbYWQQzP HGQ8vfmJP+asc7I35nGYhSC63hMj2G6kCHARVBdeCAux3lf3+tuuwbr9iQk4FeYGbW/2 mm7tCFm57F99QRWBoGmbkZrPLrou+LqX52S8At9g2IvUdvfxiym4ziRRwpCmu6O/bTs9 W+w/DHvcZuUlhxqTwYOZKu/XnATXdENHVF8E6yvAi8vTnqqAXBZrz0I+mqQyV4+lEa9M gLlw== X-Gm-Message-State: AOJu0YyBH9HLOD/WzN1r7Cu6KVnDAC5a0+Uu9kiPy79QxsEtZzCzIWLY jr+7OYjYKHKsTl3ihxPozlBKi5izHWxg2zRI+faj2tOr94phJFo7fgEipJJbuRZXCDUTzp07PMN oWCj54Fg= X-Gm-Gg: ASbGnctunAoZeo1IvFNM4qgwHBYVH4YaTRJfkJNtD2MF2tc4MlVzFTAdxHBZZVTiWjd 60tUDqJRKiggg7AVPb4hLOd4P+tXjeco+nDPxytouhLYzgjl9GM6CtGECPncQU4hVxUSsw/o5Ep pYrWxAh7/C43ggAcMriubegsAkI8JBiWYxwR1Cxn3hFc5msCseu8a/p29ZU9jr74gi93DKtJGXL Xhyj9mR01WQAtddET8sQVeQJEm040KF2UgAVasNNPRAsojcj9XwvnbS9CuCBllhzQgtn5Zmt0sx C9NZBUkohXHp+97hMcjFLyWHYLrPFQ4OdDPXg85HtZOnjjH8gbgnQSA+BpI1unAN5VC0sw3bOsM YcYcJsgmUPlGe8Qgp9V4QgvJOb1JJdgLoKilWB30bV3LTdx2M92hNl2Esmw94XlzFhjla4Y5Vya EW X-Google-Smtp-Source: AGHT+IFGc/gbZa6En9xjXehNP/ecIwgegsDSFIj239IUr/R3bVfNbyu+lhGZaNFvH+BLOBDQlEonVA== X-Received: by 2002:a05:6000:2c01:b0:3a5:8991:64b7 with SMTP id ffacd0b85a97d-3b8f97f50c7mr8332086f8f.26.1754684601059; Fri, 08 Aug 2025 13:23:21 -0700 (PDT) From: Andrew Cooper To: Xen-devel Cc: Andrew Cooper , Jan Beulich , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= Subject: [PATCH 02/22] x86/msr: Rename wrmsr_ns() to wrmsrns(), and take 64bit value Date: Fri, 8 Aug 2025 21:22:54 +0100 Message-Id: <20250808202314.1045968-3-andrew.cooper3@citrix.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250808202314.1045968-1-andrew.cooper3@citrix.com> References: <20250808202314.1045968-1-andrew.cooper3@citrix.com> 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: 1754684640422124100 In hindsight, having the wrapper name not be the instruction mnemonic was a poor choice. Also, PKS turns out to be quite rare in wanting a split value. Switch to using a single 64bit value in preparation for new users. No functional change. Signed-off-by: Andrew Cooper Acked-by: Jan Beulich --- CC: Jan Beulich CC: Roger Pau Monn=C3=A9 --- xen/arch/x86/include/asm/msr.h | 4 ++-- xen/arch/x86/include/asm/prot-key.h | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/xen/arch/x86/include/asm/msr.h b/xen/arch/x86/include/asm/msr.h index 4c4f18b3a54d..b6b85b04c3fd 100644 --- a/xen/arch/x86/include/asm/msr.h +++ b/xen/arch/x86/include/asm/msr.h @@ -39,7 +39,7 @@ static inline void wrmsrl(unsigned int msr, uint64_t val) } =20 /* Non-serialising WRMSR, when available. Falls back to a serialising WRM= SR. */ -static inline void wrmsr_ns(uint32_t msr, uint32_t lo, uint32_t hi) +static inline void wrmsrns(uint32_t msr, uint64_t val) { /* * WRMSR is 2 bytes. WRMSRNS is 3 bytes. Pad WRMSR with a redundant = CS @@ -47,7 +47,7 @@ static inline void wrmsr_ns(uint32_t msr, uint32_t lo, ui= nt32_t hi) */ alternative_input(".byte 0x2e; wrmsr", ".byte 0x0f,0x01,0xc6", X86_FEATURE_WRMSRNS, - "c" (msr), "a" (lo), "d" (hi)); + "c" (msr), "a" (val), "d" (val >> 32)); } =20 /* rdmsr with exception handling */ diff --git a/xen/arch/x86/include/asm/prot-key.h b/xen/arch/x86/include/asm= /prot-key.h index 0cbecc2df401..3e9c2eaef415 100644 --- a/xen/arch/x86/include/asm/prot-key.h +++ b/xen/arch/x86/include/asm/prot-key.h @@ -72,14 +72,14 @@ static inline void wrpkrs(uint32_t pkrs) { *this_pkrs =3D pkrs; =20 - wrmsr_ns(MSR_PKRS, pkrs, 0); + wrmsrns(MSR_PKRS, pkrs); } } =20 static inline void wrpkrs_and_cache(uint32_t pkrs) { this_cpu(pkrs) =3D pkrs; - wrmsr_ns(MSR_PKRS, pkrs, 0); + wrmsrns(MSR_PKRS, pkrs); } =20 #endif /* ASM_PROT_KEY_H */ --=20 2.39.5 From nobody Mon Feb 9 08:08:02 2026 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=1754684631; cv=none; d=zohomail.com; s=zohoarc; b=GbiLszUTj/ScSSrhuWL4SWm1KjGmBoN6XiZIe3vYLmymi4CC3aBgonIask/AaM3VnyfgYzh3Qzh5p/z4QLt/NdDU547TCj0HHoNdhBeubpl0pDR/u+Cwiw7mj1/Rr0b2DcIfGUoo+TVVzxfiaIJ3RL0NpfEtQ7Y5VXGy47AStgQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1754684631; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=FcfZyu/epGsYTIYAnbjH73oe/DBgcrJShKfH8bNACvc=; b=e6sIyKXmjLonvT8uEBI2g/Fu/ysPvCBLwcXzdNglwJSUQQsyIrc2celb/oIIrAr2iW56MeTWd01IPGkOsN3fjTZ/IUPeFjchAYMgp3pN7zAHRYAd9Xx8ptx73ZS72uIUE0FFehGluWt4efH5jm1hew8JqvRLYCHb9RntRoAiIUg= 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 1754684631499805.8010855499373; Fri, 8 Aug 2025 13:23:51 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1075020.1437476 (Exim 4.92) (envelope-from ) id 1ukTcc-0006OD-KJ; Fri, 08 Aug 2025 20:23:26 +0000 Received: by outflank-mailman (output) from mailman id 1075020.1437476; Fri, 08 Aug 2025 20:23:26 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1ukTcc-0006Nx-EB; Fri, 08 Aug 2025 20:23:26 +0000 Received: by outflank-mailman (input) for mailman id 1075020; Fri, 08 Aug 2025 20:23:25 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1ukTca-0005tJ-TQ for xen-devel@lists.xenproject.org; Fri, 08 Aug 2025 20:23:24 +0000 Received: from mail-wr1-x431.google.com (mail-wr1-x431.google.com [2a00:1450:4864:20::431]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id 87d7868a-7495-11f0-b898-0df219b8e170; Fri, 08 Aug 2025 22:23:22 +0200 (CEST) Received: by mail-wr1-x431.google.com with SMTP id ffacd0b85a97d-3b790dbb112so1485084f8f.3 for ; Fri, 08 Aug 2025 13:23:22 -0700 (PDT) Received: from localhost.localdomain (host-195-149-20-212.as13285.net. [195.149.20.212]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-459e075047fsm103989805e9.1.2025.08.08.13.23.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 Aug 2025 13:23:21 -0700 (PDT) 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: 87d7868a-7495-11f0-b898-0df219b8e170 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.com; s=google; t=1754684602; x=1755289402; darn=lists.xenproject.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=FcfZyu/epGsYTIYAnbjH73oe/DBgcrJShKfH8bNACvc=; b=erMwqvgwleJE/KA79ONKK54Wx1n5jSIDDs3+Yg2Azt89wEHy2aW3j6lhZrdmpGoIX7 9htf5141quVFZkothIeOUeAjjvGxSt8+2fY03zOXSzAx1qj7DrF7mHRLd6hkWIwliWcD HKGHOIDbvgRisG8H0oKI49d7vdxYX4s8JSKQs= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754684602; x=1755289402; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=FcfZyu/epGsYTIYAnbjH73oe/DBgcrJShKfH8bNACvc=; b=H4kdYm46h44Kn9+HY65djuLsVhTF+/XCMZhnbgbpepESGGBf8Z5vBBNrfN5JxgH/ft C5QNls8GaNBySfwouarDmsMt3xqedjIJLMUV7v8aEvHPoVsWQ5G40wJI1a4ekIrKCrdi ZBx2ATS+RMeHD8jdGDdg2zBCX9+54VsMg1KjRIAVvP1V+yiQBiIfHl5v/11pOQ7N3c+d NDbKy7EGv7FdoxOhQUC9pPLuQ3ljIVCQKTRzBV7YK+dle0ruG+eMS7WS9HubLT7JE3SR 86yRw/20mVZa42xjbPrMdkZ6Bkmbjq4Y63prKwG6JnpdhODsavE/m/rYlN2dflaI+XS7 x0Xw== X-Gm-Message-State: AOJu0Yw+dWpf3Pl9ddobv/Sek52G6CY6iDJtf4WzyGyP5TpLPV5i6e9X y2WKBKFMmZkaSaB5vNB6hk2FjxnPmMs2sRqF3OAY4PHUMn1TbkO9OXHpVEIqhUOcMhxUxYw33Kx /xWeUdsE= X-Gm-Gg: ASbGnctg8bh8E9tOmhiGWp/57o4PF7o0WYCj6ewJqcYWGhQjFRbujeytYPwyUX6c5Jh Xhhf8t9xJOA9627z4EJbJquPfz/HOSdLRWEQaE5CsgPPtTCAnSReTGLMdd+UQpPxu+l8NEwC4eK S0qDvMkxgbTcvEVaL0HLMEww6FmlBZ3Y6c2L8sycs8i+lAyLS9GtuR9PfcjDxIEPy/V4KBIb/Ym XGT44/Iiyx+/umTmsG+Y31EH3FHGe7OY6XYum/2FT5N9YWOMhKCxY0RA7lzGH5A51KeGauIqRA6 9bppLacotEwSWBc5l3JAL5cTqNK/U/UWy2RsHzsnm5XPzRBz4eIQc0RZ0NctLgX5xcbI4l/3NUS vnZDQ30YAHisrjeCoqtxd0FbsMIoMkqsDIKqmrf5X7wBdFYmGdsXZrpV7FuWXDh1XS3sg1Nf5Y+ Q6 X-Google-Smtp-Source: AGHT+IGV4Rh+tboonqUGllTTt1cR6ll0dm4fTrORfg6GmZFbQ/bDDdOWU0N8EyrhS+VU3dkuxbGbYQ== X-Received: by 2002:a05:6000:18a9:b0:3b8:4da3:cace with SMTP id ffacd0b85a97d-3b900b5027amr3277977f8f.29.1754684601767; Fri, 08 Aug 2025 13:23:21 -0700 (PDT) From: Andrew Cooper To: Xen-devel Cc: Andrew Cooper , Jan Beulich , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= Subject: [PATCH 03/22] x86/traps: Drop incorrect BUILD_BUG_ON() and comment in load_system_tables() Date: Fri, 8 Aug 2025 21:22:55 +0100 Message-Id: <20250808202314.1045968-4-andrew.cooper3@citrix.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250808202314.1045968-1-andrew.cooper3@citrix.com> References: <20250808202314.1045968-1-andrew.cooper3@citrix.com> 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: 1754684637570124100 This was added erroneously by me. Hardware task switching does demand a TSS of at least 0x67 bytes, but that's not relevant in 64bit, and not relevant for Xen since commit 5d1181a5ea5e ("xen: Remove x86_32 build target.") in 2012. We already load a 0-length TSS in early_traps_init() demonstrating that it's possible. Signed-off-by: Andrew Cooper Acked-by: Jan Beulich --- CC: Jan Beulich CC: Roger Pau Monn=C3=A9 --- xen/arch/x86/cpu/common.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/xen/arch/x86/cpu/common.c b/xen/arch/x86/cpu/common.c index f6ec5c9df522..cdc41248d4e9 100644 --- a/xen/arch/x86/cpu/common.c +++ b/xen/arch/x86/cpu/common.c @@ -936,8 +936,6 @@ void load_system_tables(void) wrmsrl(MSR_ISST, (unsigned long)ist_ssp); } =20 - BUILD_BUG_ON(sizeof(*tss) <=3D 0x67); /* Mandated by the architecture. */ - _set_tssldt_desc(gdt + TSS_ENTRY, (unsigned long)tss, sizeof(*tss) - 1, SYS_DESC_tss_avail); if ( IS_ENABLED(CONFIG_PV32) ) --=20 2.39.5 From nobody Mon Feb 9 08:08:02 2026 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=1754684628; cv=none; d=zohomail.com; s=zohoarc; b=HakETqKvHMGMH7RSCd0fXvuFE9lJLAovas2lFz5QZDm9YDWbGQuFz5iSi5U6W4BIAx5ifqUEu2VLawfADGgos456V/AZBm7aLLloO/LADz7eQxDGik15BJ3NM7bZW5Yqu928sUl78RQO//8mkLVg2iCByBc93uNhSR9SoVwdCkw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1754684628; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=13MkauBuH09ermsY/i1fhguUQBZhfWnVGzvmuz1PuqQ=; b=LjPCASSOzRx3wqXiEdzsxXdmJULE+bw0VhMrQ0Yb4gRHDgumy+xUUP7qTteWahuluWtWDI9VLl3EGgzxLiOFZbH8NsytFaSgZ0CdB+5u+o7TpSTD/YGAp/kY7v+D8ssOJmpAuS+QEBas8+lMoRmP0dZh8MMWsQm1JZQaD0c5nJo= 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 1754684628210900.7206033868746; Fri, 8 Aug 2025 13:23:48 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1075019.1437470 (Exim 4.92) (envelope-from ) id 1ukTcc-0006Kr-8y; Fri, 08 Aug 2025 20:23:26 +0000 Received: by outflank-mailman (output) from mailman id 1075019.1437470; Fri, 08 Aug 2025 20:23:26 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1ukTcc-0006Kk-6H; Fri, 08 Aug 2025 20:23:26 +0000 Received: by outflank-mailman (input) for mailman id 1075019; Fri, 08 Aug 2025 20:23:24 +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 1ukTca-0005tW-EG for xen-devel@lists.xenproject.org; Fri, 08 Aug 2025 20:23:24 +0000 Received: from mail-wm1-x335.google.com (mail-wm1-x335.google.com [2a00:1450:4864:20::335]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 884a98fc-7495-11f0-a324-13f23c93f187; Fri, 08 Aug 2025 22:23:23 +0200 (CEST) Received: by mail-wm1-x335.google.com with SMTP id 5b1f17b1804b1-459e3926cbbso12472755e9.1 for ; Fri, 08 Aug 2025 13:23:23 -0700 (PDT) Received: from localhost.localdomain (host-195-149-20-212.as13285.net. [195.149.20.212]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-459e075047fsm103989805e9.1.2025.08.08.13.23.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 Aug 2025 13:23:22 -0700 (PDT) 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: 884a98fc-7495-11f0-a324-13f23c93f187 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.com; s=google; t=1754684603; x=1755289403; darn=lists.xenproject.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=13MkauBuH09ermsY/i1fhguUQBZhfWnVGzvmuz1PuqQ=; b=ScOn8kF4jiQ8iKD/gbwMSxVCNgNincQLxNBtLg6hOoIx/eYp20LCDuOcAygCTnaLq/ K5Nz+JhzjGsjonOvEvpHRzhy9dyk65e5qOqjQw7uGYSFA0RN622+gQjCidGdcOKwAdlr gXqLlp6w1INOOFI2gdmBJx3U9YqSTX1iWCG8w= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754684603; x=1755289403; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=13MkauBuH09ermsY/i1fhguUQBZhfWnVGzvmuz1PuqQ=; b=LeBNYUcSrdyZ35LlkmBMHHkPPE2zOIaCyeLMQDFC4wRRrun9vdw+FZbXss2tdMRv8W znVvmvLvfLnlzNuSNjK4D8bFfICWYqfND422H6Bh/DIRIM7ffSXAdmFr7LhPMo0+GkrH d21UxXQmtcJwEr+dMmWWC23zFM0SRCLfd/GPCtjznZQPAv8eT78NAAMgysnGh0HGVscO ynN0bYcaRwUNYd91fxMOj28JvMsBmBehlFRhna/qn2lF9jzJp+ha0Ay1Q7pKb1wr37yf Me7pQTFmx+V7j4dFA/TRbKblHsGoghvHN5+ZEQDsGkoR97aNL336ScI7jPOs50IS2GrY UuKg== X-Gm-Message-State: AOJu0Yz18Jb8ZqO43JuEGtjth2mPdhy+WW+iTkiYGpcj86RQIwSy6KIJ ouZ8Poppff5B2wBHpmh5IZWAb1FrqIlmAW2c3+FWh+NV6zhrmJ1ASbhHFhPP560qKsB7oceak4g XVlMM1Yo= X-Gm-Gg: ASbGncvDP9VVkSEf8Kwc6w+Qfp4Cl3v0anl/iB46zSXDeXy0RCZkpoM58q9givyIKA1 Dl8FROs58foZbLE+We07lzjnVaPDvLUIMK+LewgPhG8ypI6gpEeFzw48DzvEP1O/qt7OlKA2P6K tFPSAbo5grw4eiBDK/vkzR19T4e1lP2vvcGwoZ9X3ZtgguOuFVq8mb0OQG4L453aOFtKbx9PX3C 18fpMqahC55qy74ylJEfXKlvk9pJTyt1AFX2crKbZO6ND6mKnYOOC6msWMrXJAqfkrRRvtGi3AW AoT9+H8CsgMn3h4CHNH0xORj652luBMur0xUkDIyRqZ+IGOPU4BjZ0Dv3EB1XofPaA+1aheRgeY DQTWbe5iphzLtyYT7llvkXvN8ddMIGTHMbEeqkQ6ATWAgfZj1W5fKcQA13+MJFPQAjipJOM6/qo zk X-Google-Smtp-Source: AGHT+IGbesx9l8nGMf7CTQnVncyxpSWuGQ63dhjBS4w7wPbc3OOUllijciJt7hVxgf563vnk/RVjJg== X-Received: by 2002:a05:600c:1d22:b0:43d:fa59:af97 with SMTP id 5b1f17b1804b1-459f4fc40b1mr34036485e9.32.1754684602672; Fri, 08 Aug 2025 13:23:22 -0700 (PDT) From: Andrew Cooper To: Xen-devel Cc: Andrew Cooper , Jan Beulich , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= Subject: [PATCH 04/22] x86/idt: Minor improvements to _update_gate_addr_lower() Date: Fri, 8 Aug 2025 21:22:56 +0100 Message-Id: <20250808202314.1045968-5-andrew.cooper3@citrix.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250808202314.1045968-1-andrew.cooper3@citrix.com> References: <20250808202314.1045968-1-andrew.cooper3@citrix.com> 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: 1754684630254124100 After some experimentation, using .a/.b makes far better logic than using t= he named fields, as both Clang and GCC spill idte to the stack when named fiel= ds are used. GCC seems to do something very daft for the addr1 field. It takes addr, shifts it by 32, then ANDs with 0xffff0000000000000UL, which requires manifesting a MOVABS. Clang follows the C, whereby it ANDs with $imm32, then shifts, avoiding the MOVABS entirely. No functional change. Signed-off-by: Andrew Cooper Acked-by: Jan Beulich --- CC: Jan Beulich CC: Roger Pau Monn=C3=A9 I'm disappointed about how poor the code generation is when assigning to na= med fields, but I suppose it is a harder problem for the compiler to figure out. add/remove: 0/0 grow/shrink: 0/2 up/down: 0/-24 (-24) Function old new delta machine_kexec 356 348 -8 traps_init 434 418 -16 --- xen/arch/x86/include/asm/idt.h | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/xen/arch/x86/include/asm/idt.h b/xen/arch/x86/include/asm/idt.h index f613d5693e0e..b5e570a77fae 100644 --- a/xen/arch/x86/include/asm/idt.h +++ b/xen/arch/x86/include/asm/idt.h @@ -92,15 +92,16 @@ static inline void _set_gate_lower(idt_entry_t *gate, u= nsigned long type, * Update the lower half handler of an IDT entry, without changing any oth= er * configuration. */ -static inline void _update_gate_addr_lower(idt_entry_t *gate, void *addr) +static inline void _update_gate_addr_lower(idt_entry_t *gate, void *_addr) { + unsigned long addr =3D (unsigned long)_addr; + unsigned int addr1 =3D addr & 0xffff0000U; /* GCC force better codegen= . */ idt_entry_t idte; - idte.a =3D gate->a; =20 - idte.b =3D ((unsigned long)(addr) >> 32); - idte.a &=3D 0x0000FFFFFFFF0000ULL; - idte.a |=3D (((unsigned long)(addr) & 0xFFFF0000UL) << 32) | - ((unsigned long)(addr) & 0xFFFFUL); + idte.b =3D addr >> 32; + idte.a =3D gate->a & 0x0000ffffffff0000UL; + idte.a |=3D (unsigned long)addr1 << 32; + idte.a |=3D addr & 0xffff; =20 _write_gate_lower(gate, &idte); } --=20 2.39.5 From nobody Mon Feb 9 08:08:02 2026 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=1754684631; cv=none; d=zohomail.com; s=zohoarc; b=GYKXcpWh89DIIbpUGBk1VEAGPFuVdf0+HJXwUsOgeNn4PGY7cgSWIOblSJ96UnD02Rn5ulVZaXoa3pA1pBQ6kKCglKthE17M/hF7Yw8yFlP00Kut4k/oliEkPBhJorNR3tjXeaEYjaq3uKQW4QDX5YfFmYMMj7oDXB6XUCijYMA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1754684631; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=92/m+z5VSr5yDc/35xwQUmi5Oo4699FS2wmqHV80iA8=; b=bDGvquXNYKkKUNcDfeD0AXys1KgcAM+FKJydDE4yUqUTgdl8IVY1hx1+No08FdBiRp3iPUX8mTB7OSPyTmkOO2rdYkirh5RnIyuELTHdz4Ky6XnO69M9CcM4gh97LyXLFgzlafnZFUltdswA5nOwqiFRkk8rLWEeIn+oBorT9cg= 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 1754684631516424.1818731834319; Fri, 8 Aug 2025 13:23:51 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1075023.1437505 (Exim 4.92) (envelope-from ) id 1ukTce-000739-MD; Fri, 08 Aug 2025 20:23:28 +0000 Received: by outflank-mailman (output) from mailman id 1075023.1437505; Fri, 08 Aug 2025 20:23:28 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1ukTce-00072d-Go; Fri, 08 Aug 2025 20:23:28 +0000 Received: by outflank-mailman (input) for mailman id 1075023; Fri, 08 Aug 2025 20:23:27 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1ukTcc-0005tJ-TV for xen-devel@lists.xenproject.org; Fri, 08 Aug 2025 20:23:26 +0000 Received: from mail-wm1-x32b.google.com (mail-wm1-x32b.google.com [2a00:1450:4864:20::32b]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id 88d09291-7495-11f0-b898-0df219b8e170; Fri, 08 Aug 2025 22:23:24 +0200 (CEST) Received: by mail-wm1-x32b.google.com with SMTP id 5b1f17b1804b1-4538bc52a8dso16784535e9.2 for ; Fri, 08 Aug 2025 13:23:24 -0700 (PDT) Received: from localhost.localdomain (host-195-149-20-212.as13285.net. [195.149.20.212]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-459e075047fsm103989805e9.1.2025.08.08.13.23.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 Aug 2025 13:23:23 -0700 (PDT) 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: 88d09291-7495-11f0-b898-0df219b8e170 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.com; s=google; t=1754684603; x=1755289403; darn=lists.xenproject.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=92/m+z5VSr5yDc/35xwQUmi5Oo4699FS2wmqHV80iA8=; b=SVuBACqQCDWC0blNGkX/1UDb/tRFmjhUcw+PJfVeVktU+woFBdwQklJZy33zur1oGT Z8xHt8tXT8xrnTNnCLuZQCUDJoOcrA/5SXUiuRFmW5+LSa3CHxx5cesvA55Dh6bZXuTP b8/BwXFpsWzMB5hKE24JM2MCJJ72g7B8VnU5c= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754684603; x=1755289403; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=92/m+z5VSr5yDc/35xwQUmi5Oo4699FS2wmqHV80iA8=; b=IEz6pW1jh3Orb6nUX/GLWs8rzpRk4CbsGnqb2PeoHZ6Tjg3FcrXex7t6Nldy2R2IlL IMlVEB6W1lgGNDlutqU8PmOVsj4ZuuAVkb4lpioRRi4ofrL3cgeg++tBCXqzVTFGHLst XUolOsA+9izPDBTR077IvJ+ME1GCw50vjXfA5j19ANWJZn4511jBIkAD4YB6p7nIaDE2 1oyJPBW/Mrc8QQBGjqLDDt3fl/howR7xiAYeHsyYK/2ZMmEoEq7AkfZfwbgu1CHxZoQ7 wi9gnjobwXry/lrQgoKCIhA2XdbZqmbOcvSPG/EXdPtF68TMyM2vdXi99AHUE3tQ5vCy pIyg== X-Gm-Message-State: AOJu0YyNucQfTKjEwz+7YXC8nga63WonYqNw/5F9PkzwhFihBt55wcTA zSLZI8c04v/MOjr+zqfGqIijZkUWN+5n/L0a9dBskNw+PuJ9kdqIILxP802AsrnzZ5BKExZTEb5 G78gjb6k= X-Gm-Gg: ASbGnctqfa0hzNFu0zwQ1n+SEXpMlYMFBUfjoRfFBgyrsmb4Cm73VzMEnZhEdELRKhS IuC/xXsnHYaKHGW4uRilP86gH82udsUhz9GZYO3lIos1E3JZoSVMHTMTljKCZry4ugy8GSbNgLD Di9bFfBPx2F171lURRMIbnroZgBQ4AyZ56F0MSOTo5nwzl1A38to7MqhvPl7MZhq0bRi/Ti+VaG GORmsfBzrdSYtBMnH+a/xYs4NLYdBtQ0b20uyC3JyCp4AgWRkorkJq7MyOh14m3RnmKNaL+ifGn YvhaVA4kmqy6SbRg2g5W+OqwCPELyvN48DLjB2tVrUs0l8pZ/NoFrKCPfwO+nxaN+CCd4soKH1Z ZwSnliLeZ+Q0FAQZOtmy0gyL9mk2drBVouKmKYEFhtyVBRZRMwEuWG00s7lsJpkyBJAEZ/1N9cT q6 X-Google-Smtp-Source: AGHT+IH7pSYE5Lclhd4aEb3Drtv+hwANdcPJQryN8Y2tv4K7EYzZDiNo7xU2Laf05Zk4TKgP5N5Z7w== X-Received: by 2002:a05:6000:2dc2:b0:3b8:fa8c:f1ac with SMTP id ffacd0b85a97d-3b900b327f1mr4132646f8f.24.1754684603531; Fri, 08 Aug 2025 13:23:23 -0700 (PDT) From: Andrew Cooper To: Xen-devel Cc: Andrew Cooper , Jan Beulich , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= Subject: [PATCH 05/22] x86/traps: Rename early_traps_init() to bsp_early_traps_init() Date: Fri, 8 Aug 2025 21:22:57 +0100 Message-Id: <20250808202314.1045968-6-andrew.cooper3@citrix.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250808202314.1045968-1-andrew.cooper3@citrix.com> References: <20250808202314.1045968-1-andrew.cooper3@citrix.com> 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: 1754684633350116600 We're going to want to introduce an AP version shortly. No functional change. Signed-off-by: Andrew Cooper Acked-by: Jan Beulich --- CC: Jan Beulich CC: Roger Pau Monn=C3=A9 --- xen/arch/x86/include/asm/traps.h | 2 +- xen/arch/x86/setup.c | 2 +- xen/arch/x86/traps-setup.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/xen/arch/x86/include/asm/traps.h b/xen/arch/x86/include/asm/tr= aps.h index 72c33a33e283..7414420e57d8 100644 --- a/xen/arch/x86/include/asm/traps.h +++ b/xen/arch/x86/include/asm/traps.h @@ -7,7 +7,7 @@ #ifndef ASM_TRAP_H #define ASM_TRAP_H =20 -void early_traps_init(void); +void bsp_early_traps_init(void); void traps_init(void); void percpu_traps_init(void); =20 diff --git a/xen/arch/x86/setup.c b/xen/arch/x86/setup.c index 1543dd251cc6..64f02699e1aa 100644 --- a/xen/arch/x86/setup.c +++ b/xen/arch/x86/setup.c @@ -1134,7 +1134,7 @@ void asmlinkage __init noreturn __start_xen(void) =20 percpu_init_areas(); =20 - early_traps_init(); + bsp_early_traps_init(); =20 smp_prepare_boot_cpu(); sort_exception_tables(); diff --git a/xen/arch/x86/traps-setup.c b/xen/arch/x86/traps-setup.c index a8385b26ae9b..7713f427d344 100644 --- a/xen/arch/x86/traps-setup.c +++ b/xen/arch/x86/traps-setup.c @@ -62,7 +62,7 @@ static void __init init_ler(void) * boot_gdt is already loaded, and bsp_idt[] is constructed without IST * settings, so we don't need a TSS configured yet. */ -void __init early_traps_init(void) +void __init bsp_early_traps_init(void) { const struct desc_ptr idtr =3D { .base =3D (unsigned long)bsp_idt, --=20 2.39.5 From nobody Mon Feb 9 08:08:02 2026 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=1754684628; cv=none; d=zohomail.com; s=zohoarc; b=IoRvgHO06o0YSDh/xi7uZshhMYJNvIHfpJNY9hUlbO43yfRbTBlgCXVRoZG4z/sNodhRHiLMOeGpjVDqFKF81yynRomCZq4e1plXdCmV7QO/W6C08/ej2hn+saSxjQTeovVH3uMMlASTPlv9KeJ8I4L15YsxG0/rctDH7lgWkv4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1754684628; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=caOVNgxtLJ5K64XlKHZ2JgkxvEgD9Gt7Q0o1sCQ6UZg=; b=C9c+pw0REuY7SZxPKOVbibqW3LA9ZALxZSLJgs03uYQFhLkZlDTy86txzkyvkCyXtKVtHrInBOfJEIXIHuB1Ro2OBFmInopaMhwHg2KHagsS9d/6Vv/tUqGz3bdtAthLVeFahhlIFPvHAdeDwH/hJi14nwGgPqdGc2nhpEe0HSE= 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 1754684628571576.6458034790971; Fri, 8 Aug 2025 13:23:48 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1075025.1437521 (Exim 4.92) (envelope-from ) id 1ukTcf-0007Ln-Ru; Fri, 08 Aug 2025 20:23:29 +0000 Received: by outflank-mailman (output) from mailman id 1075025.1437521; Fri, 08 Aug 2025 20:23: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 1ukTcf-0007KS-Iw; Fri, 08 Aug 2025 20:23:29 +0000 Received: by outflank-mailman (input) for mailman id 1075025; Fri, 08 Aug 2025 20:23:28 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1ukTcd-0005tJ-TY for xen-devel@lists.xenproject.org; Fri, 08 Aug 2025 20:23:27 +0000 Received: from mail-wm1-x32d.google.com (mail-wm1-x32d.google.com [2a00:1450:4864:20::32d]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id 895497cd-7495-11f0-b898-0df219b8e170; Fri, 08 Aug 2025 22:23:25 +0200 (CEST) Received: by mail-wm1-x32d.google.com with SMTP id 5b1f17b1804b1-459ebb6bbdfso16617565e9.0 for ; Fri, 08 Aug 2025 13:23:25 -0700 (PDT) Received: from localhost.localdomain (host-195-149-20-212.as13285.net. [195.149.20.212]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-459e075047fsm103989805e9.1.2025.08.08.13.23.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 Aug 2025 13:23:23 -0700 (PDT) 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: 895497cd-7495-11f0-b898-0df219b8e170 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.com; s=google; t=1754684604; x=1755289404; darn=lists.xenproject.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=caOVNgxtLJ5K64XlKHZ2JgkxvEgD9Gt7Q0o1sCQ6UZg=; b=PLE7MiksilklFd+GuyiBAfcnEzz2AHJOe8fGD8lp/JL4eBNo+D1M7JR05TA/WHgwY+ YUZxMXmqHRvmqpCiuUpK4JZmbyPxqA7wyIUi9usm0o4FcT+RrY0Jbg4yjBofnvu2JBfs SSwzugldX1ndxjdagwjCFfuks0mhsF3/yjAsE= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754684604; x=1755289404; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=caOVNgxtLJ5K64XlKHZ2JgkxvEgD9Gt7Q0o1sCQ6UZg=; b=BSmEGvIfzMVaHEI39nfUcaEDTyl/lTmUw5tFT0X7htHGLuSXZFiTbeMV50EZcHwzo+ yd/I/MpsHQhaZHQYtT14IkWTumLJrETYCVn4KZLXP8+TeCC4m6xBceUQEfhq1JxiuCP1 hJnbSK8n9gTomGr6XVv7j/N27uCi49xQnQWtCvOQHbS5ONpZ0OLtge88TJyGpyZt07v2 spCs9PjtIa5dm9zMzC49WjZFhpkeo/qpaYHY+1pd/3WiHc8MQaZtwKuYNgtVVObekGcO MsXbaSM1BGiDUbJwJSXCIKxC93lu7rJoPhfD0nRr6MAET0hGlAnXBsfIEp830qAhXRHg IBxg== X-Gm-Message-State: AOJu0YwVbgc9ULesr5RGN+xSKgSiSEyGOWL81GefASoacGzJFSHM+FlY 1gUbwOiUO07CypUsGGIDFVFl4CEvQowc0mxYz+R9lSa0bARAoQJ4V9Z+AMiNjZeypwB0deDklZQ OB6qH9L0= X-Gm-Gg: ASbGnctPEYpZTmx669sQ910jwRPFrUwCPtK9J4JjLrMgh2apEVLpFOw4uZKLk+3aH3T mOatoW0+dT/nPNaEao8ubBHSHbC4oSzk1U+uzKauMkDo+MITEM3C7MkMZd2rX7JqHDk7UolJcZh tkCDSmJJm8Tg6B903NIUKXN1ZY63kVnR14Xbx7Ztd1iLeirfiDib11K1aJWlVnkFQirKj6/Xq43 xA3fBekl0TThmZpxhL1PGX+QJRBUi2SDdb3GqG+1Ox/YV3MhUkVXwMsoJtzQXsP47Im/sZw4TnZ QK4OBDDr+nnC2ltWduOAW0s54WA1Qx6ErkocPB0cBLNsw6nhSYwEhi8zrXZHdgNrsRQo0vZ83ky f0B/NLALZQddC8hKLS0VgQfX01e5WsDwxX9otPftQfCqKXDtUAxhzrgrapm00Mz9nFwI1hFuj2e u8 X-Google-Smtp-Source: AGHT+IGOw0qlDsxnoU+vKA/UvdlwbYyhckxJzdRWuP44Ae/YhL3fBnTji410tsUsLoTPsQG0MJuVlQ== X-Received: by 2002:a05:6000:290b:b0:3b7:8fcc:a1e3 with SMTP id ffacd0b85a97d-3b900b5108cmr3392835f8f.48.1754684604384; Fri, 08 Aug 2025 13:23:24 -0700 (PDT) From: Andrew Cooper To: Xen-devel Cc: Andrew Cooper , Jan Beulich , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= Subject: [PATCH 06/22] x86/traps: Introduce bsp_traps_reinit() Date: Fri, 8 Aug 2025 21:22:58 +0100 Message-Id: <20250808202314.1045968-7-andrew.cooper3@citrix.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250808202314.1045968-1-andrew.cooper3@citrix.com> References: <20250808202314.1045968-1-andrew.cooper3@citrix.com> 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: 1754684630473124100 ... to abstract away updating the refereces to the old BSP stack. Signed-off-by: Andrew Cooper Acked-by: Jan Beulich --- CC: Jan Beulich CC: Roger Pau Monn=C3=A9 --- xen/arch/x86/include/asm/traps.h | 1 + xen/arch/x86/setup.c | 6 +----- xen/arch/x86/traps-setup.c | 9 +++++++++ 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/xen/arch/x86/include/asm/traps.h b/xen/arch/x86/include/asm/tr= aps.h index 7414420e57d8..6ae451d3fc70 100644 --- a/xen/arch/x86/include/asm/traps.h +++ b/xen/arch/x86/include/asm/traps.h @@ -9,6 +9,7 @@ =20 void bsp_early_traps_init(void); void traps_init(void); +void bsp_traps_reinit(void); void percpu_traps_init(void); =20 extern unsigned int ler_msr; diff --git a/xen/arch/x86/setup.c b/xen/arch/x86/setup.c index 64f02699e1aa..c8c408e02436 100644 --- a/xen/arch/x86/setup.c +++ b/xen/arch/x86/setup.c @@ -902,11 +902,7 @@ static void __init noreturn reinit_bsp_stack(void) unsigned long *stack =3D (void*)(get_stack_bottom() & ~(STACK_SIZE - 1= )); int rc; =20 - /* Update TSS and ISTs */ - load_system_tables(); - - /* Update SYSCALL trampolines */ - percpu_traps_init(); + bsp_traps_reinit(); =20 stack_base[0] =3D stack; =20 diff --git a/xen/arch/x86/traps-setup.c b/xen/arch/x86/traps-setup.c index 7713f427d344..370f4d5f7b60 100644 --- a/xen/arch/x86/traps-setup.c +++ b/xen/arch/x86/traps-setup.c @@ -107,6 +107,15 @@ void __init traps_init(void) percpu_traps_init(); } =20 +/* + * Re-initialise all state referencing the early-boot stack. + */ +void bsp_traps_reinit(void) +{ + load_system_tables(); + percpu_traps_init(); +} + /* * Set up per-CPU linkage registers for exception, interrupt and syscall * handling. --=20 2.39.5 From nobody Mon Feb 9 08:08:02 2026 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=1754684628; cv=none; d=zohomail.com; s=zohoarc; b=a3tXeVl+wVKmaPWfRTupOZIuijdDu3dgp6I/LcU2kGyFxyPjlyEJyvEnQkt+oQkFZtWowj8BCUcXSLYVmeAikNI64VnPXCgdRyVyX54jSzzoJh2mKjicI0Z7CcoLgxSCZuKcpkShVVJ8CNbsEf2WeqREIASnJiFoK3nYuQRs8U8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1754684628; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=h85hVDVJx6qX407q69uvd9gGoiZ0d1y+NYblpylfdg8=; b=jE0rBZbsFYM2DNvTBYzA6524d8kT8CbdMnMb10vAHcu75zlNUr92ASOy1fyyZPfqwRQHD6LFu7ahSpc/weTQ9MU2czDEPOi8VAw8AaMDQilutlW4Pt5PoOyFL0omQv8wzjmjEIIkYhwkSnfvHOoOLVm8shTrDCVSrvYd1nCnQ84= 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 1754684628768318.4334928498647; Fri, 8 Aug 2025 13:23:48 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1075022.1437501 (Exim 4.92) (envelope-from ) id 1ukTce-0006xy-BN; Fri, 08 Aug 2025 20:23:28 +0000 Received: by outflank-mailman (output) from mailman id 1075022.1437501; Fri, 08 Aug 2025 20:23:28 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1ukTce-0006wp-5K; Fri, 08 Aug 2025 20:23:28 +0000 Received: by outflank-mailman (input) for mailman id 1075022; Fri, 08 Aug 2025 20:23:26 +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 1ukTcc-0005tW-BF for xen-devel@lists.xenproject.org; Fri, 08 Aug 2025 20:23:26 +0000 Received: from mail-wm1-x330.google.com (mail-wm1-x330.google.com [2a00:1450:4864:20::330]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 89bf789a-7495-11f0-a324-13f23c93f187; Fri, 08 Aug 2025 22:23:26 +0200 (CEST) Received: by mail-wm1-x330.google.com with SMTP id 5b1f17b1804b1-4589b3e3820so26573755e9.3 for ; Fri, 08 Aug 2025 13:23:26 -0700 (PDT) Received: from localhost.localdomain (host-195-149-20-212.as13285.net. [195.149.20.212]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-459e075047fsm103989805e9.1.2025.08.08.13.23.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 Aug 2025 13:23:24 -0700 (PDT) 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: 89bf789a-7495-11f0-a324-13f23c93f187 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.com; s=google; t=1754684605; x=1755289405; darn=lists.xenproject.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=h85hVDVJx6qX407q69uvd9gGoiZ0d1y+NYblpylfdg8=; b=qGZfcltPjK3K4MD4I+U4S/OW6x2tBlO0r/RYcWspvxqXjEdkQdZTeh+91IYvjEanDJ IzCHL6aHaM8W5hk4mNX6kdFgzPz+2ShkOOLPtNgFKkN7HyU1r21E5+1vmlI+gy35XSUo GCPKfplEeA3fA15QduhXq8wht+UJIg32t4LIE= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754684605; x=1755289405; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=h85hVDVJx6qX407q69uvd9gGoiZ0d1y+NYblpylfdg8=; b=iX6HQqJCotE6A/zWeOMKiflhHY0K1rY4JUYqWmaE0jJfXcPS9fK+13rKhEHKpNYNZi gcw2aNGM/ONiMaUG3ejPpvI2i60Ve7niv2iIFkQmQDfGIRvlU8YeL+V2IUYIwmI1+e+p DnzekAHho4Zn05tIfq+037AJbNpEHJELXx+8GtaAeLEFsw+fAIBPOv6hZ5KZ9cFE3+R5 MrnGr+F5cMeN6heFgXqxgAsMngG4Zd8fNXb2dc/tNZxpdZVhT/gy6D6jbLbMQDlfoyWp vz3tYaqo/RpEf0X14c0wjuXUs71xNLk9SLxZmz403GJ80SfoXVr4hkVH5aJkGbCXm/ml yDUQ== X-Gm-Message-State: AOJu0Yzj8O0cet9RcD1Z0xR0XuGRtQzeao6vqtUtRtock+SsacJBoFG/ kVtryNMMYK3Ance/GMdvyMKNNI99xIxVw0axo/tVUGF5/uks+DuvJzqxyKe2NLum9ILKJXoQKOO hPIfI21M= X-Gm-Gg: ASbGncvl+kcmVNZD3FRJNRDGvZFGSrAwXB3Vc3P9+CTo7gGR/MsNJ4j7G/kCe8T2Tmp ZsXUyVLwN1tb98orIgz+MaHgmot0fQX3lv5tqU7v1Hdri12ID8TeMxaGj+2/TxTAoBII62f+fIe O7F1If6Vhz5fWv5zv0uixMB1qIR4E8YMGlkyGK3b/WrxztwktmVpwdtgBivEH1POAfy8Z8Oippa OXN4uFj/RAQ4ez4NLMwlctZybH4j/a21qJYnYjBYrVy48NDu9YR3zs0n8S+NZundwOKF8VNCRhI GWjzUXqoUzfBJL+HQSxWMoaOwwxqCxOth+MfAB79MDGdbCwUBApktrYaaO6UBtaGy275uyFy+wp ERZ0ClNMXvygXfaIGHw8xysSx/xZUOZPJFS9TbqfX3x9KLL6Pg1FWGnzOgTJUGEUBE1aOKvj92m nR X-Google-Smtp-Source: AGHT+IGYu93z8rD/S4ZzA0Js9mi1Yg20K9J7g4zt6O4WDVxrf7zwfkIAFpVjDibxTtyZOq96BOWg6Q== X-Received: by 2002:a05:600c:1c98:b0:456:eab:633e with SMTP id 5b1f17b1804b1-459fb4fb214mr14807545e9.17.1754684605171; Fri, 08 Aug 2025 13:23:25 -0700 (PDT) From: Andrew Cooper To: Xen-devel Cc: Andrew Cooper , Jan Beulich , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= Subject: [PATCH 07/22] x86/spec-ctrl: Rework init_shadow_spec_ctrl_state() to take an info pointer Date: Fri, 8 Aug 2025 21:22:59 +0100 Message-Id: <20250808202314.1045968-8-andrew.cooper3@citrix.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250808202314.1045968-1-andrew.cooper3@citrix.com> References: <20250808202314.1045968-1-andrew.cooper3@citrix.com> 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: 1754684629329116600 We're going to want to reuse it for a remote stack shortly. No functional change. Signed-off-by: Andrew Cooper Acked-by: Jan Beulich --- CC: Jan Beulich CC: Roger Pau Monn=C3=A9 --- xen/arch/x86/include/asm/spec_ctrl.h | 4 +--- xen/arch/x86/setup.c | 2 +- xen/arch/x86/smpboot.c | 2 +- xen/arch/x86/spec_ctrl.c | 2 +- 4 files changed, 4 insertions(+), 6 deletions(-) diff --git a/xen/arch/x86/include/asm/spec_ctrl.h b/xen/arch/x86/include/as= m/spec_ctrl.h index 6724d3812029..3d92928f9439 100644 --- a/xen/arch/x86/include/asm/spec_ctrl.h +++ b/xen/arch/x86/include/asm/spec_ctrl.h @@ -99,10 +99,8 @@ extern bool opt_bp_spec_reduce; */ extern paddr_t l1tf_addr_mask, l1tf_safe_maddr; =20 -static inline void init_shadow_spec_ctrl_state(void) +static inline void init_shadow_spec_ctrl_state(struct cpu_info *info) { - struct cpu_info *info =3D get_cpu_info(); - info->shadow_spec_ctrl =3D 0; info->xen_spec_ctrl =3D default_xen_spec_ctrl; info->scf =3D default_scf; diff --git a/xen/arch/x86/setup.c b/xen/arch/x86/setup.c index c8c408e02436..6fb42c5a5f95 100644 --- a/xen/arch/x86/setup.c +++ b/xen/arch/x86/setup.c @@ -1126,7 +1126,7 @@ void asmlinkage __init noreturn __start_xen(void) =20 /* Critical region without exception handling. Any fault is deadly! */ =20 - init_shadow_spec_ctrl_state(); + init_shadow_spec_ctrl_state(info); =20 percpu_init_areas(); =20 diff --git a/xen/arch/x86/smpboot.c b/xen/arch/x86/smpboot.c index 302be4341bf3..ce4862dde5a7 100644 --- a/xen/arch/x86/smpboot.c +++ b/xen/arch/x86/smpboot.c @@ -332,7 +332,7 @@ void asmlinkage start_secondary(void) set_current(idle_vcpu[cpu]); this_cpu(curr_vcpu) =3D idle_vcpu[cpu]; rdmsrl(MSR_EFER, this_cpu(efer)); - init_shadow_spec_ctrl_state(); + init_shadow_spec_ctrl_state(info); =20 /* * Just as during early bootstrap, it is convenient here to disable diff --git a/xen/arch/x86/spec_ctrl.c b/xen/arch/x86/spec_ctrl.c index feae0d710f8e..1ff3d6835d9d 100644 --- a/xen/arch/x86/spec_ctrl.c +++ b/xen/arch/x86/spec_ctrl.c @@ -2226,7 +2226,7 @@ void __init init_speculation_mitigations(void) opt_eager_fpu =3D should_use_eager_fpu(); =20 /* (Re)init BSP state now that default_scf has been calculated. */ - init_shadow_spec_ctrl_state(); + init_shadow_spec_ctrl_state(get_cpu_info()); =20 /* * For microcoded IBRS only (i.e. Intel, pre eIBRS), it is recommended= to --=20 2.39.5 From nobody Mon Feb 9 08:08:02 2026 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=1754684635; cv=none; d=zohomail.com; s=zohoarc; b=byCkbU8MalnUtgKsCmaBmG/q54vDmxQqShZrk+pky2fsQk0EvEHEUp32TM7WhfZ09Wgrn7IPcg+QNsliod6SkslTwsJGuNytDPbqzjbrEmrG9OzyXo918NwMwj4aAnBGDo/UK5/fCwdv/na26ve+DFZTXVsU9QUI3jp/6tAi+94= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1754684635; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=xVi01EX33hOUrp3MMSd3/Vp73DFlKzoPe7RHBP32PRE=; b=JCe6Gsl8qUTns4FsR5FoOZaD5tgaSUDAKJbG6w7uRdMZrG7xY1yaVoJxbr2Of2u97AV5mMy6O7JwUoi/p3I1ZtR3uVuPHTXgPn6/FCFlKQDdSSsf1di2wuCRoDrmLjjnd2ujoJqQnZ9sWSonzRnRuo0lL/NJmzJL7QU/RjCijzs= 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 1754684635939686.9915622069894; Fri, 8 Aug 2025 13:23:55 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1075024.1437509 (Exim 4.92) (envelope-from ) id 1ukTcf-00079H-1f; Fri, 08 Aug 2025 20:23:29 +0000 Received: by outflank-mailman (output) from mailman id 1075024.1437509; Fri, 08 Aug 2025 20:23: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 1ukTce-00077k-Rz; Fri, 08 Aug 2025 20:23:28 +0000 Received: by outflank-mailman (input) for mailman id 1075024; Fri, 08 Aug 2025 20:23:27 +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 1ukTcd-0005tW-EJ for xen-devel@lists.xenproject.org; Fri, 08 Aug 2025 20:23:27 +0000 Received: from mail-wr1-x432.google.com (mail-wr1-x432.google.com [2a00:1450:4864:20::432]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 8a5e068f-7495-11f0-a324-13f23c93f187; Fri, 08 Aug 2025 22:23:27 +0200 (CEST) Received: by mail-wr1-x432.google.com with SMTP id ffacd0b85a97d-3a6cd1a6fecso1813886f8f.3 for ; Fri, 08 Aug 2025 13:23:27 -0700 (PDT) Received: from localhost.localdomain (host-195-149-20-212.as13285.net. [195.149.20.212]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-459e075047fsm103989805e9.1.2025.08.08.13.23.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 Aug 2025 13:23:25 -0700 (PDT) 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: 8a5e068f-7495-11f0-a324-13f23c93f187 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.com; s=google; t=1754684606; x=1755289406; darn=lists.xenproject.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=xVi01EX33hOUrp3MMSd3/Vp73DFlKzoPe7RHBP32PRE=; b=l2P59wmR4jF4FKc2/fKvU95WSbrQAzwaU+aEzmgAztNdISJOfT+dgxwdWQcnXieHYR 1B0q+GYlYYhCsINrmv6L8x2ZZ52+GcmJaOrcd5drkU2qVEqWI10wUkY10W9Qi98azZBo J2uPX5IPudEtG0THuGlnRJKZeAAjF6orlrNNg= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754684606; x=1755289406; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=xVi01EX33hOUrp3MMSd3/Vp73DFlKzoPe7RHBP32PRE=; b=fScvTiAf+Ymj3prVS+Maz3gaTlSrBO1Kclj8J4WLUqJgKFO3wZ5UCUSwmX5uo6IgrA CbNpK0DkHHvstLDiaDrQBqAx9KnbOMaztA4xSoFfJs9FKZO/bZ8qkc9+VzTbQvCCGk66 qWTrmg8tYpp3tTiXbMBh3PIPDWoAUEvNiO0LQZH9OsUm00VXNYUK6AxV/8VAp5JJAgJ3 gWcSkpUfeOM9jLzPjoTYwQbtz5SFu7BMWL8eYg3jFUwqzAvw7+aOZ5TnBSK1lQVYnD0C QTL73cOt4ZBefWm2H+TQKmicUlokSdHZiEjB77robdjUs6mrU8BkqB78A+n+U+/gjcLM eqQA== X-Gm-Message-State: AOJu0YyuvMcmuTKVNwJiTU6WrrcFKk1P+JLn20j+4Yr/pWtZ0dkD/tif OWUac8UHPjZHLJbjJz980xGSv78EceoeevPbJ8VIptDmEKroC/OdgaePiwhBiNVQSa8gj5RPlUN nocbe8Dw= X-Gm-Gg: ASbGncuC4m+JkGGlBoLqzRgb9VbyGv5YGbDD7OutVHFiKw59KibhO5jKzi9UxqvgSrf OEoCd1cYBcR5dNIKIuWto05BLz7ICSq66PKLZSteplidNnPWGGemW865vWjwjplwLVlpVMSdKFE NinBGYns0YFN6V4QEJ63LQ5aGc9CIDvlOdDODCjW28MUm/Rx1BDZDFEwYeZh3HbS1BKIYJgeHtX GGEBFI2SyAcs9QDjHqnI3b0+kLgDFqblnLIUOl01ibq0eVPJWJ1e6l6V6J13JqHZPyhmuz5RITw c5u/qxWjG1TEiEa9zI+8+Ac7DTGKHxDbY+Mba/GElmEXWHWrhBBLYzAgSYj2BbrWr1SDnSW6rAU pyd+jEw1kNVBRjxwYANssyFDEqZ6832T5wg3KP3xGHgHejOm+02FJZ9S8P0NUSV11XHE9uOfynF Ho X-Google-Smtp-Source: AGHT+IFcWAFnsh+w6TGUK7qxOIWp6b3CF1PqJ7dhPI4YKqhFhpNG4OBh3gsO+Yg3uQaEBt5spBU4Fg== X-Received: by 2002:a05:6000:400b:b0:3b7:61e5:a8a5 with SMTP id ffacd0b85a97d-3b900b83578mr3949467f8f.47.1754684606025; Fri, 08 Aug 2025 13:23:26 -0700 (PDT) From: Andrew Cooper To: Xen-devel Cc: Andrew Cooper , Jan Beulich , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= Subject: [PATCH 08/22] x86/traps: Introduce ap_early_traps_init() and set up exception handling earlier Date: Fri, 8 Aug 2025 21:23:00 +0100 Message-Id: <20250808202314.1045968-9-andrew.cooper3@citrix.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250808202314.1045968-1-andrew.cooper3@citrix.com> References: <20250808202314.1045968-1-andrew.cooper3@citrix.com> 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: 1754684638394124100 As things stand, we set up AP/S3 exception handling marginally after the fragile activity of setting up shadow stacks. Shadow stack setup is going = to get more complicated under FRED. Introduce ap_early_traps_init() and call it ahead of setting up shadow stac= ks. To start with, call load_system_tables() which is sufficient to set up full exception handling. In order to handle exceptions, current and the speculation controls needs to work. cpu_smpboot_alloc() already constructs some of the AP's top-of-stack block, so have it set up a little more. This gets us complete exception coverage of setting up shadow stacks, rather than dying with a triple fault. Signed-off-by: Andrew Cooper --- CC: Jan Beulich CC: Roger Pau Monn=C3=A9 --- xen/arch/x86/acpi/wakeup_prot.S | 5 +++-- xen/arch/x86/boot/x86_64.S | 5 ++++- xen/arch/x86/smpboot.c | 17 ++++------------- xen/arch/x86/traps-setup.c | 12 ++++++++++++ 4 files changed, 23 insertions(+), 16 deletions(-) diff --git a/xen/arch/x86/acpi/wakeup_prot.S b/xen/arch/x86/acpi/wakeup_pro= t.S index 92af6230b31f..60eca4010042 100644 --- a/xen/arch/x86/acpi/wakeup_prot.S +++ b/xen/arch/x86/acpi/wakeup_prot.S @@ -63,6 +63,9 @@ LABEL(s3_resume) pushq %rax lretq 1: + /* Set up early exceptions and CET before entering C properly. */ + call ap_early_traps_init + #if defined(CONFIG_XEN_SHSTK) || defined(CONFIG_XEN_IBT) call xen_msr_s_cet_value test %eax, %eax @@ -117,8 +120,6 @@ LABEL(s3_resume) .L_cet_done: #endif /* CONFIG_XEN_SHSTK || CONFIG_XEN_IBT */ =20 - call load_system_tables - /* Restore CR4 from the cpuinfo block. */ GET_STACK_END(bx) mov STACK_CPUINFO_FIELD(cr4)(%rbx), %rax diff --git a/xen/arch/x86/boot/x86_64.S b/xen/arch/x86/boot/x86_64.S index 95a6b6cf63bd..0dfcc8a88a40 100644 --- a/xen/arch/x86/boot/x86_64.S +++ b/xen/arch/x86/boot/x86_64.S @@ -30,7 +30,10 @@ ENTRY(__high_start) test %ebx,%ebx jz .L_bsp =20 - /* APs. Set up CET before entering C properly. */ + /* APs. Set up early exceptions and CET before entering C properl= y. */ + + call ap_early_traps_init + #if defined(CONFIG_XEN_SHSTK) || defined(CONFIG_XEN_IBT) call xen_msr_s_cet_value test %eax, %eax diff --git a/xen/arch/x86/smpboot.c b/xen/arch/x86/smpboot.c index ce4862dde5a7..8af6556999d7 100644 --- a/xen/arch/x86/smpboot.c +++ b/xen/arch/x86/smpboot.c @@ -327,12 +327,7 @@ void asmlinkage start_secondary(void) struct cpu_info *info =3D get_cpu_info(); unsigned int cpu =3D smp_processor_id(); =20 - /* Critical region without IDT or TSS. Any fault is deadly! */ - - set_current(idle_vcpu[cpu]); - this_cpu(curr_vcpu) =3D idle_vcpu[cpu]; rdmsrl(MSR_EFER, this_cpu(efer)); - init_shadow_spec_ctrl_state(info); =20 /* * Just as during early bootstrap, it is convenient here to disable @@ -352,14 +347,6 @@ void asmlinkage start_secondary(void) */ spin_debug_disable(); =20 - get_cpu_info()->use_pv_cr3 =3D false; - get_cpu_info()->xen_cr3 =3D 0; - get_cpu_info()->pv_cr3 =3D 0; - - load_system_tables(); - - /* Full exception support from here on in. */ - if ( cpu_has_pks ) wrpkrs_and_cache(0); /* Must be before setting CR4.PKS */ =20 @@ -1064,8 +1051,12 @@ static int cpu_smpboot_alloc(unsigned int cpu) goto out; =20 info =3D get_cpu_info_from_stack((unsigned long)stack_base[cpu]); + memset(info, 0, sizeof(*info)); + init_shadow_spec_ctrl_state(info); info->processor_id =3D cpu; info->per_cpu_offset =3D __per_cpu_offset[cpu]; + info->current_vcpu =3D idle_vcpu[cpu]; + per_cpu(curr_vcpu, cpu) =3D idle_vcpu[cpu]; =20 gdt =3D per_cpu(gdt, cpu) ?: alloc_xenheap_pages(0, memflags); if ( gdt =3D=3D NULL ) diff --git a/xen/arch/x86/traps-setup.c b/xen/arch/x86/traps-setup.c index 370f4d5f7b60..8ca379c9e4cb 100644 --- a/xen/arch/x86/traps-setup.c +++ b/xen/arch/x86/traps-setup.c @@ -127,3 +127,15 @@ void percpu_traps_init(void) if ( cpu_has_xen_lbr ) wrmsrl(MSR_IA32_DEBUGCTLMSR, IA32_DEBUGCTLMSR_LBR); } + +/* + * Configure exception handling on APs and S3. Called before entering C + * properly, and before shadow stacks are activated. + * + * boot_gdt is currently loaded, and we must switch to our local GDT. The + * local IDT has unknown IST-ness. + */ +void asmlinkage ap_early_traps_init(void) +{ + load_system_tables(); +} --=20 2.39.5 From nobody Mon Feb 9 08:08:02 2026 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=1754684638; cv=none; d=zohomail.com; s=zohoarc; b=Aqr5WRJBqP1zmf/KBxNFOR9Ob28NFWzqWRuh+/RO+gkOP8AaJnrMVB/MTgSUGxPK3pORXx8satoY/6tWlGC0jpWdr5qpkesVIUhlbk5NTjCiNTaMvvA0yRrpj/VAWm1WihCHczZ6a9UOBKhMIogljIcDwS/S9YBh8OxleNiYDlw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1754684638; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=b2avIK78ICYjlmOagbLqWHEpOkiTfdHUyKFlDzZ7jHg=; b=KvBHM6Zd9HkQHr4Za/5K8H6g0Yy7ame8pxdxiGa62pQhnPOSGJdobXHbIozYjmDhIzKfP2V4LKuzNwQfMOkeR31QLiCOEir0ZloH56m2aP9KHI2/jsi4OJu2i0PQTYFoxRmbGGXgoLiROu2I2/RAPRpOPxHmTq3ABFMMyPbxSdA= 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 175468463896679.85178814566984; Fri, 8 Aug 2025 13:23:58 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1075026.1437527 (Exim 4.92) (envelope-from ) id 1ukTcg-0007Ui-CA; Fri, 08 Aug 2025 20:23:30 +0000 Received: by outflank-mailman (output) from mailman id 1075026.1437527; Fri, 08 Aug 2025 20:23:30 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1ukTcg-0007TE-2w; Fri, 08 Aug 2025 20:23:30 +0000 Received: by outflank-mailman (input) for mailman id 1075026; Fri, 08 Aug 2025 20:23: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 1ukTce-0005tW-4N for xen-devel@lists.xenproject.org; Fri, 08 Aug 2025 20:23:28 +0000 Received: from mail-wr1-x431.google.com (mail-wr1-x431.google.com [2a00:1450:4864:20::431]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 8acc2793-7495-11f0-a324-13f23c93f187; Fri, 08 Aug 2025 22:23:27 +0200 (CEST) Received: by mail-wr1-x431.google.com with SMTP id ffacd0b85a97d-3b79bdc9a7dso1424472f8f.1 for ; Fri, 08 Aug 2025 13:23:27 -0700 (PDT) Received: from localhost.localdomain (host-195-149-20-212.as13285.net. [195.149.20.212]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-459e075047fsm103989805e9.1.2025.08.08.13.23.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 Aug 2025 13:23:26 -0700 (PDT) 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: 8acc2793-7495-11f0-a324-13f23c93f187 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.com; s=google; t=1754684607; x=1755289407; darn=lists.xenproject.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=b2avIK78ICYjlmOagbLqWHEpOkiTfdHUyKFlDzZ7jHg=; b=UilhFhEJbZhZC2zsnafjD+jqAqgNRJG33GuL6VCyNO9dUH07xHbaMsAHUchk52HodJ fHItsT9Cg8dE5FyPPyv0fLcYjt0GQkjDdSG+dzi5MLC/x3ODRIThhmloT9OddiKNijVs 6tSzJql/blKWEyRPeBZ8nHUF8AIgNiMfZ1uXI= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754684607; x=1755289407; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=b2avIK78ICYjlmOagbLqWHEpOkiTfdHUyKFlDzZ7jHg=; b=gHJv0RyNNnlIMRxkY0B8mRrtf8CriM15oOQRtwxr52DOyiOMvJwhWNmc/9dZ2NTyEQ P3Ym/IOPF+ZHSmCRLqyZ7rFePf3Mg2maX0jr2hRc1nnye2u7S6GurN25WxUBnRpzKlhe g1cMgOLgB+s+ZX6Cf2P2c8+g8t9tjZCy7psTqzexRlivBdGQY1DnBBpS2zdheHs+4fzf tCUalZH5hi2Ap0vouhWooZY1TPKaIzV6HP8KBEHki92+mBJgYubYhsAIhcbr/esxPIsA jrA067/vdDkaPdwK4g57yJh9DU2GoYNB4/0zAWpMahl2Pg8vijxtqFLYfN31a4m+1myO 90DQ== X-Gm-Message-State: AOJu0YzWrwfDb3OHWDksLgE2FtKbSiyJdvwZSlFLhYTQcRRR6YI9a12i v2uhAPP5GhRw8rgmZH84zJ4BZiq5H2UgdWqIUdLYgNrs2THXMwe5cw8bPZJqDQc3enbt+YeYUwx HJe4nzJI= X-Gm-Gg: ASbGncvYAdrAJksvMqo+kSkGDB79R432BJt9KL8aeJNI4oqEB6gcMkZuYrpjyNDCyzz 8lXMTuvqos6UeLtOZPFR5hR4CU7miV23ikKGwgHf/RNt6TsvX2yhU6tY55fSWdmoJERpmPWqWiq WYZy3ptzAKd7sOukAEX7mXgOuiKxELviEOPTx+dFCNfEUVle1Y4DPfPQqU4q5VYA9utxKg87N1I PqmGiGss8Kg77KFoPaYiyQ9L11KHOqI7BkOcVqUyTnlxO8/BAeLGaNmKMbQk8EtAIpQrrZSFQql q8GeBz2O1b2nW3gOzW15dE8LaO9i53fdBtvHyCyMySqjysFS3cIJ79nfsNrQRX54eNth0BthEW/ qMt6lOld3jjO+f9YpOhQOV4D1O1eB7b7z0wYM//ail0Sb/H6euPf+rZZMIOVNtiWbyhktt+qoDI TP1daxaSCtDOw= X-Google-Smtp-Source: AGHT+IFhsUqtMUd00xT8YcU446osfo1/oRuXTXfsZYBCQBDf1L75TZHaWK6AXiKPj7YHi0QESLC+PQ== X-Received: by 2002:a05:6000:2408:b0:3b8:d1d9:70ba with SMTP id ffacd0b85a97d-3b900b7517dmr3549077f8f.32.1754684606743; Fri, 08 Aug 2025 13:23:26 -0700 (PDT) From: Andrew Cooper To: Xen-devel Cc: Andrew Cooper , Jan Beulich , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= Subject: [PATCH 09/22] x86/traps: Move load_system_tables() into traps-setup.c Date: Fri, 8 Aug 2025 21:23:01 +0100 Message-Id: <20250808202314.1045968-10-andrew.cooper3@citrix.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250808202314.1045968-1-andrew.cooper3@citrix.com> References: <20250808202314.1045968-1-andrew.cooper3@citrix.com> 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: 1754684639613116600 Switch it to Xen coding style and fix MISRA violations. Make it static as there are no external caller now. Since commit a35816b5cae8 ("x86/traps: Introduce early_traps_init() and simplify setup"), load_system_tables() is called later on the BSP, so the SYS_STATE_early_boot check can be dropped from the safety BUG_ON(). Move the BUILD_BUG_ON() into build_assertions(), and introduce an endof_field() helper to make the expression clearer. Swap wrmsrl(MSR_ISST, ...) for wrmsrns(). No serialisation is needed at th= is point. No functional change. Signed-off-by: Andrew Cooper Acked-by: Jan Beulich --- CC: Jan Beulich CC: Roger Pau Monn=C3=A9 --- xen/arch/x86/cpu/common.c | 118 -------------------------- xen/arch/x86/include/asm/system.h | 1 - xen/arch/x86/traps-setup.c | 132 ++++++++++++++++++++++++++++++ xen/include/xen/macros.h | 2 + 4 files changed, 134 insertions(+), 119 deletions(-) diff --git a/xen/arch/x86/cpu/common.c b/xen/arch/x86/cpu/common.c index cdc41248d4e9..da05015578aa 100644 --- a/xen/arch/x86/cpu/common.c +++ b/xen/arch/x86/cpu/common.c @@ -843,124 +843,6 @@ void print_cpu_info(unsigned int cpu) =20 static cpumask_t cpu_initialized; =20 -/* - * Sets up system tables and descriptors. - * - * - Sets up TSS with stack pointers, including ISTs - * - Inserts TSS selector into regular and compat GDTs - * - Loads GDT, IDT, TR then null LDT - * - Sets up IST references in the IDT - */ -void load_system_tables(void) -{ - unsigned int i, cpu =3D smp_processor_id(); - unsigned long stack_bottom =3D get_stack_bottom(), - stack_top =3D stack_bottom & ~(STACK_SIZE - 1); - /* - * NB: define tss_page as a local variable because clang 3.5 doesn't - * support using ARRAY_SIZE against per-cpu variables. - */ - struct tss_page *tss_page =3D &this_cpu(tss_page); - idt_entry_t *idt =3D this_cpu(idt); - - /* The TSS may be live. Disuade any clever optimisations. */ - volatile struct tss64 *tss =3D &tss_page->tss; - seg_desc_t *gdt =3D - this_cpu(gdt) - FIRST_RESERVED_GDT_ENTRY; - - const struct desc_ptr gdtr =3D { - .base =3D (unsigned long)gdt, - .limit =3D LAST_RESERVED_GDT_BYTE, - }; - const struct desc_ptr idtr =3D { - .base =3D (unsigned long)idt, - .limit =3D sizeof(bsp_idt) - 1, - }; - - /* - * Set up the TSS. Warning - may be live, and the NMI/#MC must remain - * valid on every instruction boundary. (Note: these are all - * semantically ACCESS_ONCE() due to tss's volatile qualifier.) - * - * rsp0 refers to the primary stack. #MC, NMI, #DB and #DF handlers - * each get their own stacks. No IO Bitmap. - */ - tss->rsp0 =3D stack_bottom; - tss->ist[IST_MCE - 1] =3D stack_top + (1 + IST_MCE) * PAGE_SIZE; - tss->ist[IST_NMI - 1] =3D stack_top + (1 + IST_NMI) * PAGE_SIZE; - tss->ist[IST_DB - 1] =3D stack_top + (1 + IST_DB) * PAGE_SIZE; - tss->ist[IST_DF - 1] =3D stack_top + (1 + IST_DF) * PAGE_SIZE; - tss->bitmap =3D IOBMP_INVALID_OFFSET; - - /* All other stack pointers poisioned. */ - for ( i =3D IST_MAX; i < ARRAY_SIZE(tss->ist); ++i ) - tss->ist[i] =3D 0x8600111111111111ul; - tss->rsp1 =3D 0x8600111111111111ul; - tss->rsp2 =3D 0x8600111111111111ul; - - /* - * Set up the shadow stack IST. Used entries must point at the - * supervisor stack token. Unused entries are poisoned. - * - * This IST Table may be live, and the NMI/#MC entries must - * remain valid on every instruction boundary, hence the - * volatile qualifier. - */ - if (cpu_has_xen_shstk) { - volatile uint64_t *ist_ssp =3D tss_page->ist_ssp; - unsigned long - mce_ssp =3D stack_top + (IST_MCE * IST_SHSTK_SIZE) - 8, - nmi_ssp =3D stack_top + (IST_NMI * IST_SHSTK_SIZE) - 8, - db_ssp =3D stack_top + (IST_DB * IST_SHSTK_SIZE) - 8, - df_ssp =3D stack_top + (IST_DF * IST_SHSTK_SIZE) - 8; - - ist_ssp[0] =3D 0x8600111111111111ul; - ist_ssp[IST_MCE] =3D mce_ssp; - ist_ssp[IST_NMI] =3D nmi_ssp; - ist_ssp[IST_DB] =3D db_ssp; - ist_ssp[IST_DF] =3D df_ssp; - for ( i =3D IST_DF + 1; i < ARRAY_SIZE(tss_page->ist_ssp); ++i ) - ist_ssp[i] =3D 0x8600111111111111ul; - - if (IS_ENABLED(CONFIG_XEN_SHSTK) && rdssp() !=3D SSP_NO_SHSTK) { - /* - * Rewrite supervisor tokens when shadow stacks are - * active. This resets any busy bits left across S3. - */ - wrss(mce_ssp, _p(mce_ssp)); - wrss(nmi_ssp, _p(nmi_ssp)); - wrss(db_ssp, _p(db_ssp)); - wrss(df_ssp, _p(df_ssp)); - } - - wrmsrl(MSR_ISST, (unsigned long)ist_ssp); - } - - _set_tssldt_desc(gdt + TSS_ENTRY, (unsigned long)tss, - sizeof(*tss) - 1, SYS_DESC_tss_avail); - if ( IS_ENABLED(CONFIG_PV32) ) - _set_tssldt_desc( - this_cpu(compat_gdt) - FIRST_RESERVED_GDT_ENTRY + TSS_ENTRY, - (unsigned long)tss, sizeof(*tss) - 1, SYS_DESC_tss_busy); - - per_cpu(full_gdt_loaded, cpu) =3D false; - lgdt(&gdtr); - lidt(&idtr); - ltr(TSS_SELECTOR); - lldt(0); - - enable_each_ist(idt); - - /* - * Bottom-of-stack must be 16-byte aligned! - * - * Defer checks until exception support is sufficiently set up. - */ - BUILD_BUG_ON((sizeof(struct cpu_info) - - sizeof(struct cpu_user_regs)) & 0xf); - BUG_ON(system_state !=3D SYS_STATE_early_boot && (stack_bottom & 0xf)); -} - static void skinit_enable_intr(void) { uint64_t val; diff --git a/xen/arch/x86/include/asm/system.h b/xen/arch/x86/include/asm/s= ystem.h index 57446c5b465c..3cdc56e4ba6d 100644 --- a/xen/arch/x86/include/asm/system.h +++ b/xen/arch/x86/include/asm/system.h @@ -256,7 +256,6 @@ static inline int local_irq_is_enabled(void) #define BROKEN_ACPI_Sx 0x0001 #define BROKEN_INIT_AFTER_S1 0x0002 =20 -void load_system_tables(void); void subarch_percpu_traps_init(void); =20 #endif diff --git a/xen/arch/x86/traps-setup.c b/xen/arch/x86/traps-setup.c index 8ca379c9e4cb..13b8fcf0ba51 100644 --- a/xen/arch/x86/traps-setup.c +++ b/xen/arch/x86/traps-setup.c @@ -7,6 +7,7 @@ =20 #include #include +#include #include #include =20 @@ -19,6 +20,124 @@ boolean_param("ler", opt_ler); =20 void nocall entry_PF(void); =20 +/* + * Sets up system tables and descriptors for IDT devliery. + * + * - Sets up TSS with stack pointers, including ISTs + * - Inserts TSS selector into regular and compat GDTs + * - Loads GDT, IDT, TR then null LDT + * - Sets up IST references in the IDT + */ +static void load_system_tables(void) +{ + unsigned int i, cpu =3D smp_processor_id(); + unsigned long stack_bottom =3D get_stack_bottom(), + stack_top =3D stack_bottom & ~(STACK_SIZE - 1); + /* + * NB: define tss_page as a local variable because clang 3.5 doesn't + * support using ARRAY_SIZE against per-cpu variables. + */ + struct tss_page *tss_page =3D &this_cpu(tss_page); + idt_entry_t *idt =3D this_cpu(idt); + + /* The TSS may be live. Disuade any clever optimisations. */ + volatile struct tss64 *tss =3D &tss_page->tss; + seg_desc_t *gdt =3D + this_cpu(gdt) - FIRST_RESERVED_GDT_ENTRY; + + const struct desc_ptr gdtr =3D { + .base =3D (unsigned long)gdt, + .limit =3D LAST_RESERVED_GDT_BYTE, + }; + const struct desc_ptr idtr =3D { + .base =3D (unsigned long)idt, + .limit =3D sizeof(bsp_idt) - 1, + }; + + /* + * Set up the TSS. Warning - may be live, and the NMI/#MC must remain + * valid on every instruction boundary. (Note: these are all + * semantically ACCESS_ONCE() due to tss's volatile qualifier.) + * + * rsp0 refers to the primary stack. #MC, NMI, #DB and #DF handlers + * each get their own stacks. No IO Bitmap. + */ + tss->rsp0 =3D stack_bottom; + tss->ist[IST_MCE - 1] =3D stack_top + (1 + IST_MCE) * PAGE_SIZE; + tss->ist[IST_NMI - 1] =3D stack_top + (1 + IST_NMI) * PAGE_SIZE; + tss->ist[IST_DB - 1] =3D stack_top + (1 + IST_DB) * PAGE_SIZE; + tss->ist[IST_DF - 1] =3D stack_top + (1 + IST_DF) * PAGE_SIZE; + tss->bitmap =3D IOBMP_INVALID_OFFSET; + + /* All other stack pointers poisioned. */ + for ( i =3D IST_MAX; i < ARRAY_SIZE(tss->ist); ++i ) + tss->ist[i] =3D 0x8600111111111111UL; + tss->rsp1 =3D 0x8600111111111111UL; + tss->rsp2 =3D 0x8600111111111111UL; + + /* + * Set up the shadow stack IST. Used entries must point at the + * supervisor stack token. Unused entries are poisoned. + * + * This IST Table may be live, and the NMI/#MC entries must + * remain valid on every instruction boundary, hence the + * volatile qualifier. + */ + if ( cpu_has_xen_shstk ) + { + volatile uint64_t *ist_ssp =3D tss_page->ist_ssp; + unsigned long + mce_ssp =3D stack_top + (IST_MCE * IST_SHSTK_SIZE) - 8, + nmi_ssp =3D stack_top + (IST_NMI * IST_SHSTK_SIZE) - 8, + db_ssp =3D stack_top + (IST_DB * IST_SHSTK_SIZE) - 8, + df_ssp =3D stack_top + (IST_DF * IST_SHSTK_SIZE) - 8; + + ist_ssp[0] =3D 0x8600111111111111UL; + ist_ssp[IST_MCE] =3D mce_ssp; + ist_ssp[IST_NMI] =3D nmi_ssp; + ist_ssp[IST_DB] =3D db_ssp; + ist_ssp[IST_DF] =3D df_ssp; + for ( i =3D IST_DF + 1; i < ARRAY_SIZE(tss_page->ist_ssp); ++i ) + ist_ssp[i] =3D 0x8600111111111111UL; + + if ( IS_ENABLED(CONFIG_XEN_SHSTK) && rdssp() !=3D SSP_NO_SHSTK ) + { + /* + * Rewrite supervisor tokens when shadow stacks are + * active. This resets any busy bits left across S3. + */ + wrss(mce_ssp, _p(mce_ssp)); + wrss(nmi_ssp, _p(nmi_ssp)); + wrss(db_ssp, _p(db_ssp)); + wrss(df_ssp, _p(df_ssp)); + } + + wrmsrns(MSR_ISST, (unsigned long)ist_ssp); + } + + _set_tssldt_desc(gdt + TSS_ENTRY, (unsigned long)tss, + sizeof(*tss) - 1, SYS_DESC_tss_avail); + if ( IS_ENABLED(CONFIG_PV32) ) + _set_tssldt_desc( + this_cpu(compat_gdt) - FIRST_RESERVED_GDT_ENTRY + TSS_ENTRY, + (unsigned long)tss, sizeof(*tss) - 1, SYS_DESC_tss_busy); + + per_cpu(full_gdt_loaded, cpu) =3D false; + lgdt(&gdtr); + lidt(&idtr); + ltr(TSS_SELECTOR); + lldt(0); + + enable_each_ist(idt); + + /* + * tss->rsp0 must be 16-byte aligned. + * + * Defer checks until exception support is sufficiently set up. + */ + BUG_ON(stack_bottom & 15); +} + static void __init init_ler(void) { unsigned int msr =3D 0; @@ -139,3 +258,16 @@ void asmlinkage ap_early_traps_init(void) { load_system_tables(); } + +static void __init __maybe_unused build_assertions(void) +{ + /* + * This is best-effort (it doesn't cover some padding corner cases), b= ut + * is preforable to hitting the check at boot time. + * + * tss->rsp0, pointing at the end of cpu_info.guest_cpu_user_regs, mus= t be + * 16-byte aligned. + */ + BUILD_BUG_ON((sizeof(struct cpu_info) - + endof_field(struct cpu_info, guest_cpu_user_regs)) & 15); +} diff --git a/xen/include/xen/macros.h b/xen/include/xen/macros.h index cd528fbdb127..726ba221e0d8 100644 --- a/xen/include/xen/macros.h +++ b/xen/include/xen/macros.h @@ -102,6 +102,8 @@ */ #define sizeof_field(type, member) sizeof(((type *)NULL)->member) =20 +#define endof_field(type, member) (offsetof(type, member) + sizeof_field(t= ype, member)) + /* Cast an arbitrary integer to a pointer. */ #define _p(x) ((void *)(unsigned long)(x)) =20 --=20 2.39.5 From nobody Mon Feb 9 08:08:02 2026 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=1754684625; cv=none; d=zohomail.com; s=zohoarc; b=Te+p4gpfr02X7Jx5ASCfEMKoZqlPMwTJULlVDCgAZD1gjlSCPGYEJlu7keM6XCPZ0GHs4GkC7e9EBcj4sJRHFw0KAh0WhrFXuUehve1jjmqQIY4ulCuZNwOHnxz4s+0a8ZQsXEO7rokY4rEKcRAPLc2iFov5qNekW9u75xws4qo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1754684625; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=ycWquJLCuLcfKthxLYACscQrBOx1g62XAtvbDRfueiI=; b=fYslUIKbNPQY8kM2ccjFYoECAaWcJlUSTlLUzaNTFmDAJ3Jf3arItdbL651f8PpWlildrNo4cSZJSJFbd8mMGyjU8D5m3xZBXjLHgXwlMsuWb7fTZtHHetcTIr8vkbOooG/pCvZ4x8HVty/+N/JTgC8AhVaQyKD6gtmlYYTeMNs= 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 1754684625880427.99847879112485; Fri, 8 Aug 2025 13:23:45 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1075027.1437536 (Exim 4.92) (envelope-from ) id 1ukTch-0007bg-3x; Fri, 08 Aug 2025 20:23:31 +0000 Received: by outflank-mailman (output) from mailman id 1075027.1437536; Fri, 08 Aug 2025 20:23:30 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1ukTcg-0007a4-Gy; Fri, 08 Aug 2025 20:23:30 +0000 Received: by outflank-mailman (input) for mailman id 1075027; Fri, 08 Aug 2025 20:23: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 1ukTce-0005tW-L5 for xen-devel@lists.xenproject.org; Fri, 08 Aug 2025 20:23:28 +0000 Received: from mail-wm1-x332.google.com (mail-wm1-x332.google.com [2a00:1450:4864:20::332]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 8b1d62d2-7495-11f0-a324-13f23c93f187; Fri, 08 Aug 2025 22:23:28 +0200 (CEST) Received: by mail-wm1-x332.google.com with SMTP id 5b1f17b1804b1-454f428038eso22148205e9.2 for ; Fri, 08 Aug 2025 13:23:28 -0700 (PDT) Received: from localhost.localdomain (host-195-149-20-212.as13285.net. [195.149.20.212]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-459e075047fsm103989805e9.1.2025.08.08.13.23.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 Aug 2025 13:23:27 -0700 (PDT) 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: 8b1d62d2-7495-11f0-a324-13f23c93f187 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.com; s=google; t=1754684607; x=1755289407; darn=lists.xenproject.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=ycWquJLCuLcfKthxLYACscQrBOx1g62XAtvbDRfueiI=; b=FKijCjbRt280AOa/FvYi3b762G+b1MIqw4vG+5HVNoTvUM+zAz1/N0np5RIIPVddCV WaFp860TTrk+lhcs9cw9bfyi5GL255BddELv6qZj0dzXHzgFMb1bktMMDioafslTF1Yu T+Ax+T0vba/NYDWoES7X7R99LbB+n/94Z7eWU= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754684607; x=1755289407; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=ycWquJLCuLcfKthxLYACscQrBOx1g62XAtvbDRfueiI=; b=XsbXEd0HXhvLkqz81CLohObsTMyc0Rl7VGif7CklZQFYqUkD7niSbqGd6xQActxrrr 08W34fVFr70TlbYLM078bXvJB0vQ+A85YqmxmFwEAZIif4YYsXnhy1VV8zLzIdbm4pkc EEn6idTSy6DFfG9b+YwRFWp3EoEBC5ludy8xslDAhtgdZZmGdc+TOztwdHzSU8oxUVmH 7ArOi4GLAH0MjrckUvEZlOorml9gRGI1ZqTXXzL8EVqA54SqdIdOO9ANQYWlCxPtrLaO KNIhFivwiOmYu31aBNG5U85o97HUT7MwZO4RzorFOiuxspxERxPZjbWf8Q2ODKTKGkZw zRTg== X-Gm-Message-State: AOJu0Yy6mlxSY1Dzu7D6WhYfs1B7J7myFksVGW7XkP+iIu3M9OlsS0Zo woHlt6xXqZbFqZfiCv7jMp55hdBEXFQM4H6shmsLKIN+imk+Opms/ac0z0IxlkAhcAiLzaAkZNU G+kn8ajs= X-Gm-Gg: ASbGncuDu0SrQkx44kdL52pErPdlaFsR8j4UvX4LmLtERCXbGaoP5pdYrcMLjQjj+D1 4o/OZcsaQK5DPlXhrXkenPYSBTjhbLOO/UVMoPxMUlf4vxD6rrVY5UQ7USjVsFbn2kn2Usi6hII Kh5Maqsl5uPY0NVZe2boTQmk3oNj5cuFQ/2tVKyFWHS6WiWhhbkN2rrASLa6d5dAqMoG/6j+voE i8K3na4XOOHAJK92FDfQAMAYbdvk4cyCODYXxEXGE1JgJquuvzX1j5wTUl9dc66JkKP0CqIGzv1 cCi9JXCr78IArXO0hGKBChQ5wFQBGad/irGyjWwy6voiro1s7AGRz4uXkX+T001hx7ZJC+VDQrZ lT6YCcVpb3XjNjDqhN6GH5dfpYKTLGKWrRiYbC2J5s3YX9PnKCbVem8rOZMHQ0t+syfEwzyobxF /E X-Google-Smtp-Source: AGHT+IHC1e3aIoYtIc1z104Icp0iXqK9OPOFRvHJgtTMLHe0A8+iMJldljWaYTsqa9SCuWx0CufkMg== X-Received: by 2002:a05:600c:3b8d:b0:458:a992:6f1e with SMTP id 5b1f17b1804b1-459fc09db82mr3514055e9.5.1754684607458; Fri, 08 Aug 2025 13:23:27 -0700 (PDT) From: Andrew Cooper To: Xen-devel Cc: Andrew Cooper , Jan Beulich , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= Subject: [PATCH 10/22] x86/traps: Move subarch_percpu_traps_init() into traps-setup.c Date: Fri, 8 Aug 2025 21:23:02 +0100 Message-Id: <20250808202314.1045968-11-andrew.cooper3@citrix.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250808202314.1045968-1-andrew.cooper3@citrix.com> References: <20250808202314.1045968-1-andrew.cooper3@citrix.com> 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: 1754684628660124100 ... along with the supporting functions. Switch to Xen coding style, and m= ake static as there are no external callers. Rename to legacy_syscall_init() as a more accurate name. No functional change. Signed-off-by: Andrew Cooper Acked-by: Jan Beulich --- CC: Jan Beulich CC: Roger Pau Monn=C3=A9 --- xen/arch/x86/include/asm/system.h | 2 - xen/arch/x86/traps-setup.c | 97 ++++++++++++++++++++++++++++++- xen/arch/x86/x86_64/traps.c | 92 ----------------------------- 3 files changed, 95 insertions(+), 96 deletions(-) diff --git a/xen/arch/x86/include/asm/system.h b/xen/arch/x86/include/asm/s= ystem.h index 3cdc56e4ba6d..6c2800d8158d 100644 --- a/xen/arch/x86/include/asm/system.h +++ b/xen/arch/x86/include/asm/system.h @@ -256,6 +256,4 @@ static inline int local_irq_is_enabled(void) #define BROKEN_ACPI_Sx 0x0001 #define BROKEN_INIT_AFTER_S1 0x0002 =20 -void subarch_percpu_traps_init(void); - #endif diff --git a/xen/arch/x86/traps-setup.c b/xen/arch/x86/traps-setup.c index 13b8fcf0ba51..fbae7072c292 100644 --- a/xen/arch/x86/traps-setup.c +++ b/xen/arch/x86/traps-setup.c @@ -2,13 +2,15 @@ /* * Configuration of event handling for all CPUs. */ +#include #include #include =20 +#include #include #include #include -#include +#include #include =20 DEFINE_PER_CPU_READ_MOSTLY(idt_entry_t *, idt); @@ -19,6 +21,8 @@ static bool __initdata opt_ler; boolean_param("ler", opt_ler); =20 void nocall entry_PF(void); +void nocall lstar_enter(void); +void nocall cstar_enter(void); =20 /* * Sets up system tables and descriptors for IDT devliery. @@ -138,6 +142,95 @@ static void load_system_tables(void) BUG_ON(stack_bottom & 15); } =20 +static unsigned int write_stub_trampoline( + unsigned char *stub, unsigned long stub_va, + unsigned long stack_bottom, unsigned long target_va) +{ + unsigned char *p =3D stub; + + if ( cpu_has_xen_ibt ) + { + place_endbr64(p); + p +=3D 4; + } + + /* Store guest %rax into %ss slot */ + /* movabsq %rax, stack_bottom - 8 */ + *p++ =3D 0x48; + *p++ =3D 0xa3; + *(uint64_t *)p =3D stack_bottom - 8; + p +=3D 8; + + /* Store guest %rsp in %rax */ + /* movq %rsp, %rax */ + *p++ =3D 0x48; + *p++ =3D 0x89; + *p++ =3D 0xe0; + + /* Switch to Xen stack */ + /* movabsq $stack_bottom - 8, %rsp */ + *p++ =3D 0x48; + *p++ =3D 0xbc; + *(uint64_t *)p =3D stack_bottom - 8; + p +=3D 8; + + /* jmp target_va */ + *p++ =3D 0xe9; + *(int32_t *)p =3D target_va - (stub_va + (p - stub) + 4); + p +=3D 4; + + /* Round up to a multiple of 16 bytes. */ + return ROUNDUP(p - stub, 16); +} + +static void legacy_syscall_init(void) +{ + unsigned long stack_bottom =3D get_stack_bottom(); + unsigned long stub_va =3D this_cpu(stubs.addr); + unsigned char *stub_page; + unsigned int offset; + + /* No PV guests? No need to set up SYSCALL/SYSENTER infrastructure. */ + if ( !IS_ENABLED(CONFIG_PV) ) + return; + + stub_page =3D map_domain_page(_mfn(this_cpu(stubs.mfn))); + + /* + * Trampoline for SYSCALL entry from 64-bit mode. The VT-x HVM vcpu + * context switch logic relies on the SYSCALL trampoline being at the + * start of the stubs. + */ + wrmsrl(MSR_LSTAR, stub_va); + offset =3D write_stub_trampoline(stub_page + (stub_va & ~PAGE_MASK), + stub_va, stack_bottom, + (unsigned long)lstar_enter); + stub_va +=3D offset; + + if ( cpu_has_sep ) + { + /* SYSENTER entry. */ + wrmsrl(MSR_IA32_SYSENTER_ESP, stack_bottom); + wrmsrl(MSR_IA32_SYSENTER_EIP, (unsigned long)sysenter_entry); + wrmsr(MSR_IA32_SYSENTER_CS, __HYPERVISOR_CS, 0); + } + + /* Trampoline for SYSCALL entry from compatibility mode. */ + wrmsrl(MSR_CSTAR, stub_va); + offset +=3D write_stub_trampoline(stub_page + (stub_va & ~PAGE_MASK), + stub_va, stack_bottom, + (unsigned long)cstar_enter); + + /* Don't consume more than half of the stub space here. */ + ASSERT(offset <=3D STUB_BUF_SIZE / 2); + + unmap_domain_page(stub_page); + + /* Common SYSCALL parameters. */ + wrmsrl(MSR_STAR, XEN_MSR_STAR); + wrmsrl(MSR_SYSCALL_MASK, XEN_SYSCALL_MASK); +} + static void __init init_ler(void) { unsigned int msr =3D 0; @@ -241,7 +334,7 @@ void bsp_traps_reinit(void) */ void percpu_traps_init(void) { - subarch_percpu_traps_init(); + legacy_syscall_init(); =20 if ( cpu_has_xen_lbr ) wrmsrl(MSR_IA32_DEBUGCTLMSR, IA32_DEBUGCTLMSR_LBR); diff --git a/xen/arch/x86/x86_64/traps.c b/xen/arch/x86/x86_64/traps.c index 34adf55e48df..81e64466e47e 100644 --- a/xen/arch/x86/x86_64/traps.c +++ b/xen/arch/x86/x86_64/traps.c @@ -311,98 +311,6 @@ void asmlinkage noreturn do_double_fault(struct cpu_us= er_regs *regs) panic("DOUBLE FAULT -- system shutdown\n"); } =20 -static unsigned int write_stub_trampoline( - unsigned char *stub, unsigned long stub_va, - unsigned long stack_bottom, unsigned long target_va) -{ - unsigned char *p =3D stub; - - if ( cpu_has_xen_ibt ) - { - place_endbr64(p); - p +=3D 4; - } - - /* Store guest %rax into %ss slot */ - /* movabsq %rax, stack_bottom - 8 */ - *p++ =3D 0x48; - *p++ =3D 0xa3; - *(uint64_t *)p =3D stack_bottom - 8; - p +=3D 8; - - /* Store guest %rsp in %rax */ - /* movq %rsp, %rax */ - *p++ =3D 0x48; - *p++ =3D 0x89; - *p++ =3D 0xe0; - - /* Switch to Xen stack */ - /* movabsq $stack_bottom - 8, %rsp */ - *p++ =3D 0x48; - *p++ =3D 0xbc; - *(uint64_t *)p =3D stack_bottom - 8; - p +=3D 8; - - /* jmp target_va */ - *p++ =3D 0xe9; - *(int32_t *)p =3D target_va - (stub_va + (p - stub) + 4); - p +=3D 4; - - /* Round up to a multiple of 16 bytes. */ - return ROUNDUP(p - stub, 16); -} - -void nocall lstar_enter(void); -void nocall cstar_enter(void); - -void subarch_percpu_traps_init(void) -{ - unsigned long stack_bottom =3D get_stack_bottom(); - unsigned long stub_va =3D this_cpu(stubs.addr); - unsigned char *stub_page; - unsigned int offset; - - /* No PV guests? No need to set up SYSCALL/SYSENTER infrastructure. */ - if ( !IS_ENABLED(CONFIG_PV) ) - return; - - stub_page =3D map_domain_page(_mfn(this_cpu(stubs.mfn))); - - /* - * Trampoline for SYSCALL entry from 64-bit mode. The VT-x HVM vcpu - * context switch logic relies on the SYSCALL trampoline being at the - * start of the stubs. - */ - wrmsrl(MSR_LSTAR, stub_va); - offset =3D write_stub_trampoline(stub_page + (stub_va & ~PAGE_MASK), - stub_va, stack_bottom, - (unsigned long)lstar_enter); - stub_va +=3D offset; - - if ( cpu_has_sep ) - { - /* SYSENTER entry. */ - wrmsrl(MSR_IA32_SYSENTER_ESP, stack_bottom); - wrmsrl(MSR_IA32_SYSENTER_EIP, (unsigned long)sysenter_entry); - wrmsr(MSR_IA32_SYSENTER_CS, __HYPERVISOR_CS, 0); - } - - /* Trampoline for SYSCALL entry from compatibility mode. */ - wrmsrl(MSR_CSTAR, stub_va); - offset +=3D write_stub_trampoline(stub_page + (stub_va & ~PAGE_MASK), - stub_va, stack_bottom, - (unsigned long)cstar_enter); - - /* Don't consume more than half of the stub space here. */ - ASSERT(offset <=3D STUB_BUF_SIZE / 2); - - unmap_domain_page(stub_page); - - /* Common SYSCALL parameters. */ - wrmsrl(MSR_STAR, XEN_MSR_STAR); - wrmsrl(MSR_SYSCALL_MASK, XEN_SYSCALL_MASK); -} - /* * Local variables: * mode: C --=20 2.39.5 From nobody Mon Feb 9 08:08:03 2026 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=1754684641; cv=none; d=zohomail.com; s=zohoarc; b=nyZgYzSdDcVV6oM69T+CnkkhOTasMA/fPt/ZzRYn+K7zLXen3nWFZmUAp52oZs8JDzjwJU7Y4rGfiV1a0uJ+H4cYWjR+kXWoqQUxQLhn1y4rqNgn9G5UexohlrzzeiWEh8lb30eeQ5nzZ4fuuFNatk56oLvPH+OxNjKtUbvrdwE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1754684641; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=EYSlQMm9Cg/ibksse8IJEEki/WS5Q2289Zk24bEsFVE=; b=E9xt7n+r7x3M9mC+n+i4xbRSRL4mznvWYWYfhsPGcAXX+6LQU+Ke+9ntVBqk7i1xuSzpPJqrUrsNht9S6Iozhyf8xudBbCLVrExjtd4qP88LXw/FiYmH6h6tIxnV2VipkkHN6w1SsJxHipEDxfeBS6vgIS3WjvKziJ3dCmWXKKA= 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 1754684641750462.0502359064915; Fri, 8 Aug 2025 13:24:01 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1075029.1437559 (Exim 4.92) (envelope-from ) id 1ukTck-0008Sa-AL; Fri, 08 Aug 2025 20:23:34 +0000 Received: by outflank-mailman (output) from mailman id 1075029.1437559; Fri, 08 Aug 2025 20:23:34 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1ukTcj-0008QO-Tf; Fri, 08 Aug 2025 20:23:33 +0000 Received: by outflank-mailman (input) for mailman id 1075029; Fri, 08 Aug 2025 20:23:31 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1ukTch-0005tJ-BX for xen-devel@lists.xenproject.org; Fri, 08 Aug 2025 20:23:31 +0000 Received: from mail-wm1-x341.google.com (mail-wm1-x341.google.com [2a00:1450:4864:20::341]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id 8bc4cbd6-7495-11f0-b898-0df219b8e170; Fri, 08 Aug 2025 22:23:29 +0200 (CEST) Received: by mail-wm1-x341.google.com with SMTP id 5b1f17b1804b1-4563cfac2d2so21412155e9.3 for ; Fri, 08 Aug 2025 13:23:29 -0700 (PDT) Received: from localhost.localdomain (host-195-149-20-212.as13285.net. [195.149.20.212]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-459e075047fsm103989805e9.1.2025.08.08.13.23.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 Aug 2025 13:23:27 -0700 (PDT) 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: 8bc4cbd6-7495-11f0-b898-0df219b8e170 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.com; s=google; t=1754684608; x=1755289408; darn=lists.xenproject.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=EYSlQMm9Cg/ibksse8IJEEki/WS5Q2289Zk24bEsFVE=; b=O+MWar/pr97dbrLMpDU6MvM5coRi3QBfY2a261nJsuo319lXp3m1QfAGZ/3K58WeV/ p7FrFTBJxahO5llVQcRfu6MwyV6Iju8t/eBHtIZwHtTSlo0O06UaLd5GXMV3Milffy17 yn+O2E/JhDR4NuFdGjnCrOk1yXTl5+umwMLxg= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754684608; x=1755289408; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=EYSlQMm9Cg/ibksse8IJEEki/WS5Q2289Zk24bEsFVE=; b=AYFbBJZa1qIy57hUzT7dC47j6ZLP/+N6bpB2xau9EGxb/2zbBB1THUIdXkKjg9wpOm OzMcj0SImCeRy5QMf8a+mviZD1f7zuSQRYe2UJeZSO1m9dITOiCJDwNxOzm9SFX65H3S O8AIR9bpRVnFHo/AonzkwQSI7a5d2k9p7FAitn5LR8d9q3e/onA1pWjr25sub85bcfYx +wFX+4RCimmjAkRZBdl/2A1907b7QR9XE3rAd5ySuNz+n3I7YH+7yQN1bUHiqp/duP85 vStIc/ggi/XHpx0yEf9e2M5/RLmbzpW39ccdfUzhdv5jiUoFFrmHa188g/KxLw1e8cBO NQ6g== X-Gm-Message-State: AOJu0YxEA7Sc8hCkakM9M4Z7KxbHfiAvFCR3h/FCSgCiJqu7uEvz5SDr TSESKd01gtmcx5PquUq6O3/6YpHKsyfzraZsDEqLSUqqcI5yuRBvcIUcVQrpbNRmDboIsZhb9F+ PH6l645VSGg== X-Gm-Gg: ASbGncsqBeds1hCYM4QgjB9XU0S9uhigvabn4mBy2SRcysiRbOUeXAOxjf16fkkzKZN Wq+WGVuuWvO5cnJkP+e8wweabeWL4rJhc6eZRuaMp6wj9FJioCGWzciAk5xWq3D27tQ+xKgx47i ilz4Y1g4j2nXM+cUMwtqR+krQUUrJg+vvoETZ/GXXqz5HLXufM+6oJ7AL9Ms7qvPwE2/dgxgmiU 8HUJ/sZPH5uvRCo3Btj0qvi1KfyiJteGMRKF2V2C14q+C1QJZF2wahVUMi5ucEvV7RMl5aqsq4R HxD3YxhYUqfGlNKQgU6XnBQ9d0g8G3+48gAcmJI9Qofu40ZwGaiSBA9RazTrK92ickvAWXsKvnD AWbnOBXXZQ5H6tP8qscKJWeaNdbwr7aSVPrXjieTnStAixlPGYOvx91K5UOxOXL01OEe4S6hACr M8tRcVVux/bk4= X-Google-Smtp-Source: AGHT+IHhtFes+Q8CMqJAxDSkbc1Og9KmkGx4Itl9VotfFtVd/SioKsjGcSsC8M31fmd9tARYk80H8w== X-Received: by 2002:a05:600c:4e91:b0:453:6ca:16b1 with SMTP id 5b1f17b1804b1-459f4f144e5mr37960055e9.26.1754684608285; Fri, 08 Aug 2025 13:23:28 -0700 (PDT) From: Andrew Cooper To: Xen-devel Cc: Andrew Cooper , Jan Beulich , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= Subject: [PATCH 11/22] x86/traps: Fold x86_64/traps.c into traps.c Date: Fri, 8 Aug 2025 21:23:03 +0100 Message-Id: <20250808202314.1045968-12-andrew.cooper3@citrix.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250808202314.1045968-1-andrew.cooper3@citrix.com> References: <20250808202314.1045968-1-andrew.cooper3@citrix.com> 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: 1754684642798124100 It's now just the double fault handler and various state dumping functions. Swap u64 for uint64_t, and fix a few other minor style issues. No functional change. Signed-off-by: Andrew Cooper Acked-by: Jan Beulich --- CC: Jan Beulich CC: Roger Pau Monn=C3=A9 --- xen/arch/x86/traps.c | 291 +++++++++++++++++++++++++++++++ xen/arch/x86/x86_64/Makefile | 1 - xen/arch/x86/x86_64/traps.c | 322 ----------------------------------- 3 files changed, 291 insertions(+), 323 deletions(-) delete mode 100644 xen/arch/x86/x86_64/traps.c diff --git a/xen/arch/x86/traps.c b/xen/arch/x86/traps.c index 238d923dd188..ab8ff36acfe6 100644 --- a/xen/arch/x86/traps.c +++ b/xen/arch/x86/traps.c @@ -26,6 +26,7 @@ #include #include #include +#include #include =20 #include @@ -87,6 +88,272 @@ const unsigned int nmi_cpu; #define stack_words_per_line 4 #define ESP_BEFORE_EXCEPTION(regs) ((unsigned long *)(regs)->rsp) =20 +struct extra_state +{ + unsigned long cr0, cr2, cr3, cr4; + unsigned long fsb, gsb, gss; + uint16_t ds, es, fs, gs; +}; + +static void print_xen_info(void) +{ + char taint_str[TAINT_STRING_MAX_LEN]; + + printk("----[ Xen-%d.%d%s x86_64 %s %s ]----\n", + xen_major_version(), xen_minor_version(), xen_extra_version(), + xen_build_info(), print_tainted(taint_str)); +} + +enum context { + CTXT_hypervisor, + CTXT_pv_guest, + CTXT_hvm_guest, +}; + +static void read_registers(struct extra_state *state) +{ + state->cr0 =3D read_cr0(); + state->cr2 =3D read_cr2(); + state->cr3 =3D read_cr3(); + state->cr4 =3D read_cr4(); + + state->fsb =3D read_fs_base(); + state->gsb =3D read_gs_base(); + state->gss =3D read_gs_shadow(); + + asm ( "mov %%ds, %0" : "=3Dm" (state->ds) ); + asm ( "mov %%es, %0" : "=3Dm" (state->es) ); + asm ( "mov %%fs, %0" : "=3Dm" (state->fs) ); + asm ( "mov %%gs, %0" : "=3Dm" (state->gs) ); +} + +static void get_hvm_registers(struct vcpu *v, struct cpu_user_regs *regs, + struct extra_state *state) +{ + struct segment_register sreg; + + state->cr0 =3D v->arch.hvm.guest_cr[0]; + state->cr2 =3D v->arch.hvm.guest_cr[2]; + state->cr3 =3D v->arch.hvm.guest_cr[3]; + state->cr4 =3D v->arch.hvm.guest_cr[4]; + + hvm_get_segment_register(v, x86_seg_cs, &sreg); + regs->cs =3D sreg.sel; + + hvm_get_segment_register(v, x86_seg_ds, &sreg); + state->ds =3D sreg.sel; + + hvm_get_segment_register(v, x86_seg_es, &sreg); + state->es =3D sreg.sel; + + hvm_get_segment_register(v, x86_seg_fs, &sreg); + state->fs =3D sreg.sel; + state->fsb =3D sreg.base; + + hvm_get_segment_register(v, x86_seg_gs, &sreg); + state->gs =3D sreg.sel; + state->gsb =3D sreg.base; + + hvm_get_segment_register(v, x86_seg_ss, &sreg); + regs->ss =3D sreg.sel; + + state->gss =3D hvm_get_reg(v, MSR_SHADOW_GS_BASE); +} + +static void _show_registers( + const struct cpu_user_regs *regs, const struct extra_state *state, + enum context context, const struct vcpu *v) +{ + static const char *const context_names[] =3D { + [CTXT_hypervisor] =3D "hypervisor", + [CTXT_pv_guest] =3D "pv guest", + [CTXT_hvm_guest] =3D "hvm guest", + }; + + printk("RIP: %04x:[<%016lx>]", regs->cs, regs->rip); + if ( context =3D=3D CTXT_hypervisor ) + printk(" %pS", _p(regs->rip)); + printk("\nRFLAGS: %016lx ", regs->rflags); + if ( (context =3D=3D CTXT_pv_guest) && v && v->vcpu_info_area.map ) + printk("EM: %d ", !!vcpu_info(v, evtchn_upcall_mask)); + printk("CONTEXT: %s", context_names[context]); + if ( v && !is_idle_vcpu(v) ) + printk(" (%pv)", v); + + printk("\nrax: %016lx rbx: %016lx rcx: %016lx\n", + regs->rax, regs->rbx, regs->rcx); + printk("rdx: %016lx rsi: %016lx rdi: %016lx\n", + regs->rdx, regs->rsi, regs->rdi); + printk("rbp: %016lx rsp: %016lx r8: %016lx\n", + regs->rbp, regs->rsp, regs->r8); + printk("r9: %016lx r10: %016lx r11: %016lx\n", + regs->r9, regs->r10, regs->r11); + printk("r12: %016lx r13: %016lx r14: %016lx\n", + regs->r12, regs->r13, regs->r14); + printk("r15: %016lx cr0: %016lx cr4: %016lx\n", + regs->r15, state->cr0, state->cr4); + printk("cr3: %016lx cr2: %016lx\n", state->cr3, state->cr2); + printk("fsb: %016lx gsb: %016lx gss: %016lx\n", + state->fsb, state->gsb, state->gss); + printk("ds: %04x es: %04x fs: %04x gs: %04x ss: %04x cs: %04= x\n", + state->ds, state->es, state->fs, + state->gs, regs->ss, regs->cs); +} + +void show_registers(const struct cpu_user_regs *regs) +{ + struct cpu_user_regs fault_regs =3D *regs; + struct extra_state fault_state; + enum context context; + struct vcpu *v =3D system_state >=3D SYS_STATE_smp_boot ? current : NU= LL; + + if ( guest_mode(regs) && is_hvm_vcpu(v) ) + { + get_hvm_registers(v, &fault_regs, &fault_state); + context =3D CTXT_hvm_guest; + } + else + { + read_registers(&fault_state); + + if ( guest_mode(regs) ) + { + context =3D CTXT_pv_guest; + fault_state.cr2 =3D arch_get_cr2(v); + } + else + { + context =3D CTXT_hypervisor; + } + } + + print_xen_info(); + printk("CPU: %d\n", smp_processor_id()); + _show_registers(&fault_regs, &fault_state, context, v); + + if ( ler_msr && !guest_mode(regs) ) + { + uint64_t from, to; + + rdmsrl(ler_msr, from); + rdmsrl(ler_msr + 1, to); + + /* Upper bits may store metadata. Re-canonicalise for printing. */ + printk("ler: from %016"PRIx64" [%ps]\n", + from, _p(canonicalise_addr(from))); + printk(" to %016"PRIx64" [%ps]\n", + to, _p(canonicalise_addr(to))); + } +} + +void vcpu_show_registers(struct vcpu *v) +{ + const struct cpu_user_regs *regs =3D &v->arch.user_regs; + struct cpu_user_regs aux_regs; + struct extra_state state; + enum context context; + + if ( is_hvm_vcpu(v) ) + { + aux_regs =3D *regs; + get_hvm_registers(v, &aux_regs, &state); + regs =3D &aux_regs; + context =3D CTXT_hvm_guest; + } + else + { + bool kernel =3D guest_kernel_mode(v, regs); + unsigned long gsb, gss; + + state.cr0 =3D v->arch.pv.ctrlreg[0]; + state.cr2 =3D arch_get_cr2(v); + state.cr3 =3D pagetable_get_paddr(kernel + ? v->arch.guest_table + : v->arch.guest_table_user); + state.cr4 =3D v->arch.pv.ctrlreg[4]; + + gsb =3D v->arch.pv.gs_base_user; + gss =3D v->arch.pv.gs_base_kernel; + if ( kernel ) + SWAP(gsb, gss); + + state.fsb =3D v->arch.pv.fs_base; + state.gsb =3D gsb; + state.gss =3D gss; + + state.ds =3D v->arch.pv.ds; + state.es =3D v->arch.pv.es; + state.fs =3D v->arch.pv.fs; + state.gs =3D v->arch.pv.gs; + + context =3D CTXT_pv_guest; + } + + _show_registers(regs, &state, context, v); +} + +void show_page_walk(unsigned long addr) +{ + unsigned long pfn, mfn =3D read_cr3() >> PAGE_SHIFT; + l4_pgentry_t l4e, *l4t; + l3_pgentry_t l3e, *l3t; + l2_pgentry_t l2e, *l2t; + l1_pgentry_t l1e, *l1t; + + printk("Pagetable walk from %016lx:\n", addr); + if ( !is_canonical_address(addr) ) + return; + + l4t =3D map_domain_page(_mfn(mfn)); + l4e =3D l4t[l4_table_offset(addr)]; + unmap_domain_page(l4t); + mfn =3D l4e_get_pfn(l4e); + pfn =3D mfn_valid(_mfn(mfn)) && machine_to_phys_mapping_valid ? + get_gpfn_from_mfn(mfn) : INVALID_M2P_ENTRY; + printk(" L4[0x%03lx] =3D %"PRIpte" %016lx\n", + l4_table_offset(addr), l4e_get_intpte(l4e), pfn); + if ( !(l4e_get_flags(l4e) & _PAGE_PRESENT) || + !mfn_valid(_mfn(mfn)) ) + return; + + l3t =3D map_domain_page(_mfn(mfn)); + l3e =3D l3t[l3_table_offset(addr)]; + unmap_domain_page(l3t); + mfn =3D l3e_get_pfn(l3e); + pfn =3D mfn_valid(_mfn(mfn)) && machine_to_phys_mapping_valid ? + get_gpfn_from_mfn(mfn) : INVALID_M2P_ENTRY; + printk(" L3[0x%03lx] =3D %"PRIpte" %016lx%s\n", + l3_table_offset(addr), l3e_get_intpte(l3e), pfn, + (l3e_get_flags(l3e) & _PAGE_PSE) ? " (PSE)" : ""); + if ( !(l3e_get_flags(l3e) & _PAGE_PRESENT) || + (l3e_get_flags(l3e) & _PAGE_PSE) || + !mfn_valid(_mfn(mfn)) ) + return; + + l2t =3D map_domain_page(_mfn(mfn)); + l2e =3D l2t[l2_table_offset(addr)]; + unmap_domain_page(l2t); + mfn =3D l2e_get_pfn(l2e); + pfn =3D mfn_valid(_mfn(mfn)) && machine_to_phys_mapping_valid ? + get_gpfn_from_mfn(mfn) : INVALID_M2P_ENTRY; + printk(" L2[0x%03lx] =3D %"PRIpte" %016lx%s\n", + l2_table_offset(addr), l2e_get_intpte(l2e), pfn, + (l2e_get_flags(l2e) & _PAGE_PSE) ? " (PSE)" : ""); + if ( !(l2e_get_flags(l2e) & _PAGE_PRESENT) || + (l2e_get_flags(l2e) & _PAGE_PSE) || + !mfn_valid(_mfn(mfn)) ) + return; + + l1t =3D map_domain_page(_mfn(mfn)); + l1e =3D l1t[l1_table_offset(addr)]; + unmap_domain_page(l1t); + mfn =3D l1e_get_pfn(l1e); + pfn =3D mfn_valid(_mfn(mfn)) && machine_to_phys_mapping_valid ? + get_gpfn_from_mfn(mfn) : INVALID_M2P_ENTRY; + printk(" L1[0x%03lx] =3D %"PRIpte" %016lx\n", + l1_table_offset(addr), l1e_get_intpte(l1e), pfn); +} + void show_code(const struct cpu_user_regs *regs) { unsigned char insns_before[8] =3D {}, insns_after[16] =3D {}; @@ -762,6 +1029,30 @@ const char *vector_name(unsigned int vec) return (vec < ARRAY_SIZE(names) && names[vec][0]) ? names[vec] : "???"; } =20 +void asmlinkage do_double_fault(struct cpu_user_regs *regs) +{ + unsigned int cpu; + struct extra_state state; + + console_force_unlock(); + + asm ( "lsll %[sel], %[limit]" : [limit] "=3Dr" (cpu) + : [sel] "r" (PER_CPU_SELECTOR) ); + + /* Find information saved during fault and dump it to the console. */ + printk("*** DOUBLE FAULT ***\n"); + print_xen_info(); + + read_registers(&state); + + printk("CPU: %d\n", cpu); + _show_registers(regs, &state, CTXT_hypervisor, NULL); + show_code(regs); + show_stack_overflow(cpu, regs); + + panic("DOUBLE FAULT -- system shutdown\n"); +} + /* * This is called for faults at very unexpected times (e.g., when interrup= ts * are disabled). In such situations we can't do much that is safe. We try= to diff --git a/xen/arch/x86/x86_64/Makefile b/xen/arch/x86/x86_64/Makefile index 472b2bab523d..f20763088740 100644 --- a/xen/arch/x86/x86_64/Makefile +++ b/xen/arch/x86/x86_64/Makefile @@ -1,7 +1,6 @@ obj-$(CONFIG_PV32) +=3D compat/ =20 obj-bin-y +=3D entry.o -obj-y +=3D traps.o obj-$(CONFIG_KEXEC) +=3D machine_kexec.o obj-y +=3D pci.o obj-y +=3D acpi_mmcfg.o diff --git a/xen/arch/x86/x86_64/traps.c b/xen/arch/x86/x86_64/traps.c deleted file mode 100644 index 81e64466e47e..000000000000 --- a/xen/arch/x86/x86_64/traps.c +++ /dev/null @@ -1,322 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -struct extra_state -{ - unsigned long cr0, cr2, cr3, cr4; - unsigned long fsb, gsb, gss; - uint16_t ds, es, fs, gs; -}; - -static void print_xen_info(void) -{ - char taint_str[TAINT_STRING_MAX_LEN]; - - printk("----[ Xen-%d.%d%s x86_64 %s %s ]----\n", - xen_major_version(), xen_minor_version(), xen_extra_version(), - xen_build_info(), print_tainted(taint_str)); -} - -enum context { CTXT_hypervisor, CTXT_pv_guest, CTXT_hvm_guest }; - -static void read_registers(struct extra_state *state) -{ - state->cr0 =3D read_cr0(); - state->cr2 =3D read_cr2(); - state->cr3 =3D read_cr3(); - state->cr4 =3D read_cr4(); - - state->fsb =3D read_fs_base(); - state->gsb =3D read_gs_base(); - state->gss =3D read_gs_shadow(); - - asm ( "mov %%ds, %0" : "=3Dm" (state->ds) ); - asm ( "mov %%es, %0" : "=3Dm" (state->es) ); - asm ( "mov %%fs, %0" : "=3Dm" (state->fs) ); - asm ( "mov %%gs, %0" : "=3Dm" (state->gs) ); -} - -static void get_hvm_registers(struct vcpu *v, struct cpu_user_regs *regs, - struct extra_state *state) -{ - struct segment_register sreg; - - state->cr0 =3D v->arch.hvm.guest_cr[0]; - state->cr2 =3D v->arch.hvm.guest_cr[2]; - state->cr3 =3D v->arch.hvm.guest_cr[3]; - state->cr4 =3D v->arch.hvm.guest_cr[4]; - - hvm_get_segment_register(v, x86_seg_cs, &sreg); - regs->cs =3D sreg.sel; - - hvm_get_segment_register(v, x86_seg_ds, &sreg); - state->ds =3D sreg.sel; - - hvm_get_segment_register(v, x86_seg_es, &sreg); - state->es =3D sreg.sel; - - hvm_get_segment_register(v, x86_seg_fs, &sreg); - state->fs =3D sreg.sel; - state->fsb =3D sreg.base; - - hvm_get_segment_register(v, x86_seg_gs, &sreg); - state->gs =3D sreg.sel; - state->gsb =3D sreg.base; - - hvm_get_segment_register(v, x86_seg_ss, &sreg); - regs->ss =3D sreg.sel; - - state->gss =3D hvm_get_reg(v, MSR_SHADOW_GS_BASE); -} - -static void _show_registers( - const struct cpu_user_regs *regs, const struct extra_state *state, - enum context context, const struct vcpu *v) -{ - static const char *const context_names[] =3D { - [CTXT_hypervisor] =3D "hypervisor", - [CTXT_pv_guest] =3D "pv guest", - [CTXT_hvm_guest] =3D "hvm guest" - }; - - printk("RIP: %04x:[<%016lx>]", regs->cs, regs->rip); - if ( context =3D=3D CTXT_hypervisor ) - printk(" %pS", _p(regs->rip)); - printk("\nRFLAGS: %016lx ", regs->rflags); - if ( (context =3D=3D CTXT_pv_guest) && v && v->vcpu_info_area.map ) - printk("EM: %d ", !!vcpu_info(v, evtchn_upcall_mask)); - printk("CONTEXT: %s", context_names[context]); - if ( v && !is_idle_vcpu(v) ) - printk(" (%pv)", v); - - printk("\nrax: %016lx rbx: %016lx rcx: %016lx\n", - regs->rax, regs->rbx, regs->rcx); - printk("rdx: %016lx rsi: %016lx rdi: %016lx\n", - regs->rdx, regs->rsi, regs->rdi); - printk("rbp: %016lx rsp: %016lx r8: %016lx\n", - regs->rbp, regs->rsp, regs->r8); - printk("r9: %016lx r10: %016lx r11: %016lx\n", - regs->r9, regs->r10, regs->r11); - printk("r12: %016lx r13: %016lx r14: %016lx\n", - regs->r12, regs->r13, regs->r14); - printk("r15: %016lx cr0: %016lx cr4: %016lx\n", - regs->r15, state->cr0, state->cr4); - printk("cr3: %016lx cr2: %016lx\n", state->cr3, state->cr2); - printk("fsb: %016lx gsb: %016lx gss: %016lx\n", - state->fsb, state->gsb, state->gss); - printk("ds: %04x es: %04x fs: %04x gs: %04x " - "ss: %04x cs: %04x\n", - state->ds, state->es, state->fs, - state->gs, regs->ss, regs->cs); -} - -void show_registers(const struct cpu_user_regs *regs) -{ - struct cpu_user_regs fault_regs =3D *regs; - struct extra_state fault_state; - enum context context; - struct vcpu *v =3D system_state >=3D SYS_STATE_smp_boot ? current : NU= LL; - - if ( guest_mode(regs) && is_hvm_vcpu(v) ) - { - get_hvm_registers(v, &fault_regs, &fault_state); - context =3D CTXT_hvm_guest; - } - else - { - read_registers(&fault_state); - - if ( guest_mode(regs) ) - { - context =3D CTXT_pv_guest; - fault_state.cr2 =3D arch_get_cr2(v); - } - else - { - context =3D CTXT_hypervisor; - } - } - - print_xen_info(); - printk("CPU: %d\n", smp_processor_id()); - _show_registers(&fault_regs, &fault_state, context, v); - - if ( ler_msr && !guest_mode(regs) ) - { - u64 from, to; - - rdmsrl(ler_msr, from); - rdmsrl(ler_msr + 1, to); - - /* Upper bits may store metadata. Re-canonicalise for printing. */ - printk("ler: from %016"PRIx64" [%ps]\n", - from, _p(canonicalise_addr(from))); - printk(" to %016"PRIx64" [%ps]\n", - to, _p(canonicalise_addr(to))); - } -} - -void vcpu_show_registers(struct vcpu *v) -{ - const struct cpu_user_regs *regs =3D &v->arch.user_regs; - struct cpu_user_regs aux_regs; - struct extra_state state; - enum context context; - - if ( is_hvm_vcpu(v) ) - { - aux_regs =3D *regs; - get_hvm_registers(v, &aux_regs, &state); - regs =3D &aux_regs; - context =3D CTXT_hvm_guest; - } - else - { - bool kernel =3D guest_kernel_mode(v, regs); - unsigned long gsb, gss; - - state.cr0 =3D v->arch.pv.ctrlreg[0]; - state.cr2 =3D arch_get_cr2(v); - state.cr3 =3D pagetable_get_paddr(kernel - ? v->arch.guest_table - : v->arch.guest_table_user); - state.cr4 =3D v->arch.pv.ctrlreg[4]; - - gsb =3D v->arch.pv.gs_base_user; - gss =3D v->arch.pv.gs_base_kernel; - if ( kernel ) - SWAP(gsb, gss); - - state.fsb =3D v->arch.pv.fs_base; - state.gsb =3D gsb; - state.gss =3D gss; - - state.ds =3D v->arch.pv.ds; - state.es =3D v->arch.pv.es; - state.fs =3D v->arch.pv.fs; - state.gs =3D v->arch.pv.gs; - - context =3D CTXT_pv_guest; - } - - _show_registers(regs, &state, context, v); -} - -void show_page_walk(unsigned long addr) -{ - unsigned long pfn, mfn =3D read_cr3() >> PAGE_SHIFT; - l4_pgentry_t l4e, *l4t; - l3_pgentry_t l3e, *l3t; - l2_pgentry_t l2e, *l2t; - l1_pgentry_t l1e, *l1t; - - printk("Pagetable walk from %016lx:\n", addr); - if ( !is_canonical_address(addr) ) - return; - - l4t =3D map_domain_page(_mfn(mfn)); - l4e =3D l4t[l4_table_offset(addr)]; - unmap_domain_page(l4t); - mfn =3D l4e_get_pfn(l4e); - pfn =3D mfn_valid(_mfn(mfn)) && machine_to_phys_mapping_valid ? - get_gpfn_from_mfn(mfn) : INVALID_M2P_ENTRY; - printk(" L4[0x%03lx] =3D %"PRIpte" %016lx\n", - l4_table_offset(addr), l4e_get_intpte(l4e), pfn); - if ( !(l4e_get_flags(l4e) & _PAGE_PRESENT) || - !mfn_valid(_mfn(mfn)) ) - return; - - l3t =3D map_domain_page(_mfn(mfn)); - l3e =3D l3t[l3_table_offset(addr)]; - unmap_domain_page(l3t); - mfn =3D l3e_get_pfn(l3e); - pfn =3D mfn_valid(_mfn(mfn)) && machine_to_phys_mapping_valid ? - get_gpfn_from_mfn(mfn) : INVALID_M2P_ENTRY; - printk(" L3[0x%03lx] =3D %"PRIpte" %016lx%s\n", - l3_table_offset(addr), l3e_get_intpte(l3e), pfn, - (l3e_get_flags(l3e) & _PAGE_PSE) ? " (PSE)" : ""); - if ( !(l3e_get_flags(l3e) & _PAGE_PRESENT) || - (l3e_get_flags(l3e) & _PAGE_PSE) || - !mfn_valid(_mfn(mfn)) ) - return; - - l2t =3D map_domain_page(_mfn(mfn)); - l2e =3D l2t[l2_table_offset(addr)]; - unmap_domain_page(l2t); - mfn =3D l2e_get_pfn(l2e); - pfn =3D mfn_valid(_mfn(mfn)) && machine_to_phys_mapping_valid ? - get_gpfn_from_mfn(mfn) : INVALID_M2P_ENTRY; - printk(" L2[0x%03lx] =3D %"PRIpte" %016lx%s\n", - l2_table_offset(addr), l2e_get_intpte(l2e), pfn, - (l2e_get_flags(l2e) & _PAGE_PSE) ? " (PSE)" : ""); - if ( !(l2e_get_flags(l2e) & _PAGE_PRESENT) || - (l2e_get_flags(l2e) & _PAGE_PSE) || - !mfn_valid(_mfn(mfn)) ) - return; - - l1t =3D map_domain_page(_mfn(mfn)); - l1e =3D l1t[l1_table_offset(addr)]; - unmap_domain_page(l1t); - mfn =3D l1e_get_pfn(l1e); - pfn =3D mfn_valid(_mfn(mfn)) && machine_to_phys_mapping_valid ? - get_gpfn_from_mfn(mfn) : INVALID_M2P_ENTRY; - printk(" L1[0x%03lx] =3D %"PRIpte" %016lx\n", - l1_table_offset(addr), l1e_get_intpte(l1e), pfn); -} - -void asmlinkage noreturn do_double_fault(struct cpu_user_regs *regs) -{ - unsigned int cpu; - struct extra_state state; - - console_force_unlock(); - - asm ( "lsll %[sel], %[limit]" : [limit] "=3Dr" (cpu) - : [sel] "r" (PER_CPU_SELECTOR) ); - - /* Find information saved during fault and dump it to the console. */ - printk("*** DOUBLE FAULT ***\n"); - print_xen_info(); - - read_registers(&state); - - printk("CPU: %d\n", cpu); - _show_registers(regs, &state, CTXT_hypervisor, NULL); - show_code(regs); - show_stack_overflow(cpu, regs); - - panic("DOUBLE FAULT -- system shutdown\n"); -} - -/* - * Local variables: - * mode: C - * c-file-style: "BSD" - * c-basic-offset: 4 - * tab-width: 4 - * indent-tabs-mode: nil - * End: - */ --=20 2.39.5 From nobody Mon Feb 9 08:08:03 2026 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=1754684628; cv=none; d=zohomail.com; s=zohoarc; b=mvlpUcLCubD9BzhcWEwwfep3TcNU9AyK9iG7V9ayKaBVmAfUgqNdmNv0aEvgNGqArf1FJXve1jmpQwsJncfhE9Z7HMVY8dPnC5Se5+ZGMVckK4hMA8JbofbDUXmHeAZWdl3RkqGfRDqC93q4ZrkkzkSzek+Gga3Aksx3J0mQV6g= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1754684628; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=OQy5F9doSNclJVLZkjhL80Mb6WmdBvuJ0DVpDy8dHq4=; b=jp8CyUFzUoI0t7K2j/63qRBysgBYGzjOIe3yThrfhJKagEe//llQ2rR1XFllyBmbsg2YrBjD4YchyR1JKJdKw7tasVbHP2lBmPIwp+xfQrQ8dTr/Lx/pjHwWsntM0fSibYXjjP/BQ6lmqfPalzoAXNPFnBpMRRNGsKL5EBU5F6g= 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 17546846282891008.2032041060933; Fri, 8 Aug 2025 13:23:48 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1075028.1437543 (Exim 4.92) (envelope-from ) id 1ukTch-0007p3-Ru; Fri, 08 Aug 2025 20:23:31 +0000 Received: by outflank-mailman (output) from mailman id 1075028.1437543; Fri, 08 Aug 2025 20:23:31 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1ukTch-0007nc-9t; Fri, 08 Aug 2025 20:23:31 +0000 Received: by outflank-mailman (input) for mailman id 1075028; Fri, 08 Aug 2025 20:23:30 +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 1ukTcg-0005tW-3i for xen-devel@lists.xenproject.org; Fri, 08 Aug 2025 20:23:30 +0000 Received: from mail-wm1-x331.google.com (mail-wm1-x331.google.com [2a00:1450:4864:20::331]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 8c001588-7495-11f0-a324-13f23c93f187; Fri, 08 Aug 2025 22:23:29 +0200 (CEST) Received: by mail-wm1-x331.google.com with SMTP id 5b1f17b1804b1-459e20ec1d9so24524555e9.3 for ; Fri, 08 Aug 2025 13:23:29 -0700 (PDT) Received: from localhost.localdomain (host-195-149-20-212.as13285.net. [195.149.20.212]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-459e075047fsm103989805e9.1.2025.08.08.13.23.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 Aug 2025 13:23:28 -0700 (PDT) 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: 8c001588-7495-11f0-a324-13f23c93f187 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.com; s=google; t=1754684609; x=1755289409; darn=lists.xenproject.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=OQy5F9doSNclJVLZkjhL80Mb6WmdBvuJ0DVpDy8dHq4=; b=FSki63DBNfcQkQCdvzrAgcUYcAbHQifdz3T8HUpCPRa2ne/dn7650uNJUfAUkRE6li yS4oQXSoOVnzOy4a/0GU8UnbSHjSYcnFWF01RCADBXmF/cJHXyXLD4SJP24ws5l0hmgA w+Kh7yR2rOs7vg6CW6VNXZGGke1IQl4bf56/0= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754684609; x=1755289409; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=OQy5F9doSNclJVLZkjhL80Mb6WmdBvuJ0DVpDy8dHq4=; b=BNOx/DSrdWd/IB66K5SzsmlvNS6yUAcgf00Qxc/vpgbmmCi5JMWAJTDQO6L49cuG5u EzY2U4jLTXBl9SIP7voPfYWHqPirhztKUotArw3LER8bs9Vpu0XyT4oyn4H4JfgbZOm9 vN6buHl5OZW5IEZhCI9odLrbYTkhzR94Vct4xzA05WGoTSf/G2rJ4qe4w/Tfn8BjdCbX Eh/Sixfbeeg1l3xyKECOo/J6l1M2IXhfKkU35Dz/JvFrZnRKZ+DbBIpWoaS3dmBPxid5 R18ZnRk1RrZhpvtJdipFBCwU2rC3ek/qnTEZbb2Fwwxw+Nq7GrtlE4CZgPzaCcGy9kxq 7q5g== X-Gm-Message-State: AOJu0YziYc6Jgz4DJwhRPFelOCFW/gGbTBbddc4YVT+l0ChCbIHiUB+7 aTF7XQHOt5WpLz9joRoRtXBXeecQU8wOoHIvGJ05aLqJG9vUdtvBZ9kkSOsqWLk1EiywwCIbGJ5 GbZcctuU= X-Gm-Gg: ASbGnctIgkNoEBSgOf/JlLLCx2rdorDAIROBgtvp30eLYebpNTOUKfJKdC41zknc0g+ bcMANN6QK1ktSqCUDh7Kmugsehs0CiMpRYU28O9srngIlTDmi2Iqz5B83rhm/2/wVwu99295hau 8rB/OL9QrBFu3anMdrIjURsmOgeupxSWjn2s6EAKXsOKKejmme+ekN4OCJZmCl2Qjg7xqByBzFW USYNAZ55Kc9oEHjL81Rzm5FP8nzr0uoi0wflJax6wq8fzoNv8kxStyXdSBeywcYkVu15qmKi9Cc pdCAKXRf3RT0AiKJyT5IfGU3OIHd3rQgLl12HLKUDY/ecU8wA4dlVsoAEfsLmwYlW7+1M/3EsMR 3/bfw+7JVZgeP8ZViJzJQ/9JmSNi8TwXZr5lUmwQrP9A+q31egnmBofX7pvcvjelpIOkBCzAVgI +g X-Google-Smtp-Source: AGHT+IH/9GpSQOFtDlOQA9hsHRhGb/JyXgWKb8FMm/mo0y68SuwtQWXBgWJ7uHB6Gv04SCO7jpCHbA== X-Received: by 2002:a05:600c:4f4a:b0:459:dc92:b95f with SMTP id 5b1f17b1804b1-459f4f3df4bmr39680335e9.5.1754684608927; Fri, 08 Aug 2025 13:23:28 -0700 (PDT) From: Andrew Cooper To: Xen-devel Cc: Andrew Cooper , Jan Beulich , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= Subject: [PATCH 12/22] x86/traps: Unexport show_code() and show_stack_overflow() Date: Fri, 8 Aug 2025 21:23:04 +0100 Message-Id: <20250808202314.1045968-13-andrew.cooper3@citrix.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250808202314.1045968-1-andrew.cooper3@citrix.com> References: <20250808202314.1045968-1-andrew.cooper3@citrix.com> 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: 1754684630477124100 These can become static now the two traps.c have been merged. No fucntional change. Signed-off-by: Andrew Cooper Reviewed-by: Jan Beulich --- CC: Jan Beulich CC: Roger Pau Monn=C3=A9 --- xen/arch/x86/include/asm/processor.h | 2 -- xen/arch/x86/traps.c | 4 ++-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/xen/arch/x86/include/asm/processor.h b/xen/arch/x86/include/as= m/processor.h index 2799d59e385a..1342241742ac 100644 --- a/xen/arch/x86/include/asm/processor.h +++ b/xen/arch/x86/include/asm/processor.h @@ -333,8 +333,6 @@ extern void write_ptbase(struct vcpu *v); /* PAUSE (encoding: REP NOP) is a good thing to insert into busy-wait loop= s. */ #define cpu_relax() asm volatile ( "pause" ::: "memory" ) =20 -void show_code(const struct cpu_user_regs *regs); -void show_stack_overflow(unsigned int cpu, const struct cpu_user_regs *reg= s); void show_registers(const struct cpu_user_regs *regs); #define dump_execution_state() run_in_exception_handler(show_execution_sta= te) void show_page_walk(unsigned long addr); diff --git a/xen/arch/x86/traps.c b/xen/arch/x86/traps.c index ab8ff36acfe6..270b93ed623e 100644 --- a/xen/arch/x86/traps.c +++ b/xen/arch/x86/traps.c @@ -354,7 +354,7 @@ void show_page_walk(unsigned long addr) l1_table_offset(addr), l1e_get_intpte(l1e), pfn); } =20 -void show_code(const struct cpu_user_regs *regs) +static void show_code(const struct cpu_user_regs *regs) { unsigned char insns_before[8] =3D {}, insns_after[16] =3D {}; unsigned int i, tmp, missing_before, missing_after; @@ -838,7 +838,7 @@ static void show_stack(const struct cpu_user_regs *regs) show_trace(regs); } =20 -void show_stack_overflow(unsigned int cpu, const struct cpu_user_regs *reg= s) +static void show_stack_overflow(unsigned int cpu, const struct cpu_user_re= gs *regs) { unsigned long esp =3D regs->rsp; unsigned long curr_stack_base =3D esp & ~(STACK_SIZE - 1); --=20 2.39.5 From nobody Mon Feb 9 08:08:03 2026 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=1754684633; cv=none; d=zohomail.com; s=zohoarc; b=NxE8lwLoNVG5cAANHccAx2REMBZKTt9EQ0MLehgbB8bjEaeSALLcUKjdeSGcVVfFpeQWOI/srbNAiNb2zYRoJsLXKqqOTORYNi7Ejd2k4AEvDXS6nx6xiuppMgyNWVhfXn9ErVqmAh16HDMPzk5rnj3cG7Fytoo7QEDvyRrCPtA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1754684633; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=YFVhdfvOQDjUoAaTEi0zstvy9aZcNZFPXKOhNL4LWc4=; b=HRCfCPMWj1jppi6en1eTBKpxpl5UZEUw0kSPqa8dSjgfOqNptHB9FuUaNgMx6u+q8n/1vCpRhED7WhV5leJOFyqyAAetz3mw2Kqf6xGCcieWX6sT23EYlm7scNvX36SwEdZ55omGJ3QsYDFPAfRmms7RRpnQmW4oNCg0Sty8LcM= 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 1754684633003591.2059086083656; Fri, 8 Aug 2025 13:23:53 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1075034.1437585 (Exim 4.92) (envelope-from ) id 1ukTcn-0000id-PZ; Fri, 08 Aug 2025 20:23:37 +0000 Received: by outflank-mailman (output) from mailman id 1075034.1437585; Fri, 08 Aug 2025 20:23:37 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1ukTcm-0000eT-VT; Fri, 08 Aug 2025 20:23:36 +0000 Received: by outflank-mailman (input) for mailman id 1075034; Fri, 08 Aug 2025 20:23:33 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1ukTcj-0005tJ-Bi for xen-devel@lists.xenproject.org; Fri, 08 Aug 2025 20:23:33 +0000 Received: from mail-wm1-x342.google.com (mail-wm1-x342.google.com [2a00:1450:4864:20::342]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id 8ca908cc-7495-11f0-b898-0df219b8e170; Fri, 08 Aug 2025 22:23:30 +0200 (CEST) Received: by mail-wm1-x342.google.com with SMTP id 5b1f17b1804b1-4589b3e3820so26574225e9.3 for ; Fri, 08 Aug 2025 13:23:30 -0700 (PDT) Received: from localhost.localdomain (host-195-149-20-212.as13285.net. [195.149.20.212]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-459e075047fsm103989805e9.1.2025.08.08.13.23.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 Aug 2025 13:23:29 -0700 (PDT) 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: 8ca908cc-7495-11f0-b898-0df219b8e170 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.com; s=google; t=1754684610; x=1755289410; darn=lists.xenproject.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=YFVhdfvOQDjUoAaTEi0zstvy9aZcNZFPXKOhNL4LWc4=; b=ecW0HfCefNtC44XOQAVsPkiuTPIpzzA6LpioQ0O8kyQfKiwMzT3RIO0owGBi4fec0A PzufxLDZNaeSeudj/cRHe4MDvHjCol6qaE7z+oYUJYEk5ybEIoOCQfpb2bErTYH4xpI9 TkDOKetrekXI41cy3wtGz+HuPYke3o1FY2Pe4= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754684610; x=1755289410; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=YFVhdfvOQDjUoAaTEi0zstvy9aZcNZFPXKOhNL4LWc4=; b=RK4QLcK321EULbgy2Bdd74l5o+fUXqS5Xd+0Tu5lxG8Z1tG23J8Hrfy36jkbKZ5/dL qn4caYEIsTTToj0Zh7gr6chaD2F1LNscZCpwq1rTpmx5pge8tBl6tkuIw78zg6Eo8pZ1 f/6dF4hRlx9fMeqCqXT9KxhN/tyBFfzY8Cw/5p70+vRe04X7X5XUe9GmMhVF8d5M6Kye 0ETy3pxe2lZI19s4d1BCAjWlNZdtZcVazAywojPg5Ri2oRVdeqOEJ6ICd+RP2J6JUpvt Yneb9A9/vXlE5ax6tZQzF6PNyex+RAmRvpnFNei1uj+16NQBCSQKLe41L7pqjG0BTuaB v6Yg== X-Gm-Message-State: AOJu0Yx8zT41ChgCODrJqyubVpmD7uGOO5t70uQfiubeYvV3RlFexfUF pCdX32aP7WwQLHWcbc6SALLBs20sOQTf4252K9xUJhf9aSSvZx93tmoSdYzFLVaw5NbbbeA51jO Fz6QJ/s02xw== X-Gm-Gg: ASbGnctGehCwC2XM4GcF+T3nIbeGI7dY/VmgIarRb4jgl3q63pvcCfNIoytFmH3SOUP bp0ENm/52yRVTQpV/mwViNgg7kmYo/PP4ftqDChGJ4vXkKi/pKte6Ueyan72haO/YfMjR1px/o4 Hl4LuilMS+PFMNIojDGsSZJFa16fSIk0Dx0ktefFEoEL9ydxZQUBN189yhkb2T/n4ra33GEgxj0 yP+CjejTP94WF9ppsAwUUwKrVWlzVsP5towp0vpTqEtURAzHMMqXQJ8lF/bQBs1ScTtYfU38ImH 9Og9AxygDCgdjejixdTM2a/sabS9pvZJrvxYSd/YxSnrXIVcDfRwlPV55dSKSF2tf9tThJcR8Y6 IMF3wJaJrK7ZDebnhKRFm6Lg2s56DEDKewSMn+GwoMEIM7nFaYXJAZwhkJD3SG4AhFWiZdCLUMu x6 X-Google-Smtp-Source: AGHT+IErUFYgJYCqo/f1FYTdB8yWmXUcMHWGJQXVcASgvlDey1jG1psADqBZ0NXjta7z31LyFSqxXA== X-Received: by 2002:a05:600c:34d2:b0:458:caec:a741 with SMTP id 5b1f17b1804b1-459f525bfa8mr34064775e9.24.1754684609878; Fri, 08 Aug 2025 13:23:29 -0700 (PDT) From: Andrew Cooper To: Xen-devel Cc: Andrew Cooper , Jan Beulich , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= Subject: [PATCH 13/22] x86: FRED enumerations Date: Fri, 8 Aug 2025 21:23:05 +0100 Message-Id: <20250808202314.1045968-14-andrew.cooper3@citrix.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250808202314.1045968-1-andrew.cooper3@citrix.com> References: <20250808202314.1045968-1-andrew.cooper3@citrix.com> 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: 1754684633480116600 Of note, CR4.FRED is bit 32 and cannot enabled outside of 64bit mode. Most supported toolchains don't understand the FRED instructions yet. ERETU and ERETS are easy to wrap (they encoded as REPZ/REPNE CLAC), while LKGS is more complicated and deferred for now. I have intentionally named the FRED MSRs differently to the spec. In the spec, the stack pointer names alias the TSS fields of the same name, despite very different semantics. Signed-off-by: Andrew Cooper Acked-by: Jan Beulich --- CC: Jan Beulich CC: Roger Pau Monn=C3=A9 --- xen/arch/x86/Kconfig | 4 ++++ xen/arch/x86/include/asm/asm-defns.h | 9 +++++++++ xen/arch/x86/include/asm/cpufeature.h | 3 +++ xen/arch/x86/include/asm/msr-index.h | 11 +++++++++++ xen/arch/x86/include/asm/x86-defns.h | 1 + xen/include/public/arch-x86/cpufeatureset.h | 3 +++ 6 files changed, 31 insertions(+) diff --git a/xen/arch/x86/Kconfig b/xen/arch/x86/Kconfig index a45ce106e210..90cbad13a7c7 100644 --- a/xen/arch/x86/Kconfig +++ b/xen/arch/x86/Kconfig @@ -57,6 +57,10 @@ config HAS_CC_CET_IBT # Retpoline check to work around https://gcc.gnu.org/bugzilla/show_bug.cg= i?id=3D93654 def_bool $(cc-option,-fcf-protection=3Dbranch -mmanual-endbr -mindirect-b= ranch=3Dthunk-extern) && $(as-instr,endbr64) =20 +config HAS_AS_FRED + # binutils >=3D 2.41 or LLVM >=3D 19 + def_bool $(as-instr,eretu;lkgs %ax) + menu "Architecture Features" =20 source "arch/x86/Kconfig.cpu" diff --git a/xen/arch/x86/include/asm/asm-defns.h b/xen/arch/x86/include/as= m/asm-defns.h index 61a5faf90446..2e5200b94b82 100644 --- a/xen/arch/x86/include/asm/asm-defns.h +++ b/xen/arch/x86/include/asm/asm-defns.h @@ -4,6 +4,15 @@ .byte 0x0f, 0x01, 0xfc .endm =20 +#ifndef CONFIG_HAS_AS_FRED +.macro eretu + .byte 0xf3, 0x0f, 0x01, 0xca +.endm +.macro erets + .byte 0xf2, 0x0f, 0x01, 0xca +.endm +#endif + /* * Call a noreturn function. This could be JMP, but CALL results in a more * helpful backtrace. BUG is to catch functions which do decide to return= ... diff --git a/xen/arch/x86/include/asm/cpufeature.h b/xen/arch/x86/include/a= sm/cpufeature.h index 441a7ecc494b..b6cf0c8dfc7c 100644 --- a/xen/arch/x86/include/asm/cpufeature.h +++ b/xen/arch/x86/include/asm/cpufeature.h @@ -246,6 +246,9 @@ static inline bool boot_cpu_has(unsigned int feat) #define cpu_has_avx_vnni boot_cpu_has(X86_FEATURE_AVX_VNNI) #define cpu_has_avx512_bf16 boot_cpu_has(X86_FEATURE_AVX512_BF16) #define cpu_has_cmpccxadd boot_cpu_has(X86_FEATURE_CMPCCXADD) +#define cpu_has_fred boot_cpu_has(X86_FEATURE_FRED) +#define cpu_has_lkgs boot_cpu_has(X86_FEATURE_LKGS) +#define cpu_has_nmi_src boot_cpu_has(X86_FEATURE_NMI_SRC) #define cpu_has_avx_ifma boot_cpu_has(X86_FEATURE_AVX_IFMA) =20 /* CPUID level 0x80000021.eax */ diff --git a/xen/arch/x86/include/asm/msr-index.h b/xen/arch/x86/include/as= m/msr-index.h index 428d993ee89b..bb48d16f0c6d 100644 --- a/xen/arch/x86/include/asm/msr-index.h +++ b/xen/arch/x86/include/asm/msr-index.h @@ -115,6 +115,17 @@ #define MCU_OPT_CTRL_GDS_MIT_DIS (_AC(1, ULL) << 4) #define MCU_OPT_CTRL_GDS_MIT_LOCK (_AC(1, ULL) << 5) =20 +#define MSR_FRED_RSP_SL0 0x000001cc +#define MSR_FRED_RSP_SL1 0x000001cd +#define MSR_FRED_RSP_SL2 0x000001ce +#define MSR_FRED_RSP_SL3 0x000001cf +#define MSR_FRED_STK_LVLS 0x000001d0 +#define MSR_FRED_SSP_SL0 MSR_PL0_SSP +#define MSR_FRED_SSP_SL1 0x000001d1 +#define MSR_FRED_SSP_SL2 0x000001d2 +#define MSR_FRED_SSP_SL3 0x000001d3 +#define MSR_FRED_CONFIG 0x000001d4 + #define MSR_RTIT_OUTPUT_BASE 0x00000560 #define MSR_RTIT_OUTPUT_MASK 0x00000561 #define MSR_RTIT_CTL 0x00000570 diff --git a/xen/arch/x86/include/asm/x86-defns.h b/xen/arch/x86/include/as= m/x86-defns.h index 23579c471f4a..513f18b3be4e 100644 --- a/xen/arch/x86/include/asm/x86-defns.h +++ b/xen/arch/x86/include/asm/x86-defns.h @@ -75,6 +75,7 @@ #define X86_CR4_PKE 0x00400000 /* enable PKE */ #define X86_CR4_CET 0x00800000 /* Control-flow Enforcement Technolo= gy */ #define X86_CR4_PKS 0x01000000 /* Protection Key Supervisor */ +#define X86_CR4_FRED 0x100000000 /* Fast Return and Event Delivery */ =20 #define X86_CR8_VALID_MASK 0xf =20 diff --git a/xen/include/public/arch-x86/cpufeatureset.h b/xen/include/publ= ic/arch-x86/cpufeatureset.h index f7312e0b04e7..9cd778586f10 100644 --- a/xen/include/public/arch-x86/cpufeatureset.h +++ b/xen/include/public/arch-x86/cpufeatureset.h @@ -310,7 +310,10 @@ XEN_CPUFEATURE(ARCH_PERF_MON, 10*32+8) /* Architectu= ral Perfmon */ XEN_CPUFEATURE(FZRM, 10*32+10) /*A Fast Zero-length REP MOVSB */ XEN_CPUFEATURE(FSRS, 10*32+11) /*A Fast Short REP STOSB */ XEN_CPUFEATURE(FSRCS, 10*32+12) /*A Fast Short REP CMPSB/SCASB */ +XEN_CPUFEATURE(FRED, 10*32+17) /* Fast Return and Event Delivery= */ +XEN_CPUFEATURE(LKGS, 10*32+18) /* Load Kernel GS instruction */ XEN_CPUFEATURE(WRMSRNS, 10*32+19) /*S WRMSR Non-Serialising */ +XEN_CPUFEATURE(NMI_SRC, 10*32+20) /* NMI-Source Reporting */ XEN_CPUFEATURE(AMX_FP16, 10*32+21) /* AMX FP16 instruction */ XEN_CPUFEATURE(AVX_IFMA, 10*32+23) /*A AVX-IFMA Instructions */ XEN_CPUFEATURE(LAM, 10*32+26) /* Linear Address Masking */ --=20 2.39.5 From nobody Mon Feb 9 08:08:03 2026 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=1754684630; cv=none; d=zohomail.com; s=zohoarc; b=OXPosBCTZ06fvhrwk9QgX48N9CfLSZjYvub61hPiZ5YS+cl3mH+CFMvmCsWGiId7Q35LcG15LAfOQN2ZIAEbrjJvkisHNYbZUYNZM7Vnpdca5jm6YyZ4/fkvj+cniBbKDkBlSb1N8NX1lS5dOdhbQPw0oUdHTpm3uOnacGoLjUc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1754684630; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=cTq1zY2I26ChNKndjNiVvn62M1r/PKSnKEK0vFDd4Xw=; b=IA7/S8kUHie92yfcQHpzOTgEFsiWjIJwospw9BNKno11T+UXGtAbHyFcakoVn5iwFlL1z3JA911C1LcWFpuEUg/jWRw6ICv4n0ZIzhvds4mKdOrjkc4ceNKkZdd1suE7kMwU9H9iWSvPNVKyXJh+ktkDz9a3US3MjvtNOYhOFjA= 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 1754684630264701.2240389255081; Fri, 8 Aug 2025 13:23:50 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1075031.1437568 (Exim 4.92) (envelope-from ) id 1ukTcl-0000E0-FZ; Fri, 08 Aug 2025 20:23:35 +0000 Received: by outflank-mailman (output) from mailman id 1075031.1437568; Fri, 08 Aug 2025 20:23:35 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1ukTck-0000As-Qq; Fri, 08 Aug 2025 20:23:34 +0000 Received: by outflank-mailman (input) for mailman id 1075031; Fri, 08 Aug 2025 20:23:32 +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 1ukTch-0005tW-V1 for xen-devel@lists.xenproject.org; Fri, 08 Aug 2025 20:23:31 +0000 Received: from mail-wm1-x32f.google.com (mail-wm1-x32f.google.com [2a00:1450:4864:20::32f]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 8cff654d-7495-11f0-a324-13f23c93f187; Fri, 08 Aug 2025 22:23:31 +0200 (CEST) Received: by mail-wm1-x32f.google.com with SMTP id 5b1f17b1804b1-459ebb6bbdfso16617975e9.0 for ; Fri, 08 Aug 2025 13:23:31 -0700 (PDT) Received: from localhost.localdomain (host-195-149-20-212.as13285.net. [195.149.20.212]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-459e075047fsm103989805e9.1.2025.08.08.13.23.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 Aug 2025 13:23:30 -0700 (PDT) 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: 8cff654d-7495-11f0-a324-13f23c93f187 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.com; s=google; t=1754684611; x=1755289411; darn=lists.xenproject.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=cTq1zY2I26ChNKndjNiVvn62M1r/PKSnKEK0vFDd4Xw=; b=kVvnBQfBbtrtxRxxaGQ17AIwAqM7oGoJ4A/1Yz44F7oP2m3LuZ5V7+QUHuyCQaYU7A ckY50RlcOPesuuP5VGRZiMZQoz0kAtppRTgvmaHgFfs1FuPTbK9ufTLr9Usc6ua+K+PD yf45tykm4zbiMcuroRjipZRERiOaQwWn4cNoA= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754684611; x=1755289411; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=cTq1zY2I26ChNKndjNiVvn62M1r/PKSnKEK0vFDd4Xw=; b=AdC1G685ZJg8B1jAh5E8iv+DS0YtMoLiT/Hw+XX4l90xWAGPUuRb93X7f3Snqmzw+U 6Zbauve894wacCoJezqbkSc6KB3+HRsHtCJud/2h8jdwJibkrWNoQ5oKap3kVK3vsqIT 56nW0SG/MZTje5FZlCaF5oKzoyzHrcxkHUGbWv5Z4avUvHMP6wNuLn1KP612AclVmDRs zQMDpZtUBorhj8VZoAtUFJSWE52vFd0sCjmo6zJlJYeTBxQXCZlJKoDx20//xxkKT/er p+tLl0YmKnonowuJJcBi+2TUGL4xOLFJoQs4/c1/nCu+T/74f1gEw/40dUQSaRSxT0Zc 5HMw== X-Gm-Message-State: AOJu0YzCAglu+kopE86ZPab3/e8FrEi35RtAAsOKWT29/nmTSOqFC+ai 6g/Q1QcdrM9cfGcqxOo+aJz9jMeaiR295rj8Z5BUHBmYXVb/14iZHOCHs/NQj6oYbG4iifdbn7o wtHFHzNY= X-Gm-Gg: ASbGncvl4MPyIbB1dI+6S1iiPTFOLl6U8zOdhZkrncOaj8PQVENM6DYWpMz3ZbrN6ac L1xkMoEV+jOWJY5EXzZT4tVXevZ82PxKvoPrxRtYHau0axQbsA83SgjCbB10dh5nugeAzQUJOWi uu5HXP3BousCTKTeyQrDm+y3DS0zFn7aS//Svyhsv0s6F/NxRIXLwSsyqvSXMDQcjLrfH5A097j KejuUqVbhkPj7Te2GyfTSLTlZXzHHPAzD3CPZcwhab7XoEMM7GrPU5M0Oc8ILm6yTYpj6h7hKTu G1uOpTQftAhvTOeiBUBsrgO+A4hnoxkbZwwaBMF7Nydy3xo2PHPTH49qE2FLQzHHuJbMS23aU7y DW7AEYtD+g3d0hgLoHkJ8N02fcxh/rMnmK1yTJd+ViHLRi5n+kZBupG7FXzDh7CL8wU3mUpCd9a xA X-Google-Smtp-Source: AGHT+IGsLXCOpXJvGiSWbmlCj4KaXirNJ77sHY86pggs96EcE/yz32J/KyrLLWRQ6t+iEhKWqpgulA== X-Received: by 2002:a05:600c:b86:b0:459:dde3:1a3d with SMTP id 5b1f17b1804b1-459f4fb0174mr32998035e9.26.1754684610501; Fri, 08 Aug 2025 13:23:30 -0700 (PDT) From: Andrew Cooper To: Xen-devel Cc: Andrew Cooper , Jan Beulich , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= Subject: [PATCH 14/22] x86/traps: Extend struct cpu_user_regs/cpu_info with FRED fields Date: Fri, 8 Aug 2025 21:23:06 +0100 Message-Id: <20250808202314.1045968-15-andrew.cooper3@citrix.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250808202314.1045968-1-andrew.cooper3@citrix.com> References: <20250808202314.1045968-1-andrew.cooper3@citrix.com> 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: 1754684632550124100 The FRED on-stack format is larger than the IDT format, but is by and large compatible. FRED reuses space above cs and ss for extra metadata, some of which is purely informational, and some of which causes additional effects = in ERET{U,S}. Follow Linux's choice of naming for fred_{c,s}s structures, to make it very clear at the point of use that it's dependent on FRED. There is also the event data field and reserved fields, but we cannot inclu= de these in struct cpu_user_regs without reintroducing OoB structure accesses = in the non-FRED case. See commit 6065a05adf15 ("x86/traps: 'Fix' safety of read_registers() in #DF path"). for more details. Instead, use a new struct fred_info and position it suitably in struct cpu_info. This boundary will be loaded into MSR_FRED_RSP_SL0, and must be 64-byte aligned. This does add 16 bytes back into struct cpu_info, undoing the saving we made by dropping the vm86 data segment selectors. No functional change. Signed-off-by: Andrew Cooper --- CC: Jan Beulich CC: Roger Pau Monn=C3=A9 --- xen/arch/x86/include/asm/cpu-user-regs.h | 71 ++++++++++++++++++++++-- xen/arch/x86/include/asm/current.h | 2 + xen/arch/x86/traps-setup.c | 5 ++ 3 files changed, 74 insertions(+), 4 deletions(-) diff --git a/xen/arch/x86/include/asm/cpu-user-regs.h b/xen/arch/x86/includ= e/asm/cpu-user-regs.h index d700a3ef3447..06d9cbfbe6ba 100644 --- a/xen/arch/x86/include/asm/cpu-user-regs.h +++ b/xen/arch/x86/include/asm/cpu-user-regs.h @@ -30,6 +30,10 @@ struct cpu_user_regs /* * During IDT delivery for exceptions with an error code, hardware pus= hes * to this point. Entry_vector is filled in by software. + * + * During FRED delivery, hardware always pushes to this point. Softwa= re + * copies fred_ss.vector into entry_vector so most interrupt/exception + * handling can be FRED-agnostic. */ =20 uint32_t error_code; @@ -42,17 +46,76 @@ struct cpu_user_regs */ =20 union { uint64_t rip; uint32_t eip; uint16_t ip; }; - uint16_t cs, _pad0[1]; - uint8_t saved_upcall_mask; /* PV (v)rflags.IF =3D=3D !saved_upcall_ma= sk */ - uint8_t _pad1[3]; + union { + struct { + uint16_t cs; + unsigned long :16; + uint8_t saved_upcall_mask; /* PV (v)rflags.IF =3D=3D !sa= ved_upcall_mask */ + }; + unsigned long csx; + struct { + /* + * Bits 0 thru 31 control ERET{U,S} behaviour, and is state of= the + * interrupted context. + */ + uint16_t cs; + unsigned int sl:2; /* Stack Level */ + bool wfe:1; /* Wait-for-ENDBRANCH state */ + } fred_cs; + }; union { uint64_t rflags; uint32_t eflags; uint16_t flags; }; union { uint64_t rsp; uint32_t esp; uint16_t sp; uint8_t spl;= }; - uint16_t ss, _pad2[3]; + union { + uint16_t ss; + unsigned long ssx; + struct { + /* + * Bits 0 thru 31 control ERET{U,S} behaviour, and is state ab= out + * the event which occured. + */ + uint16_t ss; + bool sti:1; /* Was blocked-by-STI, and not cancel= led */ + bool swint:1; /* Was a SYSCALL/SYSENTER/INT $N */ + bool nmi:1; /* Was an NMI. */ + unsigned long :13; + + /* + * Bits 32 thru 63 are ignored by ERET{U,S} and are informative + * only. + */ + uint8_t vector; + unsigned long :8; + unsigned int type:4; /* X86_ET_* */ + unsigned long :4; + bool enclave:1; /* Event taken in SGX mode */ + bool lm:1; /* Was in Long Mode */ + bool nested:1; /* Exception during event delivery, c= lear for #DF */ + unsigned long :1; + unsigned int insnlen:4; /* .type >=3D SW_INT */ + } fred_ss; + }; =20 /* * For IDT delivery, tss->rsp0 points to this boundary as embedded wit= hin * struct cpu_info. It must be 16-byte aligned. */ }; +struct fred_info +{ + /* + * Event Data. For: + * #DB: PENDING_DBG (%dr6 with positive polarity) + * NMI: NMI-Source Bitmap (on capable hardware) + * #PF: %cr2 + * #NM: MSR_XFD_ERR (only XFD-induced #NMs) + */ + uint64_t edata; + uint64_t _rsvd; + + /* + * For FRED delivery, MSR_FRED_RSP_SL0 points to this boundary as embe= dded + * within struct cpu_info. It must be 64-byte aligned. + */ +}; =20 #endif /* X86_CPU_USER_REGS_H */ diff --git a/xen/arch/x86/include/asm/current.h b/xen/arch/x86/include/asm/= current.h index a7c9473428b2..962eb76a82b3 100644 --- a/xen/arch/x86/include/asm/current.h +++ b/xen/arch/x86/include/asm/current.h @@ -38,6 +38,8 @@ struct vcpu; =20 struct cpu_info { struct cpu_user_regs guest_cpu_user_regs; + struct fred_info _fred; /* Only used when FRED is active. */ + unsigned int processor_id; unsigned int verw_sel; struct vcpu *current_vcpu; diff --git a/xen/arch/x86/traps-setup.c b/xen/arch/x86/traps-setup.c index fbae7072c292..37202c17fcea 100644 --- a/xen/arch/x86/traps-setup.c +++ b/xen/arch/x86/traps-setup.c @@ -360,7 +360,12 @@ static void __init __maybe_unused build_assertions(voi= d) * * tss->rsp0, pointing at the end of cpu_info.guest_cpu_user_regs, mus= t be * 16-byte aligned. + * + * MSR_FRED_RSP_SL0, pointing to the end of cpu_info._fred must be 64-= byte + * aligned. */ BUILD_BUG_ON((sizeof(struct cpu_info) - endof_field(struct cpu_info, guest_cpu_user_regs)) & 15); + BUILD_BUG_ON((sizeof(struct cpu_info) - + endof_field(struct cpu_info, _fred)) & 63); } --=20 2.39.5 From nobody Mon Feb 9 08:08:03 2026 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=1754684638; cv=none; d=zohomail.com; s=zohoarc; b=n4oZkZ6VSeLAwJg44e4g2xceJmoQcJVqcOd3vmZ9mZDxt8UelFAl8s7uz4uOMQkkkUqoVwOHGEj5FXCNRQ0U2laUlG4BmU3Fa1qc3uz/YOrbX18UypVXCExNscKt2/IsYinM8DkG8b0yg3D49IoK6gy+WAeE142/XDyAvf6/nn4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1754684638; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=DhpjCRwETK5+wDVQikgEEWpf2jqHKcYBrZS42n+RtV8=; b=C8bgXPlXhu/RLsik49kn+WgzJfEWK5lKImnZnnoIC0Q6MAwNxsz+JoTLhAXRTEN50jElkY9ZobeD1LI6ioBBBMzVA7FLHu5m7ItNQj2O/6zSQwcjbWpxnXBfeg+EYx+a52zdooAgmhpVdXrXjJ1B5XQ1RpwdI8DNiQKVgrObDVs= 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 1754684638870728.0336042136422; Fri, 8 Aug 2025 13:23:58 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1075035.1437593 (Exim 4.92) (envelope-from ) id 1ukTco-0000sM-PD; Fri, 08 Aug 2025 20:23:38 +0000 Received: by outflank-mailman (output) from mailman id 1075035.1437593; Fri, 08 Aug 2025 20:23:38 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1ukTcn-0000oL-Mh; Fri, 08 Aug 2025 20:23:37 +0000 Received: by outflank-mailman (input) for mailman id 1075035; Fri, 08 Aug 2025 20:23:34 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1ukTck-0005tJ-Br for xen-devel@lists.xenproject.org; Fri, 08 Aug 2025 20:23:34 +0000 Received: from mail-wm1-x331.google.com (mail-wm1-x331.google.com [2a00:1450:4864:20::331]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id 8d62ff3e-7495-11f0-b898-0df219b8e170; Fri, 08 Aug 2025 22:23:32 +0200 (CEST) Received: by mail-wm1-x331.google.com with SMTP id 5b1f17b1804b1-4589b3e3820so26574315e9.3 for ; Fri, 08 Aug 2025 13:23:32 -0700 (PDT) Received: from localhost.localdomain (host-195-149-20-212.as13285.net. [195.149.20.212]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-459e075047fsm103989805e9.1.2025.08.08.13.23.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 Aug 2025 13:23:30 -0700 (PDT) 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: 8d62ff3e-7495-11f0-b898-0df219b8e170 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.com; s=google; t=1754684611; x=1755289411; darn=lists.xenproject.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=DhpjCRwETK5+wDVQikgEEWpf2jqHKcYBrZS42n+RtV8=; b=QJ6pLEKbdP8ljyhSD3rnHOiqFQ21/KhnmGVDOVqyjUjvO87vk70AbN46LyK7DMXUT4 QwWYONoXOFklFWMx/jrAK35l6G/+EmTMLw2PRLa49jiyIZqTWL7LjLyEpcEHuXxn99ct 80IJWf5859VtXe8nwU2Ljd8litDb03NXDgXbM= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754684611; x=1755289411; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=DhpjCRwETK5+wDVQikgEEWpf2jqHKcYBrZS42n+RtV8=; b=R/WeOuYrLcaAdERhurc82LvIFh7sjlqnF1It7QV+gWW8Bus42BFmYRN5OwG/wfm/4n hYDlwD4k9nYkL7mHTWDtb+SqQrBx01ifbqpHBgutzL9ffiRWfwxGx2bKGD2+SlEHI8Eb DdRfYd4Jumo7eOr8NCPxxQdmSDYIKTVEbm57n3SJYSttgPwB9AgKyYvdk1cMQ0xPEDYh D0nLwWWyWt4ykEUV8Mwh8c/bli9yo4HWHWP0UEUZ7Z/tLJNAK7qgw7auXCyBd9i3jS6f 5ZyQNxGuo5Gniyz1xbeGuh/firXuGkAOOKMt5vGIQZzYnYJytLeaa8xWe+1fNj5B5Yu0 SO4A== X-Gm-Message-State: AOJu0YyoLC/SVUns7U39Wy12f3ymgc2caXKiMji5QUMO+WSx/g7q77Tf GybydeW8RheCMoyRLB9vysUCEItojr1ZFfs13FR9NIrf72E9PyJN56SFhTVoM+ySJPqpBnLrtil +YDVsEnI= X-Gm-Gg: ASbGncuogLfNBDztZanAGUo+c2RJXBwUBgoONCnDwi09LHWLOkvddoB4i4IwBiNkV8o LUn2GwOh5G4B4beRUytjxrBrvHGjgUbNcOF2fxf6gqdcl72AkDTuPCL2lJYL3qWvqL67eaP8pjb 4Scs3Am862EFIO2XkzUw8peZqdkkh2YnnYKgKx+vUXwG/lnvhBwTnsrHqX1Kw8mACTlrJK5h2rF IP4dFMzezNvQHVmidiD/AEVhw/Jk1O+lvsnX4+h8WaXde302m2A9o6mDxDX8NY4Qk0mNNkHAVdZ 2XohvW2MEGOchJQ/2vpRNQBR+M1kGm1TGnhTKBNP20NskaTLuR6CIJcPs8a4lL+Mv2mzGhmQPC8 NGfDPe/u3mn74IJMUBg3+p4PWnvE2Qqpb1vzhGA2/MUiVHRArltBNW65V4pxuVo9nHqq1uoVCQy Nc X-Google-Smtp-Source: AGHT+IEKNxT84SXyyCmdr7B91ibNP+tqO5b0I6jUv6ULvgnNTNIVapfHxAOZYXD0pcHgV0ZKovcgWA== X-Received: by 2002:a05:600c:8216:b0:459:f90e:4f5a with SMTP id 5b1f17b1804b1-459f90e4f9fmr30471795e9.15.1754684611133; Fri, 08 Aug 2025 13:23:31 -0700 (PDT) From: Andrew Cooper To: Xen-devel Cc: Andrew Cooper Subject: [PATCH 15/22] x86/traps: Introduce opt_fred Date: Fri, 8 Aug 2025 21:23:07 +0100 Message-Id: <20250808202314.1045968-16-andrew.cooper3@citrix.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250808202314.1045968-1-andrew.cooper3@citrix.com> References: <20250808202314.1045968-1-andrew.cooper3@citrix.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @citrix.com) X-ZM-MESSAGEID: 1754684640469124100 Content-Type: text/plain; charset="utf-8" ... disabled by default. There is a lot of work before FRED can be enabled= by default. One part of FRED, the LKGS (Load Kernel GS) instruction, is enumerated separately but is mandatory as FRED disallows the SWAPGS instruction. Therefore, both CPUID bits must be checked. FRED formally removes the use of Ring1 and Ring2, meaning we cannot run 32b= it PV guests. Therefore, don't enable FRED by default in shim mode. OTOH, if FRED is active, then PV32 needs disabling like with CET. No functional change. Signed-off-by: Andrew Cooper --- docs/misc/xen-command-line.pandoc | 10 ++++++++++ xen/arch/x86/include/asm/traps.h | 4 ++++ xen/arch/x86/traps-setup.c | 31 +++++++++++++++++++++++++++++++ 3 files changed, 45 insertions(+) diff --git a/docs/misc/xen-command-line.pandoc b/docs/misc/xen-command-line= .pandoc index 6865a61220ca..f293d973a8e8 100644 --- a/docs/misc/xen-command-line.pandoc +++ b/docs/misc/xen-command-line.pandoc @@ -1283,6 +1283,16 @@ requirement can be relaxed. This option is particul= arly useful for nested virtualization, to allow the L1 hypervisor to use EPT even if the L0 hyper= visor does not provide `VM_ENTRY_LOAD_GUEST_PAT`. =20 +### fred (x86) +> `=3D ` + +> Default: `false` + +Flexible Return and Event Delivery is an overhaul of interrupt, exception = and +system call handling, fixing many corner cases in the x86 architecture, and +expected in hardware from 2025. Support in Xen is a work in progress and +disabled by default. + ### gnttab > `=3D List of [ max-ver:, transitive=3D, transfer=3D= ]` =20 diff --git a/xen/arch/x86/include/asm/traps.h b/xen/arch/x86/include/asm/tr= aps.h index 6ae451d3fc70..73097e957d05 100644 --- a/xen/arch/x86/include/asm/traps.h +++ b/xen/arch/x86/include/asm/traps.h @@ -7,6 +7,10 @@ #ifndef ASM_TRAP_H #define ASM_TRAP_H =20 +#include + +extern int8_t opt_fred; + void bsp_early_traps_init(void); void traps_init(void); void bsp_traps_reinit(void); diff --git a/xen/arch/x86/traps-setup.c b/xen/arch/x86/traps-setup.c index 37202c17fcea..3b5e4969a375 100644 --- a/xen/arch/x86/traps-setup.c +++ b/xen/arch/x86/traps-setup.c @@ -9,6 +9,8 @@ #include #include #include +#include +#include #include #include #include @@ -20,6 +22,9 @@ unsigned int __ro_after_init ler_msr; static bool __initdata opt_ler; boolean_param("ler", opt_ler); =20 +int8_t __ro_after_init opt_fred =3D 0; /* -1 when supported. */ +boolean_param("fred", opt_fred); + void nocall entry_PF(void); void nocall lstar_enter(void); void nocall cstar_enter(void); @@ -305,6 +310,32 @@ void __init traps_init(void) /* Replace early pagefault with real pagefault handler. */ _update_gate_addr_lower(&bsp_idt[X86_EXC_PF], entry_PF); =20 + if ( !cpu_has_fred || !cpu_has_lkgs ) + { + if ( opt_fred ) + printk(XENLOG_WARNING "FRED not available, ignoring\n"); + opt_fred =3D false; + } + + if ( opt_fred =3D=3D -1 ) + opt_fred =3D !pv_shim; + + if ( opt_fred ) + { +#ifdef CONFIG_PV32 + if ( opt_pv32 ) + { + opt_pv32 =3D 0; + printk(XENLOG_INFO "Disabling PV32 due to FRED\n"); + } +#endif + printk("Using FRED event delivery\n"); + } + else + { + printk("Using IDT event delivery\n"); + } + load_system_tables(); =20 init_ler(); --=20 2.39.5 From nobody Mon Feb 9 08:08:03 2026 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=1754684637; cv=none; d=zohomail.com; s=zohoarc; b=i83tv0vOn1Ep3vVlnhS/vzs1o2AM0dBK/5fgwf1kUB2/2T7dYOCH+otuHHLIcxSyecF+FDGNBCGKuZRHw+6JRw5+zZEvPGaagHLOeVVac8cPapb2xI32eVjrVPqjkamt7/bBljzrqiqNOvGmoUJOjRhUTXeQhnCKgYT9EeD394U= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1754684637; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=KnuSzFJrJdbU/x73TUxu0/lQq8zKDVIUYGotpIOmF90=; b=Qp0Tcypl/YVZOeSW6w+A6dHT3Az2JZZRm0ciuospKu8FgSiLnPRJD9ZG7SR5EB43D93aXRIjX4P1ZzYTfqz+Eck6bRyqDM7zQZw8JihDTDeXMoC3Jbo1jXfBjev+p1FJhJkYaKPSyt7KTH2sakdn6zB3IjntiQ1EwUTrfHC5v5M= 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 1754684637709153.05598058537396; Fri, 8 Aug 2025 13:23:57 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1075033.1437577 (Exim 4.92) (envelope-from ) id 1ukTcm-0000Z0-VJ; Fri, 08 Aug 2025 20:23:36 +0000 Received: by outflank-mailman (output) from mailman id 1075033.1437577; Fri, 08 Aug 2025 20:23:36 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1ukTcm-0000V3-79; Fri, 08 Aug 2025 20:23:36 +0000 Received: by outflank-mailman (input) for mailman id 1075033; Fri, 08 Aug 2025 20:23:33 +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 1ukTcj-0005tW-A6 for xen-devel@lists.xenproject.org; Fri, 08 Aug 2025 20:23:33 +0000 Received: from mail-wm1-x32e.google.com (mail-wm1-x32e.google.com [2a00:1450:4864:20::32e]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 8de1f6e8-7495-11f0-a324-13f23c93f187; Fri, 08 Aug 2025 22:23:32 +0200 (CEST) Received: by mail-wm1-x32e.google.com with SMTP id 5b1f17b1804b1-451d3f72391so20485505e9.3 for ; Fri, 08 Aug 2025 13:23:32 -0700 (PDT) Received: from localhost.localdomain (host-195-149-20-212.as13285.net. [195.149.20.212]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-459e075047fsm103989805e9.1.2025.08.08.13.23.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 Aug 2025 13:23:31 -0700 (PDT) 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: 8de1f6e8-7495-11f0-a324-13f23c93f187 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.com; s=google; t=1754684612; x=1755289412; darn=lists.xenproject.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=KnuSzFJrJdbU/x73TUxu0/lQq8zKDVIUYGotpIOmF90=; b=GSYQ0UK3j08cp6HhNdpxeLF0fIGzqVp+rei5YzBtzbuGG420GJF/8zbPN12LMCN8x2 JDMkSGcjbcrcy4ubVjD31kBj/Qcu86wquEiofzgYu7+5L8Hr3SXuOoD0QYkHh4FXWfdx NIGTn1wo7t0brWGsjRfAaXw033jnnspuYWNhI= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754684612; x=1755289412; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=KnuSzFJrJdbU/x73TUxu0/lQq8zKDVIUYGotpIOmF90=; b=rsgRkpKXrL6M+bdbR8YwCP37Nu8QNeflNrcgCJRppeXVmy2pRkmzEhe96H7Jdi0VCq EMEdbV77SNiDWiy3VNPVxtPegxEs+gY3lankzQlMOgy6wyW/5xih2jJxT+xaBF6LzhUG x5GxJxti+LG9AVpWhQD37naDXFotuB220pyvOTk5qpvRcbz7pnGVIEO97J5UHwtONqht BHgOW0TuTHOgto7buXmCNdAxNwDlvViciKKtyKT9FjJS5MH3XSUVv0ytZ3YqzIEJUxze GZgPCrxyWJamjd5iQqEdx3AEq5G7pJ7Gh6t2LsmLaTGw0a1zIbWJTXJOfujX8OZzJ7m0 pQ6g== X-Gm-Message-State: AOJu0YzZEvQAvWeo4w1+Hn4R6FACMXKo8ZjsgC5QvuXttzvp6GM9H+UB Wo9Z4RmgcsCHRl4u5d+XMfWtaesgYShk8xsFRbXJNCiv2Jq8qBEFFTVHQ5BQ+tU3hUWSG9/qHU/ pjBsWhE8= X-Gm-Gg: ASbGnctxcC5FnT5W+miLQVn5hVaprTF3KYN7d7vT23rj/pPLJ1sboyTIdUIAvZRcl+3 j8lfP+EiWKbXsuVQaAOUyLksSGLMImMOO34W28qG/nU3SlUasyednpB4RF4SHRp876c82JG856A Wx3ryuk97ns3m+hDr6fBT6PIsieM2It/qKgu9tKQauKkaGPhwXpbZZUv/TYfLNozkFO1aBH30fH VziQ4cF8kuD08oxsVYsn7+yTP5j8UrIBPX0eNArmzK/PRxQZznO8ZoqrkcSGNZ0v9gdD2cVkqaH +w+QeqJFboD9WH4/DJkT4FO9snomQfmpnRSqMH64LwoIyQQ+/2q7uLZkil+XLXNap4tTWDNav+P ACyww3MeW3flwRQbsAz/v/yphcZRi6jW8kqX+8smxbr5I2PxJ6AI47hAKPF4bkyx3L+JnBUp4vf VuX57V/VqJscY= X-Google-Smtp-Source: AGHT+IG7hgWCsa4bQd2lSIYwBLbz9l3LdUBr7IJMT7qdKkc5WBbzt9hhSlaY9vrTRKlSGdJCpgQ8Ag== X-Received: by 2002:a05:600c:354a:b0:43c:f8fe:dd82 with SMTP id 5b1f17b1804b1-459f4f0f57fmr43002675e9.18.1754684611999; Fri, 08 Aug 2025 13:23:31 -0700 (PDT) From: Andrew Cooper To: Xen-devel Cc: Andrew Cooper , Jan Beulich , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= Subject: [PATCH 16/22] x86/boot: Adjust CR4 handling around ap_early_traps_init() Date: Fri, 8 Aug 2025 21:23:08 +0100 Message-Id: <20250808202314.1045968-17-andrew.cooper3@citrix.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250808202314.1045968-1-andrew.cooper3@citrix.com> References: <20250808202314.1045968-1-andrew.cooper3@citrix.com> 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: 1754684638370124100 ap_early_traps_init() will shortly be setting CR4.FRED. This requires that cpu_info->cr4 is already set up, and that the enablement of CET doesn't truncate FRED back out because of it's 32bit logic. For __high_start(), defer re-loading XEN_MINIMAL_CR4 until after %rsp is set up and we can store the result in the cr4 field too. For s3_resume(), explicitly re-load XEN_MINIMAL_CR4. Later when loading all features, use the mmu_cr4_features variable which is how the rest of Xen performs this operation. No functional change, yet. Signed-off-by: Andrew Cooper Reviewed-by: Jan Beulich --- CC: Jan Beulich CC: Roger Pau Monn=C3=A9 --- xen/arch/x86/acpi/wakeup_prot.S | 18 ++++++++++++++---- xen/arch/x86/boot/x86_64.S | 15 ++++++++++----- 2 files changed, 24 insertions(+), 9 deletions(-) diff --git a/xen/arch/x86/acpi/wakeup_prot.S b/xen/arch/x86/acpi/wakeup_pro= t.S index 60eca4010042..dfc8c6ac6e8c 100644 --- a/xen/arch/x86/acpi/wakeup_prot.S +++ b/xen/arch/x86/acpi/wakeup_prot.S @@ -63,6 +63,14 @@ LABEL(s3_resume) pushq %rax lretq 1: + + GET_STACK_END(15) + + /* Enable minimal CR4 features. */ + mov $XEN_MINIMAL_CR4, %eax + mov %rax, STACK_CPUINFO_FIELD(cr4)(%r15) + mov %rax, %cr4 + /* Set up early exceptions and CET before entering C properly. */ call ap_early_traps_init =20 @@ -77,7 +85,9 @@ LABEL(s3_resume) wrmsr =20 /* Enable CR4.CET. */ - mov $XEN_MINIMAL_CR4 | X86_CR4_CET, %ecx + mov $X86_CR4_CET, %ecx + or STACK_CPUINFO_FIELD(cr4)(%r15), %rcx + mov %rcx, STACK_CPUINFO_FIELD(cr4)(%r15) mov %rcx, %cr4 =20 /* WARNING! call/ret now fatal (iff SHSTK) until SETSSBSY loads SS= P */ @@ -120,9 +130,9 @@ LABEL(s3_resume) .L_cet_done: #endif /* CONFIG_XEN_SHSTK || CONFIG_XEN_IBT */ =20 - /* Restore CR4 from the cpuinfo block. */ - GET_STACK_END(bx) - mov STACK_CPUINFO_FIELD(cr4)(%rbx), %rax + /* Load all CR4 settings. */ + mov mmu_cr4_features(%rip), %rax + mov %rax, STACK_CPUINFO_FIELD(cr4)(%r15) mov %rax, %cr4 =20 call mtrr_bp_restore diff --git a/xen/arch/x86/boot/x86_64.S b/xen/arch/x86/boot/x86_64.S index 0dfcc8a88a40..631ea2f8236e 100644 --- a/xen/arch/x86/boot/x86_64.S +++ b/xen/arch/x86/boot/x86_64.S @@ -11,16 +11,19 @@ ENTRY(__high_start) mov %ecx,%gs mov %ecx,%ss =20 - /* Enable minimal CR4 features. */ - mov $XEN_MINIMAL_CR4,%rcx - mov %rcx,%cr4 - mov stack_start(%rip),%rsp =20 /* Reset EFLAGS (subsumes CLI and CLD). */ pushq $0 popf =20 + GET_STACK_END(15) + + /* Enable minimal CR4 features. */ + mov $XEN_MINIMAL_CR4, %eax + mov %rax, STACK_CPUINFO_FIELD(cr4)(%r15) + mov %rax, %cr4 + /* Reload code selector. */ pushq $__HYPERVISOR_CS leaq 1f(%rip),%rax @@ -45,7 +48,9 @@ ENTRY(__high_start) wrmsr =20 /* Enable CR4.CET. */ - mov $XEN_MINIMAL_CR4 | X86_CR4_CET, %ecx + mov $X86_CR4_CET, %ecx + or STACK_CPUINFO_FIELD(cr4)(%r15), %rcx + mov %rcx, STACK_CPUINFO_FIELD(cr4)(%r15) mov %rcx, %cr4 =20 /* WARNING! call/ret now fatal (iff SHSTK) until SETSSBSY loads SS= P */ --=20 2.39.5 From nobody Mon Feb 9 08:08:03 2026 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=1754685136; cv=none; d=zohomail.com; s=zohoarc; b=laPcLqhR5MSJ84L8VsepyoA/GTl9TFa4qRkUhE/NyPydH+Cik9LF/YaqA9Q0DpWA11tuNVkSMG6uVD+jlkg0xM0k9zfhyprSil1U5DtoaoEIjcdFN7XVC+eHUcvWDSHq+LqV3WZsbm75QjU5/vE6bglVGJVfQ27+B9n+zbALvvY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1754685136; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=g0+lABFbcbDRQyVLuDKpWi9Q/vTwEudyUax4FU2we4k=; b=hG83e5bPDnmGTTbqQSwRicZ5wwJk6uQXX0cDKLsEKiyicM9sL7MjZ0XNSyN6rAECKjoDFRb96DY5hforfpmj5i21L/dW6BVcLBnJqADY1xoS5ryseLJlCNCKYitKwJCyFv3+sI32iO9cNXmjAFIXZRA3zn+yP3VbT2eH7z///sQ= 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 1754685136719819.8548029231314; Fri, 8 Aug 2025 13:32:16 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1075141.1437661 (Exim 4.92) (envelope-from ) id 1ukTky-0001FB-30; Fri, 08 Aug 2025 20:32:04 +0000 Received: by outflank-mailman (output) from mailman id 1075141.1437661; Fri, 08 Aug 2025 20:32:04 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1ukTky-0001F2-04; Fri, 08 Aug 2025 20:32:04 +0000 Received: by outflank-mailman (input) for mailman id 1075141; Fri, 08 Aug 2025 20:32:02 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1ukTcl-0005tJ-CD for xen-devel@lists.xenproject.org; Fri, 08 Aug 2025 20:23:35 +0000 Received: from mail-wm1-x332.google.com (mail-wm1-x332.google.com [2a00:1450:4864:20::332]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id 8e46660f-7495-11f0-b898-0df219b8e170; Fri, 08 Aug 2025 22:23:33 +0200 (CEST) Received: by mail-wm1-x332.google.com with SMTP id 5b1f17b1804b1-4563cfac2d2so21412555e9.3 for ; Fri, 08 Aug 2025 13:23:33 -0700 (PDT) Received: from localhost.localdomain (host-195-149-20-212.as13285.net. [195.149.20.212]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-459e075047fsm103989805e9.1.2025.08.08.13.23.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 Aug 2025 13:23:32 -0700 (PDT) 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: 8e46660f-7495-11f0-b898-0df219b8e170 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.com; s=google; t=1754684613; x=1755289413; darn=lists.xenproject.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=g0+lABFbcbDRQyVLuDKpWi9Q/vTwEudyUax4FU2we4k=; b=rARpPgTeGPErQq0e3+wb9FjncWB6gITb21s7MkiAOUXgS2yFaoSnLvGPH5qAND5M6q 8tEmszXAborRuFc5k9Sr4KYIhx1hBbDy2tL2UdaUCCQf0y30Ler+MtKbsoX+bzvSIRya RLLtndDzjOvBQ12wU8XNvmhmUbkZ5CAjXyQgo= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754684613; x=1755289413; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=g0+lABFbcbDRQyVLuDKpWi9Q/vTwEudyUax4FU2we4k=; b=Na/jRdDTdVzCsEm3KmhfiHUq+loP+FQne9lLGrQExjItzTaqR1IU9P7Xh2elXOii3n hMkoMKm3WxSKaFMHAT2QyQgI5WNUKqvcpXK85yCXw1yNJjIgrLC9sn3zD4HabP/EbPQr C8whaw89WWkmzt98dBiudeiG2fGHvNu18auuG2vAwEdZT8n5GahEyLsVH+KiYkJVcu8e Ksd+ofDC+0JbTOVIDcmMCMPEW8UKrXKmxf8ciFIOhrQe+IsVs5xgiNsX4gtcYRWGW9+l rLgI40QuHyurrbXyq9sQoARdEEBzzkmVcZAQ0FsskpfBnk2yzAu6rlMcSnveMzLRwcY8 oTyg== X-Gm-Message-State: AOJu0YxMjJr1EGVnMat/yuTYqLQCJmhY8gEbl5Ib8dPZnpYUeCnK1B2f 5qDir6tRzszFbydn1SUkqgKZRs6SDM05DK+31kuEY896TC3jH5z8eahlInQG2fEtzmC98ud9nxT eMU0kqcE= X-Gm-Gg: ASbGncvC9gSY2pznrR3I/0g/yrnccamPBriL5fyJ7LrWu82rlzhD1fFy6p5Znzt/AF7 ywIVCt1RGzS6+RWsDt4ql/ocVt1iatT9s3xCpnDz2ia19Y7VKNW83oCC26t23E4Pf9dQyZPzbRI fgIQ+e2W9t4HMpIaEkfom/t7QPE7vFbEHzFswMu5XZei+n04KuhZ/jnryZQ1eEeZqoZzSzcRXj8 IAHLHi+fQOhLYiG8qANw5ojWRLGT6We0rZfqt0bAyMlk3OlpLVmCayNKx27+J7yj5kZZ9FHMmkR qd2aIp/ZyA7gGolnfVYC54WA/PqDsY/K/NriU0UEPVAtogRdyUTu3sheIRZENOCenNQnDcSB3bV XjYg0RxiyR78fBL8pOuWXU+X6TsnY+ykwMBSP37OZdN6WMQ1I7Tbw3iYWoWBBXYG9jfAfLufvMT xs X-Google-Smtp-Source: AGHT+IFv8BFy8CiiAYDhU6YYdfX21Rsk3CpUh43kzdxpdKNgBsdJlp2pWcFU87juIIAPy6rcU5U25w== X-Received: by 2002:a05:600c:4fca:b0:43c:e70d:44f0 with SMTP id 5b1f17b1804b1-459f4f03764mr38192155e9.19.1754684612636; Fri, 08 Aug 2025 13:23:32 -0700 (PDT) From: Andrew Cooper To: Xen-devel Cc: Andrew Cooper , Jan Beulich , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= Subject: [PATCH 17/22] x86/S3: Switch to using RSTORSSP to recover SSP on resume Date: Fri, 8 Aug 2025 21:23:09 +0100 Message-Id: <20250808202314.1045968-18-andrew.cooper3@citrix.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250808202314.1045968-1-andrew.cooper3@citrix.com> References: <20250808202314.1045968-1-andrew.cooper3@citrix.com> 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: 1754685138623116600 Under FRED, SETSSBSY is unavailable, and we want to be setting up FRED prior to setting up shadow stacks. Luckily, RSTORSSP will also work in this case. This involves a new type of shadow stack token, the Restore Token, which is distinguished from the Supervisor Token by pointing to the adjacent slot on the shadow stack rather than pointing at itself. In the short term, this logic still needs to load MSR_PL0_SSP. No functional change. Signed-off-by: Andrew Cooper Reviewed-by: Jan Beulich --- CC: Jan Beulich CC: Roger Pau Monn=C3=A9 --- xen/arch/x86/acpi/wakeup_prot.S | 31 +++++++++++++++---------------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/xen/arch/x86/acpi/wakeup_prot.S b/xen/arch/x86/acpi/wakeup_pro= t.S index dfc8c6ac6e8c..6ddc4011d8b6 100644 --- a/xen/arch/x86/acpi/wakeup_prot.S +++ b/xen/arch/x86/acpi/wakeup_prot.S @@ -90,7 +90,7 @@ LABEL(s3_resume) mov %rcx, STACK_CPUINFO_FIELD(cr4)(%r15) mov %rcx, %cr4 =20 - /* WARNING! call/ret now fatal (iff SHSTK) until SETSSBSY loads SS= P */ + /* WARNING! CALL/RET now fatal (iff SHSTK) until RSTORSSP loads SS= P */ =20 #if defined(CONFIG_XEN_SHSTK) test $CET_SHSTK_EN, %al @@ -98,32 +98,31 @@ LABEL(s3_resume) =20 /* * Restoring SSP is a little complicated, because we are intercept= ing - * an in-use shadow stack. Write a temporary token under the stac= k, - * so SETSSBSY will successfully load a value useful for us, then - * reset MSR_PL0_SSP to its usual value and pop the temporary toke= n. + * an in-use shadow stack. Write a Restore Token under the stack,= and + * use RSTORSSP to load it. RSTORSSP converts the token to a + * Previous-SSP Token, which we discard. */ mov saved_ssp(%rip), %rdi =20 - /* Construct the temporary supervisor token under SSP. */ - sub $8, %rdi - - /* Load it into MSR_PL0_SSP. */ + /* Calculate MSR_PL0_SSP from SSP. */ mov $MSR_PL0_SSP, %ecx mov %rdi, %rdx shr $32, %rdx mov %edi, %eax - wrmsr - - /* Write the temporary token onto the shadow stack, and activate i= t. */ - wrssq %rdi, (%rdi) - setssbsy - - /* Reset MSR_PL0_SSP back to its normal value. */ and $~(STACK_SIZE - 1), %eax or $(PRIMARY_SHSTK_SLOT + 1) * PAGE_SIZE - 8, %eax wrmsr =20 - /* Pop the temporary token off the stack. */ + /* + * A Restore Token's value is &token + 8 + 64BIT (bit 0). + * We want to put this on the shstk at SSP - 8. + */ + lea 1(%rdi), %rax + sub $8, %rdi + wrssq %rax, (%rdi) + rstorssp (%rdi) + + /* Discard the Previous-SSP Token from the shstk. */ mov $2, %eax incsspd %eax #endif /* CONFIG_XEN_SHSTK */ --=20 2.39.5 From nobody Mon Feb 9 08:08:03 2026 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=1754684636; cv=none; d=zohomail.com; s=zohoarc; b=hC4DVEY5Dpz+D5FVm5szXogwQVE3XG6Z/qWGnR2xo7at9vrArY3ubPPa/lJzH55Gw+KV3qLBJyQo1Jc78lwlqYPbqlUFTBljKj2mthqJ3v/hI07ulNr74Kti9nORC5PSFHAdpaMAzmrR+Eb5UqQQSRA0N7z0pli1j1ooUZ+iYp4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1754684636; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=qtfP7bNe0+lt/InVx7VRHyBE0nSzZYZ5UWpR2AJnNEw=; b=P4BhYOGJQzFw9t0kB0vH8R6WwDXmC3d4qC1V/fK2nB2U8SZOb8A7lfcXNyvWQrl8xX9Qb2KDrFgm+MdG3Ak2QA9FcOMiHME3E4EKTWar55pjJaxbhjI9VsQi9JaRX9WbuWdR3gMt2fuqltOWE7nzOnRFCPNkY9Bjekfj/B8632E= 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 1754684636204354.63140585536394; Fri, 8 Aug 2025 13:23:56 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1075036.1437597 (Exim 4.92) (envelope-from ) id 1ukTcp-00015b-KA; Fri, 08 Aug 2025 20:23:39 +0000 Received: by outflank-mailman (output) from mailman id 1075036.1437597; Fri, 08 Aug 2025 20:23:39 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1ukTco-0000zr-Pm; Fri, 08 Aug 2025 20:23:38 +0000 Received: by outflank-mailman (input) for mailman id 1075036; Fri, 08 Aug 2025 20:23:35 +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 1ukTck-0005tW-VP for xen-devel@lists.xenproject.org; Fri, 08 Aug 2025 20:23:34 +0000 Received: from mail-wr1-x435.google.com (mail-wr1-x435.google.com [2a00:1450:4864:20::435]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 8ed307b4-7495-11f0-a324-13f23c93f187; Fri, 08 Aug 2025 22:23:34 +0200 (CEST) Received: by mail-wr1-x435.google.com with SMTP id ffacd0b85a97d-3b8de6f7556so1395818f8f.1 for ; Fri, 08 Aug 2025 13:23:34 -0700 (PDT) Received: from localhost.localdomain (host-195-149-20-212.as13285.net. [195.149.20.212]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-459e075047fsm103989805e9.1.2025.08.08.13.23.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 Aug 2025 13:23:32 -0700 (PDT) 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: 8ed307b4-7495-11f0-a324-13f23c93f187 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.com; s=google; t=1754684613; x=1755289413; darn=lists.xenproject.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=qtfP7bNe0+lt/InVx7VRHyBE0nSzZYZ5UWpR2AJnNEw=; b=qTMWSBT4XKNjjisltoqSLZHvY5M+XUlcF5f86W4LqJ22wXxWOw30fDt16+ZtnZ0Tgo fBat6Axv3AoUfqa5rxe66TD/5tRDWIgxKuvjXVlNb/4s0P+tRq9T8ct1wqHPfxObRRo9 g4CED3Qn9c1hxSqVUX1nSByV/MKusSVQz5FDc= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754684613; x=1755289413; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=qtfP7bNe0+lt/InVx7VRHyBE0nSzZYZ5UWpR2AJnNEw=; b=DXq3i8lkSNRwcfsRuagYCLhdq5el9f1YtX/Llx3IWryg4UXvwVnP5qjIulAetT0ImZ oxpTxavTMirvbYU5LDWJdhbpcjSderWX5NyjNRtuvnAn5vrozQk+NdfyQwRMdthzMxVo bP6PDdA1cOKKazFNIN2orcYPHoqKFUxX/R7af7BbLBKGTYC9mr8vVfYJJ8+n8R/1UXA9 q5tBmYG4pWLOd0zgHtOloZiBbPjT0cEvGzeZnAnPaUKg8OhOcvR2hvZZMfzGkZBIbfZw KPCFAJN9i0DhTzdE4o26wxs6sx03gskwHzD8TCBKDxOXEOK/tRjat4INOmuJFpxghjXX satQ== X-Gm-Message-State: AOJu0Yw4f2Mx5Fz+SkI0cw5CkaPZKHBYjyKc6QRjsCSk9+f89UgGMMey tU/jdyxGisUON3jyF4ZzpAO6MlWbi6ndZx0Rq0niQ+4fbbi9YdnDPHahu1bi5wETlAMuzEffi40 yJZ7V5Qs= X-Gm-Gg: ASbGnctUsWfqJoGn65p6xBl1kz3oC3q2fwksvZr2H+DT5anIIMvfcW2+GhzcY/vlp3V xOSWVZlKZHCFKJhuPpV5UYGLpdksghHhXmHUWOW907EYLn1Q5ZKXnDLKz9ButKcD5gvhzaWh+kU 6RAIgiqIYU85AAYE5LWaHlLyygPOeGZ2J8HAdRdT7z1lSp1JsLDYveXlQB4QeOZ2KddbqjBvw0P uKJ//WDE4VmhaSts8lD4rZXqWTj5z2RhAUmQsBpoO+hwNQbcyHegxElfrBUdHwhLG+/yoYwLtRb 2wza7h9jHi6UBrwd+RHAApgJeyRXxV/1e/L4FubQqRzDPMfRkHAtc5DZxNttd4ChkYtkqeEXU9L qKxjiwhsjtgzw2x0JxrZEHQYp+9Dgqa1LoU/2AHyax1OgBT2tU6ih2bhdnRV+htOKNk9sT0Lwo5 4k X-Google-Smtp-Source: AGHT+IFaijqglVcsIvXxaBiwyvcNEApIzhSD/6AHb8eHwAkK1ZQiMPNf+3Iqf593eESX8CsZDqQWtQ== X-Received: by 2002:a05:6000:1449:b0:3b7:8d70:ed05 with SMTP id ffacd0b85a97d-3b900929b4cmr3639173f8f.5.1754684613507; Fri, 08 Aug 2025 13:23:33 -0700 (PDT) From: Andrew Cooper To: Xen-devel Cc: Andrew Cooper , Jan Beulich , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= Subject: [PATCH 18/22] x86/traps: Set MSR_PL0_SSP in load_system_tables() Date: Fri, 8 Aug 2025 21:23:10 +0100 Message-Id: <20250808202314.1045968-19-andrew.cooper3@citrix.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250808202314.1045968-1-andrew.cooper3@citrix.com> References: <20250808202314.1045968-1-andrew.cooper3@citrix.com> 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: 1754684637462116600 FRED and IDT differ by a Supervisor Token on the base of the shstk. This means that the value they load into MSR_PL0_SSP differs by 8. s3_resume() in particular has logic which is otherwise invariant of FRED mo= de, and must not clobber a FRED MSR_PL0_SSP with an IDT one. This also simplifies the AP path too. Updating reinit_bsp_stack() is defer= red until later. No functional change. Signed-off-by: Andrew Cooper --- CC: Jan Beulich CC: Roger Pau Monn=C3=A9 --- xen/arch/x86/acpi/wakeup_prot.S | 9 --------- xen/arch/x86/boot/x86_64.S | 12 +++--------- xen/arch/x86/traps-setup.c | 2 ++ 3 files changed, 5 insertions(+), 18 deletions(-) diff --git a/xen/arch/x86/acpi/wakeup_prot.S b/xen/arch/x86/acpi/wakeup_pro= t.S index 6ddc4011d8b6..c800cd28a7c9 100644 --- a/xen/arch/x86/acpi/wakeup_prot.S +++ b/xen/arch/x86/acpi/wakeup_prot.S @@ -104,15 +104,6 @@ LABEL(s3_resume) */ mov saved_ssp(%rip), %rdi =20 - /* Calculate MSR_PL0_SSP from SSP. */ - mov $MSR_PL0_SSP, %ecx - mov %rdi, %rdx - shr $32, %rdx - mov %edi, %eax - and $~(STACK_SIZE - 1), %eax - or $(PRIMARY_SHSTK_SLOT + 1) * PAGE_SIZE - 8, %eax - wrmsr - /* * A Restore Token's value is &token + 8 + 64BIT (bit 0). * We want to put this on the shstk at SSP - 8. diff --git a/xen/arch/x86/boot/x86_64.S b/xen/arch/x86/boot/x86_64.S index 631ea2f8236e..ebb91d5e3f60 100644 --- a/xen/arch/x86/boot/x86_64.S +++ b/xen/arch/x86/boot/x86_64.S @@ -65,17 +65,11 @@ ENTRY(__high_start) or $(PRIMARY_SHSTK_SLOT + 1) * PAGE_SIZE - 8, %rdx =20 /* - * Write a new supervisor token. Doesn't matter on boot, but for = S3 - * resume this clears the busy bit. + * Write a new Supervisor Token. It doesn't matter the first time= a + * CPU boots, but for S3 resume or CPU hot re-add, this clears the + * busy bit. */ wrssq %rdx, (%rdx) - - /* Point MSR_PL0_SSP at the token. */ - mov $MSR_PL0_SSP, %ecx - mov %edx, %eax - shr $32, %rdx - wrmsr - setssbsy =20 #endif /* CONFIG_XEN_SHSTK */ diff --git a/xen/arch/x86/traps-setup.c b/xen/arch/x86/traps-setup.c index 3b5e4969a375..c4825fc1b11a 100644 --- a/xen/arch/x86/traps-setup.c +++ b/xen/arch/x86/traps-setup.c @@ -96,6 +96,7 @@ static void load_system_tables(void) { volatile uint64_t *ist_ssp =3D tss_page->ist_ssp; unsigned long + ssp =3D stack_top + (PRIMARY_SHSTK_SLOT + 1) * PAGE_SIZE - 8, mce_ssp =3D stack_top + (IST_MCE * IST_SHSTK_SIZE) - 8, nmi_ssp =3D stack_top + (IST_NMI * IST_SHSTK_SIZE) - 8, db_ssp =3D stack_top + (IST_DB * IST_SHSTK_SIZE) - 8, @@ -122,6 +123,7 @@ static void load_system_tables(void) } =20 wrmsrns(MSR_ISST, (unsigned long)ist_ssp); + wrmsrns(MSR_PL0_SSP, (unsigned long)ssp); } =20 _set_tssldt_desc(gdt + TSS_ENTRY, (unsigned long)tss, --=20 2.39.5 From nobody Mon Feb 9 08:08:03 2026 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=1754685235; cv=none; d=zohomail.com; s=zohoarc; b=AnpeCQv/MOvUJWOIwU+ZNXbxzgnKqkGQH4xD32pRYM8n9gowk/SwjjtuFvR39ia+qmxZLzpJCTTQ+3VrZUponGbLDZ0X899W6Wl2Lzuj+HGDJq0m9g1bpitkJ/RSNC7boJaVcGK7o1tgaXDWRtAnS8rtdTePanhyE0gxIhMFWeM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1754685235; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=2sRLbDL6y30wDJ02d0Gb0iATvGt1mHINfHCOu1y5TSM=; b=GYUeI+D9eXpS7fEz4HnJECc9RXAXMlJlqgqIXto1Qboet4Ky+bkDKTKeOzK1p4JP7R/g8rzlCyXDaqpeSrmzcc0GcmD7JVUXt1jM0797NFYQAwFx7rSlLlAJRaqOQV8JA1NJJNjZqBL1mv37pNNVl5SFG6FC50QpRK37Hu6yu20= 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 1754685235747893.9908629864598; Fri, 8 Aug 2025 13:33:55 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1075169.1437670 (Exim 4.92) (envelope-from ) id 1ukTmb-0002Yt-DU; Fri, 08 Aug 2025 20:33:45 +0000 Received: by outflank-mailman (output) from mailman id 1075169.1437670; Fri, 08 Aug 2025 20:33:45 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1ukTmb-0002Ym-A1; Fri, 08 Aug 2025 20:33:45 +0000 Received: by outflank-mailman (input) for mailman id 1075169; Fri, 08 Aug 2025 20:33:44 +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 1ukTcl-0005tW-Vk for xen-devel@lists.xenproject.org; Fri, 08 Aug 2025 20:23:35 +0000 Received: from mail-wm1-x32e.google.com (mail-wm1-x32e.google.com [2a00:1450:4864:20::32e]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 8f208a38-7495-11f0-a324-13f23c93f187; Fri, 08 Aug 2025 22:23:35 +0200 (CEST) Received: by mail-wm1-x32e.google.com with SMTP id 5b1f17b1804b1-459d4d7c745so23770325e9.1 for ; Fri, 08 Aug 2025 13:23:35 -0700 (PDT) Received: from localhost.localdomain (host-195-149-20-212.as13285.net. [195.149.20.212]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-459e075047fsm103989805e9.1.2025.08.08.13.23.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 Aug 2025 13:23:33 -0700 (PDT) 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: 8f208a38-7495-11f0-a324-13f23c93f187 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.com; s=google; t=1754684614; x=1755289414; darn=lists.xenproject.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=2sRLbDL6y30wDJ02d0Gb0iATvGt1mHINfHCOu1y5TSM=; b=bt8gt3r2W1Eo5RStFBvyapoJ9ArMzCN6x52FwjJul5sZDHeBbayKbTin9bwk6SUZkg LSkWPbvScWcGSbuKoBfUfKSZvO7yp652v2taLz2hTK83R/9aaYnDpXe/MLTLdE7Uaxq5 KZyeftX5qyDd0ZSKjRz88ZkPayNL/ed2yNpkQ= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754684614; x=1755289414; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=2sRLbDL6y30wDJ02d0Gb0iATvGt1mHINfHCOu1y5TSM=; b=JGsBlHZA8+9/wlSmjpA+uI6ytFOAzKsTksFgMkoxyFdsn0r1xrsgrEWt+9WbbBdKmf yMkOIdl8PqWqAcrBIdzyw3qmS56FcaH3nQYYQqbB7C5QytvUskcCO4dJAzL0mgO0HErG 1w3lUpbcJ3rsQJS/EdC6l9VW/UNcdvBhBaFr7wQldbsxvYEXt+PYYu3qBh+dvv4NEI+X 4Tqg7ss+TIvmV2tZ0oHV48yWzto8xIW3wFzlynONLZqOWsdNLSbDcjmVlsMHByFmP+rk bunDkBnEoO0624vJK+yEg8WTR7/kWAO9ebzyGJ+HKPc1kC8cMnC2WcRHZ0dNxAYGDrNa pIYQ== X-Gm-Message-State: AOJu0YxgMfr5fLyj5kAjlBpBVLgZGfOXMf5pP3YFK+62QU8aRAXAkbIk osHRjqsS79OxPSTWP9r2Gt38jHkeqHTccMRqKQatbGNt6lDq/nRhI/YYZKPEc7DBpatcWJSJi26 JDlPpRYs= X-Gm-Gg: ASbGncsbNioEeXUvavXu51UETMU2wQY65ffRAiGp2kIbsDS+1ezDgqkf9km6DrryuMq f+YwC7eJs1YSv8rEeo4Fn1FVR3aJSykt3IdFSWblNQSifeK2bAv3/OS/MzXzxDUw4yEsBldCZmP Fg0Ea9CBOYyFH0YpSBLyQhJN3UHGPLCeozlqoKUlMwNgwmNyQycALdcABrZ4HjW6deifN9/QVpz KYqHC/c6hTB5XXiomhoaYSyq7p8i2kjeJwmCKBn0Jmn3AiC5LAID3nKVSB2pLtFPFZAMtC34UCW fZudfQw0s7wk7SikfvsdbgA4XUBkK/OvutEz4vgeyw5OUpiAIOEcoLo/+OU8+4IULUSZ8TAgg3U AClBzGGNZMUT7JuYxHUe8oxDARZl6UMoyDn8X873Jm01izy/xnGSLMG1JtTn8jVBzPVDBvOAi5/ +k X-Google-Smtp-Source: AGHT+IG56gRK8s+AKlb+k2Xl44dfQcJRp2GsOb84OirZJroaWvK/7U5/0BXeGwcEJM2vr7exXaccow== X-Received: by 2002:a05:600c:3542:b0:459:e06b:afbd with SMTP id 5b1f17b1804b1-459f4f14792mr35129715e9.29.1754684614211; Fri, 08 Aug 2025 13:23:34 -0700 (PDT) From: Andrew Cooper To: Xen-devel Cc: Andrew Cooper , Jan Beulich , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= Subject: [PATCH 19/22] x86/boot: Use RSTORSSP to establish SSP Date: Fri, 8 Aug 2025 21:23:11 +0100 Message-Id: <20250808202314.1045968-20-andrew.cooper3@citrix.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250808202314.1045968-1-andrew.cooper3@citrix.com> References: <20250808202314.1045968-1-andrew.cooper3@citrix.com> 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: 1754685236835124100 Under FRED, SETSSBSY is unavailable, and we want to be setting up FRED prior to setting up shadow stacks. As we still need Supervisor Tokens in IDT mod= e, we need mode-specific logic to establish SSP. In FRED mode, write a Restore Token, RSTORSSP it, and discard the resulting Previous-SSP token. No change outside of FRED mode. Signed-off-by: Andrew Cooper --- CC: Jan Beulich CC: Roger Pau Monn=C3=A9 --- xen/arch/x86/boot/x86_64.S | 23 +++++++++++++++++++++-- xen/arch/x86/setup.c | 27 ++++++++++++++++++++++++--- 2 files changed, 45 insertions(+), 5 deletions(-) diff --git a/xen/arch/x86/boot/x86_64.S b/xen/arch/x86/boot/x86_64.S index ebb91d5e3f60..138501f52158 100644 --- a/xen/arch/x86/boot/x86_64.S +++ b/xen/arch/x86/boot/x86_64.S @@ -53,17 +53,21 @@ ENTRY(__high_start) mov %rcx, STACK_CPUINFO_FIELD(cr4)(%r15) mov %rcx, %cr4 =20 - /* WARNING! call/ret now fatal (iff SHSTK) until SETSSBSY loads SS= P */ + /* WARNING! CALL/RET now fatal (iff SHSTK) until SETSSBSY/RSTORSSP= loads SSP */ =20 #if defined(CONFIG_XEN_SHSTK) test $CET_SHSTK_EN, %al jz .L_ap_cet_done =20 - /* Derive the supervisor token address from %rsp. */ + /* Derive the token address from %rsp. */ mov %rsp, %rdx and $~(STACK_SIZE - 1), %rdx or $(PRIMARY_SHSTK_SLOT + 1) * PAGE_SIZE - 8, %rdx =20 + /* Establishing SSP depends on whether we're using FRED or IDT mod= e. */ + bt $32 /* ilog2(X86_CR4_FRED) */, %rcx + jc .L_fred_shstk + /* * Write a new Supervisor Token. It doesn't matter the first time= a * CPU boots, but for S3 resume or CPU hot re-add, this clears the @@ -71,6 +75,21 @@ ENTRY(__high_start) */ wrssq %rdx, (%rdx) setssbsy + jmp .L_ap_cet_done + +.L_fred_shstk: + + /* + * Write a Restore Token, value: &token + 8 + * 64BIT (bit 0) at t= he + * base of the shstk (which isn't in use yet). + */ + lea 9(%rdx), %rdi + wrssq %rdi, (%rdx) + rstorssp (%rdx) + + /* Discard the Previous-SSP Token from the shstk. */ + mov $2, %edx + incsspd %edx =20 #endif /* CONFIG_XEN_SHSTK */ .L_ap_cet_done: diff --git a/xen/arch/x86/setup.c b/xen/arch/x86/setup.c index 6fb42c5a5f95..c5dd2051dffe 100644 --- a/xen/arch/x86/setup.c +++ b/xen/arch/x86/setup.c @@ -53,6 +53,7 @@ #include #include #include +#include #include #include #include @@ -912,10 +913,30 @@ static void __init noreturn reinit_bsp_stack(void) =20 if ( cpu_has_xen_shstk ) { - wrmsrl(MSR_PL0_SSP, - (unsigned long)stack + (PRIMARY_SHSTK_SLOT + 1) * PAGE_SIZE= - 8); wrmsrl(MSR_S_CET, xen_msr_s_cet_value()); - asm volatile ("setssbsy" ::: "memory"); + + /* + * IDT and FRED differ by a Supervisor Token on the shadow stack, = and + * therefore by the value in MSR_PL0_SSP. + * + * In IDT mode, we use SETSSBSY to mark the Supervisor Token as bu= sy. + * In FRED mode, there is no token, so we need a transient Restore + * Token to establish SSP. + */ + if ( opt_fred ) + { + unsigned long *token =3D + (void *)stack + (PRIMARY_SHSTK_SLOT + 1) * PAGE_SIZE - 8; + + wrss((unsigned long)token + 9, token); + asm volatile ( "rstorssp %0" : "+m" (*token) ); + /* + * We need to discard the resulting Previous-SSP Token, but + * reset_stack_and_jump() will do that for us. + */ + } + else + asm volatile ( "setssbsy" ::: "memory" ); } =20 reset_stack_and_jump(init_done); --=20 2.39.5 From nobody Mon Feb 9 08:08:03 2026 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=1754685130; cv=none; d=zohomail.com; s=zohoarc; b=YQr3Jw8M+3gmZcGcClrNn+ZsMsHUf3sycmJP1q04FQ+H58Qyn9NOXUQvGYeazyB3dP1vWERjNUySblXdlPVvFEbE/Z+g+xm81Fv5sg9cVCy3vXLzsYcF5RNbnaSjf7j0f3i6VKdHojSq1guStdYg4V7RH9J/GPpMFwJ6h0oFQF4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1754685130; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=nAd9iHYMcX06IGN3X/Q4h7oZi4HPIwI/IwRbI7UnnSY=; b=BpMwAAIpPzDCAprYcvqtHSIrtBalPkR/wyxZYcffzD5LpEHM0jHyk6lcwewvAz5fO9ARtQEzM+5dIUTNfZ6usv7tT1DfAHlFw5pfOjuUafczkJwupht8cMWi+i4q8vEJzHMHMAUWdEWPwVb8l9ulXF0hc6bowTx86rXtqMpw69E= 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 1754685130628558.7352368710249; Fri, 8 Aug 2025 13:32:10 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1075125.1437651 (Exim 4.92) (envelope-from ) id 1ukTku-0000x5-S2; Fri, 08 Aug 2025 20:32:00 +0000 Received: by outflank-mailman (output) from mailman id 1075125.1437651; Fri, 08 Aug 2025 20:32:00 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1ukTku-0000wy-PH; Fri, 08 Aug 2025 20:32:00 +0000 Received: by outflank-mailman (input) for mailman id 1075125; Fri, 08 Aug 2025 20:31:59 +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 1ukTcn-0005tW-W4 for xen-devel@lists.xenproject.org; Fri, 08 Aug 2025 20:23:37 +0000 Received: from mail-wr1-x42d.google.com (mail-wr1-x42d.google.com [2a00:1450:4864:20::42d]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 8f993f6a-7495-11f0-a324-13f23c93f187; Fri, 08 Aug 2025 22:23:35 +0200 (CEST) Received: by mail-wr1-x42d.google.com with SMTP id ffacd0b85a97d-3b78bca0890so1221880f8f.3 for ; Fri, 08 Aug 2025 13:23:35 -0700 (PDT) Received: from localhost.localdomain (host-195-149-20-212.as13285.net. [195.149.20.212]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-459e075047fsm103989805e9.1.2025.08.08.13.23.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 Aug 2025 13:23:34 -0700 (PDT) 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: 8f993f6a-7495-11f0-a324-13f23c93f187 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.com; s=google; t=1754684615; x=1755289415; darn=lists.xenproject.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=nAd9iHYMcX06IGN3X/Q4h7oZi4HPIwI/IwRbI7UnnSY=; b=E4fOoEtbfjIwG2N3rcHlDy2FoaBsRR02mG8Aydy7lJJZqGa8zu4JgEglSL0cpCuVW1 SV0TKey8gAS7o46oyfxVfyxJvuv8aWgliawJNsHEke7d1FIV3mNTAnvudUeSyT9vnMFL 1EsKC3h2pbHaLBgwd9aP7CWuNv5owpsYRGV04= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754684615; x=1755289415; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=nAd9iHYMcX06IGN3X/Q4h7oZi4HPIwI/IwRbI7UnnSY=; b=p9rzL0gaKsSvbpGD0Qx+YBTV+3ycLC5UeV6F3cyfEqiFIO2Chwmh70B4VqH1yqZEMs HINxun17WI+r/DfX/hmrohKwUyg5wxx5FDvnylfVyazo57sax1ik6CbpxlYcgr/3tAhZ PfIXTdVnKjW3JI0jC3zcwK7ecjxe9EOIVNQ+AM05MYmC7S+jh592vE0Q0mbv5bWK99z6 /zyqmC/GYgflXsXKRpXz+W1krgCQcp48nMrq6CpNroToGVoB1NtukokAP4l4V1Q8MvoR zxgRIzTmchwDTiOQgHnDl+u67K3WIyULbCWSoJukZ9EzT2fvxeHRXpsHGUy67/EPwKz+ hmNA== X-Gm-Message-State: AOJu0Yw6AZ7Zw+TZuAhQ+W5NySF5ewxfvnu6mAPy+D53lGR4r3OARxXT 2OuG39ziXLVB1SS0/mLzawGhqB4sjNRo5mSKSDx74eMrwLpUHw+VHRNHt5HGp8lMRSeNRBDosbV A4dqVP4Y= X-Gm-Gg: ASbGncsh0TV0FuMJFnPZNFNkW6JLDXMqqppxmcQvHu8c1n5gAfmtXUmJuMvkUDT1wio KIUuJpBtbwYt6qgY9TqnhK0BT+rWFRuX4e3wLKfxAdjt2dwI3Dgi4+0gvuMGdWkhzdezRbbutaj 4BrGr/SzjnTLZNau5XakTYLsWqdDM9Zs3AKOnDgD+PN/5KuaN3LPfw07Y1AsCcQgQygeMZvZhey gkYzUJjE8SXhPzMApHswLql/LoSHQQpDMg/LmXA75692YXq+UJdJTF/YOI+F5gwZ5UAWZAGccVy VhfvpKoc+zAN9lqFnhVQ0aEZunuTJ2VZk66ctrv4usIXuxNhbMLBLFUcS0MhB2nubgwynMXSc+E yrhaxCaUd/jWAh7OucLLymVqazMRpJahxlxrcB+BIR9vpAB+p93I3DMPL21pcWYa6z7ULr9EGu8 +A X-Google-Smtp-Source: AGHT+IH1tZDOHe6Lnce61CjDEETd3H3QQKXhBfuREDUtylAMTzZV87JNoqp2AcJxtHkYk938vxIINQ== X-Received: by 2002:a05:6000:230f:b0:3b8:d1a4:bacb with SMTP id ffacd0b85a97d-3b900b5118emr3505157f8f.42.1754684615006; Fri, 08 Aug 2025 13:23:35 -0700 (PDT) From: Andrew Cooper To: Xen-devel Cc: Andrew Cooper , Jan Beulich , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= Subject: [PATCH 20/22] x86/traps: Alter switch_stack_and_jump() for FRED mode Date: Fri, 8 Aug 2025 21:23:12 +0100 Message-Id: <20250808202314.1045968-21-andrew.cooper3@citrix.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250808202314.1045968-1-andrew.cooper3@citrix.com> References: <20250808202314.1045968-1-andrew.cooper3@citrix.com> 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: 1754685131721124100 FRED and IDT differ by a Supervisor Token on the base of the shstk. This means that switch_stack_and_jump() needs to discard one extra word when FRED is active. Signed-off-by: Andrew Cooper Reviewed-by: Jan Beulich --- CC: Jan Beulich CC: Roger Pau Monn=C3=A9 RFC. I don't like this, but it does work. This emits opt_fred logic outside of CONFIG_XEN_SHSTK. But frankly, the construct is already too unweildly, and all options I can think of make it moreso. --- xen/arch/x86/include/asm/current.h | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/xen/arch/x86/include/asm/current.h b/xen/arch/x86/include/asm/= current.h index 962eb76a82b3..24d7d906a8c6 100644 --- a/xen/arch/x86/include/asm/current.h +++ b/xen/arch/x86/include/asm/current.h @@ -11,6 +11,7 @@ #include =20 #include +#include =20 /* * Xen's cpu stacks are 8 pages (8-page aligned), arranged as: @@ -154,7 +155,6 @@ unsigned long get_stack_dump_bottom (unsigned long sp); "rdsspd %[ssp];" \ "cmp $1, %[ssp];" \ "je .L_shstk_done.%=3D;" /* CET not active? Skip. */ \ - "mov $%c[skstk_base], %[val];" \ "and $%c[stack_mask], %[ssp];" \ "sub %[ssp], %[val];" \ "shr $3, %[val];" \ @@ -177,6 +177,8 @@ unsigned long get_stack_dump_bottom (unsigned long sp); =20 #define switch_stack_and_jump(fn, instr, constr) \ ({ \ + unsigned int token_offset =3D \ + (PRIMARY_SHSTK_SLOT + 1) * PAGE_SIZE - (opt_fred ? 0 : 8); \ unsigned int tmp; \ BUILD_BUG_ON(!ssaj_has_attr_noreturn(fn)); \ __asm__ __volatile__ ( \ @@ -184,12 +186,11 @@ unsigned long get_stack_dump_bottom (unsigned long sp= ); "mov %[stk], %%rsp;" \ CHECK_FOR_LIVEPATCH_WORK \ instr "[fun]" \ - : [val] "=3D&r" (tmp), \ + : [val] "=3Dr" (tmp), \ [ssp] "=3D&r" (tmp) \ : [stk] "r" (guest_cpu_user_regs()), \ [fun] constr (fn), \ - [skstk_base] "i" \ - ((PRIMARY_SHSTK_SLOT + 1) * PAGE_SIZE - 8), \ + "[val]" (token_offset), \ [stack_mask] "i" (STACK_SIZE - 1), \ _ASM_BUGFRAME_INFO(BUGFRAME_bug, __LINE__, \ __FILE__, NULL) \ --=20 2.39.5 From nobody Mon Feb 9 08:08:03 2026 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=1754685075; cv=none; d=zohomail.com; s=zohoarc; b=dycLAvezmTsr6xC+pIHilL8IdHw3t/2Zw+5woztYUHS9l4wN1Zai5iZa4/GAIo+PEdzO09WlsBhbPUvUx1LvvSUssXmrla1BVmNS8ewr47ByoGYle8BIWo2TC9yMowG+5P6KdqW6yJEI4qUREUiwzxRMfCiOtaMqCG6cRGI07Ds= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1754685075; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=WsFhpIo0YigHSrjbxG9J6eIfg+GeQRU9SY28qtRRbpw=; b=KIZ3E2ftLfhzTMk9DEQxjCZejmMoM521pIap7x6XWdzvV2vGpC1ZSPtHE3y9V3lUoC1ys+5Vn35MnFO8P+73NV0RIOafOJTBCa2dxki42jbbG+PGw9xT/4G59bAaRxW+v77BNVbmNmej+IeZgzbLtkPuNjlCaHo9oQAOG/T4HsI= 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 1754685075426520.3658710025844; Fri, 8 Aug 2025 13:31:15 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1075066.1437632 (Exim 4.92) (envelope-from ) id 1ukTjw-0007yc-9e; Fri, 08 Aug 2025 20:31:00 +0000 Received: by outflank-mailman (output) from mailman id 1075066.1437632; Fri, 08 Aug 2025 20:31:00 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1ukTjw-0007yV-4z; Fri, 08 Aug 2025 20:31:00 +0000 Received: by outflank-mailman (input) for mailman id 1075066; Fri, 08 Aug 2025 20:30:59 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1ukTcp-0005tJ-Cb for xen-devel@lists.xenproject.org; Fri, 08 Aug 2025 20:23:39 +0000 Received: from mail-wm1-x32f.google.com (mail-wm1-x32f.google.com [2a00:1450:4864:20::32f]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id 903ed1c6-7495-11f0-b898-0df219b8e170; Fri, 08 Aug 2025 22:23:36 +0200 (CEST) Received: by mail-wm1-x32f.google.com with SMTP id 5b1f17b1804b1-458b885d6eeso16336355e9.3 for ; Fri, 08 Aug 2025 13:23:36 -0700 (PDT) Received: from localhost.localdomain (host-195-149-20-212.as13285.net. [195.149.20.212]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-459e075047fsm103989805e9.1.2025.08.08.13.23.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 Aug 2025 13:23:35 -0700 (PDT) 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: 903ed1c6-7495-11f0-b898-0df219b8e170 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.com; s=google; t=1754684616; x=1755289416; darn=lists.xenproject.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=WsFhpIo0YigHSrjbxG9J6eIfg+GeQRU9SY28qtRRbpw=; b=gbseeufeN3+19RuT5mg5UqzSK8el5b/jA6KIDXbRFu0/eayo/gR3og4TnyqvYPs/Ja EDa0XkPPmXcCxiYNFMkeRbTU+NBuAwFhWKxiTSNOtK+UgaCV3JsDeH9QSHX3wyFhbmZO Q0joQ+M2660J3SsG8lSPA9sRwaYAJGif/rI0E= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754684616; x=1755289416; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=WsFhpIo0YigHSrjbxG9J6eIfg+GeQRU9SY28qtRRbpw=; b=gy87NyOUhUl132Na+doXVpO2oolcFOuppWncazus608jE1Rl8M/jP1dHK58dUUG5t1 /IhVGpAOAlIwOqj0AUM5VRPClWF8V5upp60Yu+mwsdhBhQuUEO54eSujbVcBknNQbF62 2p1oW34+W+lNRidVGXKPaXrsqqkmHMhpJj2dA4g6GLQSxMrI+wOYKiaE+rLZlGguroNX 8kNQ/r0WW4dOy2j9+geo16PtQSmquLm2VEAqEU406d6IPmhwjjFdJVFEDKO+Htq1Lz+s 5Iy3Bjo8f2Ks9rP6H+Ho4LW+PG9qsTs/UDzQy2NkvVTYFEm5uZi5haUw5soGFJHvMLbw nyJA== X-Gm-Message-State: AOJu0YyCC0SkfJ4WfVyZ2xK/mTKA6TOcZqaaKbGYfhY0RPp4QZ1sB0Wb k2vQBQyMsaGMqbNzgpfQ7K1RxOT+QPz9e9Jio3+H+9xetF9DkzDH0ptzy8JZ0Or1Lzn9KnNIqBB C1URhDF8= X-Gm-Gg: ASbGncuRaOR1sRpS0XzKGG36SDf91JYXgx3Pcv6UlInpmuGIQ1SCaZi/wWuTNe5YIGk kXNSmn0Qjz+MW8Kz/4jdH+ZmO0w6PlJZ4tDC6KVreKTQNxQdS9DNiJCyXtb6ENFyfcr5XPjHiLd +WrsoPnP4cbRJl6Rq52Pl6+tGfns6JDTyyELixUf/zc9FfKqGxVxq7rSWY8iyeB7YANP1jRipNH KeHKr1kd64B0hlog1HnHMDNGyw2to126ZwVMCHRbNEsSSK2QODgBBIwS6jWroBRtI3vKGqyLQn0 8hcpn/B+hzOARxEUmOApxJFc9jv6daAhsY17a0lef/EP2P6Q5s/PhAfZuvXuEnrfeE34Kli6Agf MieE/W56+fatgi1nhKjeyLNQnCoTIrtRbcdn8VaNkXinQdl7BAqB6sLJwRS233fySCqIr1ybBMJ G+ X-Google-Smtp-Source: AGHT+IE572nf5LZxzkOTMhXEn8wFDD0IPspugflCbO1IMUJ6sUJcgov1fEG344lninmoXczdA611pA== X-Received: by 2002:a05:6000:26c9:b0:3b8:ff3a:86c2 with SMTP id ffacd0b85a97d-3b900b4da7cmr2978215f8f.37.1754684615819; Fri, 08 Aug 2025 13:23:35 -0700 (PDT) From: Andrew Cooper To: Xen-devel Cc: Andrew Cooper , Jan Beulich , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= Subject: [PATCH 21/22] x86/traps: Introduce FRED entrypoints Date: Fri, 8 Aug 2025 21:23:13 +0100 Message-Id: <20250808202314.1045968-22-andrew.cooper3@citrix.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250808202314.1045968-1-andrew.cooper3@citrix.com> References: <20250808202314.1045968-1-andrew.cooper3@citrix.com> 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: 1754685076187116600 Under FRED, there's one entrypoint from Ring 3, and one from Ring 0. FRED gives us a good stack (even for SYSCALL/SYSENTER), and a unified event frame on the stack, meaing that all software needs to do is spill the GPRs with a line of PUSHes. Introduce PUSH_AND_CLEAR_GPRS and POP_GPRS for this purpose. Introduce entry_FRED_R0() which to a first appoximation is complete for all event handling within Xen. entry_FRED_R0() needs deriving from entry_FRED_R3(), so introduce a basic handler. There is more work required to make the return-to-guest path work under FRED, so leave a BUG clearly in place. Also introduce entry_from_{xen,pv}() to be the C level handlers. By simply copying regs->fred_ss.vector into regs->entry_vector, we can reuse all the existing fault handlers. Extend fatal_trap() to render the event type, including by name, when FRED = is active. This is slightly complicated, because X86_ET_OTHER must not use vector_name() or SYSCALL and SYSENTER get rendered as #BP and #DB. Also, {read,write}_gs_shadow() needs modifying to avoid the SWAPGS instruction, which is disallowed in FRED mode. This is sufficient to handle all interrupts and exceptions encountered duri= ng development, including plenty of Double Faults. Signed-off-by: Andrew Cooper --- CC: Jan Beulich CC: Roger Pau Monn=C3=A9 SIMICS hasn't been updated to the FRED v9, and still wants ENDBR instructio= ns at the entrypoints. --- xen/arch/x86/include/asm/asm_defns.h | 65 ++++++++++++ xen/arch/x86/include/asm/msr.h | 8 +- xen/arch/x86/traps.c | 153 ++++++++++++++++++++++++++- xen/arch/x86/x86_64/Makefile | 1 + xen/arch/x86/x86_64/entry-fred.S | 35 ++++++ 5 files changed, 256 insertions(+), 6 deletions(-) create mode 100644 xen/arch/x86/x86_64/entry-fred.S diff --git a/xen/arch/x86/include/asm/asm_defns.h b/xen/arch/x86/include/as= m/asm_defns.h index 72a0082d319d..a81a4043d0f1 100644 --- a/xen/arch/x86/include/asm/asm_defns.h +++ b/xen/arch/x86/include/asm/asm_defns.h @@ -315,6 +315,71 @@ static always_inline void stac(void) subq $-(UREGS_error_code-UREGS_r15+\adj), %rsp .endm =20 +/* + * Push and clear GPRs + */ +.macro PUSH_AND_CLEAR_GPRS + push %rdi + xor %edi, %edi + push %rsi + xor %esi, %esi + push %rdx + xor %edx, %edx + push %rcx + xor %ecx, %ecx + push %rax + xor %eax, %eax + push %r8 + xor %r8d, %r8d + push %r9 + xor %r9d, %r9d + push %r10 + xor %r10d, %r10d + push %r11 + xor %r11d, %r11d + push %rbx + xor %ebx, %ebx + push %rbp +#ifdef CONFIG_FRAME_POINTER +/* Indicate special exception stack frame by inverting the frame pointer. = */ + mov %rsp, %rbp + notq %rbp +#else + xor %ebp, %ebp +#endif + push %r12 + xor %r12d, %r12d + push %r13 + xor %r13d, %r13d + push %r14 + xor %r14d, %r14d + push %r15 + xor %r15d, %r15d +.endm + +/* + * POP GPRs from a UREGS_* frame on the stack. Does not modify flags. + * + * @rax: Alternative destination for the %rax value on the stack. + */ +.macro POP_GPRS rax=3D%rax + pop %r15 + pop %r14 + pop %r13 + pop %r12 + pop %rbp + pop %rbx + pop %r11 + pop %r10 + pop %r9 + pop %r8 + pop \rax + pop %rcx + pop %rdx + pop %rsi + pop %rdi +.endm + #ifdef CONFIG_PV32 #define CR4_PV32_RESTORE \ ALTERNATIVE_2 "", \ diff --git a/xen/arch/x86/include/asm/msr.h b/xen/arch/x86/include/asm/msr.h index b6b85b04c3fd..01f510315ffe 100644 --- a/xen/arch/x86/include/asm/msr.h +++ b/xen/arch/x86/include/asm/msr.h @@ -202,9 +202,9 @@ static inline unsigned long read_gs_base(void) =20 static inline unsigned long read_gs_shadow(void) { - unsigned long base; + unsigned long base, cr4 =3D read_cr4(); =20 - if ( read_cr4() & X86_CR4_FSGSBASE ) + if ( !(cr4 & X86_CR4_FRED) && (cr4 & X86_CR4_FSGSBASE) ) { asm volatile ( "swapgs" ); base =3D __rdgsbase(); @@ -234,7 +234,9 @@ static inline void write_gs_base(unsigned long base) =20 static inline void write_gs_shadow(unsigned long base) { - if ( read_cr4() & X86_CR4_FSGSBASE ) + unsigned long cr4 =3D read_cr4(); + + if ( !(cr4 & X86_CR4_FRED) && (cr4 & X86_CR4_FSGSBASE) ) { asm volatile ( "swapgs\n\t" "wrgsbase %0\n\t" diff --git a/xen/arch/x86/traps.c b/xen/arch/x86/traps.c index 270b93ed623e..e67a428e4362 100644 --- a/xen/arch/x86/traps.c +++ b/xen/arch/x86/traps.c @@ -1013,6 +1013,32 @@ void show_execution_state_nmi(const cpumask_t *mask,= bool show_all) printk("Non-responding CPUs: {%*pbl}\n", CPUMASK_PR(&show_state_ma= sk)); } =20 +static const char *x86_et_name(unsigned int type) +{ + static const char *const names[] =3D { + [X86_ET_EXT_INTR] =3D "EXT_INTR", + [X86_ET_NMI] =3D "NMI", + [X86_ET_HW_EXC] =3D "HW_EXC", + [X86_ET_SW_INT] =3D "SW_INT", + [X86_ET_PRIV_SW_EXC] =3D "PRIV_SW_EXEC", + [X86_ET_SW_EXC] =3D "SW_EXEC", + [X86_ET_OTHER] =3D "OTHER", + }; + + return (type < ARRAY_SIZE(names) && names[type]) ? names[type] : "???"; +} + +static const char *x86_et_other_name(unsigned int vec) +{ + static const char *const names[] =3D { + [0] =3D "MTF", + [1] =3D "SYSCALL", + [2] =3D "SYSENTER", + }; + + return (vec < ARRAY_SIZE(names) && names[vec][0]) ? names[vec] : "???"; +} + const char *vector_name(unsigned int vec) { static const char names[][4] =3D { @@ -1091,9 +1117,42 @@ void fatal_trap(const struct cpu_user_regs *regs, bo= ol show_remote) } } =20 - panic("FATAL TRAP: vec %u, %s[%04x]%s\n", - trapnr, vector_name(trapnr), regs->error_code, - (regs->eflags & X86_EFLAGS_IF) ? "" : " IN INTERRUPT CONTEXT"); + if ( read_cr4() & X86_CR4_FRED ) + { + bool render_ec =3D false; + const char *vec_name =3D NULL; + + switch ( regs->fred_ss.type ) + { + case X86_ET_HW_EXC: + case X86_ET_SW_INT: + case X86_ET_PRIV_SW_EXC: + case X86_ET_SW_EXC: + render_ec =3D true; + vec_name =3D vector_name(regs->fred_ss.vector); + break; + + case X86_ET_OTHER: + vec_name =3D x86_et_other_name(regs->fred_ss.vector); + break; + } + + if ( render_ec ) + panic("Fatal TRAP: type %u, %s, vec %u, %s[%04x]%s\n", + regs->fred_ss.type, x86_et_name(regs->fred_ss.type), + regs->fred_ss.vector, vec_name ?: "", + regs->error_code, + (regs->eflags & X86_EFLAGS_IF) ? "" : " IN INTERRUPT CON= TEXT"); + else + panic("Fatal TRAP: type %u, %s, vec %u, %s%s\n", + regs->fred_ss.type, x86_et_name(regs->fred_ss.type), + regs->fred_ss.vector, vec_name ?: "", + (regs->eflags & X86_EFLAGS_IF) ? "" : " IN INTERRUPT CON= TEXT"); + } + else + panic("FATAL TRAP: vec %u, %s[%04x]%s\n", + trapnr, vector_name(trapnr), regs->error_code, + (regs->eflags & X86_EFLAGS_IF) ? "" : " IN INTERRUPT CONTEXT= "); } =20 void asmlinkage noreturn do_unhandled_trap(struct cpu_user_regs *regs) @@ -2181,6 +2240,94 @@ void asmlinkage check_ist_exit(const struct cpu_user= _regs *regs, bool ist_exit) } #endif =20 +void asmlinkage entry_from_pv(struct cpu_user_regs *regs) +{ + /* Copy fred_ss.vector into entry_vector as IDT delivery would have do= ne. */ + regs->entry_vector =3D regs->fred_ss.vector; + + switch ( regs->fred_ss.type ) + { + case X86_ET_EXT_INTR: + do_IRQ(regs); + break; + + case X86_ET_NMI: + do_nmi(regs); + break; + + case X86_ET_HW_EXC: + case X86_ET_SW_INT: + case X86_ET_PRIV_SW_EXC: + case X86_ET_SW_EXC: + goto fatal; + + default: + goto fatal; + } + + return; + + fatal: + fatal_trap(regs, false); +} + +void asmlinkage entry_from_xen(struct cpu_user_regs *regs) +{ + /* Copy fred_ss.vector into entry_vector as IDT delivery would have do= ne. */ + regs->entry_vector =3D regs->fred_ss.vector; + + switch ( regs->fred_ss.type ) + { + case X86_ET_EXT_INTR: + do_IRQ(regs); + break; + + case X86_ET_NMI: + do_nmi(regs); + break; + + case X86_ET_HW_EXC: + case X86_ET_SW_INT: + case X86_ET_PRIV_SW_EXC: + case X86_ET_SW_EXC: + switch ( regs->fred_ss.vector ) + { + case X86_EXC_PF: do_page_fault(regs); break; + case X86_EXC_GP: do_general_protection(regs); break; + case X86_EXC_UD: do_invalid_op(regs); break; + case X86_EXC_NM: do_device_not_available(regs); break; + case X86_EXC_BP: do_int3(regs); break; + case X86_EXC_DB: do_debug(regs); break; + case X86_EXC_DF: do_double_fault(regs); break; + + case X86_EXC_DE: + case X86_EXC_OF: + case X86_EXC_BR: + case X86_EXC_NP: + case X86_EXC_SS: + case X86_EXC_MF: + case X86_EXC_AC: + case X86_EXC_XM: + do_trap(regs); + break; + + case X86_EXC_CP: do_entry_CP(regs); break; + + default: + goto fatal; + } + break; + + default: + goto fatal; + } + + return; + + fatal: + fatal_trap(regs, false); +} + /* * Local variables: * mode: C diff --git a/xen/arch/x86/x86_64/Makefile b/xen/arch/x86/x86_64/Makefile index f20763088740..5ec933539adb 100644 --- a/xen/arch/x86/x86_64/Makefile +++ b/xen/arch/x86/x86_64/Makefile @@ -1,6 +1,7 @@ obj-$(CONFIG_PV32) +=3D compat/ =20 obj-bin-y +=3D entry.o +obj-bin-y +=3D entry-fred.o obj-$(CONFIG_KEXEC) +=3D machine_kexec.o obj-y +=3D pci.o obj-y +=3D acpi_mmcfg.o diff --git a/xen/arch/x86/x86_64/entry-fred.S b/xen/arch/x86/x86_64/entry-f= red.S new file mode 100644 index 000000000000..88d262b91f92 --- /dev/null +++ b/xen/arch/x86/x86_64/entry-fred.S @@ -0,0 +1,35 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ + + .file "x86_64/entry-fred.S" + +#include +#include + + .section .text.entry, "ax", @progbits + + /* The Ring3 entry point is required to be 4k aligned. */ + +FUNC(entry_FRED_R3, 4096) + PUSH_AND_CLEAR_GPRS + + mov %rsp, %rdi + call entry_from_pv + + BUG /* TODO - return to guest path */ + + POP_GPRS + eretu +END(entry_FRED_R3) + + /* The Ring0 entrypoint is at Ring3 + 256. */ + .org entry_FRED_R3 + 256, 0xcc + +FUNC_LOCAL(entry_FRED_R0, 0) + PUSH_AND_CLEAR_GPRS + + mov %rsp, %rdi + call entry_from_xen + + POP_GPRS + erets +END(entry_FRED_R0) --=20 2.39.5 From nobody Mon Feb 9 08:08:03 2026 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=1754685085; cv=none; d=zohomail.com; s=zohoarc; b=IyHNhKEnELdRDbn/JLDUgF6Ky5jPs6o2sIDWGCiJBMmr2SsqYnqVeTkMEGdygJ2o9kvbwU7fAXAHUt29asCTIxqrSY7Z+pAntp7GDeGFdmvobtuqU2t8FCmnVXUisvdWzN6n/r1lsosT4JieC6VAcmJxOclOHtiobEQ9C5SFPys= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1754685085; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=evLhAYiRD6wyqduVR5JzlpDskt89ckAuh4iEnU2F4jA=; b=aezAp4vssr0pc3HEX6GgU3O6AE19vzFJIbmsHxuKYJKCpHhUTyCJiCOL3CCgPr5RSKSpExMO1NVN8Bx/D12JClDSMVbGfanswoPukZHcGVoG97jN/nklK1UXLfN+9ywBudA1Ayxz3zuEN33pwhbtX87St8wKwbIlV12WMyTzaBk= 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 1754685085510886.7825739207367; Fri, 8 Aug 2025 13:31:25 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1075092.1437641 (Exim 4.92) (envelope-from ) id 1ukTkA-0008Pe-Gh; Fri, 08 Aug 2025 20:31:14 +0000 Received: by outflank-mailman (output) from mailman id 1075092.1437641; Fri, 08 Aug 2025 20:31:14 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1ukTkA-0008PX-DA; Fri, 08 Aug 2025 20:31:14 +0000 Received: by outflank-mailman (input) for mailman id 1075092; Fri, 08 Aug 2025 20:31:12 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1ukTcr-0005tJ-Cy for xen-devel@lists.xenproject.org; Fri, 08 Aug 2025 20:23:41 +0000 Received: from mail-wm1-x332.google.com (mail-wm1-x332.google.com [2a00:1450:4864:20::332]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id 9098a2cb-7495-11f0-b898-0df219b8e170; Fri, 08 Aug 2025 22:23:37 +0200 (CEST) Received: by mail-wm1-x332.google.com with SMTP id 5b1f17b1804b1-451d41e1ad1so17067035e9.1 for ; Fri, 08 Aug 2025 13:23:37 -0700 (PDT) Received: from localhost.localdomain (host-195-149-20-212.as13285.net. [195.149.20.212]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-459e075047fsm103989805e9.1.2025.08.08.13.23.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 Aug 2025 13:23:36 -0700 (PDT) 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: 9098a2cb-7495-11f0-b898-0df219b8e170 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.com; s=google; t=1754684616; x=1755289416; darn=lists.xenproject.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=evLhAYiRD6wyqduVR5JzlpDskt89ckAuh4iEnU2F4jA=; b=oLtukjId3XrsVDvcs9NMr0rTqZdTadAqdF2f0kdhlHECFncksHx8SreIn3+2NRR9us P/Pn+tOTvjC7Cp/jl2YdDt/dYFZWMxU7nnVr8nFEZLSigygwPCuIkFxVknZOGChvzCrZ F9rjBe2GybOHrzPvmCkCA6NeBFCkJz/rpR2aE= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754684616; x=1755289416; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=evLhAYiRD6wyqduVR5JzlpDskt89ckAuh4iEnU2F4jA=; b=VSyYbtcvFhfljcaejlgb7h28MgX0vAVCuFRMrj1eDthUiqUi/CcxBOHzu/79yE6pQL IgRB/rf4HEyph8BvDGfpaG3zBDveuakKegaEwcwgi1mqr6HHMq3jSOQ+Y0j+khcYTrTK UIWs6tSHaI0rEqyWafqZEbRSjRm6aXxyyfW/wRKvzk7GRnRO7sRNCum5gs7uWIVVqdbA o7GOGgR6behrmlaXdCgX0m8b6+1rx8lcK+6Bq87TbyaM4tCsb8ASOjBX+mSMkk9pxcb6 m/YgAh4GFyatjTGHYiNiz4JU9I9AuJY3pfi2Vaxmo2H+Y/dGOdYzZg4Tnf6dQ3g3M9hz 09gg== X-Gm-Message-State: AOJu0YzBiaOt7n2WYN7Gtvt9jR6ZUskhGgbaIUxV8Cv8dKorQo/dk8eH jx74ji3jPx6Ct1G+EskPTFO4TbxEunzyEfFjtqy66z+ZfTf98O2gVBrJjeb6nn8GOrKUlt6NhXB IoP/mf/8= X-Gm-Gg: ASbGncvE6vl0uB/cI2ZN34HUvCH5GMCG16EST5m+fy1G0OPAZJNeBJZIeIweLYproCU 5gFwzZJnbZEMTkA15nQjlMHLvuIOg6QwGoY4a9FuDvYKa2H481kPzrvtA+gueHMjRUd1iwvn1/o 3oJcHp7+Haa3qmQ5EFL1DkaTvTtfNqc8dxYvLWbugF/KnZMFABrkrebXDuQxqXQM3N8NIfrMvOB 2B0uEHh4PWNx4AFRHb3H3CiN28cDifXVTjPlbc21ebeANrdu3x1CUbyrhyZjFRhzvCl42mFIHyy C7hnUst94o0ROiqoowC9nOdlK4K1PVspBUZmlTCo2cnRn3JYYNQOlzpWEe4/NKkLZUnmIEF2J3e +fT/KwbgMxZaCFAswtDxf0eQfFCrD0eRDcfVHYrDXAI74wy4CNcOPQTD8+AzDSKKXdv6BqHyXzM QH X-Google-Smtp-Source: AGHT+IGnrev+Fn9IitHmppKh6Q8rFalcNx8FXnd9zAAIoH6loW+O/7BQrlWew/vjceQpRcOGSOsOCw== X-Received: by 2002:a05:600c:4e09:b0:458:bbed:a806 with SMTP id 5b1f17b1804b1-459f7114067mr30272445e9.22.1754684616504; Fri, 08 Aug 2025 13:23:36 -0700 (PDT) From: Andrew Cooper To: Xen-devel Cc: Andrew Cooper , Jan Beulich , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= Subject: [PATCH 22/22] x86/traps: Enable FRED when requested Date: Fri, 8 Aug 2025 21:23:14 +0100 Message-Id: <20250808202314.1045968-23-andrew.cooper3@citrix.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250808202314.1045968-1-andrew.cooper3@citrix.com> References: <20250808202314.1045968-1-andrew.cooper3@citrix.com> 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: 1754685086119116600 With the shadow stack and exception handling adjustements in place, we can = now activate FRED when appropriate. Note that opt_fred is still disabled by default. Introduce init_fred() to set up all the MSRs relevant for FRED. FRED uses MSR_STAR (entries from Ring3 only), and MSR_FRED_SSP_SL0 aliases MSR_PL0_SSP when CET-SS is active. Otherwise, they're all new MSRs. With init_fred() existing, load_system_tables() and legacy_syscall_init() should only be used when setting up IDT delivery. Insert ASSERT()s to this effect, and adjust the various *_init() functions to make this property tru= e. Per the documentation, ap_early_traps_init() is responsible for switching o= ff the boot GDT, which needs doing even in FRED mode. Finally, set CR4.FRED in {bsp,ap}_early_traps_init(). Xen can now boot in FRED mode up until starting a PV guest, where it faults because IRET is not permitted to change privilege. Signed-off-by: Andrew Cooper Reviewed-by: Jan Beulich --- CC: Jan Beulich CC: Roger Pau Monn=C3=A9 In principle we can stop allocating the IDT and TSS for CPUs now, although I want to get shutdown and kexec working before making this optimisation, in case there's something I've overlooked. --- xen/arch/x86/include/asm/current.h | 3 ++ xen/arch/x86/traps-setup.c | 78 +++++++++++++++++++++++++++--- 2 files changed, 75 insertions(+), 6 deletions(-) diff --git a/xen/arch/x86/include/asm/current.h b/xen/arch/x86/include/asm/= current.h index 24d7d906a8c6..046740447db0 100644 --- a/xen/arch/x86/include/asm/current.h +++ b/xen/arch/x86/include/asm/current.h @@ -24,6 +24,9 @@ * 2 - NMI IST stack * 1 - #MC IST stack * 0 - IST Shadow Stacks (4x 1k, read-only) + * + * In FRED mode, #DB and NMI do not need special stacks, so their stacks a= re + * unused. */ =20 /* diff --git a/xen/arch/x86/traps-setup.c b/xen/arch/x86/traps-setup.c index c4825fc1b11a..fdcfc7f5777d 100644 --- a/xen/arch/x86/traps-setup.c +++ b/xen/arch/x86/traps-setup.c @@ -26,6 +26,7 @@ int8_t __ro_after_init opt_fred =3D 0; /* -1 when support= ed. */ boolean_param("fred", opt_fred); =20 void nocall entry_PF(void); +void nocall entry_FRED_R3(void); void nocall lstar_enter(void); void nocall cstar_enter(void); =20 @@ -63,6 +64,8 @@ static void load_system_tables(void) .limit =3D sizeof(bsp_idt) - 1, }; =20 + ASSERT(opt_fred =3D=3D 0); + /* * Set up the TSS. Warning - may be live, and the NMI/#MC must remain * valid on every instruction boundary. (Note: these are all @@ -197,6 +200,8 @@ static void legacy_syscall_init(void) unsigned char *stub_page; unsigned int offset; =20 + ASSERT(opt_fred =3D=3D 0); + /* No PV guests? No need to set up SYSCALL/SYSENTER infrastructure. */ if ( !IS_ENABLED(CONFIG_PV) ) return; @@ -274,6 +279,44 @@ static void __init init_ler(void) setup_force_cpu_cap(X86_FEATURE_XEN_LBR); } =20 +/* + * Set up all MSRs relevant for FRED event delivery. + * + * Xen does not use any of the optional config in MSR_FRED_CONFIG, so all = that + * is needed is the entrypoint. + * + * Because FRED always provides a good stack, NMI and #DB do not need any + * special treatment. Only #DF needs another stack level, and #MC for the + * offchance that Xen's main stack suffers an uncorrectable error. + * + * FRED reuses MSR_STAR to provide the segment selector values to load on + * entry from Ring3. Entry from Ring0 leave %cs and %ss unmodified. + */ +static void init_fred(void) +{ + unsigned long stack_top =3D get_stack_bottom() & ~(STACK_SIZE - 1); + + ASSERT(opt_fred =3D=3D 1); + + wrmsrns(MSR_STAR, XEN_MSR_STAR); + wrmsrns(MSR_FRED_CONFIG, (unsigned long)entry_FRED_R3); + + wrmsrns(MSR_FRED_RSP_SL0, (unsigned long)(&get_cpu_info()->_fred + 1)); + wrmsrns(MSR_FRED_RSP_SL1, 0); + wrmsrns(MSR_FRED_RSP_SL2, stack_top + (1 + IST_MCE) * PAGE_SIZE); + wrmsrns(MSR_FRED_RSP_SL3, stack_top + (1 + IST_DF) * PAGE_SIZE); + wrmsrns(MSR_FRED_STK_LVLS, ((2UL << (X86_EXC_MC * 2)) | + (3UL << (X86_EXC_DF * 2)))); + + if ( cpu_has_xen_shstk ) + { + wrmsrns(MSR_FRED_SSP_SL0, stack_top + (PRIMARY_SHSTK_SLOT + 1) * P= AGE_SIZE); + wrmsrns(MSR_FRED_SSP_SL1, 0); + wrmsrns(MSR_FRED_SSP_SL2, stack_top + (IST_MCE * IST_SHSTK_SIZE)); + wrmsrns(MSR_FRED_SSP_SL3, stack_top + (IST_DF * IST_SHSTK_SIZE)); + } +} + /* * Configure basic exception handling. This is prior to parsing the comma= nd * line or configuring a console, and needs to be as simple as possible. @@ -331,15 +374,18 @@ void __init traps_init(void) printk(XENLOG_INFO "Disabling PV32 due to FRED\n"); } #endif + init_fred(); + set_in_cr4(X86_CR4_FRED); + printk("Using FRED event delivery\n"); } else { + load_system_tables(); + printk("Using IDT event delivery\n"); } =20 - load_system_tables(); - init_ler(); =20 /* Cache {,compat_}gdt_l1e now that physically relocation is done. */ @@ -357,8 +403,13 @@ void __init traps_init(void) */ void bsp_traps_reinit(void) { - load_system_tables(); - percpu_traps_init(); + if ( opt_fred ) + init_fred(); + else + { + load_system_tables(); + percpu_traps_init(); + } } =20 /* @@ -367,7 +418,8 @@ void bsp_traps_reinit(void) */ void percpu_traps_init(void) { - legacy_syscall_init(); + if ( !opt_fred ) + legacy_syscall_init(); =20 if ( cpu_has_xen_lbr ) wrmsrl(MSR_IA32_DEBUGCTLMSR, IA32_DEBUGCTLMSR_LBR); @@ -382,7 +434,21 @@ void percpu_traps_init(void) */ void asmlinkage ap_early_traps_init(void) { - load_system_tables(); + if ( opt_fred ) + { + const seg_desc_t *gdt =3D this_cpu(gdt) - FIRST_RESERVED_GDT_ENTRY; + const struct desc_ptr gdtr =3D { + .base =3D (unsigned long)gdt, + .limit =3D LAST_RESERVED_GDT_BYTE, + }; + + lgdt(&gdtr); + + init_fred(); + write_cr4(read_cr4() | X86_CR4_FRED); + } + else + load_system_tables(); } =20 static void __init __maybe_unused build_assertions(void) --=20 2.39.5 From nobody Mon Feb 9 08:08:03 2026 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=1754697000; cv=none; d=zohomail.com; s=zohoarc; b=IIjo2mokVqOmoK8p1tcpYhehi/lSO1lGoZ4DD/TfRxDmg5Dm0CSOGF4ZTz6jj5yKASGHwAF/Q7l1md8GrHuao43KYaak1YmfAJ01B/+/qD8z5rCzYRxwy80XOxB+BHrJjxdKxU8Zp6bbGqpXhWomAed7EzA03QBEPFtWpLpMBEo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1754697000; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=/QLw1MS9Yw991F1kr3BalCx2KYqxD20VN1RIVcE4BH8=; b=FWZIN9nA01nC/QaoOQet+NkhBN1hzVsEKI4WnUnlrpzKXweB2334yeqhh/oUv1lZkjRuCNTk6IU7AXOoIdJvNkNOguzlqUMqEdRCxcd5vXBjqYeonhFzY8jxYAhssowYr1OorL+AYSELYUfVqPy/ePF07l2MLADpyXVi6UG6SpY= 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 1754697000921343.66421653390466; Fri, 8 Aug 2025 16:50:00 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.1075335.1437731 (Exim 4.92) (envelope-from ) id 1ukWq0-0006R0-Rg; Fri, 08 Aug 2025 23:49:28 +0000 Received: by outflank-mailman (output) from mailman id 1075335.1437731; Fri, 08 Aug 2025 23:49:28 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1ukWq0-0006Qt-Oa; Fri, 08 Aug 2025 23:49:28 +0000 Received: by outflank-mailman (input) for mailman id 1075335; Fri, 08 Aug 2025 23:49:26 +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 1ukWpy-0006Qn-Oh for xen-devel@lists.xenproject.org; Fri, 08 Aug 2025 23:49:26 +0000 Received: from mail-wr1-x42f.google.com (mail-wr1-x42f.google.com [2a00:1450:4864:20::42f]) by se1-gles-sth1.inumbo.com (Halon) with ESMTPS id 4fa78546-74b2-11f0-a324-13f23c93f187; Sat, 09 Aug 2025 01:49:24 +0200 (CEST) Received: by mail-wr1-x42f.google.com with SMTP id ffacd0b85a97d-3b79bd3b1f7so1302703f8f.1 for ; Fri, 08 Aug 2025 16:49:24 -0700 (PDT) Received: from localhost.localdomain (host-195-149-20-212.as13285.net. [195.149.20.212]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-3b79c3b95desm31287588f8f.20.2025.08.08.16.49.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 Aug 2025 16:49:22 -0700 (PDT) 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: 4fa78546-74b2-11f0-a324-13f23c93f187 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.com; s=google; t=1754696963; x=1755301763; darn=lists.xenproject.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=/QLw1MS9Yw991F1kr3BalCx2KYqxD20VN1RIVcE4BH8=; b=Rt9s+pHBBBKNEBBR20uTulcChOhnQyxEHwq0SJ/WpdKxUQNKZu/I3/jndNzCVHJHXp cYh6eNMJZPC6s7KUqdyvcWPpXcQq0VJ7T34MEtg28yxzhFg/2vXI6ZuggvxF65HplhVK 8hLoHbASS1ZO6pUl0Oa/Os47oQpMeK1Yqhs+0= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754696963; x=1755301763; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=/QLw1MS9Yw991F1kr3BalCx2KYqxD20VN1RIVcE4BH8=; b=fmXnBn2sSU/DpcjEtAIfX27TP6t1Sck1E/d4kDGdedPxnzm/JZ7bMfY/WvhDZIRMdo GIBMMxfu3XfFLMMdSXedssYU2uE6RFGFNgdItkoit0EYGFZvz14p6WRAUtWgjhPs5Pm3 ty8A9X7dF74MV8qDxdu9z9HYbSj2ZBYEj0qUKrVhQkXFrvT8C9mranEbDc7wb3yrW9gH Nbix6R5NrbVH6DLki5lZ4jwYk40NPqICahJRMDVtuOz7wj4ZAxDJ1NIYVbeGvSSbiMsw VFAYTcsiQQYPC65+DV84HHARN/SqoSLWMy1t7FZFWgeqCuEAh8S0hqcSG1525phFTdtw PzIg== X-Gm-Message-State: AOJu0YxaiSiIGKK4rx//YtEVvFj8/gX1+uW3t5/rLJMFXwcfF4ER+m/3 phe3i/JzjKJohcJmZOTj8lcCUHMqhrewtiuInFpD4XfwwkNM8bOIdKjl5hMHqYjiwjV+Kd+qNTK 3UmN40v4= X-Gm-Gg: ASbGnctaLpHwepFADZ5OnkP+L+EzU2DvqcufuehDJgRjJleRHRTLMlD/ex/Etxx7Vsp 5uqpfG3rQF7jcMZPTidGmxIFZQn+R7sNFeiuJ44ZM7btk5BjNI3y874DKNLM9qINHq2gxmlFsHV IhshGbE3Shhm36cjWnREU7oh+muGTQs+w2ZIxFR62WnD4EJkMGr3t4h4FoUa7TehnF/fMD3t0mI ciPssKTtUjzd9+eah2paxdxUJFR+9C23iClt7hABTSDkcZ5c6h6yK6YL9j6t6WvKyhzhID4AvgS VbcbeelO/nqLNCYV54/l0uWUlVvWZKKQDaYexNu9Hrg3IWHL3ubOAiEx4CJYKX01O1AlTh3+zTT lHF8ys0FxBjPTUjOiRbLxtLn6YYfg0ntnileCGH1lM0WqFr0HEbJCnyTPjGjcXj5sUg5J7D1e/6 TO X-Google-Smtp-Source: AGHT+IF/7kyzaFIg1l+Xvl2Bk/rf229iF8VlwI/rAIRYEKzqF9JkfLPQphoOBPo0Rh1qmBoZRw/I8Q== X-Received: by 2002:a5d:5846:0:b0:3a4:dc2a:924e with SMTP id ffacd0b85a97d-3b90093e6famr3713949f8f.6.1754696963506; Fri, 08 Aug 2025 16:49:23 -0700 (PDT) From: Andrew Cooper To: Xen-devel Cc: Andrew Cooper , Jan Beulich , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= Subject: [PATCH 23/22] x86/vmx: Adjust NMI handling for FRED Date: Sat, 9 Aug 2025 00:49:20 +0100 Message-Id: <20250808234920.1214924-1-andrew.cooper3@citrix.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250808202314.1045968-1-andrew.cooper3@citrix.com> References: <20250808202314.1045968-1-andrew.cooper3@citrix.com> 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: 1754697004254124100 Handling NMIs in VT-x is awkward. It turns out that using INT $2 happens to be correct for IDT delivery, and can be made to be correct under FRED too. Xen can now boot in FRED mode and run PVH dom0 even with the watchdog enabl= ed. Signed-off-by: Andrew Cooper --- CC: Jan Beulich CC: Roger Pau Monn=C3=A9 --- xen/arch/x86/hvm/vmx/vmx.c | 14 ++++++++++++-- xen/arch/x86/traps.c | 16 +++++++++++++++- 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/xen/arch/x86/hvm/vmx/vmx.c b/xen/arch/x86/hvm/vmx/vmx.c index cb82d52ef035..577a5e2d59c6 100644 --- a/xen/arch/x86/hvm/vmx/vmx.c +++ b/xen/arch/x86/hvm/vmx/vmx.c @@ -4209,8 +4209,18 @@ void asmlinkage vmx_vmexit_handler(struct cpu_user_r= egs *regs) ((intr_info & INTR_INFO_INTR_TYPE_MASK) =3D=3D MASK_INSR(X86_ET_NMI, INTR_INFO_INTR_TYPE_MASK)) ) { - do_nmi(regs); - enable_nmis(); + /* + * If we exited because of an NMI, NMIs are blocked in hardwar= e, + * but software is expected to invoke the handler. + * + * Use INT $2. Combined with the current state, it is the cor= rect + * architectural state for the NMI handler, and the IRET on the + * way back out will unblock NMIs. + * + * In FRED mode, we can spot this trick and cause the ERETS to + * unblock NMIs too. + */ + asm ("int $2"); } break; case EXIT_REASON_MCE_DURING_VMENTRY: diff --git a/xen/arch/x86/traps.c b/xen/arch/x86/traps.c index f58e6dcf13b7..16dd335cadb2 100644 --- a/xen/arch/x86/traps.c +++ b/xen/arch/x86/traps.c @@ -2285,8 +2285,22 @@ void asmlinkage entry_from_xen(struct cpu_user_regs = *regs) do_nmi(regs); break; =20 - case X86_ET_HW_EXC: case X86_ET_SW_INT: + if ( regs->fred_ss.vector =3D=3D 2 ) + { + /* + * Explicit request from the the VMExit handler. Rewrite the = FRED + * frame to look like it was a real NMI, and go around again. + */ + regs->fred_ss.swint =3D false; + regs->fred_ss.nmi =3D true; + regs->fred_ss.type =3D X86_ET_NMI; + regs->fred_ss.insnlen =3D 0; + + return entry_from_xen(regs); + } + fallthrough; + case X86_ET_HW_EXC: case X86_ET_PRIV_SW_EXC: case X86_ET_SW_EXC: switch ( regs->fred_ss.vector ) --=20 2.39.5