Index: kernel/arch/sparc32/include/arch/exception.h
===================================================================
--- kernel/arch/sparc32/include/arch/exception.h	(revision 382fb4baf834128321f258a0f8461ee068e40f55)
+++ kernel/arch/sparc32/include/arch/exception.h	(revision f7a33dea6c14aefebb1d11fcaf8d904947793cad)
@@ -68,4 +68,5 @@
 extern void mem_address_not_aligned(int n, istate_t *istate);
 extern sysarg_t syscall(sysarg_t a1, sysarg_t a2, sysarg_t a3, sysarg_t a4, sysarg_t a5, sysarg_t a6, sysarg_t id);
+extern void irq_exception(unsigned int nr, istate_t *istate);
 
 #endif /* !__ASM__ */
Index: kernel/arch/sparc32/src/exception.c
===================================================================
--- kernel/arch/sparc32/src/exception.c	(revision 382fb4baf834128321f258a0f8461ee068e40f55)
+++ kernel/arch/sparc32/src/exception.c	(revision f7a33dea6c14aefebb1d11fcaf8d904947793cad)
@@ -40,4 +40,5 @@
 #include <arch/exception.h>
 #include <arch/regwin.h>
+#include <arch/machine_func.h>
 #include <syscall/syscall.h>
 #include <interrupt.h>
@@ -149,10 +150,15 @@
 //	printf("syscall %d\n", id);
 //	printf("args: 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x\n", a1, a2, a3, a4, a5, a6);
-        if (id == 0x4f) {
-            flush_windows();
-            return 0;
-        }
+//        if (id == 0x4f) {
+  //          flush_windows();
+    //        return 0;
+      //  }
     
 	return syscall_handler(a1, a2, a3, a4, a5, a6, id);
+}
+
+void irq_exception(unsigned int nr, istate_t *istate)
+{
+	machine_irq_exception(nr, istate);
 }
 
Index: kernel/arch/sparc32/src/trap_table.S
===================================================================
--- kernel/arch/sparc32/src/trap_table.S	(revision 382fb4baf834128321f258a0f8461ee068e40f55)
+++ kernel/arch/sparc32/src/trap_table.S	(revision f7a33dea6c14aefebb1d11fcaf8d904947793cad)
@@ -669,5 +669,7 @@
 	nop
 
-9:	ld [%sp + 104], %g1
+9:	inline_restore_kernel
+
+	ld [%sp + 104], %g1
 	ld [%sp + 108], %g2
 	ld [%sp + 112], %g3
@@ -754,5 +756,5 @@
 	/* Jump to actual subroutine */
 	mov %g2, %o0
-	call exc_dispatch
+	call irq_exception
 	add %sp, 128, %o1
 
Index: kernel/genarch/src/drivers/grlib_irqmp/grlib_irqmp.c
===================================================================
--- kernel/genarch/src/drivers/grlib_irqmp/grlib_irqmp.c	(revision 382fb4baf834128321f258a0f8461ee068e40f55)
+++ kernel/genarch/src/drivers/grlib_irqmp/grlib_irqmp.c	(revision f7a33dea6c14aefebb1d11fcaf8d904947793cad)
@@ -48,5 +48,5 @@
 
 	/* Mask all interrupts */
-	pio_write_32((void *)irqc->regs + GRLIB_IRQMP_MASK_OFFSET, 0);
+	pio_write_32((void *)irqc->regs + GRLIB_IRQMP_MASK_OFFSET, 0x8);
 }
 
