xref: /linux-6.15/include/linux/restart_block.h (revision cba6167f)
1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */
253d74d05SMark Rutland /*
353d74d05SMark Rutland  * Common syscall restarting data
453d74d05SMark Rutland  */
553d74d05SMark Rutland #ifndef __LINUX_RESTART_BLOCK_H
653d74d05SMark Rutland #define __LINUX_RESTART_BLOCK_H
753d74d05SMark Rutland 
853d74d05SMark Rutland #include <linux/compiler.h>
953d74d05SMark Rutland #include <linux/types.h>
1053d74d05SMark Rutland 
11*cba6167fSKent Overstreet struct __kernel_timespec;
1253d74d05SMark Rutland struct timespec;
139afc5eeeSArnd Bergmann struct old_timespec32;
1453d74d05SMark Rutland struct pollfd;
1553d74d05SMark Rutland 
16edbeda46SAl Viro enum timespec_type {
17edbeda46SAl Viro 	TT_NONE		= 0,
18edbeda46SAl Viro 	TT_NATIVE	= 1,
19edbeda46SAl Viro 	TT_COMPAT	= 2,
20edbeda46SAl Viro };
21edbeda46SAl Viro 
2253d74d05SMark Rutland /*
2353d74d05SMark Rutland  * System call restart block.
2453d74d05SMark Rutland  */
2553d74d05SMark Rutland struct restart_block {
26b2e9df85SOleg Nesterov 	unsigned long arch_data;
2753d74d05SMark Rutland 	long (*fn)(struct restart_block *);
2853d74d05SMark Rutland 	union {
2953d74d05SMark Rutland 		/* For futex_wait and futex_wait_requeue_pi */
3053d74d05SMark Rutland 		struct {
3153d74d05SMark Rutland 			u32 __user *uaddr;
3253d74d05SMark Rutland 			u32 val;
3353d74d05SMark Rutland 			u32 flags;
3453d74d05SMark Rutland 			u32 bitset;
3553d74d05SMark Rutland 			u64 time;
3653d74d05SMark Rutland 			u32 __user *uaddr2;
3753d74d05SMark Rutland 		} futex;
3853d74d05SMark Rutland 		/* For nanosleep */
3953d74d05SMark Rutland 		struct {
4053d74d05SMark Rutland 			clockid_t clockid;
41edbeda46SAl Viro 			enum timespec_type type;
42edbeda46SAl Viro 			union {
4301909974SDeepa Dinamani 				struct __kernel_timespec __user *rmtp;
449afc5eeeSArnd Bergmann 				struct old_timespec32 __user *compat_rmtp;
45edbeda46SAl Viro 			};
4653d74d05SMark Rutland 			u64 expires;
4753d74d05SMark Rutland 		} nanosleep;
4853d74d05SMark Rutland 		/* For poll */
4953d74d05SMark Rutland 		struct {
5053d74d05SMark Rutland 			struct pollfd __user *ufds;
5153d74d05SMark Rutland 			int nfds;
5253d74d05SMark Rutland 			int has_timeout;
5353d74d05SMark Rutland 			unsigned long tv_sec;
5453d74d05SMark Rutland 			unsigned long tv_nsec;
5553d74d05SMark Rutland 		} poll;
5653d74d05SMark Rutland 	};
5753d74d05SMark Rutland };
5853d74d05SMark Rutland 
5953d74d05SMark Rutland extern long do_no_restart_syscall(struct restart_block *parm);
6053d74d05SMark Rutland 
6153d74d05SMark Rutland #endif /* __LINUX_RESTART_BLOCK_H */
62