• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * This header was generated from the Linux kernel headers by update_headers.py,
3  * to provide necessary information from kernel to userspace, such as constants,
4  * structures, and macros, and thus, contains no copyrightable information.
5  */
6 #ifndef _LINUX_USERFAULTFD_H
7 #define _LINUX_USERFAULTFD_H
8 #include <linux/types.h>
9 #define UFFD_API ((__u64)0xAA)
10 #define UFFD_API_FEATURES (UFFD_FEATURE_EVENT_FORK |		\
11 			   UFFD_FEATURE_EVENT_REMAP |		\
12 			   UFFD_FEATURE_EVENT_REMOVE |	\
13 			   UFFD_FEATURE_EVENT_UNMAP |		\
14 			   UFFD_FEATURE_MISSING_HUGETLBFS |	\
15 			   UFFD_FEATURE_MISSING_SHMEM |		\
16 			   UFFD_FEATURE_SIGBUS |		\
17 			   UFFD_FEATURE_THREAD_ID)
18 #define UFFD_API_IOCTLS				\
19 	((__u64)1 << _UFFDIO_REGISTER |		\
20 	 (__u64)1 << _UFFDIO_UNREGISTER |	\
21 	 (__u64)1 << _UFFDIO_API)
22 #define UFFD_API_RANGE_IOCTLS			\
23 	((__u64)1 << _UFFDIO_WAKE |		\
24 	 (__u64)1 << _UFFDIO_COPY |		\
25 	 (__u64)1 << _UFFDIO_ZEROPAGE)
26 #define UFFD_API_RANGE_IOCTLS_BASIC		\
27 	((__u64)1 << _UFFDIO_WAKE |		\
28 	 (__u64)1 << _UFFDIO_COPY)
29 #define _UFFDIO_REGISTER		(0x00)
30 #define _UFFDIO_UNREGISTER		(0x01)
31 #define _UFFDIO_WAKE			(0x02)
32 #define _UFFDIO_COPY			(0x03)
33 #define _UFFDIO_ZEROPAGE		(0x04)
34 #define _UFFDIO_API			(0x3F)
35 #define UFFDIO 0xAA
36 #define UFFDIO_API		_IOWR(UFFDIO, _UFFDIO_API,	\
37 				      struct uffdio_api)
38 #define UFFDIO_REGISTER		_IOWR(UFFDIO, _UFFDIO_REGISTER, \
39 				      struct uffdio_register)
40 #define UFFDIO_UNREGISTER	_IOR(UFFDIO, _UFFDIO_UNREGISTER,	\
41 				     struct uffdio_range)
42 #define UFFDIO_WAKE		_IOR(UFFDIO, _UFFDIO_WAKE,	\
43 				     struct uffdio_range)
44 #define UFFDIO_COPY		_IOWR(UFFDIO, _UFFDIO_COPY,	\
45 				      struct uffdio_copy)
46 #define UFFDIO_ZEROPAGE		_IOWR(UFFDIO, _UFFDIO_ZEROPAGE,	\
47 				      struct uffdio_zeropage)
48 struct uffd_msg {
49 	__u8	event;
50 	__u8	reserved1;
51 	__u16	reserved2;
52 	__u32	reserved3;
53 	union {
54 		struct {
55 			__u64	flags;
56 			__u64	address;
57 			union {
58 				__u32 ptid;
59 			} feat;
60 		} pagefault;
61 		struct {
62 			__u32	ufd;
63 		} fork;
64 		struct {
65 			__u64	from;
66 			__u64	to;
67 			__u64	len;
68 		} remap;
69 		struct {
70 			__u64	start;
71 			__u64	end;
72 		} remove;
73 		struct {
74 
75 			__u64	reserved1;
76 			__u64	reserved2;
77 			__u64	reserved3;
78 		} reserved;
79 	} arg;
80 } __packed;
81 #define UFFD_EVENT_PAGEFAULT	0x12
82 #define UFFD_EVENT_FORK		0x13
83 #define UFFD_EVENT_REMAP	0x14
84 #define UFFD_EVENT_REMOVE	0x15
85 #define UFFD_EVENT_UNMAP	0x16
86 #define UFFD_PAGEFAULT_FLAG_WRITE	(1<<0)
87 #define UFFD_PAGEFAULT_FLAG_WP		(1<<1)
88 struct uffdio_api {
89 
90 	__u64 api;
91 
92 #define UFFD_FEATURE_PAGEFAULT_FLAG_WP		(1<<0)
93 #define UFFD_FEATURE_EVENT_FORK			(1<<1)
94 #define UFFD_FEATURE_EVENT_REMAP		(1<<2)
95 #define UFFD_FEATURE_EVENT_REMOVE		(1<<3)
96 #define UFFD_FEATURE_MISSING_HUGETLBFS		(1<<4)
97 #define UFFD_FEATURE_MISSING_SHMEM		(1<<5)
98 #define UFFD_FEATURE_EVENT_UNMAP		(1<<6)
99 #define UFFD_FEATURE_SIGBUS			(1<<7)
100 #define UFFD_FEATURE_THREAD_ID			(1<<8)
101 	__u64 features;
102 	__u64 ioctls;
103 };
104 struct uffdio_range {
105 	__u64 start;
106 	__u64 len;
107 };
108 struct uffdio_register {
109 	struct uffdio_range range;
110 #define UFFDIO_REGISTER_MODE_MISSING	((__u64)1<<0)
111 #define UFFDIO_REGISTER_MODE_WP		((__u64)1<<1)
112 	__u64 mode;
113 
114 	__u64 ioctls;
115 };
116 struct uffdio_copy {
117 	__u64 dst;
118 	__u64 src;
119 	__u64 len;
120 
121 #define UFFDIO_COPY_MODE_DONTWAKE		((__u64)1<<0)
122 	__u64 mode;
123 
124 	__s64 copy;
125 };
126 struct uffdio_zeropage {
127 	struct uffdio_range range;
128 #define UFFDIO_ZEROPAGE_MODE_DONTWAKE		((__u64)1<<0)
129 	__u64 mode;
130 
131 	__s64 zeropage;
132 };
133 #endif
134