diff options
author | grehan <grehan@FreeBSD.org> | 2004-12-29 09:41:40 +0000 |
---|---|---|
committer | grehan <grehan@FreeBSD.org> | 2004-12-29 09:41:40 +0000 |
commit | 533c627057c3f67bf5d191a092f309e334625557 (patch) | |
tree | c5265bc56ce924e4101f4d2507e630a5e8d8eb57 /sys/powerpc | |
parent | b4eda5e471c2e09dc054bb4735ae21536274c22b (diff) | |
download | FreeBSD-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.c | 4 | ||||
-rw-r--r-- | sys/powerpc/powerpc/mmu_oea.c | 4 | ||||
-rw-r--r-- | sys/powerpc/powerpc/pmap.c | 4 |
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(); |