diff options
Diffstat (limited to 'arch/s390/kernel')
| -rw-r--r-- | arch/s390/kernel/early.c | 4 | ||||
| -rw-r--r-- | arch/s390/kernel/smp.c | 7 | ||||
| -rw-r--r-- | arch/s390/kernel/vdso64/clock_gettime.S | 11 |
3 files changed, 15 insertions, 7 deletions
diff --git a/arch/s390/kernel/early.c b/arch/s390/kernel/early.c index f9b144049dc9..8d15314381e0 100644 --- a/arch/s390/kernel/early.c +++ b/arch/s390/kernel/early.c | |||
| @@ -210,7 +210,7 @@ static noinline __init void detect_machine_type(void) | |||
| 210 | machine_flags |= MACHINE_FLAG_VM; | 210 | machine_flags |= MACHINE_FLAG_VM; |
| 211 | } | 211 | } |
| 212 | 212 | ||
| 213 | static void early_pgm_check_handler(void) | 213 | static __init void early_pgm_check_handler(void) |
| 214 | { | 214 | { |
| 215 | unsigned long addr; | 215 | unsigned long addr; |
| 216 | const struct exception_table_entry *fixup; | 216 | const struct exception_table_entry *fixup; |
| @@ -222,7 +222,7 @@ static void early_pgm_check_handler(void) | |||
| 222 | S390_lowcore.program_old_psw.addr = fixup->fixup | PSW_ADDR_AMODE; | 222 | S390_lowcore.program_old_psw.addr = fixup->fixup | PSW_ADDR_AMODE; |
| 223 | } | 223 | } |
| 224 | 224 | ||
| 225 | void setup_lowcore_early(void) | 225 | static noinline __init void setup_lowcore_early(void) |
| 226 | { | 226 | { |
| 227 | psw_t psw; | 227 | psw_t psw; |
| 228 | 228 | ||
diff --git a/arch/s390/kernel/smp.c b/arch/s390/kernel/smp.c index 2270730f5354..be2cae083406 100644 --- a/arch/s390/kernel/smp.c +++ b/arch/s390/kernel/smp.c | |||
| @@ -687,13 +687,14 @@ void __init smp_prepare_cpus(unsigned int max_cpus) | |||
| 687 | #ifndef CONFIG_64BIT | 687 | #ifndef CONFIG_64BIT |
| 688 | if (MACHINE_HAS_IEEE) | 688 | if (MACHINE_HAS_IEEE) |
| 689 | lowcore->extended_save_area_addr = (u32) save_area; | 689 | lowcore->extended_save_area_addr = (u32) save_area; |
| 690 | #else | ||
| 691 | if (vdso_alloc_per_cpu(smp_processor_id(), lowcore)) | ||
| 692 | BUG(); | ||
| 693 | #endif | 690 | #endif |
| 694 | set_prefix((u32)(unsigned long) lowcore); | 691 | set_prefix((u32)(unsigned long) lowcore); |
| 695 | local_mcck_enable(); | 692 | local_mcck_enable(); |
| 696 | local_irq_enable(); | 693 | local_irq_enable(); |
| 694 | #ifdef CONFIG_64BIT | ||
| 695 | if (vdso_alloc_per_cpu(smp_processor_id(), &S390_lowcore)) | ||
| 696 | BUG(); | ||
| 697 | #endif | ||
| 697 | for_each_possible_cpu(cpu) | 698 | for_each_possible_cpu(cpu) |
| 698 | if (cpu != smp_processor_id()) | 699 | if (cpu != smp_processor_id()) |
| 699 | smp_create_idle(cpu); | 700 | smp_create_idle(cpu); |
diff --git a/arch/s390/kernel/vdso64/clock_gettime.S b/arch/s390/kernel/vdso64/clock_gettime.S index 79dbfee831ec..49106c6e6f88 100644 --- a/arch/s390/kernel/vdso64/clock_gettime.S +++ b/arch/s390/kernel/vdso64/clock_gettime.S | |||
| @@ -88,10 +88,17 @@ __kernel_clock_gettime: | |||
| 88 | llilh %r4,0x0100 | 88 | llilh %r4,0x0100 |
| 89 | sar %a4,%r4 | 89 | sar %a4,%r4 |
| 90 | lghi %r4,0 | 90 | lghi %r4,0 |
| 91 | epsw %r5,0 | ||
| 91 | sacf 512 /* Magic ectg instruction */ | 92 | sacf 512 /* Magic ectg instruction */ |
| 92 | .insn ssf,0xc80100000000,__VDSO_ECTG_BASE(4),__VDSO_ECTG_USER(4),4 | 93 | .insn ssf,0xc80100000000,__VDSO_ECTG_BASE(4),__VDSO_ECTG_USER(4),4 |
| 93 | sacf 0 | 94 | tml %r5,0x4000 |
| 94 | sar %a4,%r2 | 95 | jo 11f |
| 96 | tml %r5,0x8000 | ||
| 97 | jno 10f | ||
| 98 | sacf 256 | ||
| 99 | j 11f | ||
| 100 | 10: sacf 0 | ||
| 101 | 11: sar %a4,%r2 | ||
| 95 | algr %r1,%r0 /* r1 = cputime as TOD value */ | 102 | algr %r1,%r0 /* r1 = cputime as TOD value */ |
| 96 | mghi %r1,1000 /* convert to nanoseconds */ | 103 | mghi %r1,1000 /* convert to nanoseconds */ |
| 97 | srlg %r1,%r1,12 /* r1 = cputime in nanosec */ | 104 | srlg %r1,%r1,12 /* r1 = cputime in nanosec */ |
