diff options
Diffstat (limited to 'arch/s390/kernel/traps.c')
-rw-r--r-- | arch/s390/kernel/traps.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/arch/s390/kernel/traps.c b/arch/s390/kernel/traps.c index bc7b7be7acbe..6b8703ec2ae6 100644 --- a/arch/s390/kernel/traps.c +++ b/arch/s390/kernel/traps.c | |||
@@ -29,6 +29,7 @@ | |||
29 | #include <linux/delay.h> | 29 | #include <linux/delay.h> |
30 | #include <linux/module.h> | 30 | #include <linux/module.h> |
31 | #include <linux/kallsyms.h> | 31 | #include <linux/kallsyms.h> |
32 | #include <linux/reboot.h> | ||
32 | 33 | ||
33 | #include <asm/system.h> | 34 | #include <asm/system.h> |
34 | #include <asm/uaccess.h> | 35 | #include <asm/uaccess.h> |
@@ -675,6 +676,19 @@ asmlinkage void kernel_stack_overflow(struct pt_regs * regs) | |||
675 | panic("Corrupt kernel stack, can't continue."); | 676 | panic("Corrupt kernel stack, can't continue."); |
676 | } | 677 | } |
677 | 678 | ||
679 | #ifndef CONFIG_ARCH_S390X | ||
680 | static int | ||
681 | pagex_reboot_event(struct notifier_block *this, unsigned long event, void *ptr) | ||
682 | { | ||
683 | if (MACHINE_IS_VM) | ||
684 | cpcmd("SET PAGEX OFF", NULL, 0, NULL); | ||
685 | return NOTIFY_DONE; | ||
686 | } | ||
687 | |||
688 | static struct notifier_block pagex_reboot_notifier = { | ||
689 | .notifier_call = &pagex_reboot_event, | ||
690 | }; | ||
691 | #endif | ||
678 | 692 | ||
679 | /* init is done in lowcore.S and head.S */ | 693 | /* init is done in lowcore.S and head.S */ |
680 | 694 | ||
@@ -735,6 +749,7 @@ void __init trap_init(void) | |||
735 | &ext_int_pfault); | 749 | &ext_int_pfault); |
736 | #endif | 750 | #endif |
737 | #ifndef CONFIG_ARCH_S390X | 751 | #ifndef CONFIG_ARCH_S390X |
752 | register_reboot_notifier(&pagex_reboot_notifier); | ||
738 | cpcmd("SET PAGEX ON", NULL, 0, NULL); | 753 | cpcmd("SET PAGEX ON", NULL, 0, NULL); |
739 | #endif | 754 | #endif |
740 | } | 755 | } |