diff options
author | Michael Ellerman <michael@ellerman.id.au> | 2005-12-04 02:39:15 -0500 |
---|---|---|
committer | Paul Mackerras <paulus@samba.org> | 2006-01-08 22:51:50 -0500 |
commit | 51fae6de24da57bc6cdaa1b253595c3513ecbf2d (patch) | |
tree | 27df7f07270fb79eae44783331faeb3af3d313ab /arch | |
parent | cd0ca2ce4b2f4a5132e7e230be8a510755c20870 (diff) |
[PATCH] powerpc: Add a is_kernel_addr() macro
There's a bunch of code that compares an address with KERNELBASE to see if
it's a "kernel address", ie. >= KERNELBASE. The proper test is actually to
compare with PAGE_OFFSET, since we're going to change KERNELBASE soon.
So replace all of them with an is_kernel_addr() macro that does that.
Signed-off-by: Michael Ellerman <michael@ellerman.id.au>
Signed-off-by: Paul Mackerras <paulus@samba.org>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/powerpc/kernel/prom_init.c | 2 | ||||
-rw-r--r-- | arch/powerpc/kernel/setup-common.c | 2 | ||||
-rw-r--r-- | arch/powerpc/mm/slb.c | 6 | ||||
-rw-r--r-- | arch/powerpc/mm/stab.c | 6 | ||||
-rw-r--r-- | arch/powerpc/mm/tlb_64.c | 2 | ||||
-rw-r--r-- | arch/powerpc/oprofile/op_model_power4.c | 4 | ||||
-rw-r--r-- | arch/powerpc/oprofile/op_model_rs64.c | 3 | ||||
-rw-r--r-- | arch/powerpc/xmon/xmon.c | 4 |
8 files changed, 14 insertions, 15 deletions
diff --git a/arch/powerpc/kernel/prom_init.c b/arch/powerpc/kernel/prom_init.c index bcdc209dca85..369e1a6cdd40 100644 --- a/arch/powerpc/kernel/prom_init.c +++ b/arch/powerpc/kernel/prom_init.c | |||
@@ -1994,7 +1994,7 @@ static void __init prom_check_initrd(unsigned long r3, unsigned long r4) | |||
1994 | if (r3 && r4 && r4 != 0xdeadbeef) { | 1994 | if (r3 && r4 && r4 != 0xdeadbeef) { |
1995 | unsigned long val; | 1995 | unsigned long val; |
1996 | 1996 | ||
1997 | RELOC(prom_initrd_start) = (r3 >= KERNELBASE) ? __pa(r3) : r3; | 1997 | RELOC(prom_initrd_start) = is_kernel_addr(r3) ? __pa(r3) : r3; |
1998 | RELOC(prom_initrd_end) = RELOC(prom_initrd_start) + r4; | 1998 | RELOC(prom_initrd_end) = RELOC(prom_initrd_start) + r4; |
1999 | 1999 | ||
2000 | val = RELOC(prom_initrd_start); | 2000 | val = RELOC(prom_initrd_start); |
diff --git a/arch/powerpc/kernel/setup-common.c b/arch/powerpc/kernel/setup-common.c index a6d8aebf2bc6..d5c52fae023a 100644 --- a/arch/powerpc/kernel/setup-common.c +++ b/arch/powerpc/kernel/setup-common.c | |||
@@ -319,7 +319,7 @@ void __init check_for_initrd(void) | |||
319 | /* If we were passed an initrd, set the ROOT_DEV properly if the values | 319 | /* If we were passed an initrd, set the ROOT_DEV properly if the values |
320 | * look sensible. If not, clear initrd reference. | 320 | * look sensible. If not, clear initrd reference. |
321 | */ | 321 | */ |
322 | if (initrd_start >= KERNELBASE && initrd_end >= KERNELBASE && | 322 | if (is_kernel_addr(initrd_start) && is_kernel_addr(initrd_end) && |
323 | initrd_end > initrd_start) | 323 | initrd_end > initrd_start) |
324 | ROOT_DEV = Root_RAM0; | 324 | ROOT_DEV = Root_RAM0; |
325 | else | 325 | else |
diff --git a/arch/powerpc/mm/slb.c b/arch/powerpc/mm/slb.c index 60e852f2f8e5..a47b273600ec 100644 --- a/arch/powerpc/mm/slb.c +++ b/arch/powerpc/mm/slb.c | |||
@@ -134,14 +134,14 @@ void switch_slb(struct task_struct *tsk, struct mm_struct *mm) | |||
134 | else | 134 | else |
135 | unmapped_base = TASK_UNMAPPED_BASE_USER64; | 135 | unmapped_base = TASK_UNMAPPED_BASE_USER64; |
136 | 136 | ||
137 | if (pc >= KERNELBASE) | 137 | if (is_kernel_addr(pc)) |
138 | return; | 138 | return; |
139 | slb_allocate(pc); | 139 | slb_allocate(pc); |
140 | 140 | ||
141 | if (GET_ESID(pc) == GET_ESID(stack)) | 141 | if (GET_ESID(pc) == GET_ESID(stack)) |
142 | return; | 142 | return; |
143 | 143 | ||
144 | if (stack >= KERNELBASE) | 144 | if (is_kernel_addr(stack)) |
145 | return; | 145 | return; |
146 | slb_allocate(stack); | 146 | slb_allocate(stack); |
147 | 147 | ||
@@ -149,7 +149,7 @@ void switch_slb(struct task_struct *tsk, struct mm_struct *mm) | |||
149 | || (GET_ESID(stack) == GET_ESID(unmapped_base))) | 149 | || (GET_ESID(stack) == GET_ESID(unmapped_base))) |
150 | return; | 150 | return; |
151 | 151 | ||
152 | if (unmapped_base >= KERNELBASE) | 152 | if (is_kernel_addr(unmapped_base)) |
153 | return; | 153 | return; |
154 | slb_allocate(unmapped_base); | 154 | slb_allocate(unmapped_base); |
155 | } | 155 | } |
diff --git a/arch/powerpc/mm/stab.c b/arch/powerpc/mm/stab.c index 51e7951414e5..a18dab0d6b12 100644 --- a/arch/powerpc/mm/stab.c +++ b/arch/powerpc/mm/stab.c | |||
@@ -122,7 +122,7 @@ static int __ste_allocate(unsigned long ea, struct mm_struct *mm) | |||
122 | unsigned long offset; | 122 | unsigned long offset; |
123 | 123 | ||
124 | /* Kernel or user address? */ | 124 | /* Kernel or user address? */ |
125 | if (ea >= KERNELBASE) { | 125 | if (is_kernel_addr(ea)) { |
126 | vsid = get_kernel_vsid(ea); | 126 | vsid = get_kernel_vsid(ea); |
127 | } else { | 127 | } else { |
128 | if ((ea >= TASK_SIZE_USER64) || (! mm)) | 128 | if ((ea >= TASK_SIZE_USER64) || (! mm)) |
@@ -133,7 +133,7 @@ static int __ste_allocate(unsigned long ea, struct mm_struct *mm) | |||
133 | 133 | ||
134 | stab_entry = make_ste(get_paca()->stab_addr, GET_ESID(ea), vsid); | 134 | stab_entry = make_ste(get_paca()->stab_addr, GET_ESID(ea), vsid); |
135 | 135 | ||
136 | if (ea < KERNELBASE) { | 136 | if (!is_kernel_addr(ea)) { |
137 | offset = __get_cpu_var(stab_cache_ptr); | 137 | offset = __get_cpu_var(stab_cache_ptr); |
138 | if (offset < NR_STAB_CACHE_ENTRIES) | 138 | if (offset < NR_STAB_CACHE_ENTRIES) |
139 | __get_cpu_var(stab_cache[offset++]) = stab_entry; | 139 | __get_cpu_var(stab_cache[offset++]) = stab_entry; |
@@ -190,7 +190,7 @@ void switch_stab(struct task_struct *tsk, struct mm_struct *mm) | |||
190 | entry++, ste++) { | 190 | entry++, ste++) { |
191 | unsigned long ea; | 191 | unsigned long ea; |
192 | ea = ste->esid_data & ESID_MASK; | 192 | ea = ste->esid_data & ESID_MASK; |
193 | if (ea < KERNELBASE) { | 193 | if (!is_kernel_addr(ea)) { |
194 | ste->esid_data = 0; | 194 | ste->esid_data = 0; |
195 | } | 195 | } |
196 | } | 196 | } |
diff --git a/arch/powerpc/mm/tlb_64.c b/arch/powerpc/mm/tlb_64.c index 859d29a0cac5..bb3afb6e6317 100644 --- a/arch/powerpc/mm/tlb_64.c +++ b/arch/powerpc/mm/tlb_64.c | |||
@@ -168,7 +168,7 @@ void hpte_update(struct mm_struct *mm, unsigned long addr, | |||
168 | batch->mm = mm; | 168 | batch->mm = mm; |
169 | batch->psize = psize; | 169 | batch->psize = psize; |
170 | } | 170 | } |
171 | if (addr < KERNELBASE) { | 171 | if (!is_kernel_addr(addr)) { |
172 | vsid = get_vsid(mm->context.id, addr); | 172 | vsid = get_vsid(mm->context.id, addr); |
173 | WARN_ON(vsid == 0); | 173 | WARN_ON(vsid == 0); |
174 | } else | 174 | } else |
diff --git a/arch/powerpc/oprofile/op_model_power4.c b/arch/powerpc/oprofile/op_model_power4.c index a3401b46f3ba..659a021da0c7 100644 --- a/arch/powerpc/oprofile/op_model_power4.c +++ b/arch/powerpc/oprofile/op_model_power4.c | |||
@@ -252,7 +252,7 @@ static unsigned long get_pc(struct pt_regs *regs) | |||
252 | return (unsigned long)__va(pc); | 252 | return (unsigned long)__va(pc); |
253 | 253 | ||
254 | /* Not sure where we were */ | 254 | /* Not sure where we were */ |
255 | if (pc < KERNELBASE) | 255 | if (!is_kernel_addr(pc)) |
256 | /* function descriptor madness */ | 256 | /* function descriptor madness */ |
257 | return *((unsigned long *)kernel_unknown_bucket); | 257 | return *((unsigned long *)kernel_unknown_bucket); |
258 | 258 | ||
@@ -264,7 +264,7 @@ static int get_kernel(unsigned long pc) | |||
264 | int is_kernel; | 264 | int is_kernel; |
265 | 265 | ||
266 | if (!mmcra_has_sihv) { | 266 | if (!mmcra_has_sihv) { |
267 | is_kernel = (pc >= KERNELBASE); | 267 | is_kernel = is_kernel_addr(pc); |
268 | } else { | 268 | } else { |
269 | unsigned long mmcra = mfspr(SPRN_MMCRA); | 269 | unsigned long mmcra = mfspr(SPRN_MMCRA); |
270 | is_kernel = ((mmcra & MMCRA_SIPR) == 0); | 270 | is_kernel = ((mmcra & MMCRA_SIPR) == 0); |
diff --git a/arch/powerpc/oprofile/op_model_rs64.c b/arch/powerpc/oprofile/op_model_rs64.c index e010b85996e8..5c909ee609fe 100644 --- a/arch/powerpc/oprofile/op_model_rs64.c +++ b/arch/powerpc/oprofile/op_model_rs64.c | |||
@@ -178,7 +178,6 @@ static void rs64_handle_interrupt(struct pt_regs *regs, | |||
178 | int val; | 178 | int val; |
179 | int i; | 179 | int i; |
180 | unsigned long pc = mfspr(SPRN_SIAR); | 180 | unsigned long pc = mfspr(SPRN_SIAR); |
181 | int is_kernel = (pc >= KERNELBASE); | ||
182 | 181 | ||
183 | /* set the PMM bit (see comment below) */ | 182 | /* set the PMM bit (see comment below) */ |
184 | mtmsrd(mfmsr() | MSR_PMM); | 183 | mtmsrd(mfmsr() | MSR_PMM); |
@@ -187,7 +186,7 @@ static void rs64_handle_interrupt(struct pt_regs *regs, | |||
187 | val = ctr_read(i); | 186 | val = ctr_read(i); |
188 | if (val < 0) { | 187 | if (val < 0) { |
189 | if (ctr[i].enabled) { | 188 | if (ctr[i].enabled) { |
190 | oprofile_add_pc(pc, is_kernel, i); | 189 | oprofile_add_pc(pc, is_kernel_addr(pc), i); |
191 | ctr_write(i, reset_value[i]); | 190 | ctr_write(i, reset_value[i]); |
192 | } else { | 191 | } else { |
193 | ctr_write(i, 0); | 192 | ctr_write(i, 0); |
diff --git a/arch/powerpc/xmon/xmon.c b/arch/powerpc/xmon/xmon.c index 465b75c5647e..22612ed5379c 100644 --- a/arch/powerpc/xmon/xmon.c +++ b/arch/powerpc/xmon/xmon.c | |||
@@ -1013,7 +1013,7 @@ static long check_bp_loc(unsigned long addr) | |||
1013 | unsigned int instr; | 1013 | unsigned int instr; |
1014 | 1014 | ||
1015 | addr &= ~3; | 1015 | addr &= ~3; |
1016 | if (addr < KERNELBASE) { | 1016 | if (!is_kernel_addr(addr)) { |
1017 | printf("Breakpoints may only be placed at kernel addresses\n"); | 1017 | printf("Breakpoints may only be placed at kernel addresses\n"); |
1018 | return 0; | 1018 | return 0; |
1019 | } | 1019 | } |
@@ -1064,7 +1064,7 @@ bpt_cmds(void) | |||
1064 | dabr.address = 0; | 1064 | dabr.address = 0; |
1065 | dabr.enabled = 0; | 1065 | dabr.enabled = 0; |
1066 | if (scanhex(&dabr.address)) { | 1066 | if (scanhex(&dabr.address)) { |
1067 | if (dabr.address < KERNELBASE) { | 1067 | if (!is_kernel_addr(dabr.address)) { |
1068 | printf(badaddr); | 1068 | printf(badaddr); |
1069 | break; | 1069 | break; |
1070 | } | 1070 | } |