diff options
author | Philip Guenther <guenther@cvs.openbsd.org> | 2018-09-12 06:13:00 +0000 |
---|---|---|
committer | Philip Guenther <guenther@cvs.openbsd.org> | 2018-09-12 06:13:00 +0000 |
commit | ae6677840e4ac8fe2d0ed6d658e6f74141bf5220 (patch) | |
tree | f8851d99873ffe64074c1454d2e8ac673cf662e4 /sys/arch/amd64 | |
parent | 83942f081d5efe5b6e55bcf4d891645c7df2d13b (diff) |
Now that the pmap is more paranoid about some shootdowns (pmap.c rev 1.119),
avoid some TLB flushes by not reloading %cr3 when the value isn't changing.
original diff by and ok mlarkin@
Diffstat (limited to 'sys/arch/amd64')
-rw-r--r-- | sys/arch/amd64/amd64/locore.S | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/sys/arch/amd64/amd64/locore.S b/sys/arch/amd64/amd64/locore.S index ecc9eedc05d..a205e681012 100644 --- a/sys/arch/amd64/amd64/locore.S +++ b/sys/arch/amd64/amd64/locore.S @@ -1,4 +1,4 @@ -/* $OpenBSD: locore.S,v 1.108 2018/09/09 22:09:36 guenther Exp $ */ +/* $OpenBSD: locore.S,v 1.109 2018/09/12 06:12:59 guenther Exp $ */ /* $NetBSD: locore.S,v 1.13 2004/03/25 18:33:17 drochner Exp $ */ /* @@ -445,9 +445,15 @@ restore_saved: /* Stack pivot done, setup RETGUARD */ RETGUARD_SETUP_OFF(cpu_switchto, r11, 6*8) - movq PCB_CR3(%r13),%rax + /* don't switch cr3 to the same thing it already was */ + movq %cr3,%rax + cmpq PCB_CR3(%r13),%rax + movq PCB_CR3(%r13),%rax /* flags from cmpq unchanged */ + jz .Lsame_cr3 + movq %rax,%cr3 /* %rax used below too */ +.Lsame_cr3: /* * If we switched from a userland thread with a shallow call stack * (e.g interrupt->ast->mi_ast->prempt->mi_switch->cpu_switchto) |