[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH 2/4] x86/xstate: Rework XSAVE/XRSTOR given a newer toolchain baseline


  • To: Xen-devel <xen-devel@xxxxxxxxxxxxxxxxxxxx>
  • From: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
  • Date: Fri, 2 Jan 2026 16:01:22 +0000
  • Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com; dkim=pass header.d=citrix.com; arc=none
  • Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=xi7j5Av3isY9OR8MmPvCD7mWUjoTgiijQ5dtf6qQSCE=; b=iejWT7+2oRs37O7cA7Ghj4wb9Egw+y5VM9FDtNieXxS+g8i3JDSyMpwdnz+Hvv5igEhkxkleMVVif9+FFmQV7cU60NOQ//DJsxE8rHhY5/jimue/pFUBA7XrLxSfZ8aWB2tuOypPOl5nbJHPxsBa95Xui9AH2infxETPAOE+dHAVVY48nwwJds3hiMsdANKKY7hFRarMWUSiKmXBfJdSRQSzTJevd54IrcMToABHLcfm/785+RqBPWMg22Q5iOoAMj+ESbrYDsKjeRS9J9wFnx/p2eh1c8VhY3Cve6Cj4xAXgze0IzepyVj4Nymq4t5jtBzV4EYWkIQMe958aYl09g==
  • Arc-seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=pYsL3SCApt9VcA+kE+J6TeCTKTJwEaWPPDF+5nHx6N1AZhbhgKSuTp/LVkc2c9FpEtzQS7qb7DDCVnadxicZm33iw5S9TgmoO+iNX73e+ggQFifO5051c8K4+o6E9tjD/vMvzB/LPHny43frC2rpjpVuSDCvWNVQYz+Zoc5ICOzLr5xJOr4XKK2l8GlrLXkZT/ah//16Ds5UnUa4sNj1n+v9ryYXGlA18eE4fo/g9CbbtLIGghS5/XDeJL9REZ0Teg9lMOkNzL0eAhiBqMqlYB0bmURdeN5PMr/vZTf/Y2U3PeuJMtigotTBN6YzreWu5S8FZR38/2w12ZnytZISKA==
  • Authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=citrix.com;
  • Cc: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>, Jan Beulich <JBeulich@xxxxxxxx>, Roger Pau Monné <roger.pau@xxxxxxxxxx>
  • Delivery-date: Fri, 02 Jan 2026 16:02:12 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xenproject.org>

On 30/12/2025 1:54 pm, Andrew Cooper wrote:
> 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 = mask >> 32;
>      uint32_t lmask = mask;
>      unsigned int fip_width = 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 */ \
> -                           : "=m" (*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, \
> -                           "=m" (*ptr), \
> -                           "a" (lmask), "d" (hmask), "D" (ptr))
> +
> +#define XSAVE(pfx)                                                      \
> +    if ( v->arch.xcr0_accum & XSTATE_XSAVES_ONLY )                      \
> +        asm volatile ( "xsaves %0"                                      \
> +                       : "=m" (*ptr)                                    \
> +                       : "a" (lmask), "d" (hmask) );                    \
> +    else                                                                \
> +        alternative_io("xsave %0",                                      \
> +                       "xsaveopt %0", X86_FEATURE_XSAVEOPT,             \
> +                       "=m" (*ptr),                                     \
> +                       "a" (lmask), "d" (hmask))

This loses the pfx.  I've fixed up locally and double checked the
disassembly.

~Andrew



 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.