beql    ppc64_runlatch_on_trampoline;   \
 END_FTR_SECTION_IFSET(CPU_FTR_CTRL)
 
-#define EXCEPTION_COMMON(trap, label, hdlr, ret, additions)    \
-       EXCEPTION_PROLOG_COMMON(trap, PACA_EXGEN);              \
+#define EXCEPTION_COMMON(area, trap, label, hdlr, ret, additions) \
+       EXCEPTION_PROLOG_COMMON(trap, area);                    \
        /* Volatile regs are potentially clobbered here */      \
        additions;                                              \
        addi    r3,r1,STACK_FRAME_OVERHEAD;                     \
        b       ret
 
 #define STD_EXCEPTION_COMMON(trap, label, hdlr)                        \
-       EXCEPTION_COMMON(trap, label, hdlr, ret_from_except,    \
-                        ADD_NVGPRS;ADD_RECONCILE)
+       EXCEPTION_COMMON(PACA_EXGEN, trap, label, hdlr,         \
+               ret_from_except, ADD_NVGPRS;ADD_RECONCILE)
 
 /*
  * Like STD_EXCEPTION_COMMON, but for exceptions that can occur
  * in the idle task and therefore need the special idle handling
  * (finish nap and runlatch)
  */
-#define STD_EXCEPTION_COMMON_ASYNC(trap, label, hdlr)            \
-       EXCEPTION_COMMON(trap, label, hdlr, ret_from_except_lite, \
-                        FINISH_NAP;ADD_RECONCILE;RUNLATCH_ON)
+#define STD_EXCEPTION_COMMON_ASYNC(trap, label, hdlr)          \
+       EXCEPTION_COMMON(PACA_EXGEN, trap, label, hdlr,         \
+               ret_from_except_lite, FINISH_NAP;ADD_RECONCILE;RUNLATCH_ON)
 
 /*
  * When the idle code in power4_idle puts the CPU into NAP mode,
 
         */
        /* used for most interrupts/exceptions */
        u64 exgen[13] __attribute__((aligned(0x80)));
-       u64 exmc[13];           /* used for machine checks */
        u64 exslb[13];          /* used for SLB/segment table misses
                                 * on the linear mapping */
        /* SLB related definitions */
        struct paca_struct **thread_sibling_pacas;
 #endif
 
+#ifdef CONFIG_PPC_STD_MMU_64
+       /* Non-maskable exceptions that are not performance critical */
+       u64 exnmi[13];          /* used for system reset (nmi) */
+       u64 exmc[13];           /* used for machine checks */
+#endif
 #ifdef CONFIG_PPC_BOOK3S_64
        /* Exclusive emergency stack pointer for machine check exception. */
        void *mc_emergency_sp;
 
        OFFSET(PACA_EXGEN, paca_struct, exgen);
        OFFSET(PACA_EXMC, paca_struct, exmc);
        OFFSET(PACA_EXSLB, paca_struct, exslb);
+       OFFSET(PACA_EXNMI, paca_struct, exnmi);
        OFFSET(PACALPPACAPTR, paca_struct, lppaca_ptr);
        OFFSET(PACA_SLBSHADOWPTR, paca_struct, slb_shadow_ptr);
        OFFSET(SLBSHADOW_STACKVSID, slb_shadow, save_area[SLB_NUM_BOLTED - 1].vsid);
 
 
 EXC_REAL_BEGIN(system_reset, 0x100, 0x100)
        SET_SCRATCH0(r13)
-       EXCEPTION_PROLOG_PSERIES(PACA_EXGEN, system_reset_common, EXC_STD,
+       EXCEPTION_PROLOG_PSERIES(PACA_EXNMI, system_reset_common, EXC_STD,
                                 IDLETEST, 0x100)
 
 EXC_REAL_END(system_reset, 0x100, 0x100)
        b       pnv_powersave_wakeup
 #endif
 
-EXC_COMMON(system_reset_common, 0x100, system_reset_exception)
+EXC_COMMON_BEGIN(system_reset_common)
+       EXCEPTION_COMMON(PACA_EXNMI, 0x100,
+                       system_reset, system_reset_exception,
+                       ret_from_except, ADD_NVGPRS;ADD_RECONCILE)
 
 #ifdef CONFIG_PPC_PSERIES
 /*
  */
 TRAMP_REAL_BEGIN(system_reset_fwnmi)
        SET_SCRATCH0(r13)               /* save r13 */
-       EXCEPTION_PROLOG_PSERIES(PACA_EXGEN, system_reset_common, EXC_STD,
+       EXCEPTION_PROLOG_PSERIES(PACA_EXNMI, system_reset_common, EXC_STD,
                                 NOTEST, 0x100)
 #endif /* CONFIG_PPC_PSERIES */