retpoline: replace indirect jmp in switch_to function
Signed-off-by: Jason Chen CJ <jason.cj.chen@intel.com>
This commit is contained in:
parent
d14a7dbdd2
commit
e91b6aa31a
|
@ -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");
|
||||||
|
|
Loading…
Reference in New Issue