static int xmon_core(struct pt_regs *regs, int fromipi)
 {
        int cmd = 0;
-       unsigned long msr;
        struct bpt *bp;
        long recurse_jmp[JMP_BUF_LEN];
        unsigned long offset;
+       unsigned long flags;
 #ifdef CONFIG_SMP
        int cpu;
        int secondary;
        unsigned long timeout;
 #endif
 
-       msr = mfmsr();
-       mtmsr(msr & ~MSR_EE);   /* disable interrupts */
+       local_irq_save(flags);
 
        bp = in_breakpoint_table(regs->nip, &offset);
        if (bp != NULL) {
 
        insert_cpu_bpts();
 
-       mtmsr(msr);             /* restore interrupt enable */
+       local_irq_restore(flags);
 
        return cmd != 'X' && cmd != EOF;
 }