[PATCH 03/12] lockdep: x86_64: connect the sysexit hook

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[Index of Archives]     [Kernel Newbies]     [Netfilter]     [Bugtraq]     [Photo]     [Stuff]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]     [Linux Resources]
  Powered by Linux