blob: 5eeea4e0a21d7a1514ff5284ca527df9025ec50f [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 Ferris0f795212024-01-17 14:17:28 -080014#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)
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 Ferris0f795212024-01-17 14:17:28 -080094#define UFFD_FEATURE_WP_ASYNC (1 << 15)
Christopher Ferris05d08e92016-02-04 13:16:38 -080095 __u64 features;
96 __u64 ioctls;
Christopher Ferris05d08e92016-02-04 13:16:38 -080097};
98struct uffdio_range {
99 __u64 start;
100 __u64 len;
Christopher Ferris05d08e92016-02-04 13:16:38 -0800101};
102struct uffdio_register {
103 struct uffdio_range range;
104#define UFFDIO_REGISTER_MODE_MISSING ((__u64) 1 << 0)
Christopher Ferris05d08e92016-02-04 13:16:38 -0800105#define UFFDIO_REGISTER_MODE_WP ((__u64) 1 << 1)
Christopher Ferrisfcc3b4f2021-07-01 01:30:21 +0000106#define UFFDIO_REGISTER_MODE_MINOR ((__u64) 1 << 2)
Christopher Ferris05d08e92016-02-04 13:16:38 -0800107 __u64 mode;
108 __u64 ioctls;
109};
Christopher Ferris05d08e92016-02-04 13:16:38 -0800110struct uffdio_copy {
111 __u64 dst;
112 __u64 src;
113 __u64 len;
Christopher Ferris05d08e92016-02-04 13:16:38 -0800114#define UFFDIO_COPY_MODE_DONTWAKE ((__u64) 1 << 0)
Christopher Ferrisaf09c702020-06-01 20:29:29 -0700115#define UFFDIO_COPY_MODE_WP ((__u64) 1 << 1)
Christopher Ferris05d08e92016-02-04 13:16:38 -0800116 __u64 mode;
117 __s64 copy;
118};
Christopher Ferris05d08e92016-02-04 13:16:38 -0800119struct uffdio_zeropage {
120 struct uffdio_range range;
121#define UFFDIO_ZEROPAGE_MODE_DONTWAKE ((__u64) 1 << 0)
122 __u64 mode;
Christopher Ferris05d08e92016-02-04 13:16:38 -0800123 __s64 zeropage;
124};
Christopher Ferrisaf09c702020-06-01 20:29:29 -0700125struct uffdio_writeprotect {
126 struct uffdio_range range;
127#define UFFDIO_WRITEPROTECT_MODE_WP ((__u64) 1 << 0)
128#define UFFDIO_WRITEPROTECT_MODE_DONTWAKE ((__u64) 1 << 1)
129 __u64 mode;
130};
Christopher Ferrisfcc3b4f2021-07-01 01:30:21 +0000131struct uffdio_continue {
132 struct uffdio_range range;
133#define UFFDIO_CONTINUE_MODE_DONTWAKE ((__u64) 1 << 0)
Christopher Ferris37c3f3c2023-07-10 10:59:05 -0700134#define UFFDIO_CONTINUE_MODE_WP ((__u64) 1 << 1)
Christopher Ferrisfcc3b4f2021-07-01 01:30:21 +0000135 __u64 mode;
136 __s64 mapped;
137};
Christopher Ferris67d1e5e2023-10-31 13:36:37 -0700138struct uffdio_poison {
139 struct uffdio_range range;
140#define UFFDIO_POISON_MODE_DONTWAKE ((__u64) 1 << 0)
141 __u64 mode;
142 __s64 updated;
143};
Christopher Ferris05667cd2021-02-16 16:01:34 -0800144#define UFFD_USER_MODE_ONLY 1
Christopher Ferris05d08e92016-02-04 13:16:38 -0800145#endif