While the change is fine on staging, where the toolchain baseline was
moved, we need to remain compatible with older gas on stable branches
for now.
Fixes: fa254938f00a ("x86/idle: Move monitor()/mwait() wrappers into cpu-idle.c")
Signed-off-by: Jan Beulich <jbeulich@suse.com>
--- a/xen/arch/x86/acpi/cpu_idle.c
+++ b/xen/arch/x86/acpi/cpu_idle.c
@@ -70,20 +70,20 @@ static always_inline void monitor(
* The memory clobber is a compiler barrier. Subseqeunt reads from the
* monitored cacheline must not be reordered over MONITOR.
*/
- asm volatile ( "monitor"
+ asm volatile ( ".byte 0x0f, 0x01, 0xc8" /* monitor */
:: "a" (addr), "c" (ecx), "d" (edx) : "memory" );
}
static always_inline void mwait(unsigned int eax, unsigned int ecx)
{
- asm volatile ( "mwait"
+ asm volatile ( ".byte 0x0f, 0x01, 0xc9" /* mwait */
:: "a" (eax), "c" (ecx) );
}
static always_inline void sti_mwait_cli(unsigned int eax, unsigned int ecx)
{
/* STI shadow covers MWAIT. */
- asm volatile ( "sti; mwait; cli"
+ asm volatile ( "sti; .byte 0x0f, 0x01, 0xc9;" /* mwait */ " cli"
:: "a" (eax), "c" (ecx) );
}
Ack. Sorry for forgetting this
On Wed, 9 Jul 2025, 10:44 Jan Beulich, <jbeulich@suse.com> wrote:
> While the change is fine on staging, where the toolchain baseline was
> moved, we need to remain compatible with older gas on stable branches
> for now.
>
> Fixes: fa254938f00a ("x86/idle: Move monitor()/mwait() wrappers into
> cpu-idle.c")
> Signed-off-by: Jan Beulich <jbeulich@suse.com>
>
> --- a/xen/arch/x86/acpi/cpu_idle.c
> +++ b/xen/arch/x86/acpi/cpu_idle.c
> @@ -70,20 +70,20 @@ static always_inline void monitor(
> * The memory clobber is a compiler barrier. Subseqeunt reads from
> the
> * monitored cacheline must not be reordered over MONITOR.
> */
> - asm volatile ( "monitor"
> + asm volatile ( ".byte 0x0f, 0x01, 0xc8" /* monitor */
> :: "a" (addr), "c" (ecx), "d" (edx) : "memory" );
> }
>
> static always_inline void mwait(unsigned int eax, unsigned int ecx)
> {
> - asm volatile ( "mwait"
> + asm volatile ( ".byte 0x0f, 0x01, 0xc9" /* mwait */
> :: "a" (eax), "c" (ecx) );
> }
>
> static always_inline void sti_mwait_cli(unsigned int eax, unsigned int
> ecx)
> {
> /* STI shadow covers MWAIT. */
> - asm volatile ( "sti; mwait; cli"
> + asm volatile ( "sti; .byte 0x0f, 0x01, 0xc9;" /* mwait */ " cli"
> :: "a" (eax), "c" (ecx) );
> }
>
>
© 2016 - 2025 Red Hat, Inc.