diff options
| author | Peter Grehan <grehan@FreeBSD.org> | 2004-03-02 06:49:21 +0000 |
|---|---|---|
| committer | Peter Grehan <grehan@FreeBSD.org> | 2004-03-02 06:49:21 +0000 |
| commit | 4daf20b2f1ac85f9d2c1c35cca7047876b97a2f7 (patch) | |
| tree | 7946c5b7f55109dc8ab4dea976e862ea0a0df42c | |
| parent | 9c3078173af42f1cfa68495202fae23db33b2ed6 (diff) | |
Notes
| -rw-r--r-- | sys/powerpc/aim/mmu_oea.c | 4 | ||||
| -rw-r--r-- | sys/powerpc/include/sr.h | 6 | ||||
| -rw-r--r-- | sys/powerpc/include/vmparam.h | 2 | ||||
| -rw-r--r-- | sys/powerpc/powerpc/mmu_oea.c | 4 | ||||
| -rw-r--r-- | sys/powerpc/powerpc/pmap.c | 4 |
5 files changed, 17 insertions, 3 deletions
diff --git a/sys/powerpc/aim/mmu_oea.c b/sys/powerpc/aim/mmu_oea.c index ddab773ecc99d..cdf3bce624c0c 100644 --- a/sys/powerpc/aim/mmu_oea.c +++ b/sys/powerpc/aim/mmu_oea.c @@ -698,6 +698,7 @@ pmap_bootstrap(vm_offset_t kernelstart, vm_offset_t kernelend) */ pmap_pinit(&ofw_pmap); ofw_pmap.pm_sr[KERNEL_SR] = KERNEL_SEGMENT; + ofw_pmap.pm_sr[KERNEL2_SR] = KERNEL2_SEGMENT; if ((chosen = OF_finddevice("/chosen")) == -1) panic("pmap_bootstrap: can't find /chosen"); OF_getprop(chosen, "mmu", &mmui, 4); @@ -751,6 +752,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_active = ~0; /* @@ -1385,6 +1387,8 @@ pmap_pinit(pmap_t pmap) int i, mask; u_int entropy; + KASSERT((int)pmap < VM_MIN_KERNEL_ADDRESS, ("pmap_pinit: virt pmap")); + entropy = 0; __asm __volatile("mftb %0" : "=r"(entropy)); diff --git a/sys/powerpc/include/sr.h b/sys/powerpc/include/sr.h index e4a29ece7fed3..4a5525a97b7d0 100644 --- a/sys/powerpc/include/sr.h +++ b/sys/powerpc/include/sr.h @@ -42,10 +42,12 @@ #define SR_VSID_MASK 0x00ffffff /* Virtual Segment ID mask */ /* Kernel segment register usage */ -#define USER_SR 13 -#define KERNEL_SR 14 +#define USER_SR 12 +#define KERNEL_SR 13 +#define KERNEL2_SR 14 #define KERNEL_VSIDBITS 0xfffff #define KERNEL_SEGMENT (0xfffff0 + KERNEL_SR) +#define KERNEL2_SEGMENT (0xfffff0 + KERNEL2_SR) #define EMPTY_SEGMENT 0xfffff0 #define USER_ADDR ((void *)(USER_SR << ADDR_SR_SHFT)) #define SEGMENT_LENGTH 0x10000000 diff --git a/sys/powerpc/include/vmparam.h b/sys/powerpc/include/vmparam.h index 588d712c9a3d7..6bcea668bf908 100644 --- a/sys/powerpc/include/vmparam.h +++ b/sys/powerpc/include/vmparam.h @@ -94,7 +94,7 @@ #define VM_MAXUSER_ADDRESS ((vm_offset_t)0x7ffff000) #define VM_MAX_ADDRESS VM_MAXUSER_ADDRESS #define VM_MIN_KERNEL_ADDRESS ((vm_offset_t)(KERNEL_SR << ADDR_SR_SHFT)) -#define VM_MAX_KERNEL_ADDRESS (VM_MIN_KERNEL_ADDRESS + SEGMENT_LENGTH - 1) +#define VM_MAX_KERNEL_ADDRESS (VM_MIN_KERNEL_ADDRESS + 2*SEGMENT_LENGTH - 1) #define KERNBASE 0x100000 /* start of kernel virtual */ diff --git a/sys/powerpc/powerpc/mmu_oea.c b/sys/powerpc/powerpc/mmu_oea.c index ddab773ecc99d..cdf3bce624c0c 100644 --- a/sys/powerpc/powerpc/mmu_oea.c +++ b/sys/powerpc/powerpc/mmu_oea.c @@ -698,6 +698,7 @@ pmap_bootstrap(vm_offset_t kernelstart, vm_offset_t kernelend) */ pmap_pinit(&ofw_pmap); ofw_pmap.pm_sr[KERNEL_SR] = KERNEL_SEGMENT; + ofw_pmap.pm_sr[KERNEL2_SR] = KERNEL2_SEGMENT; if ((chosen = OF_finddevice("/chosen")) == -1) panic("pmap_bootstrap: can't find /chosen"); OF_getprop(chosen, "mmu", &mmui, 4); @@ -751,6 +752,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_active = ~0; /* @@ -1385,6 +1387,8 @@ pmap_pinit(pmap_t pmap) int i, mask; u_int entropy; + KASSERT((int)pmap < VM_MIN_KERNEL_ADDRESS, ("pmap_pinit: virt pmap")); + entropy = 0; __asm __volatile("mftb %0" : "=r"(entropy)); diff --git a/sys/powerpc/powerpc/pmap.c b/sys/powerpc/powerpc/pmap.c index ddab773ecc99d..cdf3bce624c0c 100644 --- a/sys/powerpc/powerpc/pmap.c +++ b/sys/powerpc/powerpc/pmap.c @@ -698,6 +698,7 @@ pmap_bootstrap(vm_offset_t kernelstart, vm_offset_t kernelend) */ pmap_pinit(&ofw_pmap); ofw_pmap.pm_sr[KERNEL_SR] = KERNEL_SEGMENT; + ofw_pmap.pm_sr[KERNEL2_SR] = KERNEL2_SEGMENT; if ((chosen = OF_finddevice("/chosen")) == -1) panic("pmap_bootstrap: can't find /chosen"); OF_getprop(chosen, "mmu", &mmui, 4); @@ -751,6 +752,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_active = ~0; /* @@ -1385,6 +1387,8 @@ pmap_pinit(pmap_t pmap) int i, mask; u_int entropy; + KASSERT((int)pmap < VM_MIN_KERNEL_ADDRESS, ("pmap_pinit: virt pmap")); + entropy = 0; __asm __volatile("mftb %0" : "=r"(entropy)); |
