aboutsummaryrefslogtreecommitdiffstats
path: root/arch/s390/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'arch/s390/kernel')
-rw-r--r--arch/s390/kernel/Makefile5
-rw-r--r--arch/s390/kernel/early.c8
-rw-r--r--arch/s390/kernel/ipl.c1
-rw-r--r--arch/s390/kernel/process.c4
-rw-r--r--arch/s390/kernel/smp.c10
-rw-r--r--arch/s390/kernel/time.c2
6 files changed, 18 insertions, 12 deletions
diff --git a/arch/s390/kernel/Makefile b/arch/s390/kernel/Makefile
index b3b650a93c7c..4d3e38392cb1 100644
--- a/arch/s390/kernel/Makefile
+++ b/arch/s390/kernel/Makefile
@@ -4,6 +4,11 @@
4 4
5EXTRA_AFLAGS := -traditional 5EXTRA_AFLAGS := -traditional
6 6
7#
8# Passing null pointers is ok for smp code, since we access the lowcore here.
9#
10CFLAGS_smp.o := -Wno-nonnull
11
7obj-y := bitmap.o traps.o time.o process.o base.o early.o \ 12obj-y := bitmap.o traps.o time.o process.o base.o early.o \
8 setup.o sys_s390.o ptrace.o signal.o cpcmd.o ebcdic.o \ 13 setup.o sys_s390.o ptrace.o signal.o cpcmd.o ebcdic.o \
9 semaphore.o s390_ext.o debug.o irq.o ipl.o dis.o diag.o 14 semaphore.o s390_ext.o debug.o irq.o ipl.o dis.o diag.o
diff --git a/arch/s390/kernel/early.c b/arch/s390/kernel/early.c
index 9f7b73b180f0..01832c440636 100644
--- a/arch/s390/kernel/early.c
+++ b/arch/s390/kernel/early.c
@@ -88,13 +88,17 @@ static noinline __init void create_kernel_nss(void)
88 88
89 __cpcmd(defsys_cmd, NULL, 0, &response); 89 __cpcmd(defsys_cmd, NULL, 0, &response);
90 90
91 if (response != 0) 91 if (response != 0) {
92 kernel_nss_name[0] = '\0';
92 return; 93 return;
94 }
93 95
94 __cpcmd(savesys_cmd, NULL, 0, &response); 96 __cpcmd(savesys_cmd, NULL, 0, &response);
95 97
96 if (response != strlen(savesys_cmd)) 98 if (response != strlen(savesys_cmd)) {
99 kernel_nss_name[0] = '\0';
97 return; 100 return;
101 }
98 102
99 ipl_flags = IPL_NSS_VALID; 103 ipl_flags = IPL_NSS_VALID;
100} 104}
diff --git a/arch/s390/kernel/ipl.c b/arch/s390/kernel/ipl.c
index 60acdc266db1..375232c46c7a 100644
--- a/arch/s390/kernel/ipl.c
+++ b/arch/s390/kernel/ipl.c
@@ -704,6 +704,7 @@ void reipl_run(struct shutdown_trigger *trigger)
704 default: 704 default:
705 break; 705 break;
706 } 706 }
707 disabled_wait((unsigned long) __builtin_return_address(0));
707} 708}
708 709
709static void __init reipl_probe(void) 710static void __init reipl_probe(void)
diff --git a/arch/s390/kernel/process.c b/arch/s390/kernel/process.c
index 1c59ec161cf8..ce203154d8ce 100644
--- a/arch/s390/kernel/process.c
+++ b/arch/s390/kernel/process.c
@@ -152,6 +152,10 @@ static void default_idle(void)
152 local_mcck_disable(); 152 local_mcck_disable();
153 if (test_thread_flag(TIF_MCCK_PENDING)) { 153 if (test_thread_flag(TIF_MCCK_PENDING)) {
154 local_mcck_enable(); 154 local_mcck_enable();
155 /* disable monitor call class 0 */
156 __ctl_clear_bit(8, 15);
157 atomic_notifier_call_chain(&idle_chain, S390_CPU_NOT_IDLE,
158 hcpu);
155 local_irq_enable(); 159 local_irq_enable();
156 s390_handle_mcck(); 160 s390_handle_mcck();
157 return; 161 return;
diff --git a/arch/s390/kernel/smp.c b/arch/s390/kernel/smp.c
index 818bd09c0260..8f894d380a62 100644
--- a/arch/s390/kernel/smp.c
+++ b/arch/s390/kernel/smp.c
@@ -629,14 +629,8 @@ static int __cpuinit smp_alloc_lowcore(int cpu)
629 panic_stack = __get_free_page(GFP_KERNEL); 629 panic_stack = __get_free_page(GFP_KERNEL);
630 if (!panic_stack || !async_stack) 630 if (!panic_stack || !async_stack)
631 goto out; 631 goto out;
632 /* 632 memcpy(lowcore, &S390_lowcore, 512);
633 * Only need to copy the first 512 bytes from address 0. But since 633 memset((char *)lowcore + 512, 0, sizeof(*lowcore) - 512);
634 * the compiler emits a warning if src == NULL for memcpy use copy_page
635 * instead. Copies more than needed but this code is not performance
636 * critical.
637 */
638 copy_page(lowcore, &S390_lowcore);
639 memset((void *)lowcore + 512, 0, sizeof(*lowcore) - 512);
640 lowcore->async_stack = async_stack + ASYNC_SIZE; 634 lowcore->async_stack = async_stack + ASYNC_SIZE;
641 lowcore->panic_stack = panic_stack + PAGE_SIZE; 635 lowcore->panic_stack = panic_stack + PAGE_SIZE;
642 636
diff --git a/arch/s390/kernel/time.c b/arch/s390/kernel/time.c
index 76a5dd1b4ce9..cb232c155360 100644
--- a/arch/s390/kernel/time.c
+++ b/arch/s390/kernel/time.c
@@ -209,8 +209,6 @@ static void stop_hz_timer(void)
209 */ 209 */
210static void start_hz_timer(void) 210static void start_hz_timer(void)
211{ 211{
212 BUG_ON(!in_interrupt());
213
214 if (!cpu_isset(smp_processor_id(), nohz_cpu_mask)) 212 if (!cpu_isset(smp_processor_id(), nohz_cpu_mask))
215 return; 213 return;
216 account_ticks(get_clock()); 214 account_ticks(get_clock());