Module Name: src Committed By: cherry Date: Mon Dec 26 08:53:11 UTC 2016
Modified Files: src/sys/arch/xen/x86: xen_pmap.c Log Message: In the MP case, do not attempt to pmap_tlb_shootdown() after a pmap_kenter_ma() during boot. pmap_tlb_shootdown() assumes post boot. Instead invalidate the entry on the local CPU only. XXX: to DTRT, probably this assumption needs re-examination. XXX: The tradeoff is a (predicted) single word size comparison penalty, so perhaps a decision needs performance stats. To generate a diff of this commit: cvs rdiff -u -r1.24 -r1.25 src/sys/arch/xen/x86/xen_pmap.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/xen/x86/xen_pmap.c diff -u src/sys/arch/xen/x86/xen_pmap.c:1.24 src/sys/arch/xen/x86/xen_pmap.c:1.25 --- src/sys/arch/xen/x86/xen_pmap.c:1.24 Tue Dec 13 10:54:27 2016 +++ src/sys/arch/xen/x86/xen_pmap.c Mon Dec 26 08:53:11 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: xen_pmap.c,v 1.24 2016/12/13 10:54:27 kamil Exp $ */ +/* $NetBSD: xen_pmap.c,v 1.25 2016/12/26 08:53:11 cherry Exp $ */ /* * Copyright (c) 2007 Manuel Bouyer. @@ -102,7 +102,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: xen_pmap.c,v 1.24 2016/12/13 10:54:27 kamil Exp $"); +__KERNEL_RCSID(0, "$NetBSD: xen_pmap.c,v 1.25 2016/12/26 08:53:11 cherry Exp $"); #include "opt_user_ldt.h" #include "opt_lockdebug.h" @@ -188,9 +188,13 @@ pmap_kenter_ma(vaddr_t va, paddr_t ma, v if (pmap_valid_entry(opte)) { #if defined(MULTIPROCESSOR) - kpreempt_disable(); - pmap_tlb_shootdown(pmap_kernel(), va, opte, TLBSHOOT_KENTER); - kpreempt_enable(); + if (__predict_false(x86_mp_online == false)) { + pmap_update_pg(va); + } else { + kpreempt_disable(); + pmap_tlb_shootdown(pmap_kernel(), va, opte, TLBSHOOT_KENTER); + kpreempt_enable(); + } #else /* Don't bother deferring in the single CPU case. */ pmap_update_pg(va);