Module Name: src
Committed By: scole
Date: Fri Apr 19 16:28:32 UTC 2019
Modified Files:
src/sys/arch/ia64/ia64: machdep.c
Log Message:
In map_vhpt(), read pmap_vhpt_log2size before any memory translation
instructions to avoid "Data Nested TLB faults" with GCC 7.4.0
To generate a diff of this commit:
cvs rdiff -u -r1.42 -r1.43 src/sys/arch/ia64/ia64/machdep.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/ia64/ia64/machdep.c
diff -u src/sys/arch/ia64/ia64/machdep.c:1.42 src/sys/arch/ia64/ia64/machdep.c:1.43
--- src/sys/arch/ia64/ia64/machdep.c:1.42 Sat Apr 6 03:06:25 2019
+++ src/sys/arch/ia64/ia64/machdep.c Fri Apr 19 16:28:32 2019
@@ -1,4 +1,4 @@
-/* $NetBSD: machdep.c,v 1.42 2019/04/06 03:06:25 thorpej Exp $ */
+/* $NetBSD: machdep.c,v 1.43 2019/04/19 16:28:32 scole Exp $ */
/*-
* Copyright (c) 2003,2004 Marcel Moolenaar
@@ -267,18 +267,24 @@ map_vhpt(uintptr_t vhpt)
pt_entry_t pte;
uint64_t psr;
+ /*
+ * XXX read pmap_vhpt_log2size before any memory translation
+ * instructions to avoid "Data Nested TLB faults". Not
+ * exactly sure why this is needed with GCC 7.4
+ */
+ register uint64_t log2size = pmap_vhpt_log2size << 2;
+
pte = PTE_PRESENT | PTE_MA_WB | PTE_ACCESSED | PTE_DIRTY |
PTE_PL_KERN | PTE_AR_RW;
pte |= vhpt & PTE_PPN_MASK;
- __asm __volatile("ptr.d %0,%1" :: "r"(vhpt),
- "r"(pmap_vhpt_log2size << 2));
+ __asm __volatile("ptr.d %0,%1" :: "r"(vhpt), "r"(log2size));
__asm __volatile("mov %0=psr" : "=r"(psr));
__asm __volatile("rsm psr.ic|psr.i");
ia64_srlz_i();
ia64_set_ifa(vhpt);
- ia64_set_itir(pmap_vhpt_log2size << 2);
+ ia64_set_itir(log2size);
ia64_srlz_d();
__asm __volatile("itr.d dtr[%0]=%1" :: "r"(3), "r"(pte));
__asm __volatile("mov psr.l=%0" :: "r" (psr));