aboutsummaryrefslogtreecommitdiffstats
path: root/arch/powerpc
diff options
context:
space:
mode:
authorOliver O'Halloran <oohall@gmail.com>2016-07-04 21:43:21 -0400
committerMichael Ellerman <mpe@ellerman.id.au>2016-07-05 09:58:54 -0400
commitfaf7882962e78a4c8ebb846f4520c858ee184dca (patch)
tree968e11ff8ad806d4b2e4105c181460033e295df9 /arch/powerpc
parent799010244685334b34e674d354a1a71a3a6b6148 (diff)
powerpc/mm: Add a parameter to disable 1TB segs
This patch adds the kernel command line parameter "no_tb_segs" which forces the kernel to use 256MB rather than 1TB segments. Forcing the use of 256MB segments makes it considerably easier to test code that depends on an SLB miss occurring. Suggested-by: Michael Neuling <mikey@neuling.org> Suggested-by: Michael Ellerman <mpe@ellerman.id.au> Signed-off-by: Oliver O'Halloran <oohall@gmail.com> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Diffstat (limited to 'arch/powerpc')
-rw-r--r--arch/powerpc/mm/hash_utils_64.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/arch/powerpc/mm/hash_utils_64.c b/arch/powerpc/mm/hash_utils_64.c
index b2740c67e172..fab46dbe68b3 100644
--- a/arch/powerpc/mm/hash_utils_64.c
+++ b/arch/powerpc/mm/hash_utils_64.c
@@ -317,6 +317,15 @@ int htab_remove_mapping(unsigned long vstart, unsigned long vend,
317 return ret; 317 return ret;
318} 318}
319 319
320static bool disable_1tb_segments = false;
321
322static int __init parse_disable_1tb_segments(char *p)
323{
324 disable_1tb_segments = true;
325 return 0;
326}
327early_param("disable_1tb_segments", parse_disable_1tb_segments);
328
320static int __init htab_dt_scan_seg_sizes(unsigned long node, 329static int __init htab_dt_scan_seg_sizes(unsigned long node,
321 const char *uname, int depth, 330 const char *uname, int depth,
322 void *data) 331 void *data)
@@ -335,6 +344,12 @@ static int __init htab_dt_scan_seg_sizes(unsigned long node,
335 for (; size >= 4; size -= 4, ++prop) { 344 for (; size >= 4; size -= 4, ++prop) {
336 if (be32_to_cpu(prop[0]) == 40) { 345 if (be32_to_cpu(prop[0]) == 40) {
337 DBG("1T segment support detected\n"); 346 DBG("1T segment support detected\n");
347
348 if (disable_1tb_segments) {
349 DBG("1T segments disabled by command line\n");
350 break;
351 }
352
338 cur_cpu_spec->mmu_features |= MMU_FTR_1T_SEGMENT; 353 cur_cpu_spec->mmu_features |= MMU_FTR_1T_SEGMENT;
339 return 1; 354 return 1;
340 } 355 }