1 /* SPDX-License-Identifier: GPL-2.0 */
2 /*
3  * Copyright (C) 2020 Collabora Ltd.
4  */
5 #ifndef _SYSCALL_USER_DISPATCH_H
6 #define _SYSCALL_USER_DISPATCH_H
7 
8 #include <linux/thread_info.h>
9 
10 #ifdef CONFIG_GENERIC_ENTRY
11 
12 struct syscall_user_dispatch {
13 	char __user	*selector;
14 	unsigned long	offset;
15 	unsigned long	len;
16 	bool		on_dispatch;
17 };
18 
19 int set_syscall_user_dispatch(unsigned long mode, unsigned long offset,
20 			      unsigned long len, char __user *selector);
21 
22 #define clear_syscall_work_syscall_user_dispatch(tsk) \
23 	clear_task_syscall_work(tsk, SYSCALL_USER_DISPATCH)
24 
25 #else
26 struct syscall_user_dispatch {};
27 
set_syscall_user_dispatch(unsigned long mode,unsigned long offset,unsigned long len,char __user * selector)28 static inline int set_syscall_user_dispatch(unsigned long mode, unsigned long offset,
29 					    unsigned long len, char __user *selector)
30 {
31 	return -EINVAL;
32 }
33 
clear_syscall_work_syscall_user_dispatch(struct task_struct * tsk)34 static inline void clear_syscall_work_syscall_user_dispatch(struct task_struct *tsk)
35 {
36 }
37 
38 #endif /* CONFIG_GENERIC_ENTRY */
39 
40 #endif /* _SYSCALL_USER_DISPATCH_H */
41