aboutsummaryrefslogtreecommitdiffstats
path: root/arch/s390/kernel/entry.S
diff options
context:
space:
mode:
authorHeiko Carstens <heiko.carstens@de.ibm.com>2007-10-11 16:11:12 -0400
committerPeter Zijlstra <a.p.zijlstra@chello.nl>2007-10-11 16:11:12 -0400
commit523b44cff279c42c79f7bda709e2fefc30f20a59 (patch)
tree544c308d3e5e397b5b101968d617185e4cfdb291 /arch/s390/kernel/entry.S
parent10cd706d180b62a61aace5b440247c8785026ac1 (diff)
lockdep: s390: connect the sysexit hook
Run the lockdep_sys_exit hook before returning to user space. Reviewed-by: Martin Schwidefsky <schwidefsky@de.ibm.com> Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com> Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl> Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'arch/s390/kernel/entry.S')
-rw-r--r--arch/s390/kernel/entry.S12
1 files changed, 12 insertions, 0 deletions
diff --git a/arch/s390/kernel/entry.S b/arch/s390/kernel/entry.S
index f3bceb165321..139ca153d5cc 100644
--- a/arch/s390/kernel/entry.S
+++ b/arch/s390/kernel/entry.S
@@ -68,9 +68,15 @@ STACK_SIZE = 1 << STACK_SHIFT
68 l %r1,BASED(.Ltrace_irq_off) 68 l %r1,BASED(.Ltrace_irq_off)
69 basr %r14,%r1 69 basr %r14,%r1
70 .endm 70 .endm
71
72 .macro LOCKDEP_SYS_EXIT
73 l %r1,BASED(.Llockdep_sys_exit)
74 basr %r14,%r1
75 .endm
71#else 76#else
72#define TRACE_IRQS_ON 77#define TRACE_IRQS_ON
73#define TRACE_IRQS_OFF 78#define TRACE_IRQS_OFF
79#define LOCKDEP_SYS_EXIT
74#endif 80#endif
75 81
76/* 82/*
@@ -260,6 +266,7 @@ sysc_return:
260 bno BASED(sysc_leave) 266 bno BASED(sysc_leave)
261 tm __TI_flags+3(%r9),_TIF_WORK_SVC 267 tm __TI_flags+3(%r9),_TIF_WORK_SVC
262 bnz BASED(sysc_work) # there is work to do (signals etc.) 268 bnz BASED(sysc_work) # there is work to do (signals etc.)
269 LOCKDEP_SYS_EXIT
263sysc_leave: 270sysc_leave:
264 RESTORE_ALL __LC_RETURN_PSW,1 271 RESTORE_ALL __LC_RETURN_PSW,1
265 272
@@ -283,6 +290,7 @@ sysc_work:
283 bo BASED(sysc_restart) 290 bo BASED(sysc_restart)
284 tm __TI_flags+3(%r9),_TIF_SINGLE_STEP 291 tm __TI_flags+3(%r9),_TIF_SINGLE_STEP
285 bo BASED(sysc_singlestep) 292 bo BASED(sysc_singlestep)
293 LOCKDEP_SYS_EXIT
286 b BASED(sysc_leave) 294 b BASED(sysc_leave)
287 295
288# 296#
@@ -572,6 +580,7 @@ io_return:
572#endif 580#endif
573 tm __TI_flags+3(%r9),_TIF_WORK_INT 581 tm __TI_flags+3(%r9),_TIF_WORK_INT
574 bnz BASED(io_work) # there is work to do (signals etc.) 582 bnz BASED(io_work) # there is work to do (signals etc.)
583 LOCKDEP_SYS_EXIT
575io_leave: 584io_leave:
576 RESTORE_ALL __LC_RETURN_PSW,0 585 RESTORE_ALL __LC_RETURN_PSW,0
577io_done: 586io_done:
@@ -618,6 +627,7 @@ io_work_loop:
618 bo BASED(io_reschedule) 627 bo BASED(io_reschedule)
619 tm __TI_flags+3(%r9),(_TIF_SIGPENDING | _TIF_RESTORE_SIGMASK) 628 tm __TI_flags+3(%r9),(_TIF_SIGPENDING | _TIF_RESTORE_SIGMASK)
620 bnz BASED(io_sigpending) 629 bnz BASED(io_sigpending)
630 LOCKDEP_SYS_EXIT
621 b BASED(io_leave) 631 b BASED(io_leave)
622 632
623# 633#
@@ -1040,6 +1050,8 @@ cleanup_io_leave_insn:
1040.Ltrace_irq_on: .long trace_hardirqs_on 1050.Ltrace_irq_on: .long trace_hardirqs_on
1041.Ltrace_irq_off: 1051.Ltrace_irq_off:
1042 .long trace_hardirqs_off 1052 .long trace_hardirqs_off
1053.Llockdep_sys_exit:
1054 .long lockdep_sys_exit
1043#endif 1055#endif
1044.Lcritical_start: 1056.Lcritical_start:
1045 .long __critical_start + 0x80000000 1057 .long __critical_start + 0x80000000