forked from mirrors/linux
		
	entry: Move syscall_enter_from_user_mode() to header file
To allow inlining of syscall_enter_from_user_mode(), move it to entry-common.h. Signed-off-by: Sven Schnelle <svens@linux.ibm.com> Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Link: https://lore.kernel.org/r/20231218074520.1998026-4-svens@linux.ibm.com
This commit is contained in:
		
							parent
							
								
									caf4062e35
								
							
						
					
					
						commit
						221a164035
					
				
					 2 changed files with 26 additions and 33 deletions
				
			
		|  | @ -134,6 +134,9 @@ static __always_inline void enter_from_user_mode(struct pt_regs *regs) | |||
|  */ | ||||
| void syscall_enter_from_user_mode_prepare(struct pt_regs *regs); | ||||
| 
 | ||||
| long syscall_trace_enter(struct pt_regs *regs, long syscall, | ||||
| 			 unsigned long work); | ||||
| 
 | ||||
| /**
 | ||||
|  * syscall_enter_from_user_mode_work - Check and handle work before invoking | ||||
|  *				       a syscall | ||||
|  | @ -157,7 +160,15 @@ void syscall_enter_from_user_mode_prepare(struct pt_regs *regs); | |||
|  *     ptrace_report_syscall_entry(), __secure_computing(), trace_sys_enter() | ||||
|  *  2) Invocation of audit_syscall_entry() | ||||
|  */ | ||||
| long syscall_enter_from_user_mode_work(struct pt_regs *regs, long syscall); | ||||
| static __always_inline long syscall_enter_from_user_mode_work(struct pt_regs *regs, long syscall) | ||||
| { | ||||
| 	unsigned long work = READ_ONCE(current_thread_info()->syscall_work); | ||||
| 
 | ||||
| 	if (work & SYSCALL_WORK_ENTER) | ||||
| 		syscall = syscall_trace_enter(regs, syscall, work); | ||||
| 
 | ||||
| 	return syscall; | ||||
| } | ||||
| 
 | ||||
| /**
 | ||||
|  * syscall_enter_from_user_mode - Establish state and check and handle work | ||||
|  | @ -176,7 +187,19 @@ long syscall_enter_from_user_mode_work(struct pt_regs *regs, long syscall); | |||
|  * Returns: The original or a modified syscall number. See | ||||
|  * syscall_enter_from_user_mode_work() for further explanation. | ||||
|  */ | ||||
| long syscall_enter_from_user_mode(struct pt_regs *regs, long syscall); | ||||
| static __always_inline long syscall_enter_from_user_mode(struct pt_regs *regs, long syscall) | ||||
| { | ||||
| 	long ret; | ||||
| 
 | ||||
| 	enter_from_user_mode(regs); | ||||
| 
 | ||||
| 	instrumentation_begin(); | ||||
| 	local_irq_enable(); | ||||
| 	ret = syscall_enter_from_user_mode_work(regs, syscall); | ||||
| 	instrumentation_end(); | ||||
| 
 | ||||
| 	return ret; | ||||
| } | ||||
| 
 | ||||
| /**
 | ||||
|  * local_irq_enable_exit_to_user - Exit to user variant of local_irq_enable() | ||||
|  |  | |||
|  | @ -25,7 +25,7 @@ static inline void syscall_enter_audit(struct pt_regs *regs, long syscall) | |||
| 	} | ||||
| } | ||||
| 
 | ||||
| static long syscall_trace_enter(struct pt_regs *regs, long syscall, | ||||
| long syscall_trace_enter(struct pt_regs *regs, long syscall, | ||||
| 				unsigned long work) | ||||
| { | ||||
| 	long ret = 0; | ||||
|  | @ -65,36 +65,6 @@ static long syscall_trace_enter(struct pt_regs *regs, long syscall, | |||
| 	return ret ? : syscall; | ||||
| } | ||||
| 
 | ||||
| static __always_inline long | ||||
| __syscall_enter_from_user_work(struct pt_regs *regs, long syscall) | ||||
| { | ||||
| 	unsigned long work = READ_ONCE(current_thread_info()->syscall_work); | ||||
| 
 | ||||
| 	if (work & SYSCALL_WORK_ENTER) | ||||
| 		syscall = syscall_trace_enter(regs, syscall, work); | ||||
| 
 | ||||
| 	return syscall; | ||||
| } | ||||
| 
 | ||||
| long syscall_enter_from_user_mode_work(struct pt_regs *regs, long syscall) | ||||
| { | ||||
| 	return __syscall_enter_from_user_work(regs, syscall); | ||||
| } | ||||
| 
 | ||||
| noinstr long syscall_enter_from_user_mode(struct pt_regs *regs, long syscall) | ||||
| { | ||||
| 	long ret; | ||||
| 
 | ||||
| 	enter_from_user_mode(regs); | ||||
| 
 | ||||
| 	instrumentation_begin(); | ||||
| 	local_irq_enable(); | ||||
| 	ret = __syscall_enter_from_user_work(regs, syscall); | ||||
| 	instrumentation_end(); | ||||
| 
 | ||||
| 	return ret; | ||||
| } | ||||
| 
 | ||||
| noinstr void syscall_enter_from_user_mode_prepare(struct pt_regs *regs) | ||||
| { | ||||
| 	enter_from_user_mode(regs); | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 Sven Schnelle
						Sven Schnelle