amd64: rewrite cpu_switch.S fragment to reload tss.rsp0 on context switch.

New code avoids jumps.

Reviewed by:	markj
Tested by:	pho
Sponsored by:	The FreeBSD Foundation
MFC after:	1 week
Differential revision:	https://reviews.freebsd.org/D19514
This commit is contained in:
Konstantin Belousov 2019-03-16 11:12:02 +00:00
parent 812483c46e
commit a9262f497a

View File

@ -209,14 +209,11 @@ do_kthread:
done_tss:
movq %r8,PCPU(RSP0)
movq %r8,PCPU(CURPCB)
/* Update the TSS_RSP0 pointer for the next interrupt */
cmpq $~0,PCPU(UCR3)
je 1f
movq PCPU(PTI_RSP0),%rax
cmpq $~0,PCPU(UCR3)
cmove %r8,%rax
movq %rax,TSS_RSP0(%rdx)
jmp 2f
1: movq %r8,TSS_RSP0(%rdx)
2: movq %r12,PCPU(CURTHREAD) /* into next thread */
movq %r12,PCPU(CURTHREAD) /* into next thread */
/* Test if debug registers should be restored. */
testl $PCB_DBREGS,PCB_FLAGS(%r8)