PUSH instructions can't handle 64-bit immediate operands, so "i" operand constraint is not correct. Use "er" operand constraint to limit the range of the immediate operand to a signed 32-bit value and also to leave the compiler the freedom to pass the value via the register. Please note that memory operands are not allowed here. These operands include stack slots, and these are not valid in this asm block due to the clobbered %rsp register. v2: Add casts. Cc: Paolo Bonzini <pbonzini@xxxxxxxxxx> Cc: Sean Christopherson <sean.j.christopherson@xxxxxxxxx> Signed-off-by: Uros Bizjak <ubizjak@xxxxxxxxx> --- arch/x86/kvm/vmx/vmx.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/arch/x86/kvm/vmx/vmx.c b/arch/x86/kvm/vmx/vmx.c index 94f49c5ae89a..52cb150a9633 100644 --- a/arch/x86/kvm/vmx/vmx.c +++ b/arch/x86/kvm/vmx/vmx.c @@ -6390,9 +6390,9 @@ static void handle_external_interrupt_irqoff(struct kvm_vcpu *vcpu) : [thunk_target]"r"(entry), #ifdef CONFIG_X86_64 - [ss]"i"(__KERNEL_DS), + [ss]"er"((unsigned long)__KERNEL_DS), #endif - [cs]"i"(__KERNEL_CS) + [cs]"er"((unsigned long)__KERNEL_CS) ); kvm_after_interrupt(vcpu); -- 2.25.4