sys/{mman,shm}.h: add {MAP,SHM}_HUGE_ macros from linux uapi
authorSzabolcs Nagy <nsz@port70.net>
Sun, 26 Nov 2017 23:58:25 +0000 (23:58 +0000)
committerRich Felker <dalias@aerifal.cx>
Thu, 22 Feb 2018 23:48:12 +0000 (18:48 -0500)
*_HUGE_SHIFT, *_HUGE_2MB, *_HUGE_1GB are documented in the man page,
so add all of the *_HUGE_* macros from linux uapi.

if MAP_HUGETLB is set, top bits of the mmap flags encode the page size.
see the linux commit aafd4562dfee81a40ba21b5ea3cf5e06664bc7f6

if SHM_HUGETLB is set, top bits of the shmget flags encode the page size.
see the linux commit 4da243ac1cf6aeb30b7c555d56208982d66d6d33

*_HUGE_16GB is defined unsigned to avoid signed left shift ub.

include/sys/mman.h
include/sys/shm.h

index 1231878244751e552217f73e805a49135a6edbbd..d13d4ca38d823f743e7a7c40934432f7f8b07e9a 100644 (file)
@@ -35,6 +35,19 @@ extern "C" {
 #define MAP_HUGETLB    0x40000
 #define MAP_FILE       0
 
+#define MAP_HUGE_SHIFT 26
+#define MAP_HUGE_MASK  0x3f
+#define MAP_HUGE_64KB  (16 << 26)
+#define MAP_HUGE_512KB (19 << 26)
+#define MAP_HUGE_1MB   (20 << 26)
+#define MAP_HUGE_2MB   (21 << 26)
+#define MAP_HUGE_8MB   (23 << 26)
+#define MAP_HUGE_16MB  (24 << 26)
+#define MAP_HUGE_256MB (28 << 26)
+#define MAP_HUGE_1GB   (30 << 26)
+#define MAP_HUGE_2GB   (31 << 26)
+#define MAP_HUGE_16GB  (34U << 26)
+
 #define PROT_NONE      0
 #define PROT_READ      1
 #define PROT_WRITE     2
index 67be822bc3baacfbf7f426f3512e5f35b5555c91..e7d39ff6ef6d4be2fbd66ed3487e57f21d1af89d 100644 (file)
@@ -40,6 +40,19 @@ extern "C" {
 #define SHM_HUGETLB 04000
 #define SHM_NORESERVE 010000
 
+#define SHM_HUGE_SHIFT 26
+#define SHM_HUGE_MASK  0x3f
+#define SHM_HUGE_64KB  (16 << 26)
+#define SHM_HUGE_512KB (19 << 26)
+#define SHM_HUGE_1MB   (20 << 26)
+#define SHM_HUGE_2MB   (21 << 26)
+#define SHM_HUGE_8MB   (23 << 26)
+#define SHM_HUGE_16MB  (24 << 26)
+#define SHM_HUGE_256MB (28 << 26)
+#define SHM_HUGE_1GB   (30 << 26)
+#define SHM_HUGE_2GB   (31 << 26)
+#define SHM_HUGE_16GB  (34U << 26)
+
 typedef unsigned long shmatt_t;
 
 void *shmat(int, const void *, int);