Warning: This file is not a C or C++ file. It does not have highlighting.
1 | /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ |
---|---|
2 | #ifndef __ASM_GENERIC_SEMBUF_H |
3 | #define __ASM_GENERIC_SEMBUF_H |
4 | |
5 | #include <asm/bitsperlong.h> |
6 | #include <asm/ipcbuf.h> |
7 | |
8 | /* |
9 | * The semid64_ds structure for most architectures (though it came from x86_32 |
10 | * originally). Note extra padding because this structure is passed back and |
11 | * forth between kernel and user space. |
12 | * |
13 | * semid64_ds was originally meant to be architecture specific, but |
14 | * everyone just ended up making identical copies without specific |
15 | * optimizations, so we may just as well all use the same one. |
16 | * |
17 | * 64 bit architectures use a 64-bit long time field here, while |
18 | * 32 bit architectures have a pair of unsigned long values. |
19 | * |
20 | * On big-endian systems, the padding is in the wrong place for |
21 | * historic reasons, so user space has to reconstruct a time_t |
22 | * value using |
23 | * |
24 | * user_semid_ds.sem_otime = kernel_semid64_ds.sem_otime + |
25 | * ((long long)kernel_semid64_ds.sem_otime_high << 32) |
26 | * |
27 | * Pad space is left for 2 miscellaneous 32-bit values |
28 | */ |
29 | struct semid64_ds { |
30 | struct ipc64_perm sem_perm; /* permissions .. see ipc.h */ |
31 | #if __BITS_PER_LONG == 64 |
32 | long sem_otime; /* last semop time */ |
33 | long sem_ctime; /* last change time */ |
34 | #else |
35 | unsigned long sem_otime; /* last semop time */ |
36 | unsigned long sem_otime_high; |
37 | unsigned long sem_ctime; /* last change time */ |
38 | unsigned long sem_ctime_high; |
39 | #endif |
40 | unsigned long sem_nsems; /* no. of semaphores in array */ |
41 | unsigned long __unused3; |
42 | unsigned long __unused4; |
43 | }; |
44 | |
45 | #endif /* __ASM_GENERIC_SEMBUF_H */ |
46 |
Warning: This file is not a C or C++ file. It does not have highlighting.