summaryrefslogtreecommitdiffstats
path: root/sys/powerpc
diff options
context:
space:
mode:
authorgrehan <grehan@FreeBSD.org>2004-12-29 09:41:40 +0000
committergrehan <grehan@FreeBSD.org>2004-12-29 09:41:40 +0000
commit533c627057c3f67bf5d191a092f309e334625557 (patch)
treec5265bc56ce924e4101f4d2507e630a5e8d8eb57 /sys/powerpc
parentb4eda5e471c2e09dc054bb4735ae21536274c22b (diff)
downloadFreeBSD-src-533c627057c3f67bf5d191a092f309e334625557.zip
FreeBSD-src-533c627057c3f67bf5d191a092f309e334625557.tar.gz
Correctly initialise the 2nd kernel segment, and don't
forget to actually install it in the segment register. This may fix some of the weird panics seen when kernel VM is heavily used.
Diffstat (limited to 'sys/powerpc')
-rw-r--r--sys/powerpc/aim/mmu_oea.c4
-rw-r--r--sys/powerpc/powerpc/mmu_oea.c4
-rw-r--r--sys/powerpc/powerpc/pmap.c4
3 files changed, 9 insertions, 3 deletions
diff --git a/sys/powerpc/aim/mmu_oea.c b/sys/powerpc/aim/mmu_oea.c
index 768fe14..49813d0 100644
--- a/sys/powerpc/aim/mmu_oea.c
+++ b/sys/powerpc/aim/mmu_oea.c
@@ -758,7 +758,7 @@ pmap_bootstrap(vm_offset_t kernelstart, vm_offset_t kernelend)
kernel_pmap->pm_sr[i] = EMPTY_SEGMENT;
}
kernel_pmap->pm_sr[KERNEL_SR] = KERNEL_SEGMENT;
- kernel_pmap->pm_sr[KERNEL2_SR] = KERNEL_SEGMENT;
+ kernel_pmap->pm_sr[KERNEL2_SR] = KERNEL2_SEGMENT;
kernel_pmap->pm_active = ~0;
/*
@@ -799,6 +799,8 @@ pmap_bootstrap(vm_offset_t kernelstart, vm_offset_t kernelend)
}
__asm __volatile ("mtsr %0,%1"
:: "n"(KERNEL_SR), "r"(KERNEL_SEGMENT));
+ __asm __volatile ("mtsr %0,%1"
+ :: "n"(KERNEL2_SR), "r"(KERNEL2_SEGMENT));
__asm __volatile ("sync; mtsdr1 %0; isync"
:: "r"((u_int)pmap_pteg_table | (pmap_pteg_mask >> 10)));
tlbia();
diff --git a/sys/powerpc/powerpc/mmu_oea.c b/sys/powerpc/powerpc/mmu_oea.c
index 768fe14..49813d0 100644
--- a/sys/powerpc/powerpc/mmu_oea.c
+++ b/sys/powerpc/powerpc/mmu_oea.c
@@ -758,7 +758,7 @@ pmap_bootstrap(vm_offset_t kernelstart, vm_offset_t kernelend)
kernel_pmap->pm_sr[i] = EMPTY_SEGMENT;
}
kernel_pmap->pm_sr[KERNEL_SR] = KERNEL_SEGMENT;
- kernel_pmap->pm_sr[KERNEL2_SR] = KERNEL_SEGMENT;
+ kernel_pmap->pm_sr[KERNEL2_SR] = KERNEL2_SEGMENT;
kernel_pmap->pm_active = ~0;
/*
@@ -799,6 +799,8 @@ pmap_bootstrap(vm_offset_t kernelstart, vm_offset_t kernelend)
}
__asm __volatile ("mtsr %0,%1"
:: "n"(KERNEL_SR), "r"(KERNEL_SEGMENT));
+ __asm __volatile ("mtsr %0,%1"
+ :: "n"(KERNEL2_SR), "r"(KERNEL2_SEGMENT));
__asm __volatile ("sync; mtsdr1 %0; isync"
:: "r"((u_int)pmap_pteg_table | (pmap_pteg_mask >> 10)));
tlbia();
diff --git a/sys/powerpc/powerpc/pmap.c b/sys/powerpc/powerpc/pmap.c
index 768fe14..49813d0 100644
--- a/sys/powerpc/powerpc/pmap.c
+++ b/sys/powerpc/powerpc/pmap.c
@@ -758,7 +758,7 @@ pmap_bootstrap(vm_offset_t kernelstart, vm_offset_t kernelend)
kernel_pmap->pm_sr[i] = EMPTY_SEGMENT;
}
kernel_pmap->pm_sr[KERNEL_SR] = KERNEL_SEGMENT;
- kernel_pmap->pm_sr[KERNEL2_SR] = KERNEL_SEGMENT;
+ kernel_pmap->pm_sr[KERNEL2_SR] = KERNEL2_SEGMENT;
kernel_pmap->pm_active = ~0;
/*
@@ -799,6 +799,8 @@ pmap_bootstrap(vm_offset_t kernelstart, vm_offset_t kernelend)
}
__asm __volatile ("mtsr %0,%1"
:: "n"(KERNEL_SR), "r"(KERNEL_SEGMENT));
+ __asm __volatile ("mtsr %0,%1"
+ :: "n"(KERNEL2_SR), "r"(KERNEL2_SEGMENT));
__asm __volatile ("sync; mtsdr1 %0; isync"
:: "r"((u_int)pmap_pteg_table | (pmap_pteg_mask >> 10)));
tlbia();
OpenPOWER on IntegriCloud