summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
authorjhb <jhb@FreeBSD.org>2006-09-11 20:10:42 +0000
committerjhb <jhb@FreeBSD.org>2006-09-11 20:10:42 +0000
commit5845d0195b91c768f244ed149e5039372942f2aa (patch)
treef8f222df641e17218c5fdf8e51827001de3466f4 /sys
parentc4015db86a7e4c99ee48201c48ffa021ef6f5ed5 (diff)
downloadFreeBSD-src-5845d0195b91c768f244ed149e5039372942f2aa.zip
FreeBSD-src-5845d0195b91c768f244ed149e5039372942f2aa.tar.gz
Actually hook up the IPI_INVLCACHE IDT vectors backing
pmap_invalidate_cache() in the SMP case so pmap_mapdev() in multiuser doesn't panic with a trap 30. I broke this many months ago when I added pmap_invalidate_cache() as early parts of the PAT work. Patience from: jmg Pointy hat: jhb
Diffstat (limited to 'sys')
-rw-r--r--sys/amd64/amd64/mp_machdep.c5
-rw-r--r--sys/i386/i386/mp_machdep.c6
2 files changed, 9 insertions, 2 deletions
diff --git a/sys/amd64/amd64/mp_machdep.c b/sys/amd64/amd64/mp_machdep.c
index 4a1695b..2172c17 100644
--- a/sys/amd64/amd64/mp_machdep.c
+++ b/sys/amd64/amd64/mp_machdep.c
@@ -342,7 +342,10 @@ cpu_mp_start(void)
setidt(IPI_INVLTLB, IDTVEC(invltlb), SDT_SYSIGT, SEL_KPL, 0);
setidt(IPI_INVLPG, IDTVEC(invlpg), SDT_SYSIGT, SEL_KPL, 0);
setidt(IPI_INVLRNG, IDTVEC(invlrng), SDT_SYSIGT, SEL_KPL, 0);
-
+
+ /* Install an inter-CPU IPI for cache invalidation. */
+ setidt(IPI_INVLCACHE, IDTVEC(invlcache), SDT_SYSIGT, SEL_KPL, 0);
+
/* Install an inter-CPU IPI for all-CPU rendezvous */
setidt(IPI_RENDEZVOUS, IDTVEC(rendezvous), SDT_SYSIGT, SEL_KPL, 0);
diff --git a/sys/i386/i386/mp_machdep.c b/sys/i386/i386/mp_machdep.c
index 77d2d18..8b88117 100644
--- a/sys/i386/i386/mp_machdep.c
+++ b/sys/i386/i386/mp_machdep.c
@@ -385,7 +385,11 @@ cpu_mp_start(void)
SDT_SYS386IGT, SEL_KPL, GSEL(GCODE_SEL, SEL_KPL));
setidt(IPI_INVLRNG, IDTVEC(invlrng),
SDT_SYS386IGT, SEL_KPL, GSEL(GCODE_SEL, SEL_KPL));
-
+
+ /* Install an inter-CPU IPI for cache invalidation. */
+ setidt(IPI_INVLCACHE, IDTVEC(invlcache),
+ SDT_SYS386IGT, SEL_KPL, GSEL(GCODE_SEL, SEL_KPL));
+
/* Install an inter-CPU IPI for lazy pmap release */
setidt(IPI_LAZYPMAP, IDTVEC(lazypmap),
SDT_SYS386IGT, SEL_KPL, GSEL(GCODE_SEL, SEL_KPL));
OpenPOWER on IntegriCloud