From ae6677840e4ac8fe2d0ed6d658e6f74141bf5220 Mon Sep 17 00:00:00 2001 From: Philip Guenther Date: Wed, 12 Sep 2018 06:13:00 +0000 Subject: 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@ --- sys/arch/amd64/amd64/locore.S | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'sys') 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) -- cgit v1.2.3