blob: 4393eb2b756c1ba154b7ddc18d3449400a132a90 [file] [log] [blame]
Elliott Hughes180edef2023-11-02 00:08:05 +00001/*
2 * This file is auto-generated. Modifications will be lost.
3 *
4 * See https://android.googlesource.com/platform/bionic/+/master/libc/kernel/
5 * for more information.
6 */
Christopher Ferris05d08e92016-02-04 13:16:38 -08007#ifndef _LINUX_USERFAULTFD_H
8#define _LINUX_USERFAULTFD_H
9#include <linux/types.h>
Christopher Ferris6cd53a52022-12-12 23:39:16 +000010#define USERFAULTFD_IOC 0xAA
11#define USERFAULTFD_IOC_NEW _IO(USERFAULTFD_IOC, 0x00)
Christopher Ferris05d08e92016-02-04 13:16:38 -080012#define UFFD_API ((__u64) 0xAA)
Christopher Ferrisfcc3b4f2021-07-01 01:30:21 +000013#define UFFD_API_REGISTER_MODES (UFFDIO_REGISTER_MODE_MISSING | UFFDIO_REGISTER_MODE_WP | UFFDIO_REGISTER_MODE_MINOR)
Christopher Ferris67d1e5e2023-10-31 13:36:37 -070014#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)
Christopher Ferris05d08e92016-02-04 13:16:38 -080015#define UFFD_API_IOCTLS ((__u64) 1 << _UFFDIO_REGISTER | (__u64) 1 << _UFFDIO_UNREGISTER | (__u64) 1 << _UFFDIO_API)
Christopher Ferris67d1e5e2023-10-31 13:36:37 -070016#define UFFD_API_RANGE_IOCTLS ((__u64) 1 << _UFFDIO_WAKE | (__u64) 1 << _UFFDIO_COPY | (__u64) 1 << _UFFDIO_ZEROPAGE | (__u64) 1 << _UFFDIO_WRITEPROTECT | (__u64) 1 << _UFFDIO_CONTINUE | (__u64) 1 << _UFFDIO_POISON)
17#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)
Christopher Ferris05d08e92016-02-04 13:16:38 -080018#define _UFFDIO_REGISTER (0x00)
Christopher Ferris05d08e92016-02-04 13:16:38 -080019#define _UFFDIO_UNREGISTER (0x01)
20#define _UFFDIO_WAKE (0x02)
21#define _UFFDIO_COPY (0x03)
22#define _UFFDIO_ZEROPAGE (0x04)
Christopher Ferrisaf09c702020-06-01 20:29:29 -070023#define _UFFDIO_WRITEPROTECT (0x06)
Christopher Ferrisfcc3b4f2021-07-01 01:30:21 +000024#define _UFFDIO_CONTINUE (0x07)
Christopher Ferris67d1e5e2023-10-31 13:36:37 -070025#define _UFFDIO_POISON (0x08)
Christopher Ferris05d08e92016-02-04 13:16:38 -080026#define _UFFDIO_API (0x3F)
27#define UFFDIO 0xAA
28#define UFFDIO_API _IOWR(UFFDIO, _UFFDIO_API, struct uffdio_api)
29#define UFFDIO_REGISTER _IOWR(UFFDIO, _UFFDIO_REGISTER, struct uffdio_register)
Christopher Ferris05d08e92016-02-04 13:16:38 -080030#define UFFDIO_UNREGISTER _IOR(UFFDIO, _UFFDIO_UNREGISTER, struct uffdio_range)
31#define UFFDIO_WAKE _IOR(UFFDIO, _UFFDIO_WAKE, struct uffdio_range)
32#define UFFDIO_COPY _IOWR(UFFDIO, _UFFDIO_COPY, struct uffdio_copy)
33#define UFFDIO_ZEROPAGE _IOWR(UFFDIO, _UFFDIO_ZEROPAGE, struct uffdio_zeropage)
Christopher Ferrisaf09c702020-06-01 20:29:29 -070034#define UFFDIO_WRITEPROTECT _IOWR(UFFDIO, _UFFDIO_WRITEPROTECT, struct uffdio_writeprotect)
Christopher Ferrisfcc3b4f2021-07-01 01:30:21 +000035#define UFFDIO_CONTINUE _IOWR(UFFDIO, _UFFDIO_CONTINUE, struct uffdio_continue)
Christopher Ferris67d1e5e2023-10-31 13:36:37 -070036#define UFFDIO_POISON _IOWR(UFFDIO, _UFFDIO_POISON, struct uffdio_poison)
Christopher Ferris05d08e92016-02-04 13:16:38 -080037struct uffd_msg {
38 __u8 event;
39 __u8 reserved1;
40 __u16 reserved2;
Christopher Ferris05d08e92016-02-04 13:16:38 -080041 __u32 reserved3;
42 union {
43 struct {
44 __u64 flags;
Christopher Ferris05d08e92016-02-04 13:16:38 -080045 __u64 address;
Christopher Ferris1308ad32017-11-14 17:32:13 -080046 union {
47 __u32 ptid;
48 } feat;
Christopher Ferris05d08e92016-02-04 13:16:38 -080049 } pagefault;
50 struct {
Christopher Ferris525ce912017-07-26 13:12:53 -070051 __u32 ufd;
52 } fork;
53 struct {
54 __u64 from;
55 __u64 to;
56 __u64 len;
57 } remap;
58 struct {
59 __u64 start;
60 __u64 end;
61 } remove;
62 struct {
Christopher Ferris05d08e92016-02-04 13:16:38 -080063 __u64 reserved1;
Christopher Ferris05d08e92016-02-04 13:16:38 -080064 __u64 reserved2;
65 __u64 reserved3;
66 } reserved;
67 } arg;
Colin Cross4ac33222022-12-15 15:45:35 -080068} __attribute__((__packed__));
Christopher Ferris05d08e92016-02-04 13:16:38 -080069#define UFFD_EVENT_PAGEFAULT 0x12
Christopher Ferris525ce912017-07-26 13:12:53 -070070#define UFFD_EVENT_FORK 0x13
71#define UFFD_EVENT_REMAP 0x14
72#define UFFD_EVENT_REMOVE 0x15
73#define UFFD_EVENT_UNMAP 0x16
Christopher Ferris05d08e92016-02-04 13:16:38 -080074#define UFFD_PAGEFAULT_FLAG_WRITE (1 << 0)
75#define UFFD_PAGEFAULT_FLAG_WP (1 << 1)
Christopher Ferrisfcc3b4f2021-07-01 01:30:21 +000076#define UFFD_PAGEFAULT_FLAG_MINOR (1 << 2)
Christopher Ferris05d08e92016-02-04 13:16:38 -080077struct uffdio_api {
78 __u64 api;
Christopher Ferris525ce912017-07-26 13:12:53 -070079#define UFFD_FEATURE_PAGEFAULT_FLAG_WP (1 << 0)
80#define UFFD_FEATURE_EVENT_FORK (1 << 1)
81#define UFFD_FEATURE_EVENT_REMAP (1 << 2)
82#define UFFD_FEATURE_EVENT_REMOVE (1 << 3)
83#define UFFD_FEATURE_MISSING_HUGETLBFS (1 << 4)
84#define UFFD_FEATURE_MISSING_SHMEM (1 << 5)
85#define UFFD_FEATURE_EVENT_UNMAP (1 << 6)
Christopher Ferris1308ad32017-11-14 17:32:13 -080086#define UFFD_FEATURE_SIGBUS (1 << 7)
87#define UFFD_FEATURE_THREAD_ID (1 << 8)
Christopher Ferrisfcc3b4f2021-07-01 01:30:21 +000088#define UFFD_FEATURE_MINOR_HUGETLBFS (1 << 9)
Christopher Ferris3a39c0b2021-09-02 00:03:38 +000089#define UFFD_FEATURE_MINOR_SHMEM (1 << 10)
Christopher Ferris10a76e62022-06-08 13:31:52 -070090#define UFFD_FEATURE_EXACT_ADDRESS (1 << 11)
Christopher Ferris80ae69d2022-08-02 16:32:21 -070091#define UFFD_FEATURE_WP_HUGETLBFS_SHMEM (1 << 12)
Christopher Ferris37c3f3c2023-07-10 10:59:05 -070092#define UFFD_FEATURE_WP_UNPOPULATED (1 << 13)
Christopher Ferris67d1e5e2023-10-31 13:36:37 -070093#define UFFD_FEATURE_POISON (1 << 14)
Christopher Ferris05d08e92016-02-04 13:16:38 -080094 __u64 features;
95 __u64 ioctls;
Christopher Ferris05d08e92016-02-04 13:16:38 -080096};
97struct uffdio_range {
98 __u64 start;
99 __u64 len;
Christopher Ferris05d08e92016-02-04 13:16:38 -0800100};
101struct uffdio_register {
102 struct uffdio_range range;
103#define UFFDIO_REGISTER_MODE_MISSING ((__u64) 1 << 0)
Christopher Ferris05d08e92016-02-04 13:16:38 -0800104#define UFFDIO_REGISTER_MODE_WP ((__u64) 1 << 1)
Christopher Ferrisfcc3b4f2021-07-01 01:30:21 +0000105#define UFFDIO_REGISTER_MODE_MINOR ((__u64) 1 << 2)
Christopher Ferris05d08e92016-02-04 13:16:38 -0800106 __u64 mode;
107 __u64 ioctls;
108};
Christopher Ferris05d08e92016-02-04 13:16:38 -0800109struct uffdio_copy {
110 __u64 dst;
111 __u64 src;
112 __u64 len;
Christopher Ferris05d08e92016-02-04 13:16:38 -0800113#define UFFDIO_COPY_MODE_DONTWAKE ((__u64) 1 << 0)
Christopher Ferrisaf09c702020-06-01 20:29:29 -0700114#define UFFDIO_COPY_MODE_WP ((__u64) 1 << 1)
Christopher Ferris05d08e92016-02-04 13:16:38 -0800115 __u64 mode;
116 __s64 copy;
117};
Christopher Ferris05d08e92016-02-04 13:16:38 -0800118struct uffdio_zeropage {
119 struct uffdio_range range;
120#define UFFDIO_ZEROPAGE_MODE_DONTWAKE ((__u64) 1 << 0)
121 __u64 mode;
Christopher Ferris05d08e92016-02-04 13:16:38 -0800122 __s64 zeropage;
123};
Christopher Ferrisaf09c702020-06-01 20:29:29 -0700124struct uffdio_writeprotect {
125 struct uffdio_range range;
126#define UFFDIO_WRITEPROTECT_MODE_WP ((__u64) 1 << 0)
127#define UFFDIO_WRITEPROTECT_MODE_DONTWAKE ((__u64) 1 << 1)
128 __u64 mode;
129};
Christopher Ferrisfcc3b4f2021-07-01 01:30:21 +0000130struct uffdio_continue {
131 struct uffdio_range range;
132#define UFFDIO_CONTINUE_MODE_DONTWAKE ((__u64) 1 << 0)
Christopher Ferris37c3f3c2023-07-10 10:59:05 -0700133#define UFFDIO_CONTINUE_MODE_WP ((__u64) 1 << 1)
Christopher Ferrisfcc3b4f2021-07-01 01:30:21 +0000134 __u64 mode;
135 __s64 mapped;
136};
Christopher Ferris67d1e5e2023-10-31 13:36:37 -0700137struct uffdio_poison {
138 struct uffdio_range range;
139#define UFFDIO_POISON_MODE_DONTWAKE ((__u64) 1 << 0)
140 __u64 mode;
141 __s64 updated;
142};
Christopher Ferris05667cd2021-02-16 16:01:34 -0800143#define UFFD_USER_MODE_ONLY 1
Christopher Ferris05d08e92016-02-04 13:16:38 -0800144#endif