|
@@ -291,11 +291,6 @@ void die_if_kernel(char *str, struct pt_regs *regs, long err)
|
|
|
do_exit(SIGSEGV);
|
|
|
}
|
|
|
|
|
|
-int syscall_ipi(int (*syscall) (struct pt_regs *), struct pt_regs *regs)
|
|
|
-{
|
|
|
- return syscall(regs);
|
|
|
-}
|
|
|
-
|
|
|
/* gdb uses break 4,8 */
|
|
|
#define GDB_BREAK_INSN 0x10004
|
|
|
static void handle_gdb_break(struct pt_regs *regs, int wot)
|
|
@@ -805,14 +800,14 @@ void notrace handle_interruption(int code, struct pt_regs *regs)
|
|
|
else {
|
|
|
|
|
|
/*
|
|
|
- * The kernel should never fault on its own address space.
|
|
|
+ * The kernel should never fault on its own address space,
|
|
|
+ * unless pagefault_disable() was called before.
|
|
|
*/
|
|
|
|
|
|
- if (fault_space == 0)
|
|
|
+ if (fault_space == 0 && !in_atomic())
|
|
|
{
|
|
|
pdc_chassis_send_status(PDC_CHASSIS_DIRECT_PANIC);
|
|
|
parisc_terminate("Kernel Fault", regs, code, fault_address);
|
|
|
-
|
|
|
}
|
|
|
}
|
|
|
|