/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */1#ifndef __ASM_GENERIC_SEMBUF_H2#define __ASM_GENERIC_SEMBUF_H34#include <asm/bitsperlong.h>5#include <asm/ipcbuf.h>67/*8* The semid64_ds structure for most architectures (though it came from x86_329* originally). Note extra padding because this structure is passed back and10* forth between kernel and user space.11*12* semid64_ds was originally meant to be architecture specific, but13* everyone just ended up making identical copies without specific14* optimizations, so we may just as well all use the same one.15*16* 64 bit architectures use a 64-bit long time field here, while17* 32 bit architectures have a pair of unsigned long values.18*19* On big-endian systems, the padding is in the wrong place for20* historic reasons, so user space has to reconstruct a time_t21* value using22*23* user_semid_ds.sem_otime = kernel_semid64_ds.sem_otime +24* ((long long)kernel_semid64_ds.sem_otime_high << 32)25*26* Pad space is left for 2 miscellaneous 32-bit values27*/28struct semid64_ds {29struct ipc64_perm sem_perm; /* permissions .. see ipc.h */30#if __BITS_PER_LONG == 6431long sem_otime; /* last semop time */32long sem_ctime; /* last change time */33#else34unsigned long sem_otime; /* last semop time */35unsigned long sem_otime_high;36unsigned long sem_ctime; /* last change time */37unsigned long sem_ctime_high;38#endif39unsigned long sem_nsems; /* no. of semaphores in array */40unsigned long __unused3;41unsigned long __unused4;42};4344#endif /* __ASM_GENERIC_SEMBUF_H */454647