Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

selftests/mm: fix additional build errors for selftests

These build errors only occur if one fails to first run "make headers".
However, that is a non-obvious and instrusive requirement, and so there
was a discussion on how to get rid of it [1]. This uses that solution.

These two files were created by taking a snapshot of the generated header
files that are created via "make headers". These two files were copied
from ./usr/include/linux/ to ./tools/include/uapi/linux/ .

That fixes the selftests/mm build on today's Arch Linux (which required
the userfaultfd.h) and Ubuntu 23.04 (which additionally required memfd.h).

[1] https://lore.kernel.org/all/783a4178-1dec-4e30-989a-5174b8176b09@redhat.com/

Link: https://lkml.kernel.org/r/20240328033418.203790-3-jhubbard@nvidia.com
Signed-off-by: John Hubbard <jhubbard@nvidia.com>
Acked-by: David Hildenbrand <david@redhat.com>
Cc: Mark Brown <broonie@kernel.org>
Cc: Muhammad Usama Anjum <usama.anjum@collabora.com>
Cc: Suren Baghdasaryan <surenb@google.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Andrea Arcangeli <aarcange@redhat.com>
Cc: Axel Rasmussen <axelrasmussen@google.com>
Cc: Peter Xu <peterx@redhat.com>
Cc: Shuah Khan <shuah@kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>

authored by

John Hubbard and committed by
Andrew Morton
580ea358 e076eaca

+425
+39
tools/include/uapi/linux/memfd.h
··· 1 + /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ 2 + #ifndef _LINUX_MEMFD_H 3 + #define _LINUX_MEMFD_H 4 + 5 + #include <asm-generic/hugetlb_encode.h> 6 + 7 + /* flags for memfd_create(2) (unsigned int) */ 8 + #define MFD_CLOEXEC 0x0001U 9 + #define MFD_ALLOW_SEALING 0x0002U 10 + #define MFD_HUGETLB 0x0004U 11 + /* not executable and sealed to prevent changing to executable. */ 12 + #define MFD_NOEXEC_SEAL 0x0008U 13 + /* executable */ 14 + #define MFD_EXEC 0x0010U 15 + 16 + /* 17 + * Huge page size encoding when MFD_HUGETLB is specified, and a huge page 18 + * size other than the default is desired. See hugetlb_encode.h. 19 + * All known huge page size encodings are provided here. It is the 20 + * responsibility of the application to know which sizes are supported on 21 + * the running system. See mmap(2) man page for details. 22 + */ 23 + #define MFD_HUGE_SHIFT HUGETLB_FLAG_ENCODE_SHIFT 24 + #define MFD_HUGE_MASK HUGETLB_FLAG_ENCODE_MASK 25 + 26 + #define MFD_HUGE_64KB HUGETLB_FLAG_ENCODE_64KB 27 + #define MFD_HUGE_512KB HUGETLB_FLAG_ENCODE_512KB 28 + #define MFD_HUGE_1MB HUGETLB_FLAG_ENCODE_1MB 29 + #define MFD_HUGE_2MB HUGETLB_FLAG_ENCODE_2MB 30 + #define MFD_HUGE_8MB HUGETLB_FLAG_ENCODE_8MB 31 + #define MFD_HUGE_16MB HUGETLB_FLAG_ENCODE_16MB 32 + #define MFD_HUGE_32MB HUGETLB_FLAG_ENCODE_32MB 33 + #define MFD_HUGE_256MB HUGETLB_FLAG_ENCODE_256MB 34 + #define MFD_HUGE_512MB HUGETLB_FLAG_ENCODE_512MB 35 + #define MFD_HUGE_1GB HUGETLB_FLAG_ENCODE_1GB 36 + #define MFD_HUGE_2GB HUGETLB_FLAG_ENCODE_2GB 37 + #define MFD_HUGE_16GB HUGETLB_FLAG_ENCODE_16GB 38 + 39 + #endif /* _LINUX_MEMFD_H */
+386
tools/include/uapi/linux/userfaultfd.h
··· 1 + /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ 2 + /* 3 + * include/linux/userfaultfd.h 4 + * 5 + * Copyright (C) 2007 Davide Libenzi <davidel@xmailserver.org> 6 + * Copyright (C) 2015 Red Hat, Inc. 7 + * 8 + */ 9 + 10 + #ifndef _LINUX_USERFAULTFD_H 11 + #define _LINUX_USERFAULTFD_H 12 + 13 + #include <linux/types.h> 14 + 15 + /* ioctls for /dev/userfaultfd */ 16 + #define USERFAULTFD_IOC 0xAA 17 + #define USERFAULTFD_IOC_NEW _IO(USERFAULTFD_IOC, 0x00) 18 + 19 + /* 20 + * If the UFFDIO_API is upgraded someday, the UFFDIO_UNREGISTER and 21 + * UFFDIO_WAKE ioctls should be defined as _IOW and not as _IOR. In 22 + * userfaultfd.h we assumed the kernel was reading (instead _IOC_READ 23 + * means the userland is reading). 24 + */ 25 + #define UFFD_API ((__u64)0xAA) 26 + #define UFFD_API_REGISTER_MODES (UFFDIO_REGISTER_MODE_MISSING | \ 27 + UFFDIO_REGISTER_MODE_WP | \ 28 + UFFDIO_REGISTER_MODE_MINOR) 29 + #define UFFD_API_FEATURES (UFFD_FEATURE_PAGEFAULT_FLAG_WP | \ 30 + UFFD_FEATURE_EVENT_FORK | \ 31 + UFFD_FEATURE_EVENT_REMAP | \ 32 + UFFD_FEATURE_EVENT_REMOVE | \ 33 + UFFD_FEATURE_EVENT_UNMAP | \ 34 + UFFD_FEATURE_MISSING_HUGETLBFS | \ 35 + UFFD_FEATURE_MISSING_SHMEM | \ 36 + UFFD_FEATURE_SIGBUS | \ 37 + UFFD_FEATURE_THREAD_ID | \ 38 + UFFD_FEATURE_MINOR_HUGETLBFS | \ 39 + UFFD_FEATURE_MINOR_SHMEM | \ 40 + UFFD_FEATURE_EXACT_ADDRESS | \ 41 + UFFD_FEATURE_WP_HUGETLBFS_SHMEM | \ 42 + UFFD_FEATURE_WP_UNPOPULATED | \ 43 + UFFD_FEATURE_POISON | \ 44 + UFFD_FEATURE_WP_ASYNC | \ 45 + UFFD_FEATURE_MOVE) 46 + #define UFFD_API_IOCTLS \ 47 + ((__u64)1 << _UFFDIO_REGISTER | \ 48 + (__u64)1 << _UFFDIO_UNREGISTER | \ 49 + (__u64)1 << _UFFDIO_API) 50 + #define UFFD_API_RANGE_IOCTLS \ 51 + ((__u64)1 << _UFFDIO_WAKE | \ 52 + (__u64)1 << _UFFDIO_COPY | \ 53 + (__u64)1 << _UFFDIO_ZEROPAGE | \ 54 + (__u64)1 << _UFFDIO_MOVE | \ 55 + (__u64)1 << _UFFDIO_WRITEPROTECT | \ 56 + (__u64)1 << _UFFDIO_CONTINUE | \ 57 + (__u64)1 << _UFFDIO_POISON) 58 + #define UFFD_API_RANGE_IOCTLS_BASIC \ 59 + ((__u64)1 << _UFFDIO_WAKE | \ 60 + (__u64)1 << _UFFDIO_COPY | \ 61 + (__u64)1 << _UFFDIO_WRITEPROTECT | \ 62 + (__u64)1 << _UFFDIO_CONTINUE | \ 63 + (__u64)1 << _UFFDIO_POISON) 64 + 65 + /* 66 + * Valid ioctl command number range with this API is from 0x00 to 67 + * 0x3F. UFFDIO_API is the fixed number, everything else can be 68 + * changed by implementing a different UFFD_API. If sticking to the 69 + * same UFFD_API more ioctl can be added and userland will be aware of 70 + * which ioctl the running kernel implements through the ioctl command 71 + * bitmask written by the UFFDIO_API. 72 + */ 73 + #define _UFFDIO_REGISTER (0x00) 74 + #define _UFFDIO_UNREGISTER (0x01) 75 + #define _UFFDIO_WAKE (0x02) 76 + #define _UFFDIO_COPY (0x03) 77 + #define _UFFDIO_ZEROPAGE (0x04) 78 + #define _UFFDIO_MOVE (0x05) 79 + #define _UFFDIO_WRITEPROTECT (0x06) 80 + #define _UFFDIO_CONTINUE (0x07) 81 + #define _UFFDIO_POISON (0x08) 82 + #define _UFFDIO_API (0x3F) 83 + 84 + /* userfaultfd ioctl ids */ 85 + #define UFFDIO 0xAA 86 + #define UFFDIO_API _IOWR(UFFDIO, _UFFDIO_API, \ 87 + struct uffdio_api) 88 + #define UFFDIO_REGISTER _IOWR(UFFDIO, _UFFDIO_REGISTER, \ 89 + struct uffdio_register) 90 + #define UFFDIO_UNREGISTER _IOR(UFFDIO, _UFFDIO_UNREGISTER, \ 91 + struct uffdio_range) 92 + #define UFFDIO_WAKE _IOR(UFFDIO, _UFFDIO_WAKE, \ 93 + struct uffdio_range) 94 + #define UFFDIO_COPY _IOWR(UFFDIO, _UFFDIO_COPY, \ 95 + struct uffdio_copy) 96 + #define UFFDIO_ZEROPAGE _IOWR(UFFDIO, _UFFDIO_ZEROPAGE, \ 97 + struct uffdio_zeropage) 98 + #define UFFDIO_MOVE _IOWR(UFFDIO, _UFFDIO_MOVE, \ 99 + struct uffdio_move) 100 + #define UFFDIO_WRITEPROTECT _IOWR(UFFDIO, _UFFDIO_WRITEPROTECT, \ 101 + struct uffdio_writeprotect) 102 + #define UFFDIO_CONTINUE _IOWR(UFFDIO, _UFFDIO_CONTINUE, \ 103 + struct uffdio_continue) 104 + #define UFFDIO_POISON _IOWR(UFFDIO, _UFFDIO_POISON, \ 105 + struct uffdio_poison) 106 + 107 + /* read() structure */ 108 + struct uffd_msg { 109 + __u8 event; 110 + 111 + __u8 reserved1; 112 + __u16 reserved2; 113 + __u32 reserved3; 114 + 115 + union { 116 + struct { 117 + __u64 flags; 118 + __u64 address; 119 + union { 120 + __u32 ptid; 121 + } feat; 122 + } pagefault; 123 + 124 + struct { 125 + __u32 ufd; 126 + } fork; 127 + 128 + struct { 129 + __u64 from; 130 + __u64 to; 131 + __u64 len; 132 + } remap; 133 + 134 + struct { 135 + __u64 start; 136 + __u64 end; 137 + } remove; 138 + 139 + struct { 140 + /* unused reserved fields */ 141 + __u64 reserved1; 142 + __u64 reserved2; 143 + __u64 reserved3; 144 + } reserved; 145 + } arg; 146 + } __attribute__((packed)); 147 + 148 + /* 149 + * Start at 0x12 and not at 0 to be more strict against bugs. 150 + */ 151 + #define UFFD_EVENT_PAGEFAULT 0x12 152 + #define UFFD_EVENT_FORK 0x13 153 + #define UFFD_EVENT_REMAP 0x14 154 + #define UFFD_EVENT_REMOVE 0x15 155 + #define UFFD_EVENT_UNMAP 0x16 156 + 157 + /* flags for UFFD_EVENT_PAGEFAULT */ 158 + #define UFFD_PAGEFAULT_FLAG_WRITE (1<<0) /* If this was a write fault */ 159 + #define UFFD_PAGEFAULT_FLAG_WP (1<<1) /* If reason is VM_UFFD_WP */ 160 + #define UFFD_PAGEFAULT_FLAG_MINOR (1<<2) /* If reason is VM_UFFD_MINOR */ 161 + 162 + struct uffdio_api { 163 + /* userland asks for an API number and the features to enable */ 164 + __u64 api; 165 + /* 166 + * Kernel answers below with the all available features for 167 + * the API, this notifies userland of which events and/or 168 + * which flags for each event are enabled in the current 169 + * kernel. 170 + * 171 + * Note: UFFD_EVENT_PAGEFAULT and UFFD_PAGEFAULT_FLAG_WRITE 172 + * are to be considered implicitly always enabled in all kernels as 173 + * long as the uffdio_api.api requested matches UFFD_API. 174 + * 175 + * UFFD_FEATURE_MISSING_HUGETLBFS means an UFFDIO_REGISTER 176 + * with UFFDIO_REGISTER_MODE_MISSING mode will succeed on 177 + * hugetlbfs virtual memory ranges. Adding or not adding 178 + * UFFD_FEATURE_MISSING_HUGETLBFS to uffdio_api.features has 179 + * no real functional effect after UFFDIO_API returns, but 180 + * it's only useful for an initial feature set probe at 181 + * UFFDIO_API time. There are two ways to use it: 182 + * 183 + * 1) by adding UFFD_FEATURE_MISSING_HUGETLBFS to the 184 + * uffdio_api.features before calling UFFDIO_API, an error 185 + * will be returned by UFFDIO_API on a kernel without 186 + * hugetlbfs missing support 187 + * 188 + * 2) the UFFD_FEATURE_MISSING_HUGETLBFS can not be added in 189 + * uffdio_api.features and instead it will be set by the 190 + * kernel in the uffdio_api.features if the kernel supports 191 + * it, so userland can later check if the feature flag is 192 + * present in uffdio_api.features after UFFDIO_API 193 + * succeeded. 194 + * 195 + * UFFD_FEATURE_MISSING_SHMEM works the same as 196 + * UFFD_FEATURE_MISSING_HUGETLBFS, but it applies to shmem 197 + * (i.e. tmpfs and other shmem based APIs). 198 + * 199 + * UFFD_FEATURE_SIGBUS feature means no page-fault 200 + * (UFFD_EVENT_PAGEFAULT) event will be delivered, instead 201 + * a SIGBUS signal will be sent to the faulting process. 202 + * 203 + * UFFD_FEATURE_THREAD_ID pid of the page faulted task_struct will 204 + * be returned, if feature is not requested 0 will be returned. 205 + * 206 + * UFFD_FEATURE_MINOR_HUGETLBFS indicates that minor faults 207 + * can be intercepted (via REGISTER_MODE_MINOR) for 208 + * hugetlbfs-backed pages. 209 + * 210 + * UFFD_FEATURE_MINOR_SHMEM indicates the same support as 211 + * UFFD_FEATURE_MINOR_HUGETLBFS, but for shmem-backed pages instead. 212 + * 213 + * UFFD_FEATURE_EXACT_ADDRESS indicates that the exact address of page 214 + * faults would be provided and the offset within the page would not be 215 + * masked. 216 + * 217 + * UFFD_FEATURE_WP_HUGETLBFS_SHMEM indicates that userfaultfd 218 + * write-protection mode is supported on both shmem and hugetlbfs. 219 + * 220 + * UFFD_FEATURE_WP_UNPOPULATED indicates that userfaultfd 221 + * write-protection mode will always apply to unpopulated pages 222 + * (i.e. empty ptes). This will be the default behavior for shmem 223 + * & hugetlbfs, so this flag only affects anonymous memory behavior 224 + * when userfault write-protection mode is registered. 225 + * 226 + * UFFD_FEATURE_WP_ASYNC indicates that userfaultfd write-protection 227 + * asynchronous mode is supported in which the write fault is 228 + * automatically resolved and write-protection is un-set. 229 + * It implies UFFD_FEATURE_WP_UNPOPULATED. 230 + * 231 + * UFFD_FEATURE_MOVE indicates that the kernel supports moving an 232 + * existing page contents from userspace. 233 + */ 234 + #define UFFD_FEATURE_PAGEFAULT_FLAG_WP (1<<0) 235 + #define UFFD_FEATURE_EVENT_FORK (1<<1) 236 + #define UFFD_FEATURE_EVENT_REMAP (1<<2) 237 + #define UFFD_FEATURE_EVENT_REMOVE (1<<3) 238 + #define UFFD_FEATURE_MISSING_HUGETLBFS (1<<4) 239 + #define UFFD_FEATURE_MISSING_SHMEM (1<<5) 240 + #define UFFD_FEATURE_EVENT_UNMAP (1<<6) 241 + #define UFFD_FEATURE_SIGBUS (1<<7) 242 + #define UFFD_FEATURE_THREAD_ID (1<<8) 243 + #define UFFD_FEATURE_MINOR_HUGETLBFS (1<<9) 244 + #define UFFD_FEATURE_MINOR_SHMEM (1<<10) 245 + #define UFFD_FEATURE_EXACT_ADDRESS (1<<11) 246 + #define UFFD_FEATURE_WP_HUGETLBFS_SHMEM (1<<12) 247 + #define UFFD_FEATURE_WP_UNPOPULATED (1<<13) 248 + #define UFFD_FEATURE_POISON (1<<14) 249 + #define UFFD_FEATURE_WP_ASYNC (1<<15) 250 + #define UFFD_FEATURE_MOVE (1<<16) 251 + __u64 features; 252 + 253 + __u64 ioctls; 254 + }; 255 + 256 + struct uffdio_range { 257 + __u64 start; 258 + __u64 len; 259 + }; 260 + 261 + struct uffdio_register { 262 + struct uffdio_range range; 263 + #define UFFDIO_REGISTER_MODE_MISSING ((__u64)1<<0) 264 + #define UFFDIO_REGISTER_MODE_WP ((__u64)1<<1) 265 + #define UFFDIO_REGISTER_MODE_MINOR ((__u64)1<<2) 266 + __u64 mode; 267 + 268 + /* 269 + * kernel answers which ioctl commands are available for the 270 + * range, keep at the end as the last 8 bytes aren't read. 271 + */ 272 + __u64 ioctls; 273 + }; 274 + 275 + struct uffdio_copy { 276 + __u64 dst; 277 + __u64 src; 278 + __u64 len; 279 + #define UFFDIO_COPY_MODE_DONTWAKE ((__u64)1<<0) 280 + /* 281 + * UFFDIO_COPY_MODE_WP will map the page write protected on 282 + * the fly. UFFDIO_COPY_MODE_WP is available only if the 283 + * write protected ioctl is implemented for the range 284 + * according to the uffdio_register.ioctls. 285 + */ 286 + #define UFFDIO_COPY_MODE_WP ((__u64)1<<1) 287 + __u64 mode; 288 + 289 + /* 290 + * "copy" is written by the ioctl and must be at the end: the 291 + * copy_from_user will not read the last 8 bytes. 292 + */ 293 + __s64 copy; 294 + }; 295 + 296 + struct uffdio_zeropage { 297 + struct uffdio_range range; 298 + #define UFFDIO_ZEROPAGE_MODE_DONTWAKE ((__u64)1<<0) 299 + __u64 mode; 300 + 301 + /* 302 + * "zeropage" is written by the ioctl and must be at the end: 303 + * the copy_from_user will not read the last 8 bytes. 304 + */ 305 + __s64 zeropage; 306 + }; 307 + 308 + struct uffdio_writeprotect { 309 + struct uffdio_range range; 310 + /* 311 + * UFFDIO_WRITEPROTECT_MODE_WP: set the flag to write protect a range, 312 + * unset the flag to undo protection of a range which was previously 313 + * write protected. 314 + * 315 + * UFFDIO_WRITEPROTECT_MODE_DONTWAKE: set the flag to avoid waking up 316 + * any wait thread after the operation succeeds. 317 + * 318 + * NOTE: Write protecting a region (WP=1) is unrelated to page faults, 319 + * therefore DONTWAKE flag is meaningless with WP=1. Removing write 320 + * protection (WP=0) in response to a page fault wakes the faulting 321 + * task unless DONTWAKE is set. 322 + */ 323 + #define UFFDIO_WRITEPROTECT_MODE_WP ((__u64)1<<0) 324 + #define UFFDIO_WRITEPROTECT_MODE_DONTWAKE ((__u64)1<<1) 325 + __u64 mode; 326 + }; 327 + 328 + struct uffdio_continue { 329 + struct uffdio_range range; 330 + #define UFFDIO_CONTINUE_MODE_DONTWAKE ((__u64)1<<0) 331 + /* 332 + * UFFDIO_CONTINUE_MODE_WP will map the page write protected on 333 + * the fly. UFFDIO_CONTINUE_MODE_WP is available only if the 334 + * write protected ioctl is implemented for the range 335 + * according to the uffdio_register.ioctls. 336 + */ 337 + #define UFFDIO_CONTINUE_MODE_WP ((__u64)1<<1) 338 + __u64 mode; 339 + 340 + /* 341 + * Fields below here are written by the ioctl and must be at the end: 342 + * the copy_from_user will not read past here. 343 + */ 344 + __s64 mapped; 345 + }; 346 + 347 + struct uffdio_poison { 348 + struct uffdio_range range; 349 + #define UFFDIO_POISON_MODE_DONTWAKE ((__u64)1<<0) 350 + __u64 mode; 351 + 352 + /* 353 + * Fields below here are written by the ioctl and must be at the end: 354 + * the copy_from_user will not read past here. 355 + */ 356 + __s64 updated; 357 + }; 358 + 359 + struct uffdio_move { 360 + __u64 dst; 361 + __u64 src; 362 + __u64 len; 363 + /* 364 + * Especially if used to atomically remove memory from the 365 + * address space the wake on the dst range is not needed. 366 + */ 367 + #define UFFDIO_MOVE_MODE_DONTWAKE ((__u64)1<<0) 368 + #define UFFDIO_MOVE_MODE_ALLOW_SRC_HOLES ((__u64)1<<1) 369 + __u64 mode; 370 + /* 371 + * "move" is written by the ioctl and must be at the end: the 372 + * copy_from_user will not read the last 8 bytes. 373 + */ 374 + __s64 move; 375 + }; 376 + 377 + /* 378 + * Flags for the userfaultfd(2) system call itself. 379 + */ 380 + 381 + /* 382 + * Create a userfaultfd that can handle page faults only in user mode. 383 + */ 384 + #define UFFD_USER_MODE_ONLY 1 385 + 386 + #endif /* _LINUX_USERFAULTFD_H */