svn commit: r327691 - head/sys/arm64/arm64
Andrew Turner
andrew at FreeBSD.org
Mon Jan 8 11:08:46 UTC 2018
Author: andrew
Date: Mon Jan 8 11:08:45 2018
New Revision: 327691
URL: https://svnweb.freebsd.org/changeset/base/327691
Log:
Only install the new pagetable pointer into ttbr0_el1 when it differs from
the existing value.
MFC after: 1 week
Sponsored by: DARPA, AFRL
Modified:
head/sys/arm64/arm64/pmap.c
Modified: head/sys/arm64/arm64/pmap.c
==============================================================================
--- head/sys/arm64/arm64/pmap.c Mon Jan 8 10:23:31 2018 (r327690)
+++ head/sys/arm64/arm64/pmap.c Mon Jan 8 11:08:45 2018 (r327691)
@@ -4677,17 +4677,20 @@ pmap_switch(struct thread *old, struct thread *new)
* to a user process.
*/
- __asm __volatile(
- /* Switch to the new pmap */
- "msr ttbr0_el1, %0 \n"
- "isb \n"
+ if (old == NULL ||
+ old->td_proc->p_md.md_l0addr != new->td_proc->p_md.md_l0addr) {
+ __asm __volatile(
+ /* Switch to the new pmap */
+ "msr ttbr0_el1, %0 \n"
+ "isb \n"
- /* Invalidate the TLB */
- "dsb ishst \n"
- "tlbi vmalle1is \n"
- "dsb ish \n"
- "isb \n"
- : : "r"(new->td_proc->p_md.md_l0addr));
+ /* Invalidate the TLB */
+ "dsb ishst \n"
+ "tlbi vmalle1is \n"
+ "dsb ish \n"
+ "isb \n"
+ : : "r"(new->td_proc->p_md.md_l0addr));
+ }
return (pcb);
}
More information about the svn-src-head
mailing list