mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-06 14:48:06 +00:00
userfaultfd: uAPI
Defines the uAPI of the userfaultfd, notably the ioctl numbers and protocol. Signed-off-by: Andrea Arcangeli <aarcange@redhat.com> Acked-by: Pavel Emelyanov <xemul@parallels.com> Cc: Sanidhya Kashyap <sanidhya.gatech@gmail.com> Cc: zhang.zhanghailiang@huawei.com Cc: "Kirill A. Shutemov" <kirill@shutemov.name> Cc: Andres Lagar-Cavilla <andreslc@google.com> Cc: Dave Hansen <dave.hansen@intel.com> Cc: Paolo Bonzini <pbonzini@redhat.com> Cc: Rik van Riel <riel@redhat.com> Cc: Mel Gorman <mgorman@suse.de> Cc: Andy Lutomirski <luto@amacapital.net> Cc: Hugh Dickins <hughd@google.com> Cc: Peter Feiner <pfeiner@google.com> Cc: "Dr. David Alan Gilbert" <dgilbert@redhat.com> Cc: Johannes Weiner <hannes@cmpxchg.org> Cc: "Huangpeng (Peter)" <peter.huangpeng@huawei.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
51360155ec
commit
1038628d80
3 changed files with 85 additions and 0 deletions
|
@ -303,6 +303,7 @@ Code Seq#(hex) Include File Comments
|
||||||
0xA3 80-8F Port ACL in development:
|
0xA3 80-8F Port ACL in development:
|
||||||
<mailto:tlewis@mindspring.com>
|
<mailto:tlewis@mindspring.com>
|
||||||
0xA3 90-9F linux/dtlk.h
|
0xA3 90-9F linux/dtlk.h
|
||||||
|
0xAA 00-3F linux/uapi/linux/userfaultfd.h
|
||||||
0xAB 00-1F linux/nbd.h
|
0xAB 00-1F linux/nbd.h
|
||||||
0xAC 00-1F linux/raw.h
|
0xAC 00-1F linux/raw.h
|
||||||
0xAD 00 Netfilter device in development:
|
0xAD 00 Netfilter device in development:
|
||||||
|
|
|
@ -456,3 +456,4 @@ header-y += xfrm.h
|
||||||
header-y += xilinx-v4l2-controls.h
|
header-y += xilinx-v4l2-controls.h
|
||||||
header-y += zorro.h
|
header-y += zorro.h
|
||||||
header-y += zorro_ids.h
|
header-y += zorro_ids.h
|
||||||
|
header-y += userfaultfd.h
|
||||||
|
|
83
include/uapi/linux/userfaultfd.h
Normal file
83
include/uapi/linux/userfaultfd.h
Normal file
|
@ -0,0 +1,83 @@
|
||||||
|
/*
|
||||||
|
* include/linux/userfaultfd.h
|
||||||
|
*
|
||||||
|
* Copyright (C) 2007 Davide Libenzi <davidel@xmailserver.org>
|
||||||
|
* Copyright (C) 2015 Red Hat, Inc.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _LINUX_USERFAULTFD_H
|
||||||
|
#define _LINUX_USERFAULTFD_H
|
||||||
|
|
||||||
|
#include <linux/types.h>
|
||||||
|
|
||||||
|
#define UFFD_API ((__u64)0xAA)
|
||||||
|
/* FIXME: add "|UFFD_BIT_WP" to UFFD_API_BITS after implementing it */
|
||||||
|
#define UFFD_API_BITS (UFFD_BIT_WRITE)
|
||||||
|
#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)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Valid ioctl command number range with this API is from 0x00 to
|
||||||
|
* 0x3F. UFFDIO_API is the fixed number, everything else can be
|
||||||
|
* changed by implementing a different UFFD_API. If sticking to the
|
||||||
|
* same UFFD_API more ioctl can be added and userland will be aware of
|
||||||
|
* which ioctl the running kernel implements through the ioctl command
|
||||||
|
* bitmask written by the UFFDIO_API.
|
||||||
|
*/
|
||||||
|
#define _UFFDIO_REGISTER (0x00)
|
||||||
|
#define _UFFDIO_UNREGISTER (0x01)
|
||||||
|
#define _UFFDIO_WAKE (0x02)
|
||||||
|
#define _UFFDIO_API (0x3F)
|
||||||
|
|
||||||
|
/* userfaultfd ioctl ids */
|
||||||
|
#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)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Valid bits below PAGE_SHIFT in the userfault address read through
|
||||||
|
* the read() syscall.
|
||||||
|
*/
|
||||||
|
#define UFFD_BIT_WRITE (1<<0) /* this was a write fault, MISSING or WP */
|
||||||
|
#define UFFD_BIT_WP (1<<1) /* handle_userfault() reason VM_UFFD_WP */
|
||||||
|
#define UFFD_BITS 2 /* two above bits used for UFFD_BIT_* mask */
|
||||||
|
|
||||||
|
struct uffdio_api {
|
||||||
|
/* userland asks for an API number */
|
||||||
|
__u64 api;
|
||||||
|
|
||||||
|
/* kernel answers below with the available features for the API */
|
||||||
|
__u64 bits;
|
||||||
|
__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;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* kernel answers which ioctl commands are available for the
|
||||||
|
* range, keep at the end as the last 8 bytes aren't read.
|
||||||
|
*/
|
||||||
|
__u64 ioctls;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* _LINUX_USERFAULTFD_H */
|
Loading…
Add table
Reference in a new issue