flag 1
 END(EV_DCError)
 
+; ---------------------------------------------
+; Memory Error Exception Handler
+;   - Unlike ARCompact, handles Bus errors for both User/Kernel mode,
+;     Instruction fetch or Data access, under a single Exception Vector
+; ---------------------------------------------
+
+ENTRY(mem_service)
+
+       EXCEPTION_PROLOGUE
+
+       lr  r0, [efa]
+       mov r1, sp
+
+       FAKE_RET_FROM_EXCPN
+
+       bl  do_memory_error
+       b   ret_from_exception
+END(mem_service)
+
 ENTRY(EV_Misaligned)
 
        EXCEPTION_PROLOGUE
 
        .zero 4
 
 /* Each Interrupt level needs its own scratch */
-#ifdef CONFIG_ARC_COMPACT_IRQ_LEVELS
-
 ARCFP_DATA int2_saved_reg
        .type   int2_saved_reg, @object
        .size   int2_saved_reg, 4
 int2_saved_reg:
        .zero 4
 
-#endif
-
 ; ---------------------------------------------
        .section .text, "ax",@progbits
 
 
 #endif
 
+; ---------------------------------------------
+; User Mode Memory Bus Error Interrupt Handler
+; (Kernel mode memory errors handled via seperate exception vectors)
+; ---------------------------------------------
+ENTRY(mem_service)
+
+       INTERRUPT_PROLOGUE 2
+
+       mov r0, ilink2
+       mov r1, sp
+
+       ; User process needs to be killed with SIGBUS, but first need to get
+       ; out of the L2 interrupt context (drop to pure kernel mode) and jump
+       ; off to "C" code where SIGBUS in enqueued
+       lr  r3, [status32]
+       bclr r3, r3, STATUS_A2_BIT
+       or  r3, r3, (STATUS_E1_MASK|STATUS_E2_MASK)
+       sr  r3, [status32_l2]
+       mov ilink2, 1f
+       rtie
+1:
+       bl  do_memory_error
+       b   ret_from_exception
+END(mem_service)
+
 ; ---------------------------------------------
 ;  Level 1 ISR
 ; ---------------------------------------------
 
        b   ret_from_exception
 END(instr_service)
 
-; ---------------------------------------------
-; Memory Error Exception Handler
-; ---------------------------------------------
-
-ENTRY(mem_service)
-
-       EXCEPTION_PROLOGUE
-
-       lr  r0, [efa]
-       mov r1, sp
-
-       FAKE_RET_FROM_EXCPN
-
-       bl  do_memory_error
-       b   ret_from_exception
-END(mem_service)
-
 ; ---------------------------------------------
 ; Machine Check Exception Handler
 ; ---------------------------------------------