Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 10cd706d authored by Peter Zijlstra's avatar Peter Zijlstra
Browse files

lockdep: x86_64: connect the sysexit hook



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

Signed-off-by: default avatarPeter Zijlstra <a.p.zijlstra@chello.nl>
Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
parent c7e872e7
Loading
Loading
Loading
Loading
+11 −12
Original line number Diff line number Diff line
@@ -244,6 +244,7 @@ ret_from_sys_call:
	movl $_TIF_ALLWORK_MASK,%edi
	/* edi:	flagmask */
sysret_check:		
	LOCKDEP_SYS_EXIT
	GET_THREAD_INFO(%rcx)
	cli
	TRACE_IRQS_OFF
@@ -333,6 +334,7 @@ int_ret_from_sys_call:
	movl $_TIF_ALLWORK_MASK,%edi
	/* edi:	mask to check */
int_with_check:
	LOCKDEP_SYS_EXIT_IRQ
	GET_THREAD_INFO(%rcx)
	movl threadinfo_flags(%rcx),%edx
	andl %edi,%edx
@@ -544,11 +546,13 @@ exit_intr:
retint_with_reschedule:
	movl $_TIF_WORK_MASK,%edi
retint_check:
	LOCKDEP_SYS_EXIT_IRQ
	movl threadinfo_flags(%rcx),%edx
	andl %edi,%edx
	CFI_REMEMBER_STATE
	jnz  retint_careful
retint_swapgs:	 	

retint_swapgs:		/* return to user-space */
	/*
	 * The iretq could re-enable interrupts:
	 */
@@ -557,7 +561,7 @@ retint_swapgs:
	swapgs 
	jmp restore_args

retint_restore_args:				
retint_restore_args:	/* return to kernel space */
	cli
	/*
	 * The iretq could re-enable interrupts:
@@ -875,17 +879,12 @@ error_exit:
	GET_THREAD_INFO(%rcx)	
	testl %eax,%eax
	jne  retint_kernel
	LOCKDEP_SYS_EXIT_IRQ
	movl  threadinfo_flags(%rcx),%edx
	movl  $_TIF_WORK_MASK,%edi
	andl  %edi,%edx
	jnz  retint_careful
	/*
	 * The iret might restore flags:
	 */
	TRACE_IRQS_IRETQ
	swapgs 
	RESTORE_ARGS 0,8,0						
	jmp iret_label
	jmp retint_swapgs
	CFI_ENDPROC

error_kernelspace:
+4 −0
Original line number Diff line number Diff line
@@ -51,6 +51,10 @@
	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
	SAVE_ARGS
+14 −0
Original line number Diff line number Diff line
@@ -137,6 +137,20 @@ 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_IRQ	\
	TRACE_IRQS_ON; \
	sti; \
	SAVE_REST; \
	LOCKDEP_SYS_EXIT; \
	RESTORE_REST; \
	cli; \
	TRACE_IRQS_OFF;
# else
#  define LOCKDEP_SYS_EXIT
#  define LOCKDEP_SYS_EXIT_IRQ
# endif
#endif

#endif