xref: /aosp_15_r20/bionic/libc/kernel/uapi/linux/userfaultfd.h (revision 8d67ca893c1523eb926b9080dbe4e2ffd2a27ba1)
1*8d67ca89SAndroid Build Coastguard Worker /*
2*8d67ca89SAndroid Build Coastguard Worker  * This file is auto-generated. Modifications will be lost.
3*8d67ca89SAndroid Build Coastguard Worker  *
4*8d67ca89SAndroid Build Coastguard Worker  * See https://android.googlesource.com/platform/bionic/+/master/libc/kernel/
5*8d67ca89SAndroid Build Coastguard Worker  * for more information.
6*8d67ca89SAndroid Build Coastguard Worker  */
7*8d67ca89SAndroid Build Coastguard Worker #ifndef _LINUX_USERFAULTFD_H
8*8d67ca89SAndroid Build Coastguard Worker #define _LINUX_USERFAULTFD_H
9*8d67ca89SAndroid Build Coastguard Worker #include <linux/types.h>
10*8d67ca89SAndroid Build Coastguard Worker #define USERFAULTFD_IOC 0xAA
11*8d67ca89SAndroid Build Coastguard Worker #define USERFAULTFD_IOC_NEW _IO(USERFAULTFD_IOC, 0x00)
12*8d67ca89SAndroid Build Coastguard Worker #define UFFD_API ((__u64) 0xAA)
13*8d67ca89SAndroid Build Coastguard Worker #define UFFD_API_REGISTER_MODES (UFFDIO_REGISTER_MODE_MISSING | UFFDIO_REGISTER_MODE_WP | UFFDIO_REGISTER_MODE_MINOR)
14*8d67ca89SAndroid Build Coastguard Worker #define UFFD_API_FEATURES (UFFD_FEATURE_PAGEFAULT_FLAG_WP | UFFD_FEATURE_EVENT_FORK | UFFD_FEATURE_EVENT_REMAP | UFFD_FEATURE_EVENT_REMOVE | UFFD_FEATURE_EVENT_UNMAP | UFFD_FEATURE_MISSING_HUGETLBFS | UFFD_FEATURE_MISSING_SHMEM | UFFD_FEATURE_SIGBUS | UFFD_FEATURE_THREAD_ID | UFFD_FEATURE_MINOR_HUGETLBFS | UFFD_FEATURE_MINOR_SHMEM | UFFD_FEATURE_EXACT_ADDRESS | UFFD_FEATURE_WP_HUGETLBFS_SHMEM | UFFD_FEATURE_WP_UNPOPULATED | UFFD_FEATURE_POISON | UFFD_FEATURE_WP_ASYNC | UFFD_FEATURE_MOVE)
15*8d67ca89SAndroid Build Coastguard Worker #define UFFD_API_IOCTLS ((__u64) 1 << _UFFDIO_REGISTER | (__u64) 1 << _UFFDIO_UNREGISTER | (__u64) 1 << _UFFDIO_API)
16*8d67ca89SAndroid Build Coastguard Worker #define UFFD_API_RANGE_IOCTLS ((__u64) 1 << _UFFDIO_WAKE | (__u64) 1 << _UFFDIO_COPY | (__u64) 1 << _UFFDIO_ZEROPAGE | (__u64) 1 << _UFFDIO_MOVE | (__u64) 1 << _UFFDIO_WRITEPROTECT | (__u64) 1 << _UFFDIO_CONTINUE | (__u64) 1 << _UFFDIO_POISON)
17*8d67ca89SAndroid Build Coastguard Worker #define UFFD_API_RANGE_IOCTLS_BASIC ((__u64) 1 << _UFFDIO_WAKE | (__u64) 1 << _UFFDIO_COPY | (__u64) 1 << _UFFDIO_WRITEPROTECT | (__u64) 1 << _UFFDIO_CONTINUE | (__u64) 1 << _UFFDIO_POISON)
18*8d67ca89SAndroid Build Coastguard Worker #define _UFFDIO_REGISTER (0x00)
19*8d67ca89SAndroid Build Coastguard Worker #define _UFFDIO_UNREGISTER (0x01)
20*8d67ca89SAndroid Build Coastguard Worker #define _UFFDIO_WAKE (0x02)
21*8d67ca89SAndroid Build Coastguard Worker #define _UFFDIO_COPY (0x03)
22*8d67ca89SAndroid Build Coastguard Worker #define _UFFDIO_ZEROPAGE (0x04)
23*8d67ca89SAndroid Build Coastguard Worker #define _UFFDIO_MOVE (0x05)
24*8d67ca89SAndroid Build Coastguard Worker #define _UFFDIO_WRITEPROTECT (0x06)
25*8d67ca89SAndroid Build Coastguard Worker #define _UFFDIO_CONTINUE (0x07)
26*8d67ca89SAndroid Build Coastguard Worker #define _UFFDIO_POISON (0x08)
27*8d67ca89SAndroid Build Coastguard Worker #define _UFFDIO_API (0x3F)
28*8d67ca89SAndroid Build Coastguard Worker #define UFFDIO 0xAA
29*8d67ca89SAndroid Build Coastguard Worker #define UFFDIO_API _IOWR(UFFDIO, _UFFDIO_API, struct uffdio_api)
30*8d67ca89SAndroid Build Coastguard Worker #define UFFDIO_REGISTER _IOWR(UFFDIO, _UFFDIO_REGISTER, struct uffdio_register)
31*8d67ca89SAndroid Build Coastguard Worker #define UFFDIO_UNREGISTER _IOR(UFFDIO, _UFFDIO_UNREGISTER, struct uffdio_range)
32*8d67ca89SAndroid Build Coastguard Worker #define UFFDIO_WAKE _IOR(UFFDIO, _UFFDIO_WAKE, struct uffdio_range)
33*8d67ca89SAndroid Build Coastguard Worker #define UFFDIO_COPY _IOWR(UFFDIO, _UFFDIO_COPY, struct uffdio_copy)
34*8d67ca89SAndroid Build Coastguard Worker #define UFFDIO_ZEROPAGE _IOWR(UFFDIO, _UFFDIO_ZEROPAGE, struct uffdio_zeropage)
35*8d67ca89SAndroid Build Coastguard Worker #define UFFDIO_MOVE _IOWR(UFFDIO, _UFFDIO_MOVE, struct uffdio_move)
36*8d67ca89SAndroid Build Coastguard Worker #define UFFDIO_WRITEPROTECT _IOWR(UFFDIO, _UFFDIO_WRITEPROTECT, struct uffdio_writeprotect)
37*8d67ca89SAndroid Build Coastguard Worker #define UFFDIO_CONTINUE _IOWR(UFFDIO, _UFFDIO_CONTINUE, struct uffdio_continue)
38*8d67ca89SAndroid Build Coastguard Worker #define UFFDIO_POISON _IOWR(UFFDIO, _UFFDIO_POISON, struct uffdio_poison)
39*8d67ca89SAndroid Build Coastguard Worker struct uffd_msg {
40*8d67ca89SAndroid Build Coastguard Worker   __u8 event;
41*8d67ca89SAndroid Build Coastguard Worker   __u8 reserved1;
42*8d67ca89SAndroid Build Coastguard Worker   __u16 reserved2;
43*8d67ca89SAndroid Build Coastguard Worker   __u32 reserved3;
44*8d67ca89SAndroid Build Coastguard Worker   union {
45*8d67ca89SAndroid Build Coastguard Worker     struct {
46*8d67ca89SAndroid Build Coastguard Worker       __u64 flags;
47*8d67ca89SAndroid Build Coastguard Worker       __u64 address;
48*8d67ca89SAndroid Build Coastguard Worker       union {
49*8d67ca89SAndroid Build Coastguard Worker         __u32 ptid;
50*8d67ca89SAndroid Build Coastguard Worker       } feat;
51*8d67ca89SAndroid Build Coastguard Worker     } pagefault;
52*8d67ca89SAndroid Build Coastguard Worker     struct {
53*8d67ca89SAndroid Build Coastguard Worker       __u32 ufd;
54*8d67ca89SAndroid Build Coastguard Worker     } fork;
55*8d67ca89SAndroid Build Coastguard Worker     struct {
56*8d67ca89SAndroid Build Coastguard Worker       __u64 from;
57*8d67ca89SAndroid Build Coastguard Worker       __u64 to;
58*8d67ca89SAndroid Build Coastguard Worker       __u64 len;
59*8d67ca89SAndroid Build Coastguard Worker     } remap;
60*8d67ca89SAndroid Build Coastguard Worker     struct {
61*8d67ca89SAndroid Build Coastguard Worker       __u64 start;
62*8d67ca89SAndroid Build Coastguard Worker       __u64 end;
63*8d67ca89SAndroid Build Coastguard Worker     } remove;
64*8d67ca89SAndroid Build Coastguard Worker     struct {
65*8d67ca89SAndroid Build Coastguard Worker       __u64 reserved1;
66*8d67ca89SAndroid Build Coastguard Worker       __u64 reserved2;
67*8d67ca89SAndroid Build Coastguard Worker       __u64 reserved3;
68*8d67ca89SAndroid Build Coastguard Worker     } reserved;
69*8d67ca89SAndroid Build Coastguard Worker   } arg;
70*8d67ca89SAndroid Build Coastguard Worker } __attribute__((__packed__));
71*8d67ca89SAndroid Build Coastguard Worker #define UFFD_EVENT_PAGEFAULT 0x12
72*8d67ca89SAndroid Build Coastguard Worker #define UFFD_EVENT_FORK 0x13
73*8d67ca89SAndroid Build Coastguard Worker #define UFFD_EVENT_REMAP 0x14
74*8d67ca89SAndroid Build Coastguard Worker #define UFFD_EVENT_REMOVE 0x15
75*8d67ca89SAndroid Build Coastguard Worker #define UFFD_EVENT_UNMAP 0x16
76*8d67ca89SAndroid Build Coastguard Worker #define UFFD_PAGEFAULT_FLAG_WRITE (1 << 0)
77*8d67ca89SAndroid Build Coastguard Worker #define UFFD_PAGEFAULT_FLAG_WP (1 << 1)
78*8d67ca89SAndroid Build Coastguard Worker #define UFFD_PAGEFAULT_FLAG_MINOR (1 << 2)
79*8d67ca89SAndroid Build Coastguard Worker struct uffdio_api {
80*8d67ca89SAndroid Build Coastguard Worker   __u64 api;
81*8d67ca89SAndroid Build Coastguard Worker #define UFFD_FEATURE_PAGEFAULT_FLAG_WP (1 << 0)
82*8d67ca89SAndroid Build Coastguard Worker #define UFFD_FEATURE_EVENT_FORK (1 << 1)
83*8d67ca89SAndroid Build Coastguard Worker #define UFFD_FEATURE_EVENT_REMAP (1 << 2)
84*8d67ca89SAndroid Build Coastguard Worker #define UFFD_FEATURE_EVENT_REMOVE (1 << 3)
85*8d67ca89SAndroid Build Coastguard Worker #define UFFD_FEATURE_MISSING_HUGETLBFS (1 << 4)
86*8d67ca89SAndroid Build Coastguard Worker #define UFFD_FEATURE_MISSING_SHMEM (1 << 5)
87*8d67ca89SAndroid Build Coastguard Worker #define UFFD_FEATURE_EVENT_UNMAP (1 << 6)
88*8d67ca89SAndroid Build Coastguard Worker #define UFFD_FEATURE_SIGBUS (1 << 7)
89*8d67ca89SAndroid Build Coastguard Worker #define UFFD_FEATURE_THREAD_ID (1 << 8)
90*8d67ca89SAndroid Build Coastguard Worker #define UFFD_FEATURE_MINOR_HUGETLBFS (1 << 9)
91*8d67ca89SAndroid Build Coastguard Worker #define UFFD_FEATURE_MINOR_SHMEM (1 << 10)
92*8d67ca89SAndroid Build Coastguard Worker #define UFFD_FEATURE_EXACT_ADDRESS (1 << 11)
93*8d67ca89SAndroid Build Coastguard Worker #define UFFD_FEATURE_WP_HUGETLBFS_SHMEM (1 << 12)
94*8d67ca89SAndroid Build Coastguard Worker #define UFFD_FEATURE_WP_UNPOPULATED (1 << 13)
95*8d67ca89SAndroid Build Coastguard Worker #define UFFD_FEATURE_POISON (1 << 14)
96*8d67ca89SAndroid Build Coastguard Worker #define UFFD_FEATURE_WP_ASYNC (1 << 15)
97*8d67ca89SAndroid Build Coastguard Worker #define UFFD_FEATURE_MOVE (1 << 16)
98*8d67ca89SAndroid Build Coastguard Worker   __u64 features;
99*8d67ca89SAndroid Build Coastguard Worker   __u64 ioctls;
100*8d67ca89SAndroid Build Coastguard Worker };
101*8d67ca89SAndroid Build Coastguard Worker struct uffdio_range {
102*8d67ca89SAndroid Build Coastguard Worker   __u64 start;
103*8d67ca89SAndroid Build Coastguard Worker   __u64 len;
104*8d67ca89SAndroid Build Coastguard Worker };
105*8d67ca89SAndroid Build Coastguard Worker struct uffdio_register {
106*8d67ca89SAndroid Build Coastguard Worker   struct uffdio_range range;
107*8d67ca89SAndroid Build Coastguard Worker #define UFFDIO_REGISTER_MODE_MISSING ((__u64) 1 << 0)
108*8d67ca89SAndroid Build Coastguard Worker #define UFFDIO_REGISTER_MODE_WP ((__u64) 1 << 1)
109*8d67ca89SAndroid Build Coastguard Worker #define UFFDIO_REGISTER_MODE_MINOR ((__u64) 1 << 2)
110*8d67ca89SAndroid Build Coastguard Worker   __u64 mode;
111*8d67ca89SAndroid Build Coastguard Worker   __u64 ioctls;
112*8d67ca89SAndroid Build Coastguard Worker };
113*8d67ca89SAndroid Build Coastguard Worker struct uffdio_copy {
114*8d67ca89SAndroid Build Coastguard Worker   __u64 dst;
115*8d67ca89SAndroid Build Coastguard Worker   __u64 src;
116*8d67ca89SAndroid Build Coastguard Worker   __u64 len;
117*8d67ca89SAndroid Build Coastguard Worker #define UFFDIO_COPY_MODE_DONTWAKE ((__u64) 1 << 0)
118*8d67ca89SAndroid Build Coastguard Worker #define UFFDIO_COPY_MODE_WP ((__u64) 1 << 1)
119*8d67ca89SAndroid Build Coastguard Worker   __u64 mode;
120*8d67ca89SAndroid Build Coastguard Worker   __s64 copy;
121*8d67ca89SAndroid Build Coastguard Worker };
122*8d67ca89SAndroid Build Coastguard Worker struct uffdio_zeropage {
123*8d67ca89SAndroid Build Coastguard Worker   struct uffdio_range range;
124*8d67ca89SAndroid Build Coastguard Worker #define UFFDIO_ZEROPAGE_MODE_DONTWAKE ((__u64) 1 << 0)
125*8d67ca89SAndroid Build Coastguard Worker   __u64 mode;
126*8d67ca89SAndroid Build Coastguard Worker   __s64 zeropage;
127*8d67ca89SAndroid Build Coastguard Worker };
128*8d67ca89SAndroid Build Coastguard Worker struct uffdio_writeprotect {
129*8d67ca89SAndroid Build Coastguard Worker   struct uffdio_range range;
130*8d67ca89SAndroid Build Coastguard Worker #define UFFDIO_WRITEPROTECT_MODE_WP ((__u64) 1 << 0)
131*8d67ca89SAndroid Build Coastguard Worker #define UFFDIO_WRITEPROTECT_MODE_DONTWAKE ((__u64) 1 << 1)
132*8d67ca89SAndroid Build Coastguard Worker   __u64 mode;
133*8d67ca89SAndroid Build Coastguard Worker };
134*8d67ca89SAndroid Build Coastguard Worker struct uffdio_continue {
135*8d67ca89SAndroid Build Coastguard Worker   struct uffdio_range range;
136*8d67ca89SAndroid Build Coastguard Worker #define UFFDIO_CONTINUE_MODE_DONTWAKE ((__u64) 1 << 0)
137*8d67ca89SAndroid Build Coastguard Worker #define UFFDIO_CONTINUE_MODE_WP ((__u64) 1 << 1)
138*8d67ca89SAndroid Build Coastguard Worker   __u64 mode;
139*8d67ca89SAndroid Build Coastguard Worker   __s64 mapped;
140*8d67ca89SAndroid Build Coastguard Worker };
141*8d67ca89SAndroid Build Coastguard Worker struct uffdio_poison {
142*8d67ca89SAndroid Build Coastguard Worker   struct uffdio_range range;
143*8d67ca89SAndroid Build Coastguard Worker #define UFFDIO_POISON_MODE_DONTWAKE ((__u64) 1 << 0)
144*8d67ca89SAndroid Build Coastguard Worker   __u64 mode;
145*8d67ca89SAndroid Build Coastguard Worker   __s64 updated;
146*8d67ca89SAndroid Build Coastguard Worker };
147*8d67ca89SAndroid Build Coastguard Worker struct uffdio_move {
148*8d67ca89SAndroid Build Coastguard Worker   __u64 dst;
149*8d67ca89SAndroid Build Coastguard Worker   __u64 src;
150*8d67ca89SAndroid Build Coastguard Worker   __u64 len;
151*8d67ca89SAndroid Build Coastguard Worker #define UFFDIO_MOVE_MODE_DONTWAKE ((__u64) 1 << 0)
152*8d67ca89SAndroid Build Coastguard Worker #define UFFDIO_MOVE_MODE_ALLOW_SRC_HOLES ((__u64) 1 << 1)
153*8d67ca89SAndroid Build Coastguard Worker   __u64 mode;
154*8d67ca89SAndroid Build Coastguard Worker   __s64 move;
155*8d67ca89SAndroid Build Coastguard Worker };
156*8d67ca89SAndroid Build Coastguard Worker #define UFFD_USER_MODE_ONLY 1
157*8d67ca89SAndroid Build Coastguard Worker #endif
158