diff options
author | Heiko Carstens <heiko.carstens@de.ibm.com> | 2005-06-25 17:55:30 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@ppc970.osdl.org> | 2005-06-25 19:24:37 -0400 |
commit | 77fa22450de00d535de2cc8be653983560828000 (patch) | |
tree | 61644edb2263c3d0db3ea9e9518c6f76a60039e0 /arch/s390/kernel/smp.c | |
parent | f901e5d1e06b3326c100c5d0df43656311befb81 (diff) |
[PATCH] s390: improved machine check handling
Improved machine check handling. Kernel is now able to receive machine checks
while in kernel mode (system call, interrupt and program check handling).
Also register validation is now performed.
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'arch/s390/kernel/smp.c')
-rw-r--r-- | arch/s390/kernel/smp.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/arch/s390/kernel/smp.c b/arch/s390/kernel/smp.c index 93c71fef99dc..50c335067cfe 100644 --- a/arch/s390/kernel/smp.c +++ b/arch/s390/kernel/smp.c | |||
@@ -773,13 +773,24 @@ void __init smp_prepare_cpus(unsigned int max_cpus) | |||
773 | 773 | ||
774 | *(lowcore_ptr[i]) = S390_lowcore; | 774 | *(lowcore_ptr[i]) = S390_lowcore; |
775 | lowcore_ptr[i]->async_stack = stack + (ASYNC_SIZE); | 775 | lowcore_ptr[i]->async_stack = stack + (ASYNC_SIZE); |
776 | #ifdef CONFIG_CHECK_STACK | ||
777 | stack = __get_free_pages(GFP_KERNEL,0); | 776 | stack = __get_free_pages(GFP_KERNEL,0); |
778 | if (stack == 0ULL) | 777 | if (stack == 0ULL) |
779 | panic("smp_boot_cpus failed to allocate memory\n"); | 778 | panic("smp_boot_cpus failed to allocate memory\n"); |
780 | lowcore_ptr[i]->panic_stack = stack + (PAGE_SIZE); | 779 | lowcore_ptr[i]->panic_stack = stack + (PAGE_SIZE); |
780 | #ifndef __s390x__ | ||
781 | if (MACHINE_HAS_IEEE) { | ||
782 | lowcore_ptr[i]->extended_save_area_addr = | ||
783 | (__u32) __get_free_pages(GFP_KERNEL,0); | ||
784 | if (lowcore_ptr[i]->extended_save_area_addr == 0) | ||
785 | panic("smp_boot_cpus failed to " | ||
786 | "allocate memory\n"); | ||
787 | } | ||
781 | #endif | 788 | #endif |
782 | } | 789 | } |
790 | #ifndef __s390x__ | ||
791 | if (MACHINE_HAS_IEEE) | ||
792 | ctl_set_bit(14, 29); /* enable extended save area */ | ||
793 | #endif | ||
783 | set_prefix((u32)(unsigned long) lowcore_ptr[smp_processor_id()]); | 794 | set_prefix((u32)(unsigned long) lowcore_ptr[smp_processor_id()]); |
784 | 795 | ||
785 | for_each_cpu(cpu) | 796 | for_each_cpu(cpu) |