diff options
author | Peter Zijlstra <a.p.zijlstra@chello.nl> | 2007-10-11 16:11:12 -0400 |
---|---|---|
committer | Peter Zijlstra <a.p.zijlstra@chello.nl> | 2007-10-11 16:11:12 -0400 |
commit | c7e872e7da5514d014707a407ea562d197cc0136 (patch) | |
tree | eab8cc63a0ef14afbaa9b61153f30f7ed1a94e6f /arch/x86/kernel/entry_32.S | |
parent | b351d164e860d1ffffdc501c32f55dd1446c385b (diff) |
lockdep: i386: connect the sysexit hook
Run the lockdep_sys_exit hook after all other C code on the syscall
return path.
Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'arch/x86/kernel/entry_32.S')
-rw-r--r-- | arch/x86/kernel/entry_32.S | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/arch/x86/kernel/entry_32.S b/arch/x86/kernel/entry_32.S index 290b7bc82da3..8099fea0a72f 100644 --- a/arch/x86/kernel/entry_32.S +++ b/arch/x86/kernel/entry_32.S | |||
@@ -251,6 +251,7 @@ check_userspace: | |||
251 | jb resume_kernel # not returning to v8086 or userspace | 251 | jb resume_kernel # not returning to v8086 or userspace |
252 | 252 | ||
253 | ENTRY(resume_userspace) | 253 | ENTRY(resume_userspace) |
254 | LOCKDEP_SYS_EXIT | ||
254 | DISABLE_INTERRUPTS(CLBR_ANY) # make sure we don't miss an interrupt | 255 | DISABLE_INTERRUPTS(CLBR_ANY) # make sure we don't miss an interrupt |
255 | # setting need_resched or sigpending | 256 | # setting need_resched or sigpending |
256 | # between sampling and the iret | 257 | # between sampling and the iret |
@@ -338,6 +339,7 @@ sysenter_past_esp: | |||
338 | jae syscall_badsys | 339 | jae syscall_badsys |
339 | call *sys_call_table(,%eax,4) | 340 | call *sys_call_table(,%eax,4) |
340 | movl %eax,PT_EAX(%esp) | 341 | movl %eax,PT_EAX(%esp) |
342 | LOCKDEP_SYS_EXIT | ||
341 | DISABLE_INTERRUPTS(CLBR_ANY) | 343 | DISABLE_INTERRUPTS(CLBR_ANY) |
342 | TRACE_IRQS_OFF | 344 | TRACE_IRQS_OFF |
343 | movl TI_flags(%ebp), %ecx | 345 | movl TI_flags(%ebp), %ecx |
@@ -377,6 +379,7 @@ syscall_call: | |||
377 | call *sys_call_table(,%eax,4) | 379 | call *sys_call_table(,%eax,4) |
378 | movl %eax,PT_EAX(%esp) # store the return value | 380 | movl %eax,PT_EAX(%esp) # store the return value |
379 | syscall_exit: | 381 | syscall_exit: |
382 | LOCKDEP_SYS_EXIT | ||
380 | DISABLE_INTERRUPTS(CLBR_ANY) # make sure we don't miss an interrupt | 383 | DISABLE_INTERRUPTS(CLBR_ANY) # make sure we don't miss an interrupt |
381 | # setting need_resched or sigpending | 384 | # setting need_resched or sigpending |
382 | # between sampling and the iret | 385 | # between sampling and the iret |
@@ -467,6 +470,7 @@ work_pending: | |||
467 | jz work_notifysig | 470 | jz work_notifysig |
468 | work_resched: | 471 | work_resched: |
469 | call schedule | 472 | call schedule |
473 | LOCKDEP_SYS_EXIT | ||
470 | DISABLE_INTERRUPTS(CLBR_ANY) # make sure we don't miss an interrupt | 474 | DISABLE_INTERRUPTS(CLBR_ANY) # make sure we don't miss an interrupt |
471 | # setting need_resched or sigpending | 475 | # setting need_resched or sigpending |
472 | # between sampling and the iret | 476 | # between sampling and the iret |