mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-10 07:00:48 +00:00
caf5e32d4e
There are two structures based on time_t that conflict between libc and kernel: timeval and timespec. Both are now renamed to __kernel_old_timeval and __kernel_old_timespec. For time_t, the old typedef is still __kernel_time_t. There is nothing wrong with that name, but it would be nice to not use that going forward as this type is used almost only in deprecated interfaces because of the y2038 overflow. In the IPC headers (msgbuf.h, sembuf.h, shmbuf.h), __kernel_time_t is only used for the 64-bit variants, which are not deprecated. Change these to a plain 'long', which is the same type as __kernel_time_t on all 64-bit architectures anyway, to reduce the number of users of the old type. Signed-off-by: Arnd Bergmann <arnd@arndb.de>
45 lines
1.4 KiB
C
45 lines
1.4 KiB
C
/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */
|
|
#ifndef __ASM_GENERIC_SEMBUF_H
|
|
#define __ASM_GENERIC_SEMBUF_H
|
|
|
|
#include <asm/bitsperlong.h>
|
|
|
|
/*
|
|
* The semid64_ds structure for x86 architecture.
|
|
* Note extra padding because this structure is passed back and forth
|
|
* between kernel and user space.
|
|
*
|
|
* semid64_ds was originally meant to be architecture specific, but
|
|
* everyone just ended up making identical copies without specific
|
|
* optimizations, so we may just as well all use the same one.
|
|
*
|
|
* 64 bit architectures use a 64-bit long time field here, while
|
|
* 32 bit architectures have a pair of unsigned long values.
|
|
*
|
|
* On big-endian systems, the padding is in the wrong place for
|
|
* historic reasons, so user space has to reconstruct a time_t
|
|
* value using
|
|
*
|
|
* user_semid_ds.sem_otime = kernel_semid64_ds.sem_otime +
|
|
* ((long long)kernel_semid64_ds.sem_otime_high << 32)
|
|
*
|
|
* Pad space is left for 2 miscellaneous 32-bit values
|
|
*/
|
|
struct semid64_ds {
|
|
struct ipc64_perm sem_perm; /* permissions .. see ipc.h */
|
|
#if __BITS_PER_LONG == 64
|
|
long sem_otime; /* last semop time */
|
|
long sem_ctime; /* last change time */
|
|
#else
|
|
unsigned long sem_otime; /* last semop time */
|
|
unsigned long sem_otime_high;
|
|
unsigned long sem_ctime; /* last change time */
|
|
unsigned long sem_ctime_high;
|
|
#endif
|
|
unsigned long sem_nsems; /* no. of semaphores in array */
|
|
unsigned long __unused3;
|
|
unsigned long __unused4;
|
|
};
|
|
|
|
#endif /* __ASM_GENERIC_SEMBUF_H */
|