retpoline: replace indirect jmp in switch_to function

Signed-off-by: Jason Chen CJ <jason.cj.chen@intel.com>
This commit is contained in:
Jason Chen CJ 2018-03-12 22:23:37 +08:00 committed by Jack Ren
parent d14a7dbdd2
commit e91b6aa31a
1 changed files with 14 additions and 2 deletions

View File

@ -199,14 +199,26 @@ static void switch_to(struct vcpu *curr)
if (curr == NULL) { if (curr == NULL) {
asm volatile ("movq %1, %%rsp\n" asm volatile ("movq %1, %%rsp\n"
"movq $0, %%rdi\n" "movq $0, %%rdi\n"
"jmp *%0\n" "call 22f\n"
"11: \n"
"pause\n"
"jmp 11b\n"
"22:\n"
"mov %0, (%%rsp)\n"
"ret\n"
: :
: "a"(default_idle), "r"(cur_sp) : "a"(default_idle), "r"(cur_sp)
: "memory"); : "memory");
} else { } else {
asm volatile ("movq %2, %%rsp\n" asm volatile ("movq %2, %%rsp\n"
"movq %0, %%rdi\n" "movq %0, %%rdi\n"
"jmp *%1\n" "call 44f\n"
"33: \n"
"pause\n"
"jmp 33b\n"
"44:\n"
"mov %1, (%%rsp)\n"
"ret\n"
: :
: "c"(curr), "a"(vcpu_thread), "r"(cur_sp) : "c"(curr), "a"(vcpu_thread), "r"(cur_sp)
: "memory"); : "memory");