Run the lockdep_sys_exit hook after all other C code on the syscall
return path.

Signed-off-by: Peter Zijlstra <[EMAIL PROTECTED]>
---
 arch/x86_64/kernel/entry.S    |    3 +++
 arch/x86_64/lib/thunk.S       |    4 ++++
 include/asm-x86_64/irqflags.h |    9 +++++++++
 3 files changed, 16 insertions(+)

Index: linux-2.6/arch/x86_64/kernel/entry.S
===================================================================
--- linux-2.6.orig/arch/x86_64/kernel/entry.S
+++ linux-2.6/arch/x86_64/kernel/entry.S
@@ -164,6 +164,7 @@ ENTRY(ret_from_fork)
        testl $(_TIF_SYSCALL_TRACE|_TIF_SYSCALL_AUDIT),threadinfo_flags(%rcx)
        jnz rff_trace
 rff_action:    
+       LOCKDEP_SYS_EXIT
        RESTORE_REST
        testl $3,CS-ARGOFFSET(%rsp)     # from kernel_thread?
        je   int_ret_from_sys_call
@@ -326,6 +327,7 @@ tracesys:                    
  */
        .globl int_ret_from_sys_call
 int_ret_from_sys_call:
+       LOCKDEP_SYS_EXIT_REST
        cli
        TRACE_IRQS_OFF
        testl $3,CS-ARGOFFSET(%rsp)
@@ -382,6 +384,7 @@ int_signal:
        call do_notify_resume
 1:     movl $_TIF_NEED_RESCHED,%edi    
 int_restore_rest:
+       LOCKDEP_SYS_EXIT
        RESTORE_REST
        cli
        TRACE_IRQS_OFF
Index: linux-2.6/arch/x86_64/lib/thunk.S
===================================================================
--- linux-2.6.orig/arch/x86_64/lib/thunk.S
+++ linux-2.6/arch/x86_64/lib/thunk.S
@@ -50,6 +50,10 @@
        thunk trace_hardirqs_on_thunk,trace_hardirqs_on
        thunk trace_hardirqs_off_thunk,trace_hardirqs_off
 #endif
+
+#ifdef CONFIG_DEBUG_LOCK_ALLOC
+       thunk lockdep_sys_exit_thunk,lockdep_sys_exit
+#endif
        
        /* SAVE_ARGS below is used only for the .cfi directives it contains. */
        CFI_STARTPROC
Index: linux-2.6/include/asm-x86_64/irqflags.h
===================================================================
--- linux-2.6.orig/include/asm-x86_64/irqflags.h
+++ linux-2.6/include/asm-x86_64/irqflags.h
@@ -137,6 +137,15 @@ static inline void halt(void)
 #  define TRACE_IRQS_ON
 #  define TRACE_IRQS_OFF
 # endif
+# ifdef CONFIG_DEBUG_LOCK_ALLOC
+#  define LOCKDEP_SYS_EXIT     call lockdep_sys_exit_thunk
+#  define LOCKDEP_SYS_EXIT_REST        SAVE_REST; \
+                               LOCKDEP_SYS_EXIT; \
+                               RESTORE_REST;
+# else
+#  define LOCKDEP_SYS_EXIT
+#  define LOCKDEP_SYS_EXIT_REST
+# endif
 #endif
 
 #endif

--

-
To unsubscribe from this list: send the line "unsubscribe linux-arch" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to