aboutsummaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
Diffstat (limited to 'arch')
-rw-r--r--arch/mips/Kconfig.debug9
-rw-r--r--arch/mips/kernel/process.c4
-rw-r--r--arch/mips/kernel/smtc.c19
3 files changed, 19 insertions, 13 deletions
diff --git a/arch/mips/Kconfig.debug b/arch/mips/Kconfig.debug
index d5e60a0c1ded..72d5c198e790 100644
--- a/arch/mips/Kconfig.debug
+++ b/arch/mips/Kconfig.debug
@@ -37,6 +37,15 @@ config DEBUG_STACK_USAGE
37 37
38 This option will slow down process creation somewhat. 38 This option will slow down process creation somewhat.
39 39
40config CONFIG_SMTC_IDLE_HOOK_DEBUG
41 bool "Enable additional debug checks before going into CPU idle loop"
42 depends on DEBUG_KERNEL && MIPS_MT_SMTC
43 help
44 This option enables Enable additional debug checks before going into
45 CPU idle loop. For details on these checks, see
46 arch/mips/kernel/smtc.c. This debugging option result in significant
47 overhead so should be disabled in production kernels.
48
40config KGDB 49config KGDB
41 bool "Remote GDB kernel debugging" 50 bool "Remote GDB kernel debugging"
42 depends on DEBUG_KERNEL && SYS_SUPPORTS_KGDB 51 depends on DEBUG_KERNEL && SYS_SUPPORTS_KGDB
diff --git a/arch/mips/kernel/process.c b/arch/mips/kernel/process.c
index a669089e4672..6bdfb5a9fa1a 100644
--- a/arch/mips/kernel/process.c
+++ b/arch/mips/kernel/process.c
@@ -51,11 +51,11 @@ ATTRIB_NORET void cpu_idle(void)
51 /* endless idle loop with no priority at all */ 51 /* endless idle loop with no priority at all */
52 while (1) { 52 while (1) {
53 while (!need_resched()) { 53 while (!need_resched()) {
54#ifdef CONFIG_MIPS_MT_SMTC 54#ifdef CONFIG_SMTC_IDLE_HOOK_DEBUG
55 extern void smtc_idle_loop_hook(void); 55 extern void smtc_idle_loop_hook(void);
56 56
57 smtc_idle_loop_hook(); 57 smtc_idle_loop_hook();
58#endif /* CONFIG_MIPS_MT_SMTC */ 58#endif
59 if (cpu_wait) 59 if (cpu_wait)
60 (*cpu_wait)(); 60 (*cpu_wait)();
61 } 61 }
diff --git a/arch/mips/kernel/smtc.c b/arch/mips/kernel/smtc.c
index 9251ea824937..f253eda27fa3 100644
--- a/arch/mips/kernel/smtc.c
+++ b/arch/mips/kernel/smtc.c
@@ -141,10 +141,7 @@ __setup("ipibufs=", ipibufs);
141__setup("nostlb", stlb_disable); 141__setup("nostlb", stlb_disable);
142__setup("asidmask=", asidmask_set); 142__setup("asidmask=", asidmask_set);
143 143
144/* Enable additional debug checks before going into CPU idle loop */ 144#ifdef CONFIG_SMTC_IDLE_HOOK_DEBUG
145#define SMTC_IDLE_HOOK_DEBUG
146
147#ifdef SMTC_IDLE_HOOK_DEBUG
148 145
149static int hang_trig = 0; 146static int hang_trig = 0;
150 147
@@ -176,7 +173,7 @@ int tcnoprog[NR_CPUS];
176static atomic_t idle_hook_initialized = {0}; 173static atomic_t idle_hook_initialized = {0};
177static int clock_hang_reported[NR_CPUS]; 174static int clock_hang_reported[NR_CPUS];
178 175
179#endif /* SMTC_IDLE_HOOK_DEBUG */ 176#endif /* CONFIG_SMTC_IDLE_HOOK_DEBUG */
180 177
181/* Initialize shared TLB - the should probably migrate to smtc_setup_cpus() */ 178/* Initialize shared TLB - the should probably migrate to smtc_setup_cpus() */
182 179
@@ -394,10 +391,10 @@ void mipsmt_prepare_cpus(void)
394 printk("ASID mask value override to 0x%x\n", asidmask); 391 printk("ASID mask value override to 0x%x\n", asidmask);
395 392
396 /* Temporary */ 393 /* Temporary */
397#ifdef SMTC_IDLE_HOOK_DEBUG 394#ifdef CONFIG_SMTC_IDLE_HOOK_DEBUG
398 if (hang_trig) 395 if (hang_trig)
399 printk("Logic Analyser Trigger on suspected TC hang\n"); 396 printk("Logic Analyser Trigger on suspected TC hang\n");
400#endif /* SMTC_IDLE_HOOK_DEBUG */ 397#endif /* CONFIG_SMTC_IDLE_HOOK_DEBUG */
401 398
402 /* Put MVPE's into 'configuration state' */ 399 /* Put MVPE's into 'configuration state' */
403 write_c0_mvpcontrol( read_c0_mvpcontrol() | MVPCONTROL_VPC ); 400 write_c0_mvpcontrol( read_c0_mvpcontrol() | MVPCONTROL_VPC );
@@ -817,9 +814,9 @@ void ipi_decode(struct smtc_ipi *pipi)
817 case SMTC_CLOCK_TICK: 814 case SMTC_CLOCK_TICK:
818 /* Invoke Clock "Interrupt" */ 815 /* Invoke Clock "Interrupt" */
819 ipi_timer_latch[dest_copy] = 0; 816 ipi_timer_latch[dest_copy] = 0;
820#ifdef SMTC_IDLE_HOOK_DEBUG 817#ifdef CONFIG_SMTC_IDLE_HOOK_DEBUG
821 clock_hang_reported[dest_copy] = 0; 818 clock_hang_reported[dest_copy] = 0;
822#endif /* SMTC_IDLE_HOOK_DEBUG */ 819#endif /* CONFIG_SMTC_IDLE_HOOK_DEBUG */
823 local_timer_interrupt(0, NULL); 820 local_timer_interrupt(0, NULL);
824 break; 821 break;
825 case LINUX_SMP_IPI: 822 case LINUX_SMP_IPI:
@@ -1020,7 +1017,7 @@ EXPORT_SYMBOL(smtc_ipi_replay);
1020 1017
1021void smtc_idle_loop_hook(void) 1018void smtc_idle_loop_hook(void)
1022{ 1019{
1023#ifdef SMTC_IDLE_HOOK_DEBUG 1020#ifdef CONFIG_SMTC_IDLE_HOOK_DEBUG
1024 int im; 1021 int im;
1025 int flags; 1022 int flags;
1026 int mtflags; 1023 int mtflags;
@@ -1113,7 +1110,7 @@ void smtc_idle_loop_hook(void)
1113 local_irq_restore(flags); 1110 local_irq_restore(flags);
1114 if (pdb_msg != &id_ho_db_msg[0]) 1111 if (pdb_msg != &id_ho_db_msg[0])
1115 printk("CPU%d: %s", smp_processor_id(), id_ho_db_msg); 1112 printk("CPU%d: %s", smp_processor_id(), id_ho_db_msg);
1116#endif /* SMTC_IDLE_HOOK_DEBUG */ 1113#endif /* CONFIG_SMTC_IDLE_HOOK_DEBUG */
1117 1114
1118 /* 1115 /*
1119 * Replay any accumulated deferred IPIs. If "Instant Replay" 1116 * Replay any accumulated deferred IPIs. If "Instant Replay"