From nobody Thu Jan 8 12:28:00 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; 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=1767102898; cv=none; d=zohomail.com; s=zohoarc; b=b2tguZeSXKkJ3ebzSPGo1n68AcTroIfpxnqaZBR9bb4aqnaUET2x/lRAdwFuzEdMgP0OFt5tEz1IG8bJei14tB6k437Sn6OvMOyS7b1pvOkIcU0Bc6Jp5Og+2IjXWjF4USlJaJE1JweDf2r7454OsDCTVkss4dgXnEnFAbumYUo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1767102898; 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=Dfg9SOntw48QjjQPH4731TXdZMbOgAkel6auQMh8/BY=; b=alrRaRM2GAzax1Esuk2G7cxYpxw0UVEfC4WCjQwtve0ybVJ6gvdS9il+c+h+6ONlhZEM1KgikBacRdN+a2uPqpfIoVESiJkc96PERggebqXWypje4laJ/nD6O2mgZJU2dedfW//uIPzOFRUgVhMtmO2Aa0Sq/W8J/1jl3HjsHQA= 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 1767102898970809.6595230859836; Tue, 30 Dec 2025 05:54:58 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.1194219.1512687 (Exim 4.92) (envelope-from ) id 1vaaBJ-0007xX-Jq; Tue, 30 Dec 2025 13:54:37 +0000 Received: by outflank-mailman (output) from mailman id 1194219.1512687; Tue, 30 Dec 2025 13:54: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 1vaaBJ-0007wm-F1; Tue, 30 Dec 2025 13:54:37 +0000 Received: by outflank-mailman (input) for mailman id 1194219; Tue, 30 Dec 2025 13:54:36 +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 1vaaBI-0007fS-1J for xen-devel@lists.xenproject.org; Tue, 30 Dec 2025 13:54:36 +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 120b39ed-e587-11f0-9ccf-f158ae23cfc8; Tue, 30 Dec 2025 14:54:33 +0100 (CET) Received: by mail-wr1-x431.google.com with SMTP id ffacd0b85a97d-430f2ee2f00so4688213f8f.3 for ; Tue, 30 Dec 2025 05:54:33 -0800 (PST) Received: from localhost.localdomain (host-92-26-102-188.as13285.net. [92.26.102.188]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-4324ea226d1sm70198245f8f.13.2025.12.30.05.54.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 30 Dec 2025 05:54:31 -0800 (PST) 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: 120b39ed-e587-11f0-9ccf-f158ae23cfc8 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.com; s=google; t=1767102873; x=1767707673; 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=Dfg9SOntw48QjjQPH4731TXdZMbOgAkel6auQMh8/BY=; b=VpiiVmCt1R6YGCSlUWQepLY5D+/PqyxfrUaEbRY8dL3Sz5jxTQzrE951o/7ZnIjuIt lhLq6yIHjAQS9SW6nsh6By6mZ0OGvjFrRoLn3RdqCmb2ev0wcJR20MeTCWc5XNpgy/TT 8zFo/luVJOY7TtUCs8z5/0CtktDvYNGU0JhDk= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767102873; x=1767707673; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=Dfg9SOntw48QjjQPH4731TXdZMbOgAkel6auQMh8/BY=; b=jP6XoInLSgKAc4PQ/zEt3NL8rfcz+yyOG+jf7HGhiIredBHfpPMIDkA4fEYINss/Aa VsAU1eJX+ooRmv/GElFgdD3JQIHD42KAtdbE50ZKl+onmHZJaLa6Egux4WoTlyWAdtzF Lzg2sRLWM/bjlyDAc6XPBShL/KVn72pa58QeZioaziDUWd/bW6MdrQw+ZJsSXLCOTtBK UFAOiYMTKztBIpFKoP9G4xbcqU+uddmgfnT1UaHJoAx2F/iw25mKMt6q/9JnjDq/uVOR yvJXJPR4mwtk7MQiHEvgFU75IFZ1gQAli6w2/QXI0niqyCVPu8lR99aGgMzjc033XdYm AS6A== X-Gm-Message-State: AOJu0YxW8XjMagdHAYxSlx9A4sqFsLjG32vuOBgwHe2wDuLTT85JTj2q 8O4ePUhmTPV69tCLySQudT8VcTA8MbXRIKRDwd1PQazsuGpl0PbcWtX0SxQgjYDrQdDTQ4adTF9 JoBqX X-Gm-Gg: AY/fxX6PS1tOYLE7VrmRM9mPK6owmfzZUC9ixUmqVq/VwMrfbizISm3oauX0s74gYNV FTwYPg5M0FhfUFt0er98Ruer7HCc8fAbU0Jho8ejyz4azqU/p3+mkITi5k9GZmc2S47LSjC2Xom 4zy/1nV0K9d5Ylkn0mm1h0Iv5DXYnHLIA+YPzjQ1nNR8j8ulO1HBxB+wKx73mBBY33ihbniN+x0 KYRFgPMDoKJ7zrRxq4Cacyq9VCMw2k0MWgHtjHQWPmH/fP2GQdFORuNbm+Sytb4/btQDMQ5ZVly 69+GaDQJgmbq0ajMgE4bsWlCDAMJq9mAQnCAB0sJVDUX/4TqntaWwEXBt4RPrNPBwi/W99EdgGW +gg8PERqpeIGsDCqJAc0KFfGk4NUYvBB2X/9E8NSbG/52U7X71OLNvaG78XXdFvN1l3xztoXKCt XOaMyJTDamOi2yLU/1Z6YVW1OjfjgQWu/Mct7PXcfLr6edGsMIK7+LXoY7AsdJXw== X-Google-Smtp-Source: AGHT+IHx15LPlEcPx2ILuydl9rgMLwSDyB0zTQBjhnlj0f6IMxG0RthWvbrpoDSFJWWj/AEtUBimvQ== X-Received: by 2002:a05:6000:310f:b0:431:4b7:a309 with SMTP id ffacd0b85a97d-4324e4cc2d7mr42430294f8f.20.1767102872062; Tue, 30 Dec 2025 05:54:32 -0800 (PST) From: Andrew Cooper To: Xen-devel Cc: Andrew Cooper , Jan Beulich , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= Subject: [PATCH 1/4] x86/xstate: Deindent the logic in xrstor() Date: Tue, 30 Dec 2025 13:54:24 +0000 Message-Id: <20251230135427.188440-2-andrew.cooper3@citrix.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20251230135427.188440-1-andrew.cooper3@citrix.com> References: <20251230135427.188440-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: 1767102900820158500 ... to improve the legibility of the following fix. No functional change. Signed-off-by: Andrew Cooper Acked-by: Jan Beulich --- CC: Jan Beulich CC: Roger Pau Monn=C3=A9 Best reviewed with `git show --ignore-all-space` --- xen/arch/x86/xstate.c | 131 ++++++++++++++++++++++-------------------- 1 file changed, 68 insertions(+), 63 deletions(-) diff --git a/xen/arch/x86/xstate.c b/xen/arch/x86/xstate.c index e990abc9d18c..384f78bd5281 100644 --- a/xen/arch/x86/xstate.c +++ b/xen/arch/x86/xstate.c @@ -407,19 +407,19 @@ void xrstor(struct vcpu *v, uint64_t mask) */ for ( prev_faults =3D faults =3D 0; ; prev_faults =3D faults ) { - switch ( __builtin_expect(ptr->fpu_sse.x[FPU_WORD_SIZE_OFFSET], 8)= ) - { - BUILD_BUG_ON(sizeof(faults) !=3D 4); /* Clang doesn't support = %z in asm. */ -#define _xrstor(insn) \ - asm volatile ( "1: .byte " insn "\n" \ - "3:\n" \ - " .section .fixup,\"ax\"\n" \ - "2: incl %[faults]\n" \ - " jmp 3b\n" \ - " .previous\n" \ - _ASM_EXTABLE(1b, 2b) \ - : [mem] "+m" (*ptr), [faults] "+g" (faults) \ - : [lmask] "a" (lmask), [hmask] "d" (hmask), \ + switch ( __builtin_expect(ptr->fpu_sse.x[FPU_WORD_SIZE_OFFSET], 8) ) + { + BUILD_BUG_ON(sizeof(faults) !=3D 4); /* Clang doesn't support %z i= n asm. */ +#define _xrstor(insn) \ + asm volatile ( "1: .byte " insn "\n" \ + "3:\n" \ + " .section .fixup,\"ax\"\n" \ + "2: incl %[faults]\n" \ + " jmp 3b\n" \ + " .previous\n" \ + _ASM_EXTABLE(1b, 2b) \ + : [mem] "+m" (*ptr), [faults] "+g" (faults) \ + : [lmask] "a" (lmask), [hmask] "d" (hmask), \ [ptr] "D" (ptr) ) =20 #define XRSTOR(pfx) \ @@ -437,62 +437,67 @@ void xrstor(struct vcpu *v, uint64_t mask) else \ _xrstor(pfx "0x0f,0xae,0x2f") /* xrstor */ =20 - default: - XRSTOR("0x48,"); - break; - case 4: case 2: - XRSTOR(""); - break; + default: + XRSTOR("0x48,"); + break; + + case 4: case 2: + XRSTOR(""); + break; + #undef XRSTOR #undef _xrstor - } - if ( likely(faults =3D=3D prev_faults) ) - break; + } + + if ( likely(faults =3D=3D prev_faults) ) + break; + #ifndef NDEBUG - gprintk(XENLOG_WARNING, "fault#%u: mxcsr=3D%08x\n", - faults, ptr->fpu_sse.mxcsr); - gprintk(XENLOG_WARNING, "xs=3D%016lx xc=3D%016lx\n", - ptr->xsave_hdr.xstate_bv, ptr->xsave_hdr.xcomp_bv); - gprintk(XENLOG_WARNING, "r0=3D%016lx r1=3D%016lx\n", - ptr->xsave_hdr.reserved[0], ptr->xsave_hdr.reserved[1]); - gprintk(XENLOG_WARNING, "r2=3D%016lx r3=3D%016lx\n", - ptr->xsave_hdr.reserved[2], ptr->xsave_hdr.reserved[3]); - gprintk(XENLOG_WARNING, "r4=3D%016lx r5=3D%016lx\n", - ptr->xsave_hdr.reserved[4], ptr->xsave_hdr.reserved[5]); + gprintk(XENLOG_WARNING, "fault#%u: mxcsr=3D%08x\n", + faults, ptr->fpu_sse.mxcsr); + gprintk(XENLOG_WARNING, "xs=3D%016lx xc=3D%016lx\n", + ptr->xsave_hdr.xstate_bv, ptr->xsave_hdr.xcomp_bv); + gprintk(XENLOG_WARNING, "r0=3D%016lx r1=3D%016lx\n", + ptr->xsave_hdr.reserved[0], ptr->xsave_hdr.reserved[1]); + gprintk(XENLOG_WARNING, "r2=3D%016lx r3=3D%016lx\n", + ptr->xsave_hdr.reserved[2], ptr->xsave_hdr.reserved[3]); + gprintk(XENLOG_WARNING, "r4=3D%016lx r5=3D%016lx\n", + ptr->xsave_hdr.reserved[4], ptr->xsave_hdr.reserved[5]); #endif - switch ( faults ) + + switch ( faults ) + { + case 1: /* Stage 1: Reset state to be loaded. */ + ptr->xsave_hdr.xstate_bv &=3D ~mask; + /* + * Also try to eliminate fault reasons, even if this shouldn't be + * needed here (other code should ensure the sanity of the data). + */ + if ( ((mask & X86_XCR0_SSE) || + ((mask & X86_XCR0_YMM) && + !(ptr->xsave_hdr.xcomp_bv & XSTATE_COMPACTION_ENABLED))) ) + ptr->fpu_sse.mxcsr &=3D mxcsr_mask; + if ( v->arch.xcr0_accum & XSTATE_XSAVES_ONLY ) { - case 1: /* Stage 1: Reset state to be loaded. */ - ptr->xsave_hdr.xstate_bv &=3D ~mask; - /* - * Also try to eliminate fault reasons, even if this shouldn't= be - * needed here (other code should ensure the sanity of the dat= a). - */ - if ( ((mask & X86_XCR0_SSE) || - ((mask & X86_XCR0_YMM) && - !(ptr->xsave_hdr.xcomp_bv & XSTATE_COMPACTION_ENABLED))= ) ) - ptr->fpu_sse.mxcsr &=3D mxcsr_mask; - if ( v->arch.xcr0_accum & XSTATE_XSAVES_ONLY ) - { - ptr->xsave_hdr.xcomp_bv &=3D this_cpu(xcr0) | this_cpu(xss= ); - ptr->xsave_hdr.xstate_bv &=3D ptr->xsave_hdr.xcomp_bv; - ptr->xsave_hdr.xcomp_bv |=3D XSTATE_COMPACTION_ENABLED; - } - else - { - ptr->xsave_hdr.xstate_bv &=3D this_cpu(xcr0); - ptr->xsave_hdr.xcomp_bv =3D 0; - } - memset(ptr->xsave_hdr.reserved, 0, sizeof(ptr->xsave_hdr.reser= ved)); - continue; - - case 2: /* Stage 2: Reset all state. */ - ptr->fpu_sse.mxcsr =3D MXCSR_DEFAULT; - ptr->xsave_hdr.xstate_bv =3D 0; - ptr->xsave_hdr.xcomp_bv =3D v->arch.xcr0_accum & XSTATE_XSAVES= _ONLY - ? XSTATE_COMPACTION_ENABLED : 0; - continue; + ptr->xsave_hdr.xcomp_bv &=3D this_cpu(xcr0) | this_cpu(xss); + ptr->xsave_hdr.xstate_bv &=3D ptr->xsave_hdr.xcomp_bv; + ptr->xsave_hdr.xcomp_bv |=3D XSTATE_COMPACTION_ENABLED; } + else + { + ptr->xsave_hdr.xstate_bv &=3D this_cpu(xcr0); + ptr->xsave_hdr.xcomp_bv =3D 0; + } + memset(ptr->xsave_hdr.reserved, 0, sizeof(ptr->xsave_hdr.reserved)= ); + continue; + + case 2: /* Stage 2: Reset all state. */ + ptr->fpu_sse.mxcsr =3D MXCSR_DEFAULT; + ptr->xsave_hdr.xstate_bv =3D 0; + ptr->xsave_hdr.xcomp_bv =3D v->arch.xcr0_accum & XSTATE_XSAVES_ONLY + ? XSTATE_COMPACTION_ENABLED : 0; + continue; + } =20 domain_crash(current->domain); return; --=20 2.39.5 From nobody Thu Jan 8 12:28:00 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; 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=1767102898; cv=none; d=zohomail.com; s=zohoarc; b=VZww7XF/nueBwx2lqd8eNJTvMZoMhYZmTxg/fWc1H3sjdNmIePWohHCJAbYCheimXkqHqq7+OB408yrWTJHTXRfNvOkfC8AvVsiVsozqJ6bn5qP3tO9j4EzVeBgg9YGUOHvbmY6ftaXl/FqAG1+yxLx8sNJL+ysjVxd81mjB6xU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1767102898; 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=MN4BFE0zEOL3BVNw4e4DwpxZUXh2vOZGnzYNY10L858=; b=iy4PxVhtMNcrCn/XM+1G5Bx+sSdIiQ43PsV7Ktfn7ePiJhwf+rxbiFApXUX/XM8tFtfanGVKr9bgNSeLCBBsPhDB6DwnLQu9pdBZSIWjWW+DPkNKWNaSbtrxN57rh/Yiejl0r1A4DOPLDjDpY5GtvLX8/rJdlUeIh+lJhr+hUJY= 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 1767102898086287.0423829572586; Tue, 30 Dec 2025 05:54:58 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.1194218.1512684 (Exim 4.92) (envelope-from ) id 1vaaBJ-0007uT-C5; Tue, 30 Dec 2025 13:54:37 +0000 Received: by outflank-mailman (output) from mailman id 1194218.1512684; Tue, 30 Dec 2025 13:54: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 1vaaBJ-0007uL-6g; Tue, 30 Dec 2025 13:54:37 +0000 Received: by outflank-mailman (input) for mailman id 1194218; Tue, 30 Dec 2025 13:54: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 1vaaBH-0007RX-SB for xen-devel@lists.xenproject.org; Tue, 30 Dec 2025 13:54:35 +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 12575937-e587-11f0-b15c-2bf370ae4941; Tue, 30 Dec 2025 14:54:34 +0100 (CET) Received: by mail-wr1-x42d.google.com with SMTP id ffacd0b85a97d-42b3b0d76fcso5737414f8f.3 for ; Tue, 30 Dec 2025 05:54:34 -0800 (PST) Received: from localhost.localdomain (host-92-26-102-188.as13285.net. [92.26.102.188]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-4324ea226d1sm70198245f8f.13.2025.12.30.05.54.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 30 Dec 2025 05:54:32 -0800 (PST) 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: 12575937-e587-11f0-b15c-2bf370ae4941 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.com; s=google; t=1767102873; x=1767707673; 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=MN4BFE0zEOL3BVNw4e4DwpxZUXh2vOZGnzYNY10L858=; b=HT7N8+PxYkzY+OrxbC1s3vhI7tWNqDVDu30adLMucxDWQXurWNVsBer3hNoA+8LMLo KMCmbxKQNp8eTcYWmqkd6nEK7/uM+HPbc94JNGSzB+zUVj1fJXvZNNjdYTThfYoJnGRe oqBA+1LVCTMTygoazKbwmtTdMTxkLDFJiLEyY= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767102873; x=1767707673; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=MN4BFE0zEOL3BVNw4e4DwpxZUXh2vOZGnzYNY10L858=; b=b1ywm5xppRVvOvvMF0qMSsisnAC5O2bjt6W0LZ1hyxghznXzEVn8MsvD9ZYbRRtTNQ p/K9faL+M0UqkegrinMQ67wiiSIYuRFwAmJtbwoKDka06UWGpllZ9swqQnuvssPO7Y6d FmAraJn4Zanzfh0GBnoq4cc9tT+4vtX8FEAlNnQk3d0YTAg7yKicL5kyPhmNCN+4R6p6 zDBabIQXflGL/PxtuJ8devKifOEjVRD5o//PIOXoXQfrB7c3fffGJ5MkrXBsBEFzlKAj gQzkquASeKKgFnTV7s7v3CZ1LwCXt8yH3Nd6apwakVerUNFm/USyj18nWzQ5Au8HexQK lPwA== X-Gm-Message-State: AOJu0YwFFuYfNSlMTy0IIxiheEn6sdkvTXzRAiT3IA6awxLk/H3jwe7e s5ZvMztGIQfVTsR3QcflNOypWvHfeWvKWvDO9T0lnnLtFfWMPVjfY2z89qF+uTCm8kZ0IHMRTtN Pbjzy X-Gm-Gg: AY/fxX6+MhpHlShmDda9TVgbduLPRTefg+tCsdNTaxTCnizJT29DQ1LnPtyCge5WHD9 HupBfXWEGQyUJqwLJ9S5uxL5bw8gDiZ6vK16jUkNJDyFD8dNYkSmuYxSQ6BPIK8bLRZmYqot6iE E6OZZChSo60WQS4oh568uPlGCK4b1YVuYJzMy20LBg2e8D/aWoVTaKCfpUWhdzzS9Oe+JQa1OOs rEEv3nrxLLBVrvDEs2x5iB/Gbzn/3Vi2STOBKK1vhDutatWh1z/QGETgtGf9mrEe2E6NuZRmj9m rnLcWQ19Jkao+YEcsv0WxPojsflJPTL4IkD8MGJue2P/tEqDe6I6LWa9cjX4+t/vpqhe/G9ufz+ Az0ddu9oDG3QopW1LuDWbnnsLipvVttHwmcX/78j7sE0WV8+SWcquIsxdIxxk7xud3osNjrTm37 yYDCgV7Q1PRCgYrZYrbjee9ztuIB5ecQp5LOMc2bwz6JRBxtonr2aB71FR9bA52A== X-Google-Smtp-Source: AGHT+IHFH/BV9WhXNCgKpX0SIy7xp1x+BfEGUzDeblCEGZc8taSwD0E9sOYy6vTP8EC8/FdC48ljbg== X-Received: by 2002:a05:6000:178e:b0:430:b100:f594 with SMTP id ffacd0b85a97d-4324e50d9bcmr41314069f8f.50.1767102872660; Tue, 30 Dec 2025 05:54:32 -0800 (PST) From: Andrew Cooper To: Xen-devel Cc: Andrew Cooper , Jan Beulich , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= Subject: [PATCH 2/4] x86/xstate: Rework XSAVE/XRSTOR given a newer toolchain baseline Date: Tue, 30 Dec 2025 13:54:25 +0000 Message-Id: <20251230135427.188440-3-andrew.cooper3@citrix.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20251230135427.188440-1-andrew.cooper3@citrix.com> References: <20251230135427.188440-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: 1767102898575158500 The new toolchain baseline knows all the mnemonics, so a plain memory opera= nd can be used, rather than needing to hard-code the ModRM byte as (%rdi). For xrstor(), use asm goto rather than hiding the increment of the faults variable inside the .fixup section. Remove the loop and replace it with a goto retry pattern. Put the domain_crash() into the default case for fault handling, and provide a concrete error message rather than leaving it as an exercise for extra code diving. No functional change. Signed-off-by: Andrew Cooper --- CC: Jan Beulich CC: Roger Pau Monn=C3=A9 --- xen/arch/x86/xstate.c | 77 ++++++++++++++++++++----------------------- 1 file changed, 36 insertions(+), 41 deletions(-) diff --git a/xen/arch/x86/xstate.c b/xen/arch/x86/xstate.c index 384f78bd5281..4215a83efefb 100644 --- a/xen/arch/x86/xstate.c +++ b/xen/arch/x86/xstate.c @@ -310,21 +310,21 @@ void xsave(struct vcpu *v, uint64_t mask) uint32_t hmask =3D mask >> 32; uint32_t lmask =3D mask; unsigned int fip_width =3D v->domain->arch.x87_fip_width; -#define XSAVE(pfx) \ - if ( v->arch.xcr0_accum & XSTATE_XSAVES_ONLY ) \ - asm volatile ( ".byte " pfx "0x0f,0xc7,0x2f\n" /* xsaves */ \ - : "=3Dm" (*ptr) \ - : "a" (lmask), "d" (hmask), "D" (ptr) ); \ - else \ - alternative_io(".byte " pfx "0x0f,0xae,0x27\n", /* xsave */ \ - ".byte " pfx "0x0f,0xae,0x37\n", /* xsaveopt */= \ - X86_FEATURE_XSAVEOPT, \ - "=3Dm" (*ptr), \ - "a" (lmask), "d" (hmask), "D" (ptr)) + +#define XSAVE(pfx) \ + if ( v->arch.xcr0_accum & XSTATE_XSAVES_ONLY ) \ + asm volatile ( "xsaves %0" \ + : "=3Dm" (*ptr) \ + : "a" (lmask), "d" (hmask) ); \ + else \ + alternative_io("xsave %0", \ + "xsaveopt %0", X86_FEATURE_XSAVEOPT, \ + "=3Dm" (*ptr), \ + "a" (lmask), "d" (hmask)) =20 if ( fip_width =3D=3D 8 || !(mask & X86_XCR0_X87) ) { - XSAVE("0x48,"); + XSAVE("rex64 "); } else if ( fip_width =3D=3D 4 ) { @@ -349,7 +349,7 @@ void xsave(struct vcpu *v, uint64_t mask) =20 ptr->fpu_sse.fip.addr =3D bad_fip; =20 - XSAVE("0x48,"); + XSAVE("rex64 "); =20 /* FIP/FDP not updated? Restore the old FIP value. */ if ( ptr->fpu_sse.fip.addr =3D=3D bad_fip ) @@ -384,7 +384,7 @@ void xrstor(struct vcpu *v, uint64_t mask) uint32_t hmask =3D mask >> 32; uint32_t lmask =3D mask; struct xsave_struct *ptr =3D v->arch.xsave_area; - unsigned int faults, prev_faults; + unsigned int faults =3D 0; =20 /* * Some CPUs don't save/restore FDP/FIP/FOP unless an exception @@ -405,22 +405,15 @@ void xrstor(struct vcpu *v, uint64_t mask) * possibility, which may occur if the block was passed to us by contr= ol * tools or through VCPUOP_initialise, by silently adjusting state. */ - for ( prev_faults =3D faults =3D 0; ; prev_faults =3D faults ) - { + retry: switch ( __builtin_expect(ptr->fpu_sse.x[FPU_WORD_SIZE_OFFSET], 8) ) { - BUILD_BUG_ON(sizeof(faults) !=3D 4); /* Clang doesn't support %z i= n asm. */ -#define _xrstor(insn) \ - asm volatile ( "1: .byte " insn "\n" \ - "3:\n" \ - " .section .fixup,\"ax\"\n" \ - "2: incl %[faults]\n" \ - " jmp 3b\n" \ - " .previous\n" \ - _ASM_EXTABLE(1b, 2b) \ - : [mem] "+m" (*ptr), [faults] "+g" (faults) \ - : [lmask] "a" (lmask), [hmask] "d" (hmask), \ - [ptr] "D" (ptr) ) +#define _xrstor(insn) \ + asm_inline volatile goto ( \ + "1: " insn " %0\n" \ + _ASM_EXTABLE(1b, %l[fault]) \ + :: "m" (*ptr), "a" (lmask), "d" (hmask) \ + :: fault ) =20 #define XRSTOR(pfx) \ if ( v->arch.xcr0_accum & XSTATE_XSAVES_ONLY ) \ @@ -432,13 +425,13 @@ void xrstor(struct vcpu *v, uint64_t mask) ptr->xsave_hdr.xcomp_bv =3D ptr->xsave_hdr.xstate_bv | \ XSTATE_COMPACTION_ENABLED; \ } \ - _xrstor(pfx "0x0f,0xc7,0x1f"); /* xrstors */ \ + _xrstor(pfx "xrstors"); \ } \ else \ - _xrstor(pfx "0x0f,0xae,0x2f") /* xrstor */ + _xrstor(pfx "xrstor") =20 default: - XRSTOR("0x48,"); + XRSTOR("rex64 "); break; =20 case 4: case 2: @@ -449,8 +442,10 @@ void xrstor(struct vcpu *v, uint64_t mask) #undef _xrstor } =20 - if ( likely(faults =3D=3D prev_faults) ) - break; + return; + + fault: + faults++; =20 #ifndef NDEBUG gprintk(XENLOG_WARNING, "fault#%u: mxcsr=3D%08x\n", @@ -489,17 +484,17 @@ void xrstor(struct vcpu *v, uint64_t mask) ptr->xsave_hdr.xcomp_bv =3D 0; } memset(ptr->xsave_hdr.reserved, 0, sizeof(ptr->xsave_hdr.reserved)= ); - continue; + goto retry; =20 case 2: /* Stage 2: Reset all state. */ ptr->fpu_sse.mxcsr =3D MXCSR_DEFAULT; ptr->xsave_hdr.xstate_bv =3D 0; ptr->xsave_hdr.xcomp_bv =3D v->arch.xcr0_accum & XSTATE_XSAVES_ONLY ? XSTATE_COMPACTION_ENABLED : 0; - continue; - } + goto retry; =20 - domain_crash(current->domain); + default: /* Stage 3: Nothing else to do. */ + domain_crash(v->domain, "Uncorrectable XRSTOR fault\n"); return; } } @@ -1041,17 +1036,17 @@ uint64_t read_bndcfgu(void) =20 if ( cpu_has_xsavec ) { - asm ( ".byte 0x0f,0xc7,0x27\n" /* xsavec */ + asm ( "xsavec %0" : "=3Dm" (*xstate) - : "a" (X86_XCR0_BNDCSR), "d" (0), "D" (xstate) ); + : "a" (X86_XCR0_BNDCSR), "d" (0) ); =20 bndcsr =3D (void *)(xstate + 1); } else { - asm ( ".byte 0x0f,0xae,0x27\n" /* xsave */ + asm ( "xsave %0" : "=3Dm" (*xstate) - : "a" (X86_XCR0_BNDCSR), "d" (0), "D" (xstate) ); + : "a" (X86_XCR0_BNDCSR), "d" (0) ); =20 bndcsr =3D (void *)xstate + xstate_offsets[ilog2(X86_XCR0_BNDCSR)]; } --=20 2.39.5 From nobody Thu Jan 8 12:28:00 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; 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=1767102892; cv=none; d=zohomail.com; s=zohoarc; b=cOrlMLEstqt69xsOkYI0aX430AfsfA09fwIa9jCgwQLK9nGfkKfo1NLSvLR9+ELlDgGudSTf66sKa5Eoox5IYFziH4fQk/G+ux26Qe3A+dlPIT/vp5hgcM1tPeGUFER6dv1xDmxvcDMtBWRZycN5yLSM23SA1xAlhf8wKcU2oVI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1767102892; 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=Fj4LBIkgsuTZTvHR2D7plIKvcLJKz3RzRrwX7uG+/rA=; b=mXCHv5b493xlU2MhC1a9tUUUabAOFXDfBCjRlcJ7zBZ/Rtan7Kepxo9ytNZx9dg/XivAxo6WS87gP3CG2uMCp8i2A9z7wXlVgHCWcdj3PXH9AHLyKhjl8zpY2/Nd/uonsIgD/vpkus58f4zyO3LefOs/EmaACz80dv2lB6Oj9iY= 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 1767102892850675.3568415996585; Tue, 30 Dec 2025 05:54:52 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.1194217.1512673 (Exim 4.92) (envelope-from ) id 1vaaBH-0007fe-Tt; Tue, 30 Dec 2025 13:54:35 +0000 Received: by outflank-mailman (output) from mailman id 1194217.1512673; Tue, 30 Dec 2025 13:54: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 1vaaBH-0007fX-Qq; Tue, 30 Dec 2025 13:54:35 +0000 Received: by outflank-mailman (input) for mailman id 1194217; Tue, 30 Dec 2025 13:54:34 +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 1vaaBG-0007RX-SA for xen-devel@lists.xenproject.org; Tue, 30 Dec 2025 13:54:34 +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 123aa444-e587-11f0-b15c-2bf370ae4941; Tue, 30 Dec 2025 14:54:33 +0100 (CET) Received: by mail-wm1-x335.google.com with SMTP id 5b1f17b1804b1-477bf34f5f5so72873675e9.0 for ; Tue, 30 Dec 2025 05:54:33 -0800 (PST) Received: from localhost.localdomain (host-92-26-102-188.as13285.net. [92.26.102.188]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-4324ea226d1sm70198245f8f.13.2025.12.30.05.54.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 30 Dec 2025 05:54:32 -0800 (PST) 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: 123aa444-e587-11f0-b15c-2bf370ae4941 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.com; s=google; t=1767102873; x=1767707673; 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=Fj4LBIkgsuTZTvHR2D7plIKvcLJKz3RzRrwX7uG+/rA=; b=wdhpvJ74jYKhyfxlG6jFwM0AgE6PHC7C4rQqNvubFs6o7St/E2KKZirU1mw2wpas4g Z9SCeB5D8j7QXwDlFTfYLOCw9Z/eUR/AzTKhVk7vZTE83bkApTDY7BRPYOUlRubE6Mf7 RPQCjW1cigOQYEz2PmWYYKvQmajOHdwjjRluc= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767102873; x=1767707673; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=Fj4LBIkgsuTZTvHR2D7plIKvcLJKz3RzRrwX7uG+/rA=; b=P0iKm3JhSPVr2ceu5BoW79pI6TDLAAHbRL1aM0PNjj7Nd3eDCPfQOcQIRkKLXKV9Ry SVSP3dS75r7oyaWRJsmHvIQ4W0A5MDLdgKePAxod1+jNWiJEHRccu/tU7d/ip2uDdcqE Lm+LVtRm0LBK6WZTTSiUb0WYtuiY7fY4ZnQCcEU3NMfCch1Rff+lPlG9R6YPCbloBBLg syLdvQVY0eq+9hT+4UQnQzxEZxg7lsJF4VBZpfI0hoDlDnM2aOKu8lR2jiu+SAbX3Lx7 +mbiXK/r3IcdlGq0Uslq23Tc5K9b6DyID3qOS5/BJ0YxObNu9eiC7EBecCJNaZCe1OAL gCsQ== X-Gm-Message-State: AOJu0YwX8nPb44wKsApGr6mDj0sjmT4bNyij3bhiZ61YOsHgMhn0Mtzm troQ4eSujFVvR3d6XKfAfRKCfJcc8BpLBYHo7XLobr6t+5qvKLSTTw9m4dlQMKM3+KWQlFvnYOT DCK2b X-Gm-Gg: AY/fxX43cvM7t2nXX1q224VSqIqtH66DdAPu9bLYpbnv4TS5RoQ80UhyfdKvAf/nE6V OTLONkcylzL1qjecPMKJmF5d453Fi5jIaNby45bx+YvzKCvbcJeUR9MJmz8cAio9pzvIrauPKfd UBk8CkT+RHd1kqIZxFiBPtjhGEquU7azPDdv9nXNiR2O053luaaROf/YBrPBEvHoyd5SUXFi2OM UAkQr3m+F+WNdK13GcLA3qvc924/qvMlzy3brZl4drtfGXTzy7iY5gZ9a3sbKlqRQgMT6lNd/ou hC4qPVFDjODoCIsaXxWPxq4KYetN3+h6jDTURDk5CCtKY12rIyV1TAcxewusJlqixvVqAnFOZwY uC9CscHshg7EKbxVwBP+InklRBz7XCADWg94PeSEL8pohpG2eoYFNmHTuiC5sm8n1EMB+vZolKb o2p6ezhYuSPPbfIpF5DWfvJlaN+RvBNnIVPDVMKVDbwHTtb3Dghd1rCET0hYekvw== X-Google-Smtp-Source: AGHT+IEMX5GLBww93BLDQ//qBhV7DqxxfhjOyAzavyTo24n3r0wKnHq93KIb08ORzFBU2kARDwiTBw== X-Received: by 2002:a05:600c:1988:b0:477:76c2:49c9 with SMTP id 5b1f17b1804b1-47d216f9b5cmr265963385e9.2.1767102873102; Tue, 30 Dec 2025 05:54:33 -0800 (PST) From: Andrew Cooper To: Xen-devel Cc: Andrew Cooper , Jan Beulich , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= Subject: [PATCH 3/4] x86/i387: Rework fpu_fxrstor() given a newer toolchain baseline Date: Tue, 30 Dec 2025 13:54:26 +0000 Message-Id: <20251230135427.188440-4-andrew.cooper3@citrix.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20251230135427.188440-1-andrew.cooper3@citrix.com> References: <20251230135427.188440-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: 1767102894612158500 Use asm goto rather than hiding a memset() in the fixup section. With the compiler now able to see the write into fpu_ctxt (as opposed to the asm constraint erroneously stating it as input-only), it validly objects to the pointer being const. While FXRSTOR oughtn't to fault on an all-zeros input, avoid a risk of an infinite loop entirely by using a fixup scheme similar to xrstor(), and crashing the domain if we run out options. No functional change. Signed-off-by: Andrew Cooper Acked-by: Jan Beulich --- CC: Jan Beulich CC: Roger Pau Monn=C3=A9 --- xen/arch/x86/i387.c | 65 ++++++++++++++++++++------------------------- 1 file changed, 29 insertions(+), 36 deletions(-) diff --git a/xen/arch/x86/i387.c b/xen/arch/x86/i387.c index b84cd6f7a9e1..e0714ab2267d 100644 --- a/xen/arch/x86/i387.c +++ b/xen/arch/x86/i387.c @@ -38,7 +38,8 @@ static inline void fpu_xrstor(struct vcpu *v, uint64_t ma= sk) /* Restore x87 FPU, MMX, SSE and SSE2 state */ static inline void fpu_fxrstor(struct vcpu *v) { - const fpusse_t *fpu_ctxt =3D &v->arch.xsave_area->fpu_sse; + fpusse_t *fpu_ctxt =3D &v->arch.xsave_area->fpu_sse; + unsigned int faults =3D 0; =20 /* * Some CPUs don't save/restore FDP/FIP/FOP unless an exception @@ -59,49 +60,41 @@ static inline void fpu_fxrstor(struct vcpu *v) * possibility, which may occur if the block was passed to us by contr= ol * tools or through VCPUOP_initialise, by silently clearing the block. */ + retry: switch ( __builtin_expect(fpu_ctxt->x[FPU_WORD_SIZE_OFFSET], 8) ) { default: - asm_inline volatile ( + asm_inline volatile goto ( "1: fxrstorq %0\n" - ".section .fixup,\"ax\" \n" - "2: push %%"__OP"ax \n" - " push %%"__OP"cx \n" - " push %%"__OP"di \n" - " lea %0,%%"__OP"di \n" - " mov %1,%%ecx \n" - " xor %%eax,%%eax \n" - " rep ; stosl \n" - " pop %%"__OP"di \n" - " pop %%"__OP"cx \n" - " pop %%"__OP"ax \n" - " jmp 1b \n" - ".previous \n" - _ASM_EXTABLE(1b, 2b) - : - : "m" (*fpu_ctxt), "i" (sizeof(*fpu_ctxt) / 4) ); + _ASM_EXTABLE(1b, %l[fault]) + :: "m" (*fpu_ctxt) + :: fault ); break; + case 4: case 2: - asm_inline volatile ( - "1: fxrstor %0 \n" - ".section .fixup,\"ax\"\n" - "2: push %%"__OP"ax \n" - " push %%"__OP"cx \n" - " push %%"__OP"di \n" - " lea %0,%%"__OP"di \n" - " mov %1,%%ecx \n" - " xor %%eax,%%eax \n" - " rep ; stosl \n" - " pop %%"__OP"di \n" - " pop %%"__OP"cx \n" - " pop %%"__OP"ax \n" - " jmp 1b \n" - ".previous \n" - _ASM_EXTABLE(1b, 2b) - : - : "m" (*fpu_ctxt), "i" (sizeof(*fpu_ctxt) / 4) ); + asm_inline volatile goto ( + "1: fxrstor %0\n" + _ASM_EXTABLE(1b, %l[fault]) + :: "m" (*fpu_ctxt) + :: fault ); break; } + + return; + + fault: + faults++; + + switch ( faults ) + { + case 1: /* Stage 1: Reset all state. */ + memset(fpu_ctxt, 0, sizeof(*fpu_ctxt)); + goto retry; + + default: /* Stage 2: Nothing else to do. */ + domain_crash(v->domain, "Uncorrectable FXRSTOR fault\n"); + return; + } } =20 /*******************************/ --=20 2.39.5 From nobody Thu Jan 8 12:28:00 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; 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=1767102903; cv=none; d=zohomail.com; s=zohoarc; b=ECZDRh6pcGNHpEjEflhIQWvdegjK5t2KgO5eQycaUN1CD5PzxZ8MSZXT7IYY6B58ZhNcuvk7iRHPPVq4X6I1tlkyvpoKnWqpwIzAgaazAEZtMagMivoeBh2iWhMB4/aKi4MlcJG0penP6RBSCr9pW0Y/02FnibiUcvwi1dH8bTI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1767102903; 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=ocUUAwnTL1KF0z21fxsbu2k7KeGdeeLnlr7V9yXtvoE=; b=CZj/Wx1NjNjyRSA4GfHFlYkqx4e3tsk4hWuOFXi7Qk0TMKjGeP2mYcqvXOgfdrucuJwA/kG/TxWlaAHFLXHnD28XmxjWQM3FoiePLtjT6p9ETpn+X5kKybKdflbrdGP3olzUqsv5Bk6acWmjjFXJ2rhiuF0uFygOHXMsdj+60TY= 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 1767102903493709.5765872376701; Tue, 30 Dec 2025 05:55:03 -0800 (PST) Received: from list by lists.xenproject.org with outflank-mailman.1194220.1512703 (Exim 4.92) (envelope-from ) id 1vaaBL-0008PY-Pr; Tue, 30 Dec 2025 13:54:39 +0000 Received: by outflank-mailman (output) from mailman id 1194220.1512703; Tue, 30 Dec 2025 13:54: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 1vaaBL-0008PH-MQ; Tue, 30 Dec 2025 13:54:39 +0000 Received: by outflank-mailman (input) for mailman id 1194220; Tue, 30 Dec 2025 13:54:37 +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 1vaaBJ-0007fS-Ij for xen-devel@lists.xenproject.org; Tue, 30 Dec 2025 13:54:37 +0000 Received: from mail-wr1-x42a.google.com (mail-wr1-x42a.google.com [2a00:1450:4864:20::42a]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id 13560d4d-e587-11f0-9ccf-f158ae23cfc8; Tue, 30 Dec 2025 14:54:35 +0100 (CET) Received: by mail-wr1-x42a.google.com with SMTP id ffacd0b85a97d-43284ed32a0so1534261f8f.3 for ; Tue, 30 Dec 2025 05:54:35 -0800 (PST) Received: from localhost.localdomain (host-92-26-102-188.as13285.net. [92.26.102.188]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-4324ea226d1sm70198245f8f.13.2025.12.30.05.54.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 30 Dec 2025 05:54:33 -0800 (PST) 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: 13560d4d-e587-11f0-9ccf-f158ae23cfc8 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=citrix.com; s=google; t=1767102875; x=1767707675; 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=ocUUAwnTL1KF0z21fxsbu2k7KeGdeeLnlr7V9yXtvoE=; b=NWvatK5fVo7Qj/w7aE1+5bOxBs5M6r8Q+l95R9qJSaCjIEBbOiyg3acj5ZKm+PgdVi KJoIOnFS2AN/uFmbwy/6ylLXLtqsyoCFCz0HyH/KMbnL5w2dQ8OSQ7wG+ELtN5rSu9ch 2xe2B7D/sr1z/lh5+eaRgot3w33DyD+hBiJEk= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767102875; x=1767707675; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=ocUUAwnTL1KF0z21fxsbu2k7KeGdeeLnlr7V9yXtvoE=; b=L/vmqI/lleD5NztSuGSvaVK2nw0Ds8+GKEV7MeCDKXMCH5iifbi22N5YFEpiOn16Xv /a9baur4pvkHuXyDcIKaV2nj4mpmSqQUcukOoscVCjWfMPIEIPQoaX/l78szPcTxZF1y QJwAWEj+ZyyPH13UY4B9fM5HwfcaN71CkYQsRtnNacZ+kFqd7o/JVtpmuswHk+SgDUK8 PCNyflafZ3GRrhdjzO8Zl3SK2TrsrJ3uBTg47KWs8JEAiuCZKDGKr6AA5jv6nqFBg4T/ s/CUG4Ezl96z79if/N1WuQY1ZPBojPNtp2iwfsq+B9xoHjGDvJh6RauaihdssxUNmf8a byAw== X-Gm-Message-State: AOJu0YwHI/B8vUwY5LigRpqlmCaCUoPRx52w0aVlYpwaYnZfSbp2oP0e pgyqUVplOVAfBcMpO16F7nQ5x6OEocya3g6X0z3I/LM+TkMv+BuMcHPQi1IYg36fmMxuLpZtS/R L+cRp X-Gm-Gg: AY/fxX5RSvI7fCEVEzZnYtpwvTvJZwWpP7NfaL46uafhw6ISxYYD7AvP3kG8MA+u14v s7jyFr6jkKpPWVfIIiodENLLA/m8SdJrFSC7VZG0I1RweitTaps9Ms7/FVuFvMpMdBJ8Wz5UDlD f8yTqKWK9uQKGACiJuoE9WzteJTjE+7pbSzAttn5UGvbcJLvGHLx+iKutdTD0hPvDgq+K7iqdnS ubYV+qXXBG+s6ELmIk/HL0p2zhRmnyVLwQ7dE5rxQ2RVwlvwy+QTLEP6piAWgP5WHyielBj6vMR QZKLfluaWd3D8WFb6r4+6fQXkL+mQmBamuWy/Jt7dX3wTfLAgXOGVI6nLk50LdCHgNGxu9Z6zgO L8kCInjJSxneWmEzjhWWqes96AmrsAjJ7fKNIQ0Q+olSL/bC+DPZOEJIl+MRX3+xgd1Td81CZDm QOPD59ju5/q3+O4LLA7yUKhPt0A8JKyIg5HW41LodV5MyiUVeP5cF3Ghmgkuzovw== X-Google-Smtp-Source: AGHT+IHPK1Lv1iG0BMQX95Z3SF3lU6JdbuzNbiixY6Ys1VFmvVMgqeumy+0QX+FwMP06bBxQ8HAc5w== X-Received: by 2002:a05:6000:186e:b0:432:86e1:bd34 with SMTP id ffacd0b85a97d-43286e1bddemr16955684f8f.39.1767102874079; Tue, 30 Dec 2025 05:54:34 -0800 (PST) From: Andrew Cooper To: Xen-devel Cc: Andrew Cooper , Jan Beulich , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= Subject: [PATCH 4/4] x86: Avoid using .byte for instructions where safe to do so Date: Tue, 30 Dec 2025 13:54:27 +0000 Message-Id: <20251230135427.188440-5-andrew.cooper3@citrix.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20251230135427.188440-1-andrew.cooper3@citrix.com> References: <20251230135427.188440-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: 1767102904625158500 The new toolchain baseline knows all of these instructions. For the remaining uses of .byte for instructions, annotate the toolchain minima. No functional change. Signed-off-by: Andrew Cooper --- CC: Jan Beulich CC: Roger Pau Monn=C3=A9 --- xen/arch/x86/arch.mk | 4 +++ xen/arch/x86/include/asm/asm-defns.h | 4 --- xen/arch/x86/include/asm/msr.h | 2 ++ xen/arch/x86/include/asm/prot-key.h | 6 ++--- xen/arch/x86/include/asm/xstate.h | 3 +-- xen/arch/x86/x86_emulate/0f01.c | 2 +- xen/arch/x86/x86_emulate/x86_emulate.c | 34 ++++++++++++-------------- 7 files changed, 26 insertions(+), 29 deletions(-) diff --git a/xen/arch/x86/arch.mk b/xen/arch/x86/arch.mk index 0203138a819a..3d8d9bfe4916 100644 --- a/xen/arch/x86/arch.mk +++ b/xen/arch/x86/arch.mk @@ -16,7 +16,11 @@ CFLAGS-$(CONFIG_CC_IS_GCC) +=3D -malign-data=3Dabi $(call cc-options-add,CFLAGS,CC,$(EMBEDDED_EXTRA_CFLAGS)) $(call cc-option-add,CFLAGS,CC,-Wnested-externs) $(call as-option-add,CFLAGS,CC,".equ \"x\"$(comma)1",-DHAVE_AS_QUOTED_SYM) + +# Binutils >=3D 2.31, Clang >=3D 7 $(call as-option-add,CFLAGS,CC,"movdiri %rax$(comma)(%rax)",-DHAVE_AS_MOVD= IR) + +# Binutils >=3D 2.33, Clang >=3D 9 $(call as-option-add,CFLAGS,CC,"enqcmd (%rax)$(comma)%rax",-DHAVE_AS_ENQCM= D) =20 # Check to see whether the assembler supports the .nop directive. diff --git a/xen/arch/x86/include/asm/asm-defns.h b/xen/arch/x86/include/as= m/asm-defns.h index 239dc3af096c..f6fe4596a852 100644 --- a/xen/arch/x86/include/asm/asm-defns.h +++ b/xen/arch/x86/include/asm/asm-defns.h @@ -1,9 +1,5 @@ #include =20 -.macro clzero - .byte 0x0f, 0x01, 0xfc -.endm - /* binutils >=3D 2.41 or LLVM >=3D 19 */ .macro eretu .byte 0xf3, 0x0f, 0x01, 0xca diff --git a/xen/arch/x86/include/asm/msr.h b/xen/arch/x86/include/asm/msr.h index 941a7612f4ba..1377d156f4e1 100644 --- a/xen/arch/x86/include/asm/msr.h +++ b/xen/arch/x86/include/asm/msr.h @@ -63,6 +63,8 @@ static inline void wrmsrns(uint32_t msr, uint64_t val) /* * WRMSR is 2 bytes. WRMSRNS is 3 bytes. Pad WRMSR with a redundant = CS * prefix to avoid a trailing NOP. + * + * Binutils >=3D 2.40, Clang >=3D 16 */ alternative_input(".byte 0x2e; wrmsr", ".byte 0x0f,0x01,0xc6", X86_FEATURE_WRMSRNS, diff --git a/xen/arch/x86/include/asm/prot-key.h b/xen/arch/x86/include/asm= /prot-key.h index 8fb15b5c32e9..1752756fd9c1 100644 --- a/xen/arch/x86/include/asm/prot-key.h +++ b/xen/arch/x86/include/asm/prot-key.h @@ -19,16 +19,14 @@ static inline uint32_t rdpkru(void) { uint32_t pkru; =20 - asm volatile ( ".byte 0x0f,0x01,0xee" - : "=3Da" (pkru) : "c" (0) : "dx" ); + asm volatile ( "rdpkru" : "=3Da" (pkru) : "c" (0) : "dx" ); =20 return pkru; } =20 static inline void wrpkru(uint32_t pkru) { - asm volatile ( ".byte 0x0f,0x01,0xef" - :: "a" (pkru), "d" (0), "c" (0) ); + asm volatile ( "wrpkru" :: "a" (pkru), "d" (0), "c" (0) ); } =20 /* diff --git a/xen/arch/x86/include/asm/xstate.h b/xen/arch/x86/include/asm/x= state.h index e3b9745543d7..9cfee1fa9c5a 100644 --- a/xen/arch/x86/include/asm/xstate.h +++ b/xen/arch/x86/include/asm/xstate.h @@ -120,8 +120,7 @@ static inline uint64_t xgetbv(unsigned int index) uint32_t lo, hi; =20 ASSERT(index); /* get_xcr0() should be used instead. */ - asm volatile ( ".byte 0x0f,0x01,0xd0" /* xgetbv */ - : "=3Da" (lo), "=3Dd" (hi) : "c" (index) ); + asm volatile ( "xgetbv" : "=3Da" (lo), "=3Dd" (hi) : "c" (index) ); =20 return lo | ((uint64_t)hi << 32); } diff --git a/xen/arch/x86/x86_emulate/0f01.c b/xen/arch/x86/x86_emulate/0f0= 1.c index 1ba99609d6fd..4791465fc83f 100644 --- a/xen/arch/x86/x86_emulate/0f01.c +++ b/xen/arch/x86/x86_emulate/0f01.c @@ -122,7 +122,7 @@ int x86emul_0f01(struct x86_emulate_state *s, { case vex_none: /* serialize */ host_and_vcpu_must_have(serialize); - asm volatile ( ".byte 0x0f, 0x01, 0xe8" ); + asm volatile ( ".byte 0x0f, 0x01, 0xe8" ); /* Binutils >=3D 2.= 34, Clang >=3D 11 */ break; case vex_f2: /* xsusldtrk */ vcpu_must_have(tsxldtrk); diff --git a/xen/arch/x86/x86_emulate/x86_emulate.c b/xen/arch/x86/x86_emul= ate/x86_emulate.c index d830aea430d4..a3b7142fde7e 100644 --- a/xen/arch/x86/x86_emulate/x86_emulate.c +++ b/xen/arch/x86/x86_emulate/x86_emulate.c @@ -4748,27 +4748,25 @@ x86_emulate( */ if ( vex.l ) { - /* vpxor %xmmN, %xmmN, %xmmN */ - asm volatile ( ".byte 0xc5,0xf9,0xef,0xc0" ); - asm volatile ( ".byte 0xc5,0xf1,0xef,0xc9" ); - asm volatile ( ".byte 0xc5,0xe9,0xef,0xd2" ); - asm volatile ( ".byte 0xc5,0xe1,0xef,0xdb" ); - asm volatile ( ".byte 0xc5,0xd9,0xef,0xe4" ); - asm volatile ( ".byte 0xc5,0xd1,0xef,0xed" ); - asm volatile ( ".byte 0xc5,0xc9,0xef,0xf6" ); - asm volatile ( ".byte 0xc5,0xc1,0xef,0xff" ); + asm volatile ( "vpxor %xmm0, %xmm0, %xmm0" ); + asm volatile ( "vpxor %xmm1, %xmm1, %xmm1" ); + asm volatile ( "vpxor %xmm2, %xmm2, %xmm2" ); + asm volatile ( "vpxor %xmm3, %xmm3, %xmm3" ); + asm volatile ( "vpxor %xmm4, %xmm4, %xmm4" ); + asm volatile ( "vpxor %xmm5, %xmm5, %xmm5" ); + asm volatile ( "vpxor %xmm6, %xmm6, %xmm6" ); + asm volatile ( "vpxor %xmm7, %xmm7, %xmm7" ); } else { - /* vpor %xmmN, %xmmN, %xmmN */ - asm volatile ( ".byte 0xc5,0xf9,0xeb,0xc0" ); - asm volatile ( ".byte 0xc5,0xf1,0xeb,0xc9" ); - asm volatile ( ".byte 0xc5,0xe9,0xeb,0xd2" ); - asm volatile ( ".byte 0xc5,0xe1,0xeb,0xdb" ); - asm volatile ( ".byte 0xc5,0xd9,0xeb,0xe4" ); - asm volatile ( ".byte 0xc5,0xd1,0xeb,0xed" ); - asm volatile ( ".byte 0xc5,0xc9,0xeb,0xf6" ); - asm volatile ( ".byte 0xc5,0xc1,0xeb,0xff" ); + asm volatile ( "vpor %xmm0, %xmm0, %xmm0" ); + asm volatile ( "vpor %xmm1, %xmm1, %xmm1" ); + asm volatile ( "vpor %xmm2, %xmm2, %xmm2" ); + asm volatile ( "vpor %xmm3, %xmm3, %xmm3" ); + asm volatile ( "vpor %xmm4, %xmm4, %xmm4" ); + asm volatile ( "vpor %xmm5, %xmm5, %xmm5" ); + asm volatile ( "vpor %xmm6, %xmm6, %xmm6" ); + asm volatile ( "vpor %xmm7, %xmm7, %xmm7" ); } =20 ASSERT(!state->simd_size); --=20 2.39.5