16f52b16cSGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ 28a1ab315SDavid Howells #ifndef __ASM_GENERIC_SHMBUF_H 38a1ab315SDavid Howells #define __ASM_GENERIC_SHMBUF_H 48a1ab315SDavid Howells 58a1ab315SDavid Howells #include <asm/bitsperlong.h> 6*4a3233c1SMasahiro Yamada #include <asm/ipcbuf.h> 7*4a3233c1SMasahiro Yamada #include <asm/posix_types.h> 88a1ab315SDavid Howells 98a1ab315SDavid Howells /* 108a1ab315SDavid Howells * The shmid64_ds structure for x86 architecture. 118a1ab315SDavid Howells * Note extra padding because this structure is passed back and forth 128a1ab315SDavid Howells * between kernel and user space. 138a1ab315SDavid Howells * 148a1ab315SDavid Howells * shmid64_ds was originally meant to be architecture specific, but 158a1ab315SDavid Howells * everyone just ended up making identical copies without specific 168a1ab315SDavid Howells * optimizations, so we may just as well all use the same one. 178a1ab315SDavid Howells * 18caf5e32dSArnd Bergmann * 64 bit architectures use a 64-bit long time field here, while 19caf5e32dSArnd Bergmann * 32 bit architectures have a pair of unsigned long values. 20caf5e32dSArnd Bergmann * On big-endian systems, the lower half is in the wrong place. 218a1ab315SDavid Howells * 228a1ab315SDavid Howells * 238a1ab315SDavid Howells * Pad space is left for: 248a1ab315SDavid Howells * - 2 miscellaneous 32-bit values 258a1ab315SDavid Howells */ 268a1ab315SDavid Howells 278a1ab315SDavid Howells struct shmid64_ds { 288a1ab315SDavid Howells struct ipc64_perm shm_perm; /* operation perms */ 29*4a3233c1SMasahiro Yamada __kernel_size_t shm_segsz; /* size of segment (bytes) */ 30f991f015SArnd Bergmann #if __BITS_PER_LONG == 64 31caf5e32dSArnd Bergmann long shm_atime; /* last attach time */ 32caf5e32dSArnd Bergmann long shm_dtime; /* last detach time */ 33caf5e32dSArnd Bergmann long shm_ctime; /* last change time */ 34f991f015SArnd Bergmann #else 35f991f015SArnd Bergmann unsigned long shm_atime; /* last attach time */ 36f991f015SArnd Bergmann unsigned long shm_atime_high; 37f991f015SArnd Bergmann unsigned long shm_dtime; /* last detach time */ 38f991f015SArnd Bergmann unsigned long shm_dtime_high; 39f991f015SArnd Bergmann unsigned long shm_ctime; /* last change time */ 40f991f015SArnd Bergmann unsigned long shm_ctime_high; 418a1ab315SDavid Howells #endif 428a1ab315SDavid Howells __kernel_pid_t shm_cpid; /* pid of creator */ 438a1ab315SDavid Howells __kernel_pid_t shm_lpid; /* pid of last operator */ 44f991f015SArnd Bergmann unsigned long shm_nattch; /* no. of current attaches */ 45f991f015SArnd Bergmann unsigned long __unused4; 46f991f015SArnd Bergmann unsigned long __unused5; 478a1ab315SDavid Howells }; 488a1ab315SDavid Howells 498a1ab315SDavid Howells struct shminfo64 { 50f991f015SArnd Bergmann unsigned long shmmax; 51f991f015SArnd Bergmann unsigned long shmmin; 52f991f015SArnd Bergmann unsigned long shmmni; 53f991f015SArnd Bergmann unsigned long shmseg; 54f991f015SArnd Bergmann unsigned long shmall; 55f991f015SArnd Bergmann unsigned long __unused1; 56f991f015SArnd Bergmann unsigned long __unused2; 57f991f015SArnd Bergmann unsigned long __unused3; 58f991f015SArnd Bergmann unsigned long __unused4; 598a1ab315SDavid Howells }; 608a1ab315SDavid Howells 618a1ab315SDavid Howells #endif /* __ASM_GENERIC_SHMBUF_H */ 62