123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167 |
- #ifndef _LINUX_USERFAULTFD_H
- #define _LINUX_USERFAULTFD_H
- #include <linux/types.h>
- #define UFFD_API ((__u64)0xAA)
- #define UFFD_API_FEATURES (0)
- #define UFFD_API_IOCTLS \
- ((__u64)1 << _UFFDIO_REGISTER | \
- (__u64)1 << _UFFDIO_UNREGISTER | \
- (__u64)1 << _UFFDIO_API)
- #define UFFD_API_RANGE_IOCTLS \
- ((__u64)1 << _UFFDIO_WAKE | \
- (__u64)1 << _UFFDIO_COPY | \
- (__u64)1 << _UFFDIO_ZEROPAGE)
- #define _UFFDIO_REGISTER (0x00)
- #define _UFFDIO_UNREGISTER (0x01)
- #define _UFFDIO_WAKE (0x02)
- #define _UFFDIO_COPY (0x03)
- #define _UFFDIO_ZEROPAGE (0x04)
- #define _UFFDIO_API (0x3F)
- #define UFFDIO 0xAA
- #define UFFDIO_API _IOWR(UFFDIO, _UFFDIO_API, \
- struct uffdio_api)
- #define UFFDIO_REGISTER _IOWR(UFFDIO, _UFFDIO_REGISTER, \
- struct uffdio_register)
- #define UFFDIO_UNREGISTER _IOR(UFFDIO, _UFFDIO_UNREGISTER, \
- struct uffdio_range)
- #define UFFDIO_WAKE _IOR(UFFDIO, _UFFDIO_WAKE, \
- struct uffdio_range)
- #define UFFDIO_COPY _IOWR(UFFDIO, _UFFDIO_COPY, \
- struct uffdio_copy)
- #define UFFDIO_ZEROPAGE _IOWR(UFFDIO, _UFFDIO_ZEROPAGE, \
- struct uffdio_zeropage)
- struct uffd_msg {
- __u8 event;
- __u8 reserved1;
- __u16 reserved2;
- __u32 reserved3;
- union {
- struct {
- __u64 flags;
- __u64 address;
- } pagefault;
- struct {
-
- __u64 reserved1;
- __u64 reserved2;
- __u64 reserved3;
- } reserved;
- } arg;
- } __attribute__((packed));
- #define UFFD_EVENT_PAGEFAULT 0x12
- #if 0
- #define UFFD_EVENT_FORK 0x13
- #endif
- #define UFFD_PAGEFAULT_FLAG_WRITE (1<<0)
- #define UFFD_PAGEFAULT_FLAG_WP (1<<1)
- struct uffdio_api {
-
- __u64 api;
-
- #if 0
- #define UFFD_FEATURE_PAGEFAULT_FLAG_WP (1<<0)
- #define UFFD_FEATURE_EVENT_FORK (1<<1)
- #endif
- __u64 features;
- __u64 ioctls;
- };
- struct uffdio_range {
- __u64 start;
- __u64 len;
- };
- struct uffdio_register {
- struct uffdio_range range;
- #define UFFDIO_REGISTER_MODE_MISSING ((__u64)1<<0)
- #define UFFDIO_REGISTER_MODE_WP ((__u64)1<<1)
- __u64 mode;
-
- __u64 ioctls;
- };
- struct uffdio_copy {
- __u64 dst;
- __u64 src;
- __u64 len;
-
- #define UFFDIO_COPY_MODE_DONTWAKE ((__u64)1<<0)
- __u64 mode;
-
- __s64 copy;
- };
- struct uffdio_zeropage {
- struct uffdio_range range;
- #define UFFDIO_ZEROPAGE_MODE_DONTWAKE ((__u64)1<<0)
- __u64 mode;
-
- __s64 zeropage;
- };
- #endif
|