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:
parent
812483c46e
commit
a9262f497a
@ -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)
|
||||
|
Loading…
x
Reference in New Issue
Block a user