Add an assembly label to the VMRUN instruction so that its RIP can be known to test cases. This will be used by the test in the next patch. Suggested-by: Paolo Bonzini <pbonzini@xxxxxxxxxx> Signed-off-by: Krish Sadhukhan <krish.sadhukhan@xxxxxxxxxx> --- x86/svm.c | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/x86/svm.c b/x86/svm.c index a1808c7..77fba8b 100644 --- a/x86/svm.c +++ b/x86/svm.c @@ -208,14 +208,15 @@ struct regs get_regs(void) struct svm_test *v2_test; -#define ASM_VMRUN_CMD \ +#define ASM_PRE_VMRUN_CMD \ "vmload %%rax\n\t" \ "mov regs+0x80, %%r15\n\t" \ "mov %%r15, 0x170(%%rax)\n\t" \ "mov regs, %%r15\n\t" \ "mov %%r15, 0x1f8(%%rax)\n\t" \ LOAD_GPR_C \ - "vmrun %%rax\n\t" \ + +#define ASM_POST_VMRUN_CMD \ SAVE_GPR_C \ "mov 0x170(%%rax), %%r15\n\t" \ "mov %%r15, regs+0x80\n\t" \ @@ -232,7 +233,9 @@ int svm_vmrun(void) regs.rdi = (ulong)v2_test; asm volatile ( - ASM_VMRUN_CMD + ASM_PRE_VMRUN_CMD + "vmrun %%rax\n\t" \ + ASM_POST_VMRUN_CMD : : "a" (virt_to_phys(vmcb)) : "memory", "r15"); @@ -240,6 +243,8 @@ int svm_vmrun(void) return (vmcb->control.exit_code); } +extern void *vmrun_rip; + static void test_run(struct svm_test *test) { u64 vmcb_phys = virt_to_phys(vmcb); @@ -258,7 +263,10 @@ static void test_run(struct svm_test *test) "sti \n\t" "call *%c[PREPARE_GIF_CLEAR](%[test]) \n \t" "mov %[vmcb_phys], %%rax \n\t" - ASM_VMRUN_CMD + ASM_PRE_VMRUN_CMD + ".global vmrun_rip\n\t" \ + "vmrun_rip: vmrun %%rax\n\t" \ + ASM_POST_VMRUN_CMD "cli \n\t" "stgi" : // inputs clobbered by the guest: -- 2.27.0