On 02.04.2025 11:56, Andrew Cooper wrote: > --- a/xen/arch/x86/hvm/vmx/vmcs.c > +++ b/xen/arch/x86/hvm/vmx/vmcs.c > @@ -749,30 +749,15 @@ static int _vmx_cpu_up(bool bsp) > if ( bsp && (rc = vmx_cpu_up_prepare(cpu)) != 0 ) > return rc; > > - switch ( __vmxon(this_cpu(vmxon_region)) ) > - { > - case -2: /* #UD or #GP */ > - if ( bios_locked && > - test_bit(X86_FEATURE_SMX, &boot_cpu_data.x86_capability) && > - (!(eax & IA32_FEATURE_CONTROL_ENABLE_VMXON_OUTSIDE_SMX) || > - !(eax & IA32_FEATURE_CONTROL_ENABLE_VMXON_INSIDE_SMX)) ) > - { > - printk("CPU%d: VMXON failed: perhaps because of TXT settings " > - "in your BIOS configuration?\n", cpu); > - printk(" --> Disable TXT in your BIOS unless using a secure " > - "bootloader.\n"); > - return -EINVAL; > - } > - /* fall through */ > - case -1: /* CF==1 or ZF==1 */ > - printk("CPU%d: unexpected VMXON failure\n", cpu); > - return -EINVAL; > - case 0: /* success */ > - this_cpu(vmxon) = 1; > - break; > - default: > - BUG(); > - } > + asm goto ( "1: vmxon %[addr]\n\t" > + "jbe %l[vmxon_fail]\n\t" > + _ASM_EXTABLE(1b, %l[vmxon_fault]) > + : > + : [addr] "m" (this_cpu(vmxon_region)) > + : > + : vmxon_fail, vmxon_fault );
I must have overlooked this in the RFC - you're losing ... > --- a/xen/arch/x86/include/asm/hvm/vmx/vmx.h > +++ b/xen/arch/x86/include/asm/hvm/vmx/vmx.h > @@ -559,25 +559,6 @@ static inline void __vmxoff(void) > : : : "memory" ); > } > > -static inline int __vmxon(u64 addr) > -{ > - int rc; > - > - asm volatile ( > - "1: " VMXON_OPCODE MODRM_EAX_06 "\n" > - " setna %b0 ; neg %0\n" /* CF==1 or ZF==1 --> rc = -1 */ > - "2:\n" > - ".section .fixup,\"ax\"\n" > - "3: sub $2,%0 ; jmp 2b\n" /* #UD or #GP --> rc = -2 */ > - ".previous\n" > - _ASM_EXTABLE(1b, 3b) > - : "=q" (rc) > - : "0" (0), "a" (&addr) > - : "memory"); ... the memory barrier here. I will admit I'm not sure I see why it's there, but if the removal was deliberate, then a sentence wants saying about this in the description. With that or with it re-added: Reviewed-by: Jan Beulich <jbeul...@suse.com> Now that you move the printk()s, I also wouldn't mind if you pruned them some: Un-wrap the format strings and perhaps purge the full stop. Jan