diff options
Diffstat (limited to 'arch/s390/kernel')
-rw-r--r-- | arch/s390/kernel/compat_signal.c | 2 | ||||
-rw-r--r-- | arch/s390/kernel/compat_wrapper.S | 50 | ||||
-rw-r--r-- | arch/s390/kernel/ptrace.c | 5 | ||||
-rw-r--r-- | arch/s390/kernel/signal.c | 5 | ||||
-rw-r--r-- | arch/s390/kernel/syscalls.S | 6 | ||||
-rw-r--r-- | arch/s390/kernel/time.c | 9 | ||||
-rw-r--r-- | arch/s390/kernel/vmlinux.lds.S | 4 |
7 files changed, 70 insertions, 11 deletions
diff --git a/arch/s390/kernel/compat_signal.c b/arch/s390/kernel/compat_signal.c index 5291b5f8788d..b4c815d8ef75 100644 --- a/arch/s390/kernel/compat_signal.c +++ b/arch/s390/kernel/compat_signal.c | |||
@@ -430,7 +430,7 @@ get_sigframe(struct k_sigaction *ka, struct pt_regs * regs, size_t frame_size) | |||
430 | 430 | ||
431 | /* This is the X/Open sanctioned signal stack switching. */ | 431 | /* This is the X/Open sanctioned signal stack switching. */ |
432 | if (ka->sa.sa_flags & SA_ONSTACK) { | 432 | if (ka->sa.sa_flags & SA_ONSTACK) { |
433 | if (! on_sig_stack(sp)) | 433 | if (! sas_ss_flags(sp)) |
434 | sp = current->sas_ss_sp + current->sas_ss_size; | 434 | sp = current->sas_ss_sp + current->sas_ss_size; |
435 | } | 435 | } |
436 | 436 | ||
diff --git a/arch/s390/kernel/compat_wrapper.S b/arch/s390/kernel/compat_wrapper.S index 199da68bd7be..4d53b2739357 100644 --- a/arch/s390/kernel/compat_wrapper.S +++ b/arch/s390/kernel/compat_wrapper.S | |||
@@ -1608,3 +1608,53 @@ compat_sys_ppoll_wrapper: | |||
1608 | sys_unshare_wrapper: | 1608 | sys_unshare_wrapper: |
1609 | llgfr %r2,%r2 # unsigned long | 1609 | llgfr %r2,%r2 # unsigned long |
1610 | jg sys_unshare | 1610 | jg sys_unshare |
1611 | |||
1612 | .globl compat_sys_set_robust_list_wrapper | ||
1613 | compat_sys_set_robust_list_wrapper: | ||
1614 | llgtr %r2,%r2 # struct compat_robust_list_head * | ||
1615 | llgfr %r3,%r3 # size_t | ||
1616 | jg compat_sys_set_robust_list | ||
1617 | |||
1618 | .globl compat_sys_get_robust_list_wrapper | ||
1619 | compat_sys_get_robust_list_wrapper: | ||
1620 | lgfr %r2,%r2 # int | ||
1621 | llgtr %r3,%r3 # compat_uptr_t_t * | ||
1622 | llgtr %r4,%r4 # compat_size_t * | ||
1623 | jg compat_sys_get_robust_list | ||
1624 | |||
1625 | .globl sys_splice_wrapper | ||
1626 | sys_splice_wrapper: | ||
1627 | lgfr %r2,%r2 # int | ||
1628 | llgtr %r3,%r3 # loff_t * | ||
1629 | lgfr %r4,%r4 # int | ||
1630 | llgtr %r5,%r5 # loff_t * | ||
1631 | llgfr %r6,%r6 # size_t | ||
1632 | llgf %r0,164(%r15) # unsigned int | ||
1633 | stg %r0,160(%r15) | ||
1634 | jg sys_splice | ||
1635 | |||
1636 | .globl sys_sync_file_range_wrapper | ||
1637 | sys_sync_file_range_wrapper: | ||
1638 | lgfr %r2,%r2 # int | ||
1639 | sllg %r3,%r3,32 # get high word of 64bit loff_t | ||
1640 | or %r3,%r4 # get low word of 64bit loff_t | ||
1641 | sllg %r4,%r5,32 # get high word of 64bit loff_t | ||
1642 | or %r4,%r6 # get low word of 64bit loff_t | ||
1643 | llgf %r5,164(%r15) # unsigned int | ||
1644 | jg sys_sync_file_range | ||
1645 | |||
1646 | .globl sys_tee_wrapper | ||
1647 | sys_tee_wrapper: | ||
1648 | lgfr %r2,%r2 # int | ||
1649 | lgfr %r3,%r3 # int | ||
1650 | llgfr %r4,%r4 # size_t | ||
1651 | llgfr %r5,%r5 # unsigned int | ||
1652 | jg sys_tee | ||
1653 | |||
1654 | .globl compat_sys_vmsplice_wrapper | ||
1655 | compat_sys_vmsplice_wrapper: | ||
1656 | lgfr %r2,%r2 # int | ||
1657 | llgtr %r3,%r3 # compat_iovec * | ||
1658 | llgfr %r4,%r4 # unsigned int | ||
1659 | llgfr %r5,%r5 # unsigned int | ||
1660 | jg compat_sys_vmsplice | ||
diff --git a/arch/s390/kernel/ptrace.c b/arch/s390/kernel/ptrace.c index 37dfe33dab73..8f36504075ed 100644 --- a/arch/s390/kernel/ptrace.c +++ b/arch/s390/kernel/ptrace.c | |||
@@ -734,7 +734,7 @@ asmlinkage void | |||
734 | syscall_trace(struct pt_regs *regs, int entryexit) | 734 | syscall_trace(struct pt_regs *regs, int entryexit) |
735 | { | 735 | { |
736 | if (unlikely(current->audit_context) && entryexit) | 736 | if (unlikely(current->audit_context) && entryexit) |
737 | audit_syscall_exit(current, AUDITSC_RESULT(regs->gprs[2]), regs->gprs[2]); | 737 | audit_syscall_exit(AUDITSC_RESULT(regs->gprs[2]), regs->gprs[2]); |
738 | 738 | ||
739 | if (!test_thread_flag(TIF_SYSCALL_TRACE)) | 739 | if (!test_thread_flag(TIF_SYSCALL_TRACE)) |
740 | goto out; | 740 | goto out; |
@@ -761,8 +761,7 @@ syscall_trace(struct pt_regs *regs, int entryexit) | |||
761 | } | 761 | } |
762 | out: | 762 | out: |
763 | if (unlikely(current->audit_context) && !entryexit) | 763 | if (unlikely(current->audit_context) && !entryexit) |
764 | audit_syscall_entry(current, | 764 | audit_syscall_entry(test_thread_flag(TIF_31BIT)?AUDIT_ARCH_S390:AUDIT_ARCH_S390X, |
765 | test_thread_flag(TIF_31BIT)?AUDIT_ARCH_S390:AUDIT_ARCH_S390X, | ||
766 | regs->gprs[2], regs->orig_gpr2, regs->gprs[3], | 765 | regs->gprs[2], regs->orig_gpr2, regs->gprs[3], |
767 | regs->gprs[4], regs->gprs[5]); | 766 | regs->gprs[4], regs->gprs[5]); |
768 | } | 767 | } |
diff --git a/arch/s390/kernel/signal.c b/arch/s390/kernel/signal.c index ae1927e48cfb..d48cfc726b68 100644 --- a/arch/s390/kernel/signal.c +++ b/arch/s390/kernel/signal.c | |||
@@ -358,8 +358,9 @@ static int setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info, | |||
358 | } else { | 358 | } else { |
359 | regs->gprs[14] = (unsigned long) | 359 | regs->gprs[14] = (unsigned long) |
360 | frame->retcode | PSW_ADDR_AMODE; | 360 | frame->retcode | PSW_ADDR_AMODE; |
361 | err |= __put_user(S390_SYSCALL_OPCODE | __NR_rt_sigreturn, | 361 | if (__put_user(S390_SYSCALL_OPCODE | __NR_rt_sigreturn, |
362 | (u16 __user *)(frame->retcode)); | 362 | (u16 __user *)(frame->retcode))) |
363 | goto give_sigsegv; | ||
363 | } | 364 | } |
364 | 365 | ||
365 | /* Set up backchain. */ | 366 | /* Set up backchain. */ |
diff --git a/arch/s390/kernel/syscalls.S b/arch/s390/kernel/syscalls.S index 2f56654da821..93be1d56c036 100644 --- a/arch/s390/kernel/syscalls.S +++ b/arch/s390/kernel/syscalls.S | |||
@@ -312,3 +312,9 @@ SYSCALL(sys_faccessat,sys_faccessat,sys_faccessat_wrapper) /* 300 */ | |||
312 | SYSCALL(sys_pselect6,sys_pselect6,compat_sys_pselect6_wrapper) | 312 | SYSCALL(sys_pselect6,sys_pselect6,compat_sys_pselect6_wrapper) |
313 | SYSCALL(sys_ppoll,sys_ppoll,compat_sys_ppoll_wrapper) | 313 | SYSCALL(sys_ppoll,sys_ppoll,compat_sys_ppoll_wrapper) |
314 | SYSCALL(sys_unshare,sys_unshare,sys_unshare_wrapper) | 314 | SYSCALL(sys_unshare,sys_unshare,sys_unshare_wrapper) |
315 | SYSCALL(sys_set_robust_list,sys_set_robust_list,compat_sys_set_robust_list_wrapper) | ||
316 | SYSCALL(sys_get_robust_list,sys_get_robust_list,compat_sys_get_robust_list_wrapper) | ||
317 | SYSCALL(sys_splice,sys_splice,sys_splice_wrapper) | ||
318 | SYSCALL(sys_sync_file_range,sys_sync_file_range,sys_sync_file_range_wrapper) | ||
319 | SYSCALL(sys_tee,sys_tee,sys_tee_wrapper) | ||
320 | SYSCALL(sys_vmsplice,sys_vmsplice,compat_sys_vmsplice_wrapper) | ||
diff --git a/arch/s390/kernel/time.c b/arch/s390/kernel/time.c index fea043b69b91..2a6c6efb6865 100644 --- a/arch/s390/kernel/time.c +++ b/arch/s390/kernel/time.c | |||
@@ -249,18 +249,19 @@ static inline void stop_hz_timer(void) | |||
249 | unsigned long flags; | 249 | unsigned long flags; |
250 | unsigned long seq, next; | 250 | unsigned long seq, next; |
251 | __u64 timer, todval; | 251 | __u64 timer, todval; |
252 | int cpu = smp_processor_id(); | ||
252 | 253 | ||
253 | if (sysctl_hz_timer != 0) | 254 | if (sysctl_hz_timer != 0) |
254 | return; | 255 | return; |
255 | 256 | ||
256 | cpu_set(smp_processor_id(), nohz_cpu_mask); | 257 | cpu_set(cpu, nohz_cpu_mask); |
257 | 258 | ||
258 | /* | 259 | /* |
259 | * Leave the clock comparator set up for the next timer | 260 | * Leave the clock comparator set up for the next timer |
260 | * tick if either rcu or a softirq is pending. | 261 | * tick if either rcu or a softirq is pending. |
261 | */ | 262 | */ |
262 | if (rcu_pending(smp_processor_id()) || local_softirq_pending()) { | 263 | if (rcu_needs_cpu(cpu) || local_softirq_pending()) { |
263 | cpu_clear(smp_processor_id(), nohz_cpu_mask); | 264 | cpu_clear(cpu, nohz_cpu_mask); |
264 | return; | 265 | return; |
265 | } | 266 | } |
266 | 267 | ||
@@ -271,7 +272,7 @@ static inline void stop_hz_timer(void) | |||
271 | next = next_timer_interrupt(); | 272 | next = next_timer_interrupt(); |
272 | do { | 273 | do { |
273 | seq = read_seqbegin_irqsave(&xtime_lock, flags); | 274 | seq = read_seqbegin_irqsave(&xtime_lock, flags); |
274 | timer = (__u64)(next - jiffies) + jiffies_64; | 275 | timer = ((__u64) next) - ((__u64) jiffies) + jiffies_64; |
275 | } while (read_seqretry_irqrestore(&xtime_lock, seq, flags)); | 276 | } while (read_seqretry_irqrestore(&xtime_lock, seq, flags)); |
276 | todval = -1ULL; | 277 | todval = -1ULL; |
277 | /* Be careful about overflows. */ | 278 | /* Be careful about overflows. */ |
diff --git a/arch/s390/kernel/vmlinux.lds.S b/arch/s390/kernel/vmlinux.lds.S index 9289face3027..9f34bb54c051 100644 --- a/arch/s390/kernel/vmlinux.lds.S +++ b/arch/s390/kernel/vmlinux.lds.S | |||
@@ -58,9 +58,11 @@ SECTIONS | |||
58 | . = ALIGN(4096); | 58 | . = ALIGN(4096); |
59 | .data.page_aligned : { *(.data.idt) } | 59 | .data.page_aligned : { *(.data.idt) } |
60 | 60 | ||
61 | . = ALIGN(32); | 61 | . = ALIGN(256); |
62 | .data.cacheline_aligned : { *(.data.cacheline_aligned) } | 62 | .data.cacheline_aligned : { *(.data.cacheline_aligned) } |
63 | 63 | ||
64 | . = ALIGN(256); | ||
65 | .data.read_mostly : { *(.data.read_mostly) } | ||
64 | _edata = .; /* End of data section */ | 66 | _edata = .; /* End of data section */ |
65 | 67 | ||
66 | . = ALIGN(8192); /* init_task */ | 68 | . = ALIGN(8192); /* init_task */ |