diff options
| author | David S. Miller <davem@davemloft.net> | 2008-03-18 02:44:31 -0400 |
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2008-03-18 02:44:31 -0400 |
| commit | 2f633928cbba8a5858bb39b11e7219a41b0fbef5 (patch) | |
| tree | 9a82f4b7f2c3afe4b0208d8e44ea61bae90a7d22 /arch/s390/kernel | |
| parent | 5e226e4d9016daee170699f8a4188a5505021756 (diff) | |
| parent | bde4f8fa8db2abd5ac9c542d76012d0fedab050f (diff) | |
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6
Diffstat (limited to 'arch/s390/kernel')
| -rw-r--r-- | arch/s390/kernel/Makefile | 5 | ||||
| -rw-r--r-- | arch/s390/kernel/early.c | 8 | ||||
| -rw-r--r-- | arch/s390/kernel/ipl.c | 1 | ||||
| -rw-r--r-- | arch/s390/kernel/process.c | 4 | ||||
| -rw-r--r-- | arch/s390/kernel/smp.c | 10 | ||||
| -rw-r--r-- | arch/s390/kernel/time.c | 2 |
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 | ||
| 5 | EXTRA_AFLAGS := -traditional | 5 | EXTRA_AFLAGS := -traditional |
| 6 | 6 | ||
| 7 | # | ||
| 8 | # Passing null pointers is ok for smp code, since we access the lowcore here. | ||
| 9 | # | ||
| 10 | CFLAGS_smp.o := -Wno-nonnull | ||
| 11 | |||
| 7 | obj-y := bitmap.o traps.o time.o process.o base.o early.o \ | 12 | obj-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 | ||
| 709 | static void __init reipl_probe(void) | 710 | static 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 | */ |
| 210 | static void start_hz_timer(void) | 210 | static 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()); |
