aboutsummaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorAnton Blanchard <anton@samba.org>2007-03-20 10:48:34 -0400
committerPaul Mackerras <paulus@samba.org>2007-04-27 07:13:28 -0400
commitf13659e0b3907548402ce1f47bf866544b804260 (patch)
tree030fdf28172fb6ed9f3073a6c0a11b71b824e454 /arch
parente7273d2a0841612794dff43328d461beee95c986 (diff)
[POWERPC] Fix WARN_ON when entering xmon
Whenever we enter xmon we get a WARN_ON out of the rtas code since it thinks interrupts are still on: Unable to handle kernel paging request for data at address 0x00000000 Faulting instruction address: 0xd000000000080008 cpu 0x3: Vector: 300 (Data Access) at [c0000000075dba00] pc: d000000000080008: .doit+0x8/0x40 [oopser] lr: c000000000077704: .sys_init_module+0x1664/0x1824 sp: c0000000075dbc80 msr: 9000000000009032 dar: 0 dsisr: 42000000 current = 0xc000000003fa64b0 paca = 0xc000000000694280 pid = 2260, comm = insmod ------------[ cut here ]------------ Badness at arch/powerpc/kernel/entry_64.S:651 Call Trace: [C0000000075DAE70] [C00000000000EB64] .show_stack+0x68/0x1b0 (unreliable) [C0000000075DAF10] [C000000000216254] .report_bug+0x94/0xe8 [C0000000075DAFA0] [C00000000047B140] __kprobes_text_start+0x178/0x584 [C0000000075DB040] [C0000000000044F4] program_check_common+0xf4/0x100 Signed-off-by: Paul Mackerras <paulus@samba.org>
Diffstat (limited to 'arch')
-rw-r--r--arch/powerpc/xmon/xmon.c7
1 files changed, 3 insertions, 4 deletions
diff --git a/arch/powerpc/xmon/xmon.c b/arch/powerpc/xmon/xmon.c
index f12687d0354d..b481db1dacb4 100644
--- a/arch/powerpc/xmon/xmon.c
+++ b/arch/powerpc/xmon/xmon.c
@@ -330,18 +330,17 @@ static void release_output_lock(void)
330static int xmon_core(struct pt_regs *regs, int fromipi) 330static int xmon_core(struct pt_regs *regs, int fromipi)
331{ 331{
332 int cmd = 0; 332 int cmd = 0;
333 unsigned long msr;
334 struct bpt *bp; 333 struct bpt *bp;
335 long recurse_jmp[JMP_BUF_LEN]; 334 long recurse_jmp[JMP_BUF_LEN];
336 unsigned long offset; 335 unsigned long offset;
336 unsigned long flags;
337#ifdef CONFIG_SMP 337#ifdef CONFIG_SMP
338 int cpu; 338 int cpu;
339 int secondary; 339 int secondary;
340 unsigned long timeout; 340 unsigned long timeout;
341#endif 341#endif
342 342
343 msr = mfmsr(); 343 local_irq_save(flags);
344 mtmsr(msr & ~MSR_EE); /* disable interrupts */
345 344
346 bp = in_breakpoint_table(regs->nip, &offset); 345 bp = in_breakpoint_table(regs->nip, &offset);
347 if (bp != NULL) { 346 if (bp != NULL) {
@@ -516,7 +515,7 @@ static int xmon_core(struct pt_regs *regs, int fromipi)
516 515
517 insert_cpu_bpts(); 516 insert_cpu_bpts();
518 517
519 mtmsr(msr); /* restore interrupt enable */ 518 local_irq_restore(flags);
520 519
521 return cmd != 'X' && cmd != EOF; 520 return cmd != 'X' && cmd != EOF;
522} 521}