From: Avi Kivity A "g" constraint may place a local variable in an %rsp-relative memory operand. but if your assembly changes %rsp, the operand points to the wrong location. An "r" constraint fixes that. Thanks to Ingo Molnar for neatly bisecting the problem. Signed-off-by: Avi Kivity Cc: Ingo Molnar Signed-off-by: Andrew Morton --- drivers/kvm/vmx.c | 2 +- 1 files changed, 1 insertion(+), 1 deletion(-) diff -puN drivers/kvm/vmx.c~kvm-fix-asm-constraints-with-config_frame_pointer=n drivers/kvm/vmx.c --- a/drivers/kvm/vmx.c~kvm-fix-asm-constraints-with-config_frame_pointer=n +++ a/drivers/kvm/vmx.c @@ -1825,7 +1825,7 @@ again: #endif "setbe %0 \n\t" "popf \n\t" - : "=g" (fail) + : "=r" (fail) : "r"(vcpu->launched), "d"((unsigned long)HOST_RSP), "c"(vcpu), [rax]"i"(offsetof(struct kvm_vcpu, regs[VCPU_REGS_RAX])), _