diff options
63 files changed, 633 insertions, 868 deletions
diff --git a/arch/alpha/include/uapi/asm/Kbuild b/arch/alpha/include/uapi/asm/Kbuild index 9afaba5e5503..1a5b75310cf4 100644 --- a/arch/alpha/include/uapi/asm/Kbuild +++ b/arch/alpha/include/uapi/asm/Kbuild | |||
| @@ -2,4 +2,8 @@ | |||
| 2 | include include/uapi/asm-generic/Kbuild.asm | 2 | include include/uapi/asm-generic/Kbuild.asm |
| 3 | 3 | ||
| 4 | generic-y += bpf_perf_event.h | 4 | generic-y += bpf_perf_event.h |
| 5 | generic-y += ipcbuf.h | ||
| 6 | generic-y += msgbuf.h | ||
| 5 | generic-y += poll.h | 7 | generic-y += poll.h |
| 8 | generic-y += sembuf.h | ||
| 9 | generic-y += shmbuf.h | ||
diff --git a/arch/alpha/include/uapi/asm/ipcbuf.h b/arch/alpha/include/uapi/asm/ipcbuf.h deleted file mode 100644 index 90d6445a14df..000000000000 --- a/arch/alpha/include/uapi/asm/ipcbuf.h +++ /dev/null | |||
| @@ -1,2 +0,0 @@ | |||
| 1 | /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ | ||
| 2 | #include <asm-generic/ipcbuf.h> | ||
diff --git a/arch/alpha/include/uapi/asm/msgbuf.h b/arch/alpha/include/uapi/asm/msgbuf.h deleted file mode 100644 index 8c5d4d8c1b16..000000000000 --- a/arch/alpha/include/uapi/asm/msgbuf.h +++ /dev/null | |||
| @@ -1,28 +0,0 @@ | |||
| 1 | /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ | ||
| 2 | #ifndef _ALPHA_MSGBUF_H | ||
| 3 | #define _ALPHA_MSGBUF_H | ||
| 4 | |||
| 5 | /* | ||
| 6 | * The msqid64_ds structure for alpha architecture. | ||
| 7 | * Note extra padding because this structure is passed back and forth | ||
| 8 | * between kernel and user space. | ||
| 9 | * | ||
| 10 | * Pad space is left for: | ||
| 11 | * - 2 miscellaneous 64-bit values | ||
| 12 | */ | ||
| 13 | |||
| 14 | struct msqid64_ds { | ||
| 15 | struct ipc64_perm msg_perm; | ||
| 16 | __kernel_time_t msg_stime; /* last msgsnd time */ | ||
| 17 | __kernel_time_t msg_rtime; /* last msgrcv time */ | ||
| 18 | __kernel_time_t msg_ctime; /* last change time */ | ||
| 19 | unsigned long msg_cbytes; /* current number of bytes on queue */ | ||
| 20 | unsigned long msg_qnum; /* number of messages in queue */ | ||
| 21 | unsigned long msg_qbytes; /* max number of bytes on queue */ | ||
| 22 | __kernel_pid_t msg_lspid; /* pid of last msgsnd */ | ||
| 23 | __kernel_pid_t msg_lrpid; /* last receive pid */ | ||
| 24 | unsigned long __unused1; | ||
| 25 | unsigned long __unused2; | ||
| 26 | }; | ||
| 27 | |||
| 28 | #endif /* _ALPHA_MSGBUF_H */ | ||
diff --git a/arch/alpha/include/uapi/asm/sembuf.h b/arch/alpha/include/uapi/asm/sembuf.h deleted file mode 100644 index f28ffa668b2f..000000000000 --- a/arch/alpha/include/uapi/asm/sembuf.h +++ /dev/null | |||
| @@ -1,23 +0,0 @@ | |||
| 1 | /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ | ||
| 2 | #ifndef _ALPHA_SEMBUF_H | ||
| 3 | #define _ALPHA_SEMBUF_H | ||
| 4 | |||
| 5 | /* | ||
| 6 | * The semid64_ds structure for alpha architecture. | ||
| 7 | * Note extra padding because this structure is passed back and forth | ||
| 8 | * between kernel and user space. | ||
| 9 | * | ||
| 10 | * Pad space is left for: | ||
| 11 | * - 2 miscellaneous 64-bit values | ||
| 12 | */ | ||
| 13 | |||
| 14 | struct semid64_ds { | ||
| 15 | struct ipc64_perm sem_perm; /* permissions .. see ipc.h */ | ||
| 16 | __kernel_time_t sem_otime; /* last semop time */ | ||
| 17 | __kernel_time_t sem_ctime; /* last change time */ | ||
| 18 | unsigned long sem_nsems; /* no. of semaphores in array */ | ||
| 19 | unsigned long __unused1; | ||
| 20 | unsigned long __unused2; | ||
| 21 | }; | ||
| 22 | |||
| 23 | #endif /* _ALPHA_SEMBUF_H */ | ||
diff --git a/arch/alpha/include/uapi/asm/shmbuf.h b/arch/alpha/include/uapi/asm/shmbuf.h deleted file mode 100644 index 7e041ca2eb40..000000000000 --- a/arch/alpha/include/uapi/asm/shmbuf.h +++ /dev/null | |||
| @@ -1,39 +0,0 @@ | |||
| 1 | /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ | ||
| 2 | #ifndef _ALPHA_SHMBUF_H | ||
| 3 | #define _ALPHA_SHMBUF_H | ||
| 4 | |||
| 5 | /* | ||
| 6 | * The shmid64_ds structure for alpha architecture. | ||
| 7 | * Note extra padding because this structure is passed back and forth | ||
| 8 | * between kernel and user space. | ||
| 9 | * | ||
| 10 | * Pad space is left for: | ||
| 11 | * - 2 miscellaneous 64-bit values | ||
| 12 | */ | ||
| 13 | |||
| 14 | struct shmid64_ds { | ||
| 15 | struct ipc64_perm shm_perm; /* operation perms */ | ||
| 16 | size_t shm_segsz; /* size of segment (bytes) */ | ||
| 17 | __kernel_time_t shm_atime; /* last attach time */ | ||
| 18 | __kernel_time_t shm_dtime; /* last detach time */ | ||
| 19 | __kernel_time_t shm_ctime; /* last change time */ | ||
| 20 | __kernel_pid_t shm_cpid; /* pid of creator */ | ||
| 21 | __kernel_pid_t shm_lpid; /* pid of last operator */ | ||
| 22 | unsigned long shm_nattch; /* no. of current attaches */ | ||
| 23 | unsigned long __unused1; | ||
| 24 | unsigned long __unused2; | ||
| 25 | }; | ||
| 26 | |||
| 27 | struct shminfo64 { | ||
| 28 | unsigned long shmmax; | ||
| 29 | unsigned long shmmin; | ||
| 30 | unsigned long shmmni; | ||
| 31 | unsigned long shmseg; | ||
| 32 | unsigned long shmall; | ||
| 33 | unsigned long __unused1; | ||
| 34 | unsigned long __unused2; | ||
| 35 | unsigned long __unused3; | ||
| 36 | unsigned long __unused4; | ||
| 37 | }; | ||
| 38 | |||
| 39 | #endif /* _ALPHA_SHMBUF_H */ | ||
diff --git a/arch/arm64/include/asm/compat.h b/arch/arm64/include/asm/compat.h index 0030f79808b3..1a037b94eba1 100644 --- a/arch/arm64/include/asm/compat.h +++ b/arch/arm64/include/asm/compat.h | |||
| @@ -181,10 +181,10 @@ struct compat_ipc64_perm { | |||
| 181 | 181 | ||
| 182 | struct compat_semid64_ds { | 182 | struct compat_semid64_ds { |
| 183 | struct compat_ipc64_perm sem_perm; | 183 | struct compat_ipc64_perm sem_perm; |
| 184 | compat_time_t sem_otime; | 184 | compat_ulong_t sem_otime; |
| 185 | compat_ulong_t __unused1; | 185 | compat_ulong_t sem_otime_high; |
| 186 | compat_time_t sem_ctime; | 186 | compat_ulong_t sem_ctime; |
| 187 | compat_ulong_t __unused2; | 187 | compat_ulong_t sem_ctime_high; |
| 188 | compat_ulong_t sem_nsems; | 188 | compat_ulong_t sem_nsems; |
| 189 | compat_ulong_t __unused3; | 189 | compat_ulong_t __unused3; |
| 190 | compat_ulong_t __unused4; | 190 | compat_ulong_t __unused4; |
| @@ -192,12 +192,12 @@ struct compat_semid64_ds { | |||
| 192 | 192 | ||
| 193 | struct compat_msqid64_ds { | 193 | struct compat_msqid64_ds { |
| 194 | struct compat_ipc64_perm msg_perm; | 194 | struct compat_ipc64_perm msg_perm; |
| 195 | compat_time_t msg_stime; | 195 | compat_ulong_t msg_stime; |
| 196 | compat_ulong_t __unused1; | 196 | compat_ulong_t msg_stime_high; |
| 197 | compat_time_t msg_rtime; | 197 | compat_ulong_t msg_rtime; |
| 198 | compat_ulong_t __unused2; | 198 | compat_ulong_t msg_rtime_high; |
| 199 | compat_time_t msg_ctime; | 199 | compat_ulong_t msg_ctime; |
| 200 | compat_ulong_t __unused3; | 200 | compat_ulong_t msg_ctime_high; |
| 201 | compat_ulong_t msg_cbytes; | 201 | compat_ulong_t msg_cbytes; |
| 202 | compat_ulong_t msg_qnum; | 202 | compat_ulong_t msg_qnum; |
| 203 | compat_ulong_t msg_qbytes; | 203 | compat_ulong_t msg_qbytes; |
| @@ -210,12 +210,12 @@ struct compat_msqid64_ds { | |||
| 210 | struct compat_shmid64_ds { | 210 | struct compat_shmid64_ds { |
| 211 | struct compat_ipc64_perm shm_perm; | 211 | struct compat_ipc64_perm shm_perm; |
| 212 | compat_size_t shm_segsz; | 212 | compat_size_t shm_segsz; |
| 213 | compat_time_t shm_atime; | 213 | compat_ulong_t shm_atime; |
| 214 | compat_ulong_t __unused1; | 214 | compat_ulong_t shm_atime_high; |
| 215 | compat_time_t shm_dtime; | 215 | compat_ulong_t shm_dtime; |
| 216 | compat_ulong_t __unused2; | 216 | compat_ulong_t shm_dtime_high; |
| 217 | compat_time_t shm_ctime; | 217 | compat_ulong_t shm_ctime; |
| 218 | compat_ulong_t __unused3; | 218 | compat_ulong_t shm_ctime_high; |
| 219 | compat_pid_t shm_cpid; | 219 | compat_pid_t shm_cpid; |
| 220 | compat_pid_t shm_lpid; | 220 | compat_pid_t shm_lpid; |
| 221 | compat_ulong_t shm_nattch; | 221 | compat_ulong_t shm_nattch; |
diff --git a/arch/ia64/include/uapi/asm/Kbuild b/arch/ia64/include/uapi/asm/Kbuild index c0527cfc48f0..3982e673e967 100644 --- a/arch/ia64/include/uapi/asm/Kbuild +++ b/arch/ia64/include/uapi/asm/Kbuild | |||
| @@ -2,5 +2,9 @@ | |||
| 2 | include include/uapi/asm-generic/Kbuild.asm | 2 | include include/uapi/asm-generic/Kbuild.asm |
| 3 | 3 | ||
| 4 | generic-y += bpf_perf_event.h | 4 | generic-y += bpf_perf_event.h |
| 5 | generic-y += ipcbuf.h | ||
| 5 | generic-y += kvm_para.h | 6 | generic-y += kvm_para.h |
| 7 | generic-y += msgbuf.h | ||
| 6 | generic-y += poll.h | 8 | generic-y += poll.h |
| 9 | generic-y += sembuf.h | ||
| 10 | generic-y += shmbuf.h | ||
diff --git a/arch/ia64/include/uapi/asm/ipcbuf.h b/arch/ia64/include/uapi/asm/ipcbuf.h deleted file mode 100644 index 90d6445a14df..000000000000 --- a/arch/ia64/include/uapi/asm/ipcbuf.h +++ /dev/null | |||
| @@ -1,2 +0,0 @@ | |||
| 1 | /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ | ||
| 2 | #include <asm-generic/ipcbuf.h> | ||
diff --git a/arch/ia64/include/uapi/asm/msgbuf.h b/arch/ia64/include/uapi/asm/msgbuf.h deleted file mode 100644 index aa25df92d9dc..000000000000 --- a/arch/ia64/include/uapi/asm/msgbuf.h +++ /dev/null | |||
| @@ -1,28 +0,0 @@ | |||
| 1 | /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ | ||
| 2 | #ifndef _ASM_IA64_MSGBUF_H | ||
| 3 | #define _ASM_IA64_MSGBUF_H | ||
| 4 | |||
| 5 | /* | ||
| 6 | * The msqid64_ds structure for IA-64 architecture. | ||
| 7 | * Note extra padding because this structure is passed back and forth | ||
| 8 | * between kernel and user space. | ||
| 9 | * | ||
| 10 | * Pad space is left for: | ||
| 11 | * - 2 miscellaneous 64-bit values | ||
| 12 | */ | ||
| 13 | |||
| 14 | struct msqid64_ds { | ||
| 15 | struct ipc64_perm msg_perm; | ||
| 16 | __kernel_time_t msg_stime; /* last msgsnd time */ | ||
| 17 | __kernel_time_t msg_rtime; /* last msgrcv time */ | ||
| 18 | __kernel_time_t msg_ctime; /* last change time */ | ||
| 19 | unsigned long msg_cbytes; /* current number of bytes on queue */ | ||
| 20 | unsigned long msg_qnum; /* number of messages in queue */ | ||
| 21 | unsigned long msg_qbytes; /* max number of bytes on queue */ | ||
| 22 | __kernel_pid_t msg_lspid; /* pid of last msgsnd */ | ||
| 23 | __kernel_pid_t msg_lrpid; /* last receive pid */ | ||
| 24 | unsigned long __unused1; | ||
| 25 | unsigned long __unused2; | ||
| 26 | }; | ||
| 27 | |||
| 28 | #endif /* _ASM_IA64_MSGBUF_H */ | ||
diff --git a/arch/ia64/include/uapi/asm/sembuf.h b/arch/ia64/include/uapi/asm/sembuf.h deleted file mode 100644 index 6ed058760afc..000000000000 --- a/arch/ia64/include/uapi/asm/sembuf.h +++ /dev/null | |||
| @@ -1,23 +0,0 @@ | |||
| 1 | /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ | ||
| 2 | #ifndef _ASM_IA64_SEMBUF_H | ||
| 3 | #define _ASM_IA64_SEMBUF_H | ||
| 4 | |||
| 5 | /* | ||
| 6 | * The semid64_ds structure for IA-64 architecture. | ||
| 7 | * Note extra padding because this structure is passed back and forth | ||
| 8 | * between kernel and user space. | ||
| 9 | * | ||
| 10 | * Pad space is left for: | ||
| 11 | * - 2 miscellaneous 64-bit values | ||
| 12 | */ | ||
| 13 | |||
| 14 | struct semid64_ds { | ||
| 15 | struct ipc64_perm sem_perm; /* permissions .. see ipc.h */ | ||
| 16 | __kernel_time_t sem_otime; /* last semop time */ | ||
| 17 | __kernel_time_t sem_ctime; /* last change time */ | ||
| 18 | unsigned long sem_nsems; /* no. of semaphores in array */ | ||
| 19 | unsigned long __unused1; | ||
| 20 | unsigned long __unused2; | ||
| 21 | }; | ||
| 22 | |||
| 23 | #endif /* _ASM_IA64_SEMBUF_H */ | ||
diff --git a/arch/ia64/include/uapi/asm/shmbuf.h b/arch/ia64/include/uapi/asm/shmbuf.h deleted file mode 100644 index 6ef57cb70dee..000000000000 --- a/arch/ia64/include/uapi/asm/shmbuf.h +++ /dev/null | |||
| @@ -1,39 +0,0 @@ | |||
| 1 | /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ | ||
| 2 | #ifndef _ASM_IA64_SHMBUF_H | ||
| 3 | #define _ASM_IA64_SHMBUF_H | ||
| 4 | |||
| 5 | /* | ||
| 6 | * The shmid64_ds structure for IA-64 architecture. | ||
| 7 | * Note extra padding because this structure is passed back and forth | ||
| 8 | * between kernel and user space. | ||
| 9 | * | ||
| 10 | * Pad space is left for: | ||
| 11 | * - 2 miscellaneous 64-bit values | ||
| 12 | */ | ||
| 13 | |||
| 14 | struct shmid64_ds { | ||
| 15 | struct ipc64_perm shm_perm; /* operation perms */ | ||
| 16 | size_t shm_segsz; /* size of segment (bytes) */ | ||
| 17 | __kernel_time_t shm_atime; /* last attach time */ | ||
| 18 | __kernel_time_t shm_dtime; /* last detach time */ | ||
| 19 | __kernel_time_t shm_ctime; /* last change time */ | ||
| 20 | __kernel_pid_t shm_cpid; /* pid of creator */ | ||
| 21 | __kernel_pid_t shm_lpid; /* pid of last operator */ | ||
| 22 | unsigned long shm_nattch; /* no. of current attaches */ | ||
| 23 | unsigned long __unused1; | ||
| 24 | unsigned long __unused2; | ||
| 25 | }; | ||
| 26 | |||
| 27 | struct shminfo64 { | ||
| 28 | unsigned long shmmax; | ||
| 29 | unsigned long shmmin; | ||
| 30 | unsigned long shmmni; | ||
| 31 | unsigned long shmseg; | ||
| 32 | unsigned long shmall; | ||
| 33 | unsigned long __unused1; | ||
| 34 | unsigned long __unused2; | ||
| 35 | unsigned long __unused3; | ||
| 36 | unsigned long __unused4; | ||
| 37 | }; | ||
| 38 | |||
| 39 | #endif /* _ASM_IA64_SHMBUF_H */ | ||
diff --git a/arch/mips/include/asm/compat.h b/arch/mips/include/asm/compat.h index 3e548ee99a2f..78675f19440f 100644 --- a/arch/mips/include/asm/compat.h +++ b/arch/mips/include/asm/compat.h | |||
| @@ -37,9 +37,11 @@ typedef struct { | |||
| 37 | typedef s32 compat_timer_t; | 37 | typedef s32 compat_timer_t; |
| 38 | typedef s32 compat_key_t; | 38 | typedef s32 compat_key_t; |
| 39 | 39 | ||
| 40 | typedef s16 compat_short_t; | ||
| 40 | typedef s32 compat_int_t; | 41 | typedef s32 compat_int_t; |
| 41 | typedef s32 compat_long_t; | 42 | typedef s32 compat_long_t; |
| 42 | typedef s64 compat_s64; | 43 | typedef s64 compat_s64; |
| 44 | typedef u16 compat_ushort_t; | ||
| 43 | typedef u32 compat_uint_t; | 45 | typedef u32 compat_uint_t; |
| 44 | typedef u32 compat_ulong_t; | 46 | typedef u32 compat_ulong_t; |
| 45 | typedef u64 compat_u64; | 47 | typedef u64 compat_u64; |
| @@ -157,35 +159,35 @@ struct compat_ipc64_perm { | |||
| 157 | 159 | ||
| 158 | struct compat_semid64_ds { | 160 | struct compat_semid64_ds { |
| 159 | struct compat_ipc64_perm sem_perm; | 161 | struct compat_ipc64_perm sem_perm; |
| 160 | compat_time_t sem_otime; | 162 | compat_ulong_t sem_otime; |
| 161 | compat_time_t sem_ctime; | 163 | compat_ulong_t sem_ctime; |
| 162 | compat_ulong_t sem_nsems; | 164 | compat_ulong_t sem_nsems; |
| 163 | compat_ulong_t __unused1; | 165 | compat_ulong_t sem_otime_high; |
| 164 | compat_ulong_t __unused2; | 166 | compat_ulong_t sem_ctime_high; |
| 165 | }; | 167 | }; |
| 166 | 168 | ||
| 167 | struct compat_msqid64_ds { | 169 | struct compat_msqid64_ds { |
| 168 | struct compat_ipc64_perm msg_perm; | 170 | struct compat_ipc64_perm msg_perm; |
| 169 | #ifndef CONFIG_CPU_LITTLE_ENDIAN | 171 | #ifndef CONFIG_CPU_LITTLE_ENDIAN |
| 170 | compat_ulong_t __unused1; | 172 | compat_ulong_t msg_stime_high; |
| 171 | #endif | 173 | #endif |
| 172 | compat_time_t msg_stime; | 174 | compat_ulong_t msg_stime; |
| 173 | #ifdef CONFIG_CPU_LITTLE_ENDIAN | 175 | #ifdef CONFIG_CPU_LITTLE_ENDIAN |
| 174 | compat_ulong_t __unused1; | 176 | compat_ulong_t msg_stime_high; |
| 175 | #endif | 177 | #endif |
| 176 | #ifndef CONFIG_CPU_LITTLE_ENDIAN | 178 | #ifndef CONFIG_CPU_LITTLE_ENDIAN |
| 177 | compat_ulong_t __unused2; | 179 | compat_ulong_t msg_rtime_high; |
| 178 | #endif | 180 | #endif |
| 179 | compat_time_t msg_rtime; | 181 | compat_ulong_t msg_rtime; |
| 180 | #ifdef CONFIG_CPU_LITTLE_ENDIAN | 182 | #ifdef CONFIG_CPU_LITTLE_ENDIAN |
| 181 | compat_ulong_t __unused2; | 183 | compat_ulong_t msg_rtime_high; |
| 182 | #endif | 184 | #endif |
| 183 | #ifndef CONFIG_CPU_LITTLE_ENDIAN | 185 | #ifndef CONFIG_CPU_LITTLE_ENDIAN |
| 184 | compat_ulong_t __unused3; | 186 | compat_ulong_t msg_ctime_high; |
| 185 | #endif | 187 | #endif |
| 186 | compat_time_t msg_ctime; | 188 | compat_ulong_t msg_ctime; |
| 187 | #ifdef CONFIG_CPU_LITTLE_ENDIAN | 189 | #ifdef CONFIG_CPU_LITTLE_ENDIAN |
| 188 | compat_ulong_t __unused3; | 190 | compat_ulong_t msg_ctime_high; |
| 189 | #endif | 191 | #endif |
| 190 | compat_ulong_t msg_cbytes; | 192 | compat_ulong_t msg_cbytes; |
| 191 | compat_ulong_t msg_qnum; | 193 | compat_ulong_t msg_qnum; |
| @@ -199,14 +201,16 @@ struct compat_msqid64_ds { | |||
| 199 | struct compat_shmid64_ds { | 201 | struct compat_shmid64_ds { |
| 200 | struct compat_ipc64_perm shm_perm; | 202 | struct compat_ipc64_perm shm_perm; |
| 201 | compat_size_t shm_segsz; | 203 | compat_size_t shm_segsz; |
| 202 | compat_time_t shm_atime; | 204 | compat_ulong_t shm_atime; |
| 203 | compat_time_t shm_dtime; | 205 | compat_ulong_t shm_dtime; |
| 204 | compat_time_t shm_ctime; | 206 | compat_ulong_t shm_ctime; |
| 205 | compat_pid_t shm_cpid; | 207 | compat_pid_t shm_cpid; |
| 206 | compat_pid_t shm_lpid; | 208 | compat_pid_t shm_lpid; |
| 207 | compat_ulong_t shm_nattch; | 209 | compat_ulong_t shm_nattch; |
| 208 | compat_ulong_t __unused1; | 210 | compat_ushort_t shm_atime_high; |
| 209 | compat_ulong_t __unused2; | 211 | compat_ushort_t shm_dtime_high; |
| 212 | compat_ushort_t shm_ctime_high; | ||
| 213 | compat_ushort_t __unused2; | ||
| 210 | }; | 214 | }; |
| 211 | 215 | ||
| 212 | /* MIPS has unusual order of fields in stack_t */ | 216 | /* MIPS has unusual order of fields in stack_t */ |
diff --git a/arch/mips/include/uapi/asm/msgbuf.h b/arch/mips/include/uapi/asm/msgbuf.h index eb4d0f9d7364..46aa15b13e4e 100644 --- a/arch/mips/include/uapi/asm/msgbuf.h +++ b/arch/mips/include/uapi/asm/msgbuf.h | |||
| @@ -9,33 +9,15 @@ | |||
| 9 | * between kernel and user space. | 9 | * between kernel and user space. |
| 10 | * | 10 | * |
| 11 | * Pad space is left for: | 11 | * Pad space is left for: |
| 12 | * - extension of time_t to 64-bit on 32-bitsystem to solve the y2038 problem | ||
| 13 | * - 2 miscellaneous unsigned long values | 12 | * - 2 miscellaneous unsigned long values |
| 14 | */ | 13 | */ |
| 15 | 14 | ||
| 15 | #if defined(__mips64) | ||
| 16 | struct msqid64_ds { | 16 | struct msqid64_ds { |
| 17 | struct ipc64_perm msg_perm; | 17 | struct ipc64_perm msg_perm; |
| 18 | #if !defined(__mips64) && defined(__MIPSEB__) | ||
| 19 | unsigned long __unused1; | ||
| 20 | #endif | ||
| 21 | __kernel_time_t msg_stime; /* last msgsnd time */ | 18 | __kernel_time_t msg_stime; /* last msgsnd time */ |
| 22 | #if !defined(__mips64) && defined(__MIPSEL__) | ||
| 23 | unsigned long __unused1; | ||
| 24 | #endif | ||
| 25 | #if !defined(__mips64) && defined(__MIPSEB__) | ||
| 26 | unsigned long __unused2; | ||
| 27 | #endif | ||
| 28 | __kernel_time_t msg_rtime; /* last msgrcv time */ | 19 | __kernel_time_t msg_rtime; /* last msgrcv time */ |
| 29 | #if !defined(__mips64) && defined(__MIPSEL__) | ||
| 30 | unsigned long __unused2; | ||
| 31 | #endif | ||
| 32 | #if !defined(__mips64) && defined(__MIPSEB__) | ||
| 33 | unsigned long __unused3; | ||
| 34 | #endif | ||
| 35 | __kernel_time_t msg_ctime; /* last change time */ | 20 | __kernel_time_t msg_ctime; /* last change time */ |
| 36 | #if !defined(__mips64) && defined(__MIPSEL__) | ||
| 37 | unsigned long __unused3; | ||
| 38 | #endif | ||
| 39 | unsigned long msg_cbytes; /* current number of bytes on queue */ | 21 | unsigned long msg_cbytes; /* current number of bytes on queue */ |
| 40 | unsigned long msg_qnum; /* number of messages in queue */ | 22 | unsigned long msg_qnum; /* number of messages in queue */ |
| 41 | unsigned long msg_qbytes; /* max number of bytes on queue */ | 23 | unsigned long msg_qbytes; /* max number of bytes on queue */ |
| @@ -44,5 +26,42 @@ struct msqid64_ds { | |||
| 44 | unsigned long __unused4; | 26 | unsigned long __unused4; |
| 45 | unsigned long __unused5; | 27 | unsigned long __unused5; |
| 46 | }; | 28 | }; |
| 29 | #elif defined (__MIPSEB__) | ||
| 30 | struct msqid64_ds { | ||
| 31 | struct ipc64_perm msg_perm; | ||
| 32 | unsigned long msg_stime_high; | ||
| 33 | unsigned long msg_stime; /* last msgsnd time */ | ||
| 34 | unsigned long msg_rtime_high; | ||
| 35 | unsigned long msg_rtime; /* last msgrcv time */ | ||
| 36 | unsigned long msg_ctime_high; | ||
| 37 | unsigned long msg_ctime; /* last change time */ | ||
| 38 | unsigned long msg_cbytes; /* current number of bytes on queue */ | ||
| 39 | unsigned long msg_qnum; /* number of messages in queue */ | ||
| 40 | unsigned long msg_qbytes; /* max number of bytes on queue */ | ||
| 41 | __kernel_pid_t msg_lspid; /* pid of last msgsnd */ | ||
| 42 | __kernel_pid_t msg_lrpid; /* last receive pid */ | ||
| 43 | unsigned long __unused4; | ||
| 44 | unsigned long __unused5; | ||
| 45 | }; | ||
| 46 | #elif defined (__MIPSEL__) | ||
| 47 | struct msqid64_ds { | ||
| 48 | struct ipc64_perm msg_perm; | ||
| 49 | unsigned long msg_stime; /* last msgsnd time */ | ||
| 50 | unsigned long msg_stime_high; | ||
| 51 | unsigned long msg_rtime; /* last msgrcv time */ | ||
| 52 | unsigned long msg_rtime_high; | ||
| 53 | unsigned long msg_ctime; /* last change time */ | ||
| 54 | unsigned long msg_ctime_high; | ||
| 55 | unsigned long msg_cbytes; /* current number of bytes on queue */ | ||
| 56 | unsigned long msg_qnum; /* number of messages in queue */ | ||
| 57 | unsigned long msg_qbytes; /* max number of bytes on queue */ | ||
| 58 | __kernel_pid_t msg_lspid; /* pid of last msgsnd */ | ||
| 59 | __kernel_pid_t msg_lrpid; /* last receive pid */ | ||
| 60 | unsigned long __unused4; | ||
| 61 | unsigned long __unused5; | ||
| 62 | }; | ||
| 63 | #else | ||
| 64 | #warning no endianess set | ||
| 65 | #endif | ||
| 47 | 66 | ||
| 48 | #endif /* _ASM_MSGBUF_H */ | 67 | #endif /* _ASM_MSGBUF_H */ |
diff --git a/arch/mips/include/uapi/asm/sembuf.h b/arch/mips/include/uapi/asm/sembuf.h index 2c0f507ab7d1..60c89e6cb25b 100644 --- a/arch/mips/include/uapi/asm/sembuf.h +++ b/arch/mips/include/uapi/asm/sembuf.h | |||
| @@ -7,10 +7,11 @@ | |||
| 7 | * Note extra padding because this structure is passed back and forth | 7 | * Note extra padding because this structure is passed back and forth |
| 8 | * between kernel and user space. | 8 | * between kernel and user space. |
| 9 | * | 9 | * |
| 10 | * Pad space is left for: | 10 | * Pad space is left for 2 miscellaneous 64-bit values on mips64, |
| 11 | * - 2 miscellaneous 64-bit values | 11 | * but used for the upper 32 bit of the time values on mips32. |
| 12 | */ | 12 | */ |
| 13 | 13 | ||
| 14 | #ifdef __mips64 | ||
| 14 | struct semid64_ds { | 15 | struct semid64_ds { |
| 15 | struct ipc64_perm sem_perm; /* permissions .. see ipc.h */ | 16 | struct ipc64_perm sem_perm; /* permissions .. see ipc.h */ |
| 16 | __kernel_time_t sem_otime; /* last semop time */ | 17 | __kernel_time_t sem_otime; /* last semop time */ |
| @@ -19,5 +20,15 @@ struct semid64_ds { | |||
| 19 | unsigned long __unused1; | 20 | unsigned long __unused1; |
| 20 | unsigned long __unused2; | 21 | unsigned long __unused2; |
| 21 | }; | 22 | }; |
| 23 | #else | ||
| 24 | struct semid64_ds { | ||
| 25 | struct ipc64_perm sem_perm; /* permissions .. see ipc.h */ | ||
| 26 | unsigned long sem_otime; /* last semop time */ | ||
| 27 | unsigned long sem_ctime; /* last change time */ | ||
| 28 | unsigned long sem_nsems; /* no. of semaphores in array */ | ||
| 29 | unsigned long sem_otime_high; | ||
| 30 | unsigned long sem_ctime_high; | ||
| 31 | }; | ||
| 32 | #endif | ||
| 22 | 33 | ||
| 23 | #endif /* _ASM_SEMBUF_H */ | 34 | #endif /* _ASM_SEMBUF_H */ |
diff --git a/arch/mips/include/uapi/asm/shmbuf.h b/arch/mips/include/uapi/asm/shmbuf.h index 379e6bca518b..9b9bba3401f2 100644 --- a/arch/mips/include/uapi/asm/shmbuf.h +++ b/arch/mips/include/uapi/asm/shmbuf.h | |||
| @@ -7,10 +7,13 @@ | |||
| 7 | * Note extra padding because this structure is passed back and forth | 7 | * Note extra padding because this structure is passed back and forth |
| 8 | * between kernel and user space. | 8 | * between kernel and user space. |
| 9 | * | 9 | * |
| 10 | * Pad space is left for: | 10 | * As MIPS was lacking proper padding after shm_?time, we use 48 bits |
| 11 | * - 2 miscellaneous 32-bit rsp. 64-bit values | 11 | * of the padding at the end to store a few additional bits of the time. |
| 12 | * libc implementations need to take care to convert this into a proper | ||
| 13 | * data structure when moving to 64-bit time_t. | ||
| 12 | */ | 14 | */ |
| 13 | 15 | ||
| 16 | #ifdef __mips64 | ||
| 14 | struct shmid64_ds { | 17 | struct shmid64_ds { |
| 15 | struct ipc64_perm shm_perm; /* operation perms */ | 18 | struct ipc64_perm shm_perm; /* operation perms */ |
| 16 | size_t shm_segsz; /* size of segment (bytes) */ | 19 | size_t shm_segsz; /* size of segment (bytes) */ |
| @@ -23,6 +26,22 @@ struct shmid64_ds { | |||
| 23 | unsigned long __unused1; | 26 | unsigned long __unused1; |
| 24 | unsigned long __unused2; | 27 | unsigned long __unused2; |
| 25 | }; | 28 | }; |
| 29 | #else | ||
| 30 | struct shmid64_ds { | ||
| 31 | struct ipc64_perm shm_perm; /* operation perms */ | ||
| 32 | size_t shm_segsz; /* size of segment (bytes) */ | ||
| 33 | unsigned long shm_atime; /* last attach time */ | ||
| 34 | unsigned long shm_dtime; /* last detach time */ | ||
| 35 | unsigned long shm_ctime; /* last change time */ | ||
| 36 | __kernel_pid_t shm_cpid; /* pid of creator */ | ||
| 37 | __kernel_pid_t shm_lpid; /* pid of last operator */ | ||
| 38 | unsigned long shm_nattch; /* no. of current attaches */ | ||
| 39 | unsigned short shm_atime_high; | ||
| 40 | unsigned short shm_dtime_high; | ||
| 41 | unsigned short shm_ctime_high; | ||
| 42 | unsigned short __unused1; | ||
| 43 | }; | ||
| 44 | #endif | ||
| 26 | 45 | ||
| 27 | struct shminfo64 { | 46 | struct shminfo64 { |
| 28 | unsigned long shmmax; | 47 | unsigned long shmmax; |
diff --git a/arch/parisc/include/asm/compat.h b/arch/parisc/include/asm/compat.h index 0cdfec8857bd..ab8a54771507 100644 --- a/arch/parisc/include/asm/compat.h +++ b/arch/parisc/include/asm/compat.h | |||
| @@ -138,10 +138,10 @@ struct compat_ipc64_perm { | |||
| 138 | 138 | ||
| 139 | struct compat_semid64_ds { | 139 | struct compat_semid64_ds { |
| 140 | struct compat_ipc64_perm sem_perm; | 140 | struct compat_ipc64_perm sem_perm; |
| 141 | unsigned int __unused1; | 141 | unsigned int sem_otime_high; |
| 142 | compat_time_t sem_otime; | 142 | unsigned int sem_otime; |
| 143 | unsigned int __unused2; | 143 | unsigned int sem_ctime_high; |
| 144 | compat_time_t sem_ctime; | 144 | unsigned int sem_ctime; |
| 145 | compat_ulong_t sem_nsems; | 145 | compat_ulong_t sem_nsems; |
| 146 | compat_ulong_t __unused3; | 146 | compat_ulong_t __unused3; |
| 147 | compat_ulong_t __unused4; | 147 | compat_ulong_t __unused4; |
| @@ -149,12 +149,12 @@ struct compat_semid64_ds { | |||
| 149 | 149 | ||
| 150 | struct compat_msqid64_ds { | 150 | struct compat_msqid64_ds { |
| 151 | struct compat_ipc64_perm msg_perm; | 151 | struct compat_ipc64_perm msg_perm; |
| 152 | unsigned int __unused1; | 152 | unsigned int msg_stime_high; |
| 153 | compat_time_t msg_stime; | 153 | unsigned int msg_stime; |
| 154 | unsigned int __unused2; | 154 | unsigned int msg_rtime_high; |
| 155 | compat_time_t msg_rtime; | 155 | unsigned int msg_rtime; |
| 156 | unsigned int __unused3; | 156 | unsigned int msg_ctime_high; |
| 157 | compat_time_t msg_ctime; | 157 | unsigned int msg_ctime; |
| 158 | compat_ulong_t msg_cbytes; | 158 | compat_ulong_t msg_cbytes; |
| 159 | compat_ulong_t msg_qnum; | 159 | compat_ulong_t msg_qnum; |
| 160 | compat_ulong_t msg_qbytes; | 160 | compat_ulong_t msg_qbytes; |
| @@ -166,12 +166,12 @@ struct compat_msqid64_ds { | |||
| 166 | 166 | ||
| 167 | struct compat_shmid64_ds { | 167 | struct compat_shmid64_ds { |
| 168 | struct compat_ipc64_perm shm_perm; | 168 | struct compat_ipc64_perm shm_perm; |
| 169 | unsigned int __unused1; | 169 | unsigned int shm_atime_high; |
| 170 | compat_time_t shm_atime; | 170 | unsigned int shm_atime; |
| 171 | unsigned int __unused2; | 171 | unsigned int shm_dtime_high; |
| 172 | compat_time_t shm_dtime; | 172 | unsigned int shm_dtime; |
| 173 | unsigned int __unused3; | 173 | unsigned int shm_ctime_high; |
| 174 | compat_time_t shm_ctime; | 174 | unsigned int shm_ctime; |
| 175 | unsigned int __unused4; | 175 | unsigned int __unused4; |
| 176 | compat_size_t shm_segsz; | 176 | compat_size_t shm_segsz; |
| 177 | compat_pid_t shm_cpid; | 177 | compat_pid_t shm_cpid; |
diff --git a/arch/parisc/include/uapi/asm/msgbuf.h b/arch/parisc/include/uapi/asm/msgbuf.h index b48b810e626b..6a2e9ab2ef8d 100644 --- a/arch/parisc/include/uapi/asm/msgbuf.h +++ b/arch/parisc/include/uapi/asm/msgbuf.h | |||
| @@ -10,31 +10,30 @@ | |||
| 10 | * between kernel and user space. | 10 | * between kernel and user space. |
| 11 | * | 11 | * |
| 12 | * Pad space is left for: | 12 | * Pad space is left for: |
| 13 | * - 64-bit time_t to solve y2038 problem | ||
| 14 | * - 2 miscellaneous 32-bit values | 13 | * - 2 miscellaneous 32-bit values |
| 15 | */ | 14 | */ |
| 16 | 15 | ||
| 17 | struct msqid64_ds { | 16 | struct msqid64_ds { |
| 18 | struct ipc64_perm msg_perm; | 17 | struct ipc64_perm msg_perm; |
| 19 | #if __BITS_PER_LONG != 64 | 18 | #if __BITS_PER_LONG == 64 |
| 20 | unsigned int __pad1; | ||
| 21 | #endif | ||
| 22 | __kernel_time_t msg_stime; /* last msgsnd time */ | 19 | __kernel_time_t msg_stime; /* last msgsnd time */ |
| 23 | #if __BITS_PER_LONG != 64 | ||
| 24 | unsigned int __pad2; | ||
| 25 | #endif | ||
| 26 | __kernel_time_t msg_rtime; /* last msgrcv time */ | 20 | __kernel_time_t msg_rtime; /* last msgrcv time */ |
| 27 | #if __BITS_PER_LONG != 64 | ||
| 28 | unsigned int __pad3; | ||
| 29 | #endif | ||
| 30 | __kernel_time_t msg_ctime; /* last change time */ | 21 | __kernel_time_t msg_ctime; /* last change time */ |
| 31 | unsigned long msg_cbytes; /* current number of bytes on queue */ | 22 | #else |
| 32 | unsigned long msg_qnum; /* number of messages in queue */ | 23 | unsigned long msg_stime_high; |
| 33 | unsigned long msg_qbytes; /* max number of bytes on queue */ | 24 | unsigned long msg_stime; /* last msgsnd time */ |
| 34 | __kernel_pid_t msg_lspid; /* pid of last msgsnd */ | 25 | unsigned long msg_rtime_high; |
| 35 | __kernel_pid_t msg_lrpid; /* last receive pid */ | 26 | unsigned long msg_rtime; /* last msgrcv time */ |
| 36 | unsigned long __unused1; | 27 | unsigned long msg_ctime_high; |
| 37 | unsigned long __unused2; | 28 | unsigned long msg_ctime; /* last change time */ |
| 29 | #endif | ||
| 30 | unsigned long msg_cbytes; /* current number of bytes on queue */ | ||
| 31 | unsigned long msg_qnum; /* number of messages in queue */ | ||
| 32 | unsigned long msg_qbytes; /* max number of bytes on queue */ | ||
| 33 | __kernel_pid_t msg_lspid; /* pid of last msgsnd */ | ||
| 34 | __kernel_pid_t msg_lrpid; /* last receive pid */ | ||
| 35 | unsigned long __unused1; | ||
| 36 | unsigned long __unused2; | ||
| 38 | }; | 37 | }; |
| 39 | 38 | ||
| 40 | #endif /* _PARISC_MSGBUF_H */ | 39 | #endif /* _PARISC_MSGBUF_H */ |
diff --git a/arch/parisc/include/uapi/asm/sembuf.h b/arch/parisc/include/uapi/asm/sembuf.h index 746c5d86a9b1..3c31163b1241 100644 --- a/arch/parisc/include/uapi/asm/sembuf.h +++ b/arch/parisc/include/uapi/asm/sembuf.h | |||
| @@ -10,21 +10,21 @@ | |||
| 10 | * between kernel and user space. | 10 | * between kernel and user space. |
| 11 | * | 11 | * |
| 12 | * Pad space is left for: | 12 | * Pad space is left for: |
| 13 | * - 64-bit time_t to solve y2038 problem | ||
| 14 | * - 2 miscellaneous 32-bit values | 13 | * - 2 miscellaneous 32-bit values |
| 15 | */ | 14 | */ |
| 16 | 15 | ||
| 17 | struct semid64_ds { | 16 | struct semid64_ds { |
| 18 | struct ipc64_perm sem_perm; /* permissions .. see ipc.h */ | 17 | struct ipc64_perm sem_perm; /* permissions .. see ipc.h */ |
| 19 | #if __BITS_PER_LONG != 64 | 18 | #if __BITS_PER_LONG == 64 |
| 20 | unsigned int __pad1; | ||
| 21 | #endif | ||
| 22 | __kernel_time_t sem_otime; /* last semop time */ | 19 | __kernel_time_t sem_otime; /* last semop time */ |
| 23 | #if __BITS_PER_LONG != 64 | ||
| 24 | unsigned int __pad2; | ||
| 25 | #endif | ||
| 26 | __kernel_time_t sem_ctime; /* last change time */ | 20 | __kernel_time_t sem_ctime; /* last change time */ |
| 27 | unsigned long sem_nsems; /* no. of semaphores in array */ | 21 | #else |
| 22 | unsigned long sem_otime_high; | ||
| 23 | unsigned long sem_otime; /* last semop time */ | ||
| 24 | unsigned long sem_ctime_high; | ||
| 25 | unsigned long sem_ctime; /* last change time */ | ||
| 26 | #endif | ||
| 27 | unsigned long sem_nsems; /* no. of semaphores in array */ | ||
| 28 | unsigned long __unused1; | 28 | unsigned long __unused1; |
| 29 | unsigned long __unused2; | 29 | unsigned long __unused2; |
| 30 | }; | 30 | }; |
diff --git a/arch/parisc/include/uapi/asm/shmbuf.h b/arch/parisc/include/uapi/asm/shmbuf.h index cd4dbce55d0b..c89b3dd8db21 100644 --- a/arch/parisc/include/uapi/asm/shmbuf.h +++ b/arch/parisc/include/uapi/asm/shmbuf.h | |||
| @@ -10,25 +10,22 @@ | |||
| 10 | * between kernel and user space. | 10 | * between kernel and user space. |
| 11 | * | 11 | * |
| 12 | * Pad space is left for: | 12 | * Pad space is left for: |
| 13 | * - 64-bit time_t to solve y2038 problem | ||
| 14 | * - 2 miscellaneous 32-bit values | 13 | * - 2 miscellaneous 32-bit values |
| 15 | */ | 14 | */ |
| 16 | 15 | ||
| 17 | struct shmid64_ds { | 16 | struct shmid64_ds { |
| 18 | struct ipc64_perm shm_perm; /* operation perms */ | 17 | struct ipc64_perm shm_perm; /* operation perms */ |
| 19 | #if __BITS_PER_LONG != 64 | 18 | #if __BITS_PER_LONG == 64 |
| 20 | unsigned int __pad1; | ||
| 21 | #endif | ||
| 22 | __kernel_time_t shm_atime; /* last attach time */ | 19 | __kernel_time_t shm_atime; /* last attach time */ |
| 23 | #if __BITS_PER_LONG != 64 | ||
| 24 | unsigned int __pad2; | ||
| 25 | #endif | ||
| 26 | __kernel_time_t shm_dtime; /* last detach time */ | 20 | __kernel_time_t shm_dtime; /* last detach time */ |
| 27 | #if __BITS_PER_LONG != 64 | ||
| 28 | unsigned int __pad3; | ||
| 29 | #endif | ||
| 30 | __kernel_time_t shm_ctime; /* last change time */ | 21 | __kernel_time_t shm_ctime; /* last change time */ |
| 31 | #if __BITS_PER_LONG != 64 | 22 | #else |
| 23 | unsigned long shm_atime_high; | ||
| 24 | unsigned long shm_atime; /* last attach time */ | ||
| 25 | unsigned long shm_dtime_high; | ||
| 26 | unsigned long shm_dtime; /* last detach time */ | ||
| 27 | unsigned long shm_ctime_high; | ||
| 28 | unsigned long shm_ctime; /* last change time */ | ||
| 32 | unsigned int __pad4; | 29 | unsigned int __pad4; |
| 33 | #endif | 30 | #endif |
| 34 | __kernel_size_t shm_segsz; /* size of segment (bytes) */ | 31 | __kernel_size_t shm_segsz; /* size of segment (bytes) */ |
diff --git a/arch/powerpc/include/asm/compat.h b/arch/powerpc/include/asm/compat.h index b4773c81f7d5..85c8af2bb272 100644 --- a/arch/powerpc/include/asm/compat.h +++ b/arch/powerpc/include/asm/compat.h | |||
| @@ -162,10 +162,10 @@ struct compat_ipc64_perm { | |||
| 162 | 162 | ||
| 163 | struct compat_semid64_ds { | 163 | struct compat_semid64_ds { |
| 164 | struct compat_ipc64_perm sem_perm; | 164 | struct compat_ipc64_perm sem_perm; |
| 165 | unsigned int __unused1; | 165 | unsigned int sem_otime_high; |
| 166 | compat_time_t sem_otime; | 166 | unsigned int sem_otime; |
| 167 | unsigned int __unused2; | 167 | unsigned int sem_ctime_high; |
| 168 | compat_time_t sem_ctime; | 168 | unsigned int sem_ctime; |
| 169 | compat_ulong_t sem_nsems; | 169 | compat_ulong_t sem_nsems; |
| 170 | compat_ulong_t __unused3; | 170 | compat_ulong_t __unused3; |
| 171 | compat_ulong_t __unused4; | 171 | compat_ulong_t __unused4; |
| @@ -173,12 +173,12 @@ struct compat_semid64_ds { | |||
| 173 | 173 | ||
| 174 | struct compat_msqid64_ds { | 174 | struct compat_msqid64_ds { |
| 175 | struct compat_ipc64_perm msg_perm; | 175 | struct compat_ipc64_perm msg_perm; |
| 176 | unsigned int __unused1; | 176 | unsigned int msg_stime_high; |
| 177 | compat_time_t msg_stime; | 177 | unsigned int msg_stime; |
| 178 | unsigned int __unused2; | 178 | unsigned int msg_rtime_high; |
| 179 | compat_time_t msg_rtime; | 179 | unsigned int msg_rtime; |
| 180 | unsigned int __unused3; | 180 | unsigned int msg_ctime_high; |
| 181 | compat_time_t msg_ctime; | 181 | unsigned int msg_ctime; |
| 182 | compat_ulong_t msg_cbytes; | 182 | compat_ulong_t msg_cbytes; |
| 183 | compat_ulong_t msg_qnum; | 183 | compat_ulong_t msg_qnum; |
| 184 | compat_ulong_t msg_qbytes; | 184 | compat_ulong_t msg_qbytes; |
| @@ -190,12 +190,12 @@ struct compat_msqid64_ds { | |||
| 190 | 190 | ||
| 191 | struct compat_shmid64_ds { | 191 | struct compat_shmid64_ds { |
| 192 | struct compat_ipc64_perm shm_perm; | 192 | struct compat_ipc64_perm shm_perm; |
| 193 | unsigned int __unused1; | 193 | unsigned int shm_atime_high; |
| 194 | compat_time_t shm_atime; | 194 | unsigned int shm_atime; |
| 195 | unsigned int __unused2; | 195 | unsigned int shm_dtime_high; |
| 196 | compat_time_t shm_dtime; | 196 | unsigned int shm_dtime; |
| 197 | unsigned int __unused3; | 197 | unsigned int shm_ctime_high; |
| 198 | compat_time_t shm_ctime; | 198 | unsigned int shm_ctime; |
| 199 | unsigned int __unused4; | 199 | unsigned int __unused4; |
| 200 | compat_size_t shm_segsz; | 200 | compat_size_t shm_segsz; |
| 201 | compat_pid_t shm_cpid; | 201 | compat_pid_t shm_cpid; |
diff --git a/arch/powerpc/include/uapi/asm/msgbuf.h b/arch/powerpc/include/uapi/asm/msgbuf.h index 65beb0942500..2b1b37797a47 100644 --- a/arch/powerpc/include/uapi/asm/msgbuf.h +++ b/arch/powerpc/include/uapi/asm/msgbuf.h | |||
| @@ -10,18 +10,18 @@ | |||
| 10 | 10 | ||
| 11 | struct msqid64_ds { | 11 | struct msqid64_ds { |
| 12 | struct ipc64_perm msg_perm; | 12 | struct ipc64_perm msg_perm; |
| 13 | #ifndef __powerpc64__ | 13 | #ifdef __powerpc64__ |
| 14 | unsigned int __unused1; | ||
| 15 | #endif | ||
| 16 | __kernel_time_t msg_stime; /* last msgsnd time */ | 14 | __kernel_time_t msg_stime; /* last msgsnd time */ |
| 17 | #ifndef __powerpc64__ | ||
| 18 | unsigned int __unused2; | ||
| 19 | #endif | ||
| 20 | __kernel_time_t msg_rtime; /* last msgrcv time */ | 15 | __kernel_time_t msg_rtime; /* last msgrcv time */ |
| 21 | #ifndef __powerpc64__ | ||
| 22 | unsigned int __unused3; | ||
| 23 | #endif | ||
| 24 | __kernel_time_t msg_ctime; /* last change time */ | 16 | __kernel_time_t msg_ctime; /* last change time */ |
| 17 | #else | ||
| 18 | unsigned long msg_stime_high; | ||
| 19 | unsigned long msg_stime; /* last msgsnd time */ | ||
| 20 | unsigned long msg_rtime_high; | ||
| 21 | unsigned long msg_rtime; /* last msgrcv time */ | ||
| 22 | unsigned long msg_ctime_high; | ||
| 23 | unsigned long msg_ctime; /* last change time */ | ||
| 24 | #endif | ||
| 25 | unsigned long msg_cbytes; /* current number of bytes on queue */ | 25 | unsigned long msg_cbytes; /* current number of bytes on queue */ |
| 26 | unsigned long msg_qnum; /* number of messages in queue */ | 26 | unsigned long msg_qnum; /* number of messages in queue */ |
| 27 | unsigned long msg_qbytes; /* max number of bytes on queue */ | 27 | unsigned long msg_qbytes; /* max number of bytes on queue */ |
diff --git a/arch/powerpc/include/uapi/asm/sembuf.h b/arch/powerpc/include/uapi/asm/sembuf.h index 8f393d60f02d..3f60946f77e3 100644 --- a/arch/powerpc/include/uapi/asm/sembuf.h +++ b/arch/powerpc/include/uapi/asm/sembuf.h | |||
| @@ -15,20 +15,20 @@ | |||
| 15 | * between kernel and user space. | 15 | * between kernel and user space. |
| 16 | * | 16 | * |
| 17 | * Pad space is left for: | 17 | * Pad space is left for: |
| 18 | * - 64-bit time_t to solve y2038 problem | 18 | * - 2 miscellaneous 32/64-bit values |
| 19 | * - 2 miscellaneous 32-bit values | ||
| 20 | */ | 19 | */ |
| 21 | 20 | ||
| 22 | struct semid64_ds { | 21 | struct semid64_ds { |
| 23 | struct ipc64_perm sem_perm; /* permissions .. see ipc.h */ | 22 | struct ipc64_perm sem_perm; /* permissions .. see ipc.h */ |
| 24 | #ifndef __powerpc64__ | 23 | #ifndef __powerpc64__ |
| 25 | unsigned long __unused1; | 24 | unsigned long sem_otime_high; |
| 26 | #endif | 25 | unsigned long sem_otime; /* last semop time */ |
| 26 | unsigned long sem_ctime_high; | ||
| 27 | unsigned long sem_ctime; /* last change time */ | ||
| 28 | #else | ||
| 27 | __kernel_time_t sem_otime; /* last semop time */ | 29 | __kernel_time_t sem_otime; /* last semop time */ |
| 28 | #ifndef __powerpc64__ | ||
| 29 | unsigned long __unused2; | ||
| 30 | #endif | ||
| 31 | __kernel_time_t sem_ctime; /* last change time */ | 30 | __kernel_time_t sem_ctime; /* last change time */ |
| 31 | #endif | ||
| 32 | unsigned long sem_nsems; /* no. of semaphores in array */ | 32 | unsigned long sem_nsems; /* no. of semaphores in array */ |
| 33 | unsigned long __unused3; | 33 | unsigned long __unused3; |
| 34 | unsigned long __unused4; | 34 | unsigned long __unused4; |
diff --git a/arch/powerpc/include/uapi/asm/shmbuf.h b/arch/powerpc/include/uapi/asm/shmbuf.h index deb1c3e503d3..b591c4d7e4c5 100644 --- a/arch/powerpc/include/uapi/asm/shmbuf.h +++ b/arch/powerpc/include/uapi/asm/shmbuf.h | |||
| @@ -16,25 +16,22 @@ | |||
| 16 | * between kernel and user space. | 16 | * between kernel and user space. |
| 17 | * | 17 | * |
| 18 | * Pad space is left for: | 18 | * Pad space is left for: |
| 19 | * - 64-bit time_t to solve y2038 problem | ||
| 20 | * - 2 miscellaneous 32-bit values | 19 | * - 2 miscellaneous 32-bit values |
| 21 | */ | 20 | */ |
| 22 | 21 | ||
| 23 | struct shmid64_ds { | 22 | struct shmid64_ds { |
| 24 | struct ipc64_perm shm_perm; /* operation perms */ | 23 | struct ipc64_perm shm_perm; /* operation perms */ |
| 25 | #ifndef __powerpc64__ | 24 | #ifdef __powerpc64__ |
| 26 | unsigned long __unused1; | ||
| 27 | #endif | ||
| 28 | __kernel_time_t shm_atime; /* last attach time */ | 25 | __kernel_time_t shm_atime; /* last attach time */ |
| 29 | #ifndef __powerpc64__ | ||
| 30 | unsigned long __unused2; | ||
| 31 | #endif | ||
| 32 | __kernel_time_t shm_dtime; /* last detach time */ | 26 | __kernel_time_t shm_dtime; /* last detach time */ |
| 33 | #ifndef __powerpc64__ | ||
| 34 | unsigned long __unused3; | ||
| 35 | #endif | ||
| 36 | __kernel_time_t shm_ctime; /* last change time */ | 27 | __kernel_time_t shm_ctime; /* last change time */ |
| 37 | #ifndef __powerpc64__ | 28 | #else |
| 29 | unsigned long shm_atime_high; | ||
| 30 | unsigned long shm_atime; /* last attach time */ | ||
| 31 | unsigned long shm_dtime_high; | ||
| 32 | unsigned long shm_dtime; /* last detach time */ | ||
| 33 | unsigned long shm_ctime_high; | ||
| 34 | unsigned long shm_ctime; /* last change time */ | ||
| 38 | unsigned long __unused4; | 35 | unsigned long __unused4; |
| 39 | #endif | 36 | #endif |
| 40 | size_t shm_segsz; /* size of segment (bytes) */ | 37 | size_t shm_segsz; /* size of segment (bytes) */ |
diff --git a/arch/s390/include/asm/compat.h b/arch/s390/include/asm/compat.h index 501aaff85304..97db2fba546a 100644 --- a/arch/s390/include/asm/compat.h +++ b/arch/s390/include/asm/compat.h | |||
| @@ -232,10 +232,10 @@ struct compat_ipc64_perm { | |||
| 232 | 232 | ||
| 233 | struct compat_semid64_ds { | 233 | struct compat_semid64_ds { |
| 234 | struct compat_ipc64_perm sem_perm; | 234 | struct compat_ipc64_perm sem_perm; |
| 235 | compat_time_t sem_otime; | 235 | compat_ulong_t sem_otime; |
| 236 | compat_ulong_t __pad1; | 236 | compat_ulong_t sem_otime_high; |
| 237 | compat_time_t sem_ctime; | 237 | compat_ulong_t sem_ctime; |
| 238 | compat_ulong_t __pad2; | 238 | compat_ulong_t sem_ctime_high; |
| 239 | compat_ulong_t sem_nsems; | 239 | compat_ulong_t sem_nsems; |
| 240 | compat_ulong_t __unused1; | 240 | compat_ulong_t __unused1; |
| 241 | compat_ulong_t __unused2; | 241 | compat_ulong_t __unused2; |
| @@ -243,12 +243,12 @@ struct compat_semid64_ds { | |||
| 243 | 243 | ||
| 244 | struct compat_msqid64_ds { | 244 | struct compat_msqid64_ds { |
| 245 | struct compat_ipc64_perm msg_perm; | 245 | struct compat_ipc64_perm msg_perm; |
| 246 | compat_time_t msg_stime; | 246 | compat_ulong_t msg_stime; |
| 247 | compat_ulong_t __pad1; | 247 | compat_ulong_t msg_stime_high; |
| 248 | compat_time_t msg_rtime; | 248 | compat_ulong_t msg_rtime; |
| 249 | compat_ulong_t __pad2; | 249 | compat_ulong_t msg_rtime_high; |
| 250 | compat_time_t msg_ctime; | 250 | compat_ulong_t msg_ctime; |
| 251 | compat_ulong_t __pad3; | 251 | compat_ulong_t msg_ctime_high; |
| 252 | compat_ulong_t msg_cbytes; | 252 | compat_ulong_t msg_cbytes; |
| 253 | compat_ulong_t msg_qnum; | 253 | compat_ulong_t msg_qnum; |
| 254 | compat_ulong_t msg_qbytes; | 254 | compat_ulong_t msg_qbytes; |
| @@ -261,12 +261,12 @@ struct compat_msqid64_ds { | |||
| 261 | struct compat_shmid64_ds { | 261 | struct compat_shmid64_ds { |
| 262 | struct compat_ipc64_perm shm_perm; | 262 | struct compat_ipc64_perm shm_perm; |
| 263 | compat_size_t shm_segsz; | 263 | compat_size_t shm_segsz; |
| 264 | compat_time_t shm_atime; | 264 | compat_ulong_t shm_atime; |
| 265 | compat_ulong_t __pad1; | 265 | compat_ulong_t shm_atime_high; |
| 266 | compat_time_t shm_dtime; | 266 | compat_ulong_t shm_dtime; |
| 267 | compat_ulong_t __pad2; | 267 | compat_ulong_t shm_dtime_high; |
| 268 | compat_time_t shm_ctime; | 268 | compat_ulong_t shm_ctime; |
| 269 | compat_ulong_t __pad3; | 269 | compat_ulong_t shm_ctime_high; |
| 270 | compat_pid_t shm_cpid; | 270 | compat_pid_t shm_cpid; |
| 271 | compat_pid_t shm_lpid; | 271 | compat_pid_t shm_lpid; |
| 272 | compat_ulong_t shm_nattch; | 272 | compat_ulong_t shm_nattch; |
diff --git a/arch/s390/include/uapi/asm/Kbuild b/arch/s390/include/uapi/asm/Kbuild index faef3f7e8353..e364873e0d10 100644 --- a/arch/s390/include/uapi/asm/Kbuild +++ b/arch/s390/include/uapi/asm/Kbuild | |||
| @@ -9,9 +9,12 @@ generic-y += errno.h | |||
| 9 | generic-y += fcntl.h | 9 | generic-y += fcntl.h |
| 10 | generic-y += ioctl.h | 10 | generic-y += ioctl.h |
| 11 | generic-y += mman.h | 11 | generic-y += mman.h |
| 12 | generic-y += msgbuf.h | ||
| 12 | generic-y += param.h | 13 | generic-y += param.h |
| 13 | generic-y += poll.h | 14 | generic-y += poll.h |
| 14 | generic-y += resource.h | 15 | generic-y += resource.h |
| 16 | generic-y += sembuf.h | ||
| 17 | generic-y += shmbuf.h | ||
| 15 | generic-y += sockios.h | 18 | generic-y += sockios.h |
| 16 | generic-y += swab.h | 19 | generic-y += swab.h |
| 17 | generic-y += termbits.h | 20 | generic-y += termbits.h |
diff --git a/arch/s390/include/uapi/asm/msgbuf.h b/arch/s390/include/uapi/asm/msgbuf.h deleted file mode 100644 index 604f847cd68c..000000000000 --- a/arch/s390/include/uapi/asm/msgbuf.h +++ /dev/null | |||
| @@ -1,38 +0,0 @@ | |||
| 1 | /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ | ||
| 2 | #ifndef _S390_MSGBUF_H | ||
| 3 | #define _S390_MSGBUF_H | ||
| 4 | |||
| 5 | /* | ||
| 6 | * The msqid64_ds structure for S/390 architecture. | ||
| 7 | * Note extra padding because this structure is passed back and forth | ||
| 8 | * between kernel and user space. | ||
| 9 | * | ||
| 10 | * Pad space is left for: | ||
| 11 | * - 64-bit time_t to solve y2038 problem | ||
| 12 | * - 2 miscellaneous 32-bit values | ||
| 13 | */ | ||
| 14 | |||
| 15 | struct msqid64_ds { | ||
| 16 | struct ipc64_perm msg_perm; | ||
| 17 | __kernel_time_t msg_stime; /* last msgsnd time */ | ||
| 18 | #ifndef __s390x__ | ||
| 19 | unsigned long __unused1; | ||
| 20 | #endif /* ! __s390x__ */ | ||
| 21 | __kernel_time_t msg_rtime; /* last msgrcv time */ | ||
| 22 | #ifndef __s390x__ | ||
| 23 | unsigned long __unused2; | ||
| 24 | #endif /* ! __s390x__ */ | ||
| 25 | __kernel_time_t msg_ctime; /* last change time */ | ||
| 26 | #ifndef __s390x__ | ||
| 27 | unsigned long __unused3; | ||
| 28 | #endif /* ! __s390x__ */ | ||
| 29 | unsigned long msg_cbytes; /* current number of bytes on queue */ | ||
| 30 | unsigned long msg_qnum; /* number of messages in queue */ | ||
| 31 | unsigned long msg_qbytes; /* max number of bytes on queue */ | ||
| 32 | __kernel_pid_t msg_lspid; /* pid of last msgsnd */ | ||
| 33 | __kernel_pid_t msg_lrpid; /* last receive pid */ | ||
| 34 | unsigned long __unused4; | ||
| 35 | unsigned long __unused5; | ||
| 36 | }; | ||
| 37 | |||
| 38 | #endif /* _S390_MSGBUF_H */ | ||
diff --git a/arch/s390/include/uapi/asm/sembuf.h b/arch/s390/include/uapi/asm/sembuf.h deleted file mode 100644 index 3e917697b668..000000000000 --- a/arch/s390/include/uapi/asm/sembuf.h +++ /dev/null | |||
| @@ -1,30 +0,0 @@ | |||
| 1 | /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ | ||
| 2 | #ifndef _S390_SEMBUF_H | ||
| 3 | #define _S390_SEMBUF_H | ||
| 4 | |||
| 5 | /* | ||
| 6 | * The semid64_ds structure for S/390 architecture. | ||
| 7 | * Note extra padding because this structure is passed back and forth | ||
| 8 | * between kernel and user space. | ||
| 9 | * | ||
| 10 | * Pad space is left for: | ||
| 11 | * - 64-bit time_t to solve y2038 problem (for !__s390x__) | ||
| 12 | * - 2 miscellaneous 32-bit values | ||
| 13 | */ | ||
| 14 | |||
| 15 | struct semid64_ds { | ||
| 16 | struct ipc64_perm sem_perm; /* permissions .. see ipc.h */ | ||
| 17 | __kernel_time_t sem_otime; /* last semop time */ | ||
| 18 | #ifndef __s390x__ | ||
| 19 | unsigned long __unused1; | ||
| 20 | #endif /* ! __s390x__ */ | ||
| 21 | __kernel_time_t sem_ctime; /* last change time */ | ||
| 22 | #ifndef __s390x__ | ||
| 23 | unsigned long __unused2; | ||
| 24 | #endif /* ! __s390x__ */ | ||
| 25 | unsigned long sem_nsems; /* no. of semaphores in array */ | ||
| 26 | unsigned long __unused3; | ||
| 27 | unsigned long __unused4; | ||
| 28 | }; | ||
| 29 | |||
| 30 | #endif /* _S390_SEMBUF_H */ | ||
diff --git a/arch/s390/include/uapi/asm/shmbuf.h b/arch/s390/include/uapi/asm/shmbuf.h deleted file mode 100644 index 9cdce8d7ce60..000000000000 --- a/arch/s390/include/uapi/asm/shmbuf.h +++ /dev/null | |||
| @@ -1,49 +0,0 @@ | |||
| 1 | /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ | ||
| 2 | #ifndef _S390_SHMBUF_H | ||
| 3 | #define _S390_SHMBUF_H | ||
| 4 | |||
| 5 | /* | ||
| 6 | * The shmid64_ds structure for S/390 architecture. | ||
| 7 | * Note extra padding because this structure is passed back and forth | ||
| 8 | * between kernel and user space. | ||
| 9 | * | ||
| 10 | * Pad space is left for: | ||
| 11 | * - 64-bit time_t to solve y2038 problem (for !__s390x__) | ||
| 12 | * - 2 miscellaneous 32-bit values | ||
| 13 | */ | ||
| 14 | |||
| 15 | struct shmid64_ds { | ||
| 16 | struct ipc64_perm shm_perm; /* operation perms */ | ||
| 17 | size_t shm_segsz; /* size of segment (bytes) */ | ||
| 18 | __kernel_time_t shm_atime; /* last attach time */ | ||
| 19 | #ifndef __s390x__ | ||
| 20 | unsigned long __unused1; | ||
| 21 | #endif /* ! __s390x__ */ | ||
| 22 | __kernel_time_t shm_dtime; /* last detach time */ | ||
| 23 | #ifndef __s390x__ | ||
| 24 | unsigned long __unused2; | ||
| 25 | #endif /* ! __s390x__ */ | ||
| 26 | __kernel_time_t shm_ctime; /* last change time */ | ||
| 27 | #ifndef __s390x__ | ||
| 28 | unsigned long __unused3; | ||
| 29 | #endif /* ! __s390x__ */ | ||
| 30 | __kernel_pid_t shm_cpid; /* pid of creator */ | ||
| 31 | __kernel_pid_t shm_lpid; /* pid of last operator */ | ||
| 32 | unsigned long shm_nattch; /* no. of current attaches */ | ||
| 33 | unsigned long __unused4; | ||
| 34 | unsigned long __unused5; | ||
| 35 | }; | ||
| 36 | |||
| 37 | struct shminfo64 { | ||
| 38 | unsigned long shmmax; | ||
| 39 | unsigned long shmmin; | ||
| 40 | unsigned long shmmni; | ||
| 41 | unsigned long shmseg; | ||
| 42 | unsigned long shmall; | ||
| 43 | unsigned long __unused1; | ||
| 44 | unsigned long __unused2; | ||
| 45 | unsigned long __unused3; | ||
| 46 | unsigned long __unused4; | ||
| 47 | }; | ||
| 48 | |||
| 49 | #endif /* _S390_SHMBUF_H */ | ||
diff --git a/arch/sparc/include/asm/compat.h b/arch/sparc/include/asm/compat.h index 1910c44521e3..4eb51d2dae98 100644 --- a/arch/sparc/include/asm/compat.h +++ b/arch/sparc/include/asm/compat.h | |||
| @@ -192,10 +192,10 @@ struct compat_ipc64_perm { | |||
| 192 | 192 | ||
| 193 | struct compat_semid64_ds { | 193 | struct compat_semid64_ds { |
| 194 | struct compat_ipc64_perm sem_perm; | 194 | struct compat_ipc64_perm sem_perm; |
| 195 | unsigned int __pad1; | 195 | unsigned int sem_otime_high; |
| 196 | compat_time_t sem_otime; | 196 | unsigned int sem_otime; |
| 197 | unsigned int __pad2; | 197 | unsigned int sem_ctime_high; |
| 198 | compat_time_t sem_ctime; | 198 | unsigned int sem_ctime; |
| 199 | u32 sem_nsems; | 199 | u32 sem_nsems; |
| 200 | u32 __unused1; | 200 | u32 __unused1; |
| 201 | u32 __unused2; | 201 | u32 __unused2; |
| @@ -203,12 +203,12 @@ struct compat_semid64_ds { | |||
| 203 | 203 | ||
| 204 | struct compat_msqid64_ds { | 204 | struct compat_msqid64_ds { |
| 205 | struct compat_ipc64_perm msg_perm; | 205 | struct compat_ipc64_perm msg_perm; |
| 206 | unsigned int __pad1; | 206 | unsigned int msg_stime_high; |
| 207 | compat_time_t msg_stime; | 207 | unsigned int msg_stime; |
| 208 | unsigned int __pad2; | 208 | unsigned int msg_rtime_high; |
| 209 | compat_time_t msg_rtime; | 209 | unsigned int msg_rtime; |
| 210 | unsigned int __pad3; | 210 | unsigned int msg_ctime_high; |
| 211 | compat_time_t msg_ctime; | 211 | unsigned int msg_ctime; |
| 212 | unsigned int msg_cbytes; | 212 | unsigned int msg_cbytes; |
| 213 | unsigned int msg_qnum; | 213 | unsigned int msg_qnum; |
| 214 | unsigned int msg_qbytes; | 214 | unsigned int msg_qbytes; |
| @@ -220,12 +220,12 @@ struct compat_msqid64_ds { | |||
| 220 | 220 | ||
| 221 | struct compat_shmid64_ds { | 221 | struct compat_shmid64_ds { |
| 222 | struct compat_ipc64_perm shm_perm; | 222 | struct compat_ipc64_perm shm_perm; |
| 223 | unsigned int __pad1; | 223 | unsigned int shm_atime_high; |
| 224 | compat_time_t shm_atime; | 224 | unsigned int shm_atime; |
| 225 | unsigned int __pad2; | 225 | unsigned int shm_dtime_high; |
| 226 | compat_time_t shm_dtime; | 226 | unsigned int shm_dtime; |
| 227 | unsigned int __pad3; | 227 | unsigned int shm_ctime_high; |
| 228 | compat_time_t shm_ctime; | 228 | unsigned int shm_ctime; |
| 229 | compat_size_t shm_segsz; | 229 | compat_size_t shm_segsz; |
| 230 | compat_pid_t shm_cpid; | 230 | compat_pid_t shm_cpid; |
| 231 | compat_pid_t shm_lpid; | 231 | compat_pid_t shm_lpid; |
diff --git a/arch/sparc/include/uapi/asm/msgbuf.h b/arch/sparc/include/uapi/asm/msgbuf.h index b601c4f4d956..ffc46c211d6d 100644 --- a/arch/sparc/include/uapi/asm/msgbuf.h +++ b/arch/sparc/include/uapi/asm/msgbuf.h | |||
| @@ -8,25 +8,22 @@ | |||
| 8 | * between kernel and user space. | 8 | * between kernel and user space. |
| 9 | * | 9 | * |
| 10 | * Pad space is left for: | 10 | * Pad space is left for: |
| 11 | * - 64-bit time_t to solve y2038 problem | ||
| 12 | * - 2 miscellaneous 32-bit values | 11 | * - 2 miscellaneous 32-bit values |
| 13 | */ | 12 | */ |
| 14 | |||
| 15 | #if defined(__sparc__) && defined(__arch64__) | ||
| 16 | # define PADDING(x) | ||
| 17 | #else | ||
| 18 | # define PADDING(x) unsigned int x; | ||
| 19 | #endif | ||
| 20 | |||
| 21 | |||
| 22 | struct msqid64_ds { | 13 | struct msqid64_ds { |
| 23 | struct ipc64_perm msg_perm; | 14 | struct ipc64_perm msg_perm; |
| 24 | PADDING(__pad1) | 15 | #if defined(__sparc__) && defined(__arch64__) |
| 25 | __kernel_time_t msg_stime; /* last msgsnd time */ | 16 | __kernel_time_t msg_stime; /* last msgsnd time */ |
| 26 | PADDING(__pad2) | ||
| 27 | __kernel_time_t msg_rtime; /* last msgrcv time */ | 17 | __kernel_time_t msg_rtime; /* last msgrcv time */ |
| 28 | PADDING(__pad3) | ||
| 29 | __kernel_time_t msg_ctime; /* last change time */ | 18 | __kernel_time_t msg_ctime; /* last change time */ |
| 19 | #else | ||
| 20 | unsigned long msg_stime_high; | ||
| 21 | unsigned long msg_stime; /* last msgsnd time */ | ||
| 22 | unsigned long msg_rtime_high; | ||
| 23 | unsigned long msg_rtime; /* last msgrcv time */ | ||
| 24 | unsigned long msg_ctime_high; | ||
| 25 | unsigned long msg_ctime; /* last change time */ | ||
| 26 | #endif | ||
| 30 | unsigned long msg_cbytes; /* current number of bytes on queue */ | 27 | unsigned long msg_cbytes; /* current number of bytes on queue */ |
| 31 | unsigned long msg_qnum; /* number of messages in queue */ | 28 | unsigned long msg_qnum; /* number of messages in queue */ |
| 32 | unsigned long msg_qbytes; /* max number of bytes on queue */ | 29 | unsigned long msg_qbytes; /* max number of bytes on queue */ |
| @@ -35,5 +32,4 @@ struct msqid64_ds { | |||
| 35 | unsigned long __unused1; | 32 | unsigned long __unused1; |
| 36 | unsigned long __unused2; | 33 | unsigned long __unused2; |
| 37 | }; | 34 | }; |
| 38 | #undef PADDING | ||
| 39 | #endif /* _SPARC_MSGBUF_H */ | 35 | #endif /* _SPARC_MSGBUF_H */ |
diff --git a/arch/sparc/include/uapi/asm/sembuf.h b/arch/sparc/include/uapi/asm/sembuf.h index f49b0ffa0ab8..f3d309c2e1cd 100644 --- a/arch/sparc/include/uapi/asm/sembuf.h +++ b/arch/sparc/include/uapi/asm/sembuf.h | |||
| @@ -8,25 +8,23 @@ | |||
| 8 | * between kernel and user space. | 8 | * between kernel and user space. |
| 9 | * | 9 | * |
| 10 | * Pad space is left for: | 10 | * Pad space is left for: |
| 11 | * - 64-bit time_t to solve y2038 problem | ||
| 12 | * - 2 miscellaneous 32-bit values | 11 | * - 2 miscellaneous 32-bit values |
| 13 | */ | 12 | */ |
| 14 | #if defined(__sparc__) && defined(__arch64__) | ||
| 15 | # define PADDING(x) | ||
| 16 | #else | ||
| 17 | # define PADDING(x) unsigned int x; | ||
| 18 | #endif | ||
| 19 | 13 | ||
| 20 | struct semid64_ds { | 14 | struct semid64_ds { |
| 21 | struct ipc64_perm sem_perm; /* permissions .. see ipc.h */ | 15 | struct ipc64_perm sem_perm; /* permissions .. see ipc.h */ |
| 22 | PADDING(__pad1) | 16 | #if defined(__sparc__) && defined(__arch64__) |
| 23 | __kernel_time_t sem_otime; /* last semop time */ | 17 | __kernel_time_t sem_otime; /* last semop time */ |
| 24 | PADDING(__pad2) | ||
| 25 | __kernel_time_t sem_ctime; /* last change time */ | 18 | __kernel_time_t sem_ctime; /* last change time */ |
| 19 | #else | ||
| 20 | unsigned long sem_otime_high; | ||
| 21 | unsigned long sem_otime; /* last semop time */ | ||
| 22 | unsigned long sem_ctime_high; | ||
| 23 | unsigned long sem_ctime; /* last change time */ | ||
| 24 | #endif | ||
| 26 | unsigned long sem_nsems; /* no. of semaphores in array */ | 25 | unsigned long sem_nsems; /* no. of semaphores in array */ |
| 27 | unsigned long __unused1; | 26 | unsigned long __unused1; |
| 28 | unsigned long __unused2; | 27 | unsigned long __unused2; |
| 29 | }; | 28 | }; |
| 30 | #undef PADDING | ||
| 31 | 29 | ||
| 32 | #endif /* _SPARC64_SEMBUF_H */ | 30 | #endif /* _SPARC64_SEMBUF_H */ |
diff --git a/arch/sparc/include/uapi/asm/shmbuf.h b/arch/sparc/include/uapi/asm/shmbuf.h index 286631db705c..06618b84822d 100644 --- a/arch/sparc/include/uapi/asm/shmbuf.h +++ b/arch/sparc/include/uapi/asm/shmbuf.h | |||
| @@ -8,24 +8,23 @@ | |||
| 8 | * between kernel and user space. | 8 | * between kernel and user space. |
| 9 | * | 9 | * |
| 10 | * Pad space is left for: | 10 | * Pad space is left for: |
| 11 | * - 64-bit time_t to solve y2038 problem | ||
| 12 | * - 2 miscellaneous 32-bit values | 11 | * - 2 miscellaneous 32-bit values |
| 13 | */ | 12 | */ |
| 14 | 13 | ||
| 15 | #if defined(__sparc__) && defined(__arch64__) | ||
| 16 | # define PADDING(x) | ||
| 17 | #else | ||
| 18 | # define PADDING(x) unsigned int x; | ||
| 19 | #endif | ||
| 20 | |||
| 21 | struct shmid64_ds { | 14 | struct shmid64_ds { |
| 22 | struct ipc64_perm shm_perm; /* operation perms */ | 15 | struct ipc64_perm shm_perm; /* operation perms */ |
| 23 | PADDING(__pad1) | 16 | #if defined(__sparc__) && defined(__arch64__) |
| 24 | __kernel_time_t shm_atime; /* last attach time */ | 17 | __kernel_time_t shm_atime; /* last attach time */ |
| 25 | PADDING(__pad2) | ||
| 26 | __kernel_time_t shm_dtime; /* last detach time */ | 18 | __kernel_time_t shm_dtime; /* last detach time */ |
| 27 | PADDING(__pad3) | ||
| 28 | __kernel_time_t shm_ctime; /* last change time */ | 19 | __kernel_time_t shm_ctime; /* last change time */ |
| 20 | #else | ||
| 21 | unsigned long shm_atime_high; | ||
| 22 | unsigned long shm_atime; /* last attach time */ | ||
| 23 | unsigned long shm_dtime_high; | ||
| 24 | unsigned long shm_dtime; /* last detach time */ | ||
| 25 | unsigned long shm_ctime_high; | ||
| 26 | unsigned long shm_ctime; /* last change time */ | ||
| 27 | #endif | ||
| 29 | size_t shm_segsz; /* size of segment (bytes) */ | 28 | size_t shm_segsz; /* size of segment (bytes) */ |
| 30 | __kernel_pid_t shm_cpid; /* pid of creator */ | 29 | __kernel_pid_t shm_cpid; /* pid of creator */ |
| 31 | __kernel_pid_t shm_lpid; /* pid of last operator */ | 30 | __kernel_pid_t shm_lpid; /* pid of last operator */ |
| @@ -46,6 +45,4 @@ struct shminfo64 { | |||
| 46 | unsigned long __unused4; | 45 | unsigned long __unused4; |
| 47 | }; | 46 | }; |
| 48 | 47 | ||
| 49 | #undef PADDING | ||
| 50 | |||
| 51 | #endif /* _SPARC_SHMBUF_H */ | 48 | #endif /* _SPARC_SHMBUF_H */ |
diff --git a/arch/x86/include/asm/compat.h b/arch/x86/include/asm/compat.h index 7cd314b71c51..fb97cf7c4137 100644 --- a/arch/x86/include/asm/compat.h +++ b/arch/x86/include/asm/compat.h | |||
| @@ -134,10 +134,10 @@ struct compat_ipc64_perm { | |||
| 134 | 134 | ||
| 135 | struct compat_semid64_ds { | 135 | struct compat_semid64_ds { |
| 136 | struct compat_ipc64_perm sem_perm; | 136 | struct compat_ipc64_perm sem_perm; |
| 137 | compat_time_t sem_otime; | 137 | compat_ulong_t sem_otime; |
| 138 | compat_ulong_t __unused1; | 138 | compat_ulong_t sem_otime_high; |
| 139 | compat_time_t sem_ctime; | 139 | compat_ulong_t sem_ctime; |
| 140 | compat_ulong_t __unused2; | 140 | compat_ulong_t sem_ctime_high; |
| 141 | compat_ulong_t sem_nsems; | 141 | compat_ulong_t sem_nsems; |
| 142 | compat_ulong_t __unused3; | 142 | compat_ulong_t __unused3; |
| 143 | compat_ulong_t __unused4; | 143 | compat_ulong_t __unused4; |
| @@ -145,12 +145,12 @@ struct compat_semid64_ds { | |||
| 145 | 145 | ||
| 146 | struct compat_msqid64_ds { | 146 | struct compat_msqid64_ds { |
| 147 | struct compat_ipc64_perm msg_perm; | 147 | struct compat_ipc64_perm msg_perm; |
| 148 | compat_time_t msg_stime; | 148 | compat_ulong_t msg_stime; |
| 149 | compat_ulong_t __unused1; | 149 | compat_ulong_t msg_stime_high; |
| 150 | compat_time_t msg_rtime; | 150 | compat_ulong_t msg_rtime; |
| 151 | compat_ulong_t __unused2; | 151 | compat_ulong_t msg_rtime_high; |
| 152 | compat_time_t msg_ctime; | 152 | compat_ulong_t msg_ctime; |
| 153 | compat_ulong_t __unused3; | 153 | compat_ulong_t msg_ctime_high; |
| 154 | compat_ulong_t msg_cbytes; | 154 | compat_ulong_t msg_cbytes; |
| 155 | compat_ulong_t msg_qnum; | 155 | compat_ulong_t msg_qnum; |
| 156 | compat_ulong_t msg_qbytes; | 156 | compat_ulong_t msg_qbytes; |
| @@ -163,12 +163,12 @@ struct compat_msqid64_ds { | |||
| 163 | struct compat_shmid64_ds { | 163 | struct compat_shmid64_ds { |
| 164 | struct compat_ipc64_perm shm_perm; | 164 | struct compat_ipc64_perm shm_perm; |
| 165 | compat_size_t shm_segsz; | 165 | compat_size_t shm_segsz; |
| 166 | compat_time_t shm_atime; | 166 | compat_ulong_t shm_atime; |
| 167 | compat_ulong_t __unused1; | 167 | compat_ulong_t shm_atime_high; |
| 168 | compat_time_t shm_dtime; | 168 | compat_ulong_t shm_dtime; |
| 169 | compat_ulong_t __unused2; | 169 | compat_ulong_t shm_dtime_high; |
| 170 | compat_time_t shm_ctime; | 170 | compat_ulong_t shm_ctime; |
| 171 | compat_ulong_t __unused3; | 171 | compat_ulong_t shm_ctime_high; |
| 172 | compat_pid_t shm_cpid; | 172 | compat_pid_t shm_cpid; |
| 173 | compat_pid_t shm_lpid; | 173 | compat_pid_t shm_lpid; |
| 174 | compat_ulong_t shm_nattch; | 174 | compat_ulong_t shm_nattch; |
diff --git a/arch/x86/include/asm/intel_mid_vrtc.h b/arch/x86/include/asm/intel_mid_vrtc.h index 35555016b1be..0b44b1abe4d9 100644 --- a/arch/x86/include/asm/intel_mid_vrtc.h +++ b/arch/x86/include/asm/intel_mid_vrtc.h | |||
| @@ -4,7 +4,7 @@ | |||
| 4 | 4 | ||
| 5 | extern unsigned char vrtc_cmos_read(unsigned char reg); | 5 | extern unsigned char vrtc_cmos_read(unsigned char reg); |
| 6 | extern void vrtc_cmos_write(unsigned char val, unsigned char reg); | 6 | extern void vrtc_cmos_write(unsigned char val, unsigned char reg); |
| 7 | extern void vrtc_get_time(struct timespec *now); | 7 | extern void vrtc_get_time(struct timespec64 *now); |
| 8 | extern int vrtc_set_mmss(const struct timespec *now); | 8 | extern int vrtc_set_mmss(const struct timespec64 *now); |
| 9 | 9 | ||
| 10 | #endif | 10 | #endif |
diff --git a/arch/x86/include/asm/mc146818rtc.h b/arch/x86/include/asm/mc146818rtc.h index 1775a32f7ea6..97198001e567 100644 --- a/arch/x86/include/asm/mc146818rtc.h +++ b/arch/x86/include/asm/mc146818rtc.h | |||
| @@ -95,8 +95,8 @@ static inline unsigned char current_lock_cmos_reg(void) | |||
| 95 | unsigned char rtc_cmos_read(unsigned char addr); | 95 | unsigned char rtc_cmos_read(unsigned char addr); |
| 96 | void rtc_cmos_write(unsigned char val, unsigned char addr); | 96 | void rtc_cmos_write(unsigned char val, unsigned char addr); |
| 97 | 97 | ||
| 98 | extern int mach_set_rtc_mmss(const struct timespec *now); | 98 | extern int mach_set_rtc_mmss(const struct timespec64 *now); |
| 99 | extern void mach_get_cmos_time(struct timespec *now); | 99 | extern void mach_get_cmos_time(struct timespec64 *now); |
| 100 | 100 | ||
| 101 | #define RTC_IRQ 8 | 101 | #define RTC_IRQ 8 |
| 102 | 102 | ||
diff --git a/arch/x86/include/asm/pvclock.h b/arch/x86/include/asm/pvclock.h index a7471dcd2205..b6033680d458 100644 --- a/arch/x86/include/asm/pvclock.h +++ b/arch/x86/include/asm/pvclock.h | |||
| @@ -12,7 +12,7 @@ void pvclock_set_flags(u8 flags); | |||
| 12 | unsigned long pvclock_tsc_khz(struct pvclock_vcpu_time_info *src); | 12 | unsigned long pvclock_tsc_khz(struct pvclock_vcpu_time_info *src); |
| 13 | void pvclock_read_wallclock(struct pvclock_wall_clock *wall, | 13 | void pvclock_read_wallclock(struct pvclock_wall_clock *wall, |
| 14 | struct pvclock_vcpu_time_info *vcpu, | 14 | struct pvclock_vcpu_time_info *vcpu, |
| 15 | struct timespec *ts); | 15 | struct timespec64 *ts); |
| 16 | void pvclock_resume(void); | 16 | void pvclock_resume(void); |
| 17 | 17 | ||
| 18 | void pvclock_touch_watchdogs(void); | 18 | void pvclock_touch_watchdogs(void); |
diff --git a/arch/x86/include/asm/x86_init.h b/arch/x86/include/asm/x86_init.h index ce8b4da07e35..2d27236c16a3 100644 --- a/arch/x86/include/asm/x86_init.h +++ b/arch/x86/include/asm/x86_init.h | |||
| @@ -170,7 +170,7 @@ struct x86_cpuinit_ops { | |||
| 170 | void (*fixup_cpu_id)(struct cpuinfo_x86 *c, int node); | 170 | void (*fixup_cpu_id)(struct cpuinfo_x86 *c, int node); |
| 171 | }; | 171 | }; |
| 172 | 172 | ||
| 173 | struct timespec; | 173 | struct timespec64; |
| 174 | 174 | ||
| 175 | /** | 175 | /** |
| 176 | * struct x86_legacy_devices - legacy x86 devices | 176 | * struct x86_legacy_devices - legacy x86 devices |
| @@ -264,8 +264,8 @@ struct x86_hyper_runtime { | |||
| 264 | struct x86_platform_ops { | 264 | struct x86_platform_ops { |
| 265 | unsigned long (*calibrate_cpu)(void); | 265 | unsigned long (*calibrate_cpu)(void); |
| 266 | unsigned long (*calibrate_tsc)(void); | 266 | unsigned long (*calibrate_tsc)(void); |
| 267 | void (*get_wallclock)(struct timespec *ts); | 267 | void (*get_wallclock)(struct timespec64 *ts); |
| 268 | int (*set_wallclock)(const struct timespec *ts); | 268 | int (*set_wallclock)(const struct timespec64 *ts); |
| 269 | void (*iommu_shutdown)(void); | 269 | void (*iommu_shutdown)(void); |
| 270 | bool (*is_untracked_pat_range)(u64 start, u64 end); | 270 | bool (*is_untracked_pat_range)(u64 start, u64 end); |
| 271 | void (*nmi_init)(void); | 271 | void (*nmi_init)(void); |
diff --git a/arch/x86/include/uapi/asm/sembuf.h b/arch/x86/include/uapi/asm/sembuf.h index cabd7476bd6c..89de6cd9f0a7 100644 --- a/arch/x86/include/uapi/asm/sembuf.h +++ b/arch/x86/include/uapi/asm/sembuf.h | |||
| @@ -8,15 +8,24 @@ | |||
| 8 | * between kernel and user space. | 8 | * between kernel and user space. |
| 9 | * | 9 | * |
| 10 | * Pad space is left for: | 10 | * Pad space is left for: |
| 11 | * - 64-bit time_t to solve y2038 problem | ||
| 12 | * - 2 miscellaneous 32-bit values | 11 | * - 2 miscellaneous 32-bit values |
| 12 | * | ||
| 13 | * x86_64 and x32 incorrectly added padding here, so the structures | ||
| 14 | * are still incompatible with the padding on x86. | ||
| 13 | */ | 15 | */ |
| 14 | struct semid64_ds { | 16 | struct semid64_ds { |
| 15 | struct ipc64_perm sem_perm; /* permissions .. see ipc.h */ | 17 | struct ipc64_perm sem_perm; /* permissions .. see ipc.h */ |
| 18 | #ifdef __i386__ | ||
| 19 | unsigned long sem_otime; /* last semop time */ | ||
| 20 | unsigned long sem_otime_high; | ||
| 21 | unsigned long sem_ctime; /* last change time */ | ||
| 22 | unsigned long sem_ctime_high; | ||
| 23 | #else | ||
| 16 | __kernel_time_t sem_otime; /* last semop time */ | 24 | __kernel_time_t sem_otime; /* last semop time */ |
| 17 | __kernel_ulong_t __unused1; | 25 | __kernel_ulong_t __unused1; |
| 18 | __kernel_time_t sem_ctime; /* last change time */ | 26 | __kernel_time_t sem_ctime; /* last change time */ |
| 19 | __kernel_ulong_t __unused2; | 27 | __kernel_ulong_t __unused2; |
| 28 | #endif | ||
| 20 | __kernel_ulong_t sem_nsems; /* no. of semaphores in array */ | 29 | __kernel_ulong_t sem_nsems; /* no. of semaphores in array */ |
| 21 | __kernel_ulong_t __unused3; | 30 | __kernel_ulong_t __unused3; |
| 22 | __kernel_ulong_t __unused4; | 31 | __kernel_ulong_t __unused4; |
diff --git a/arch/x86/kernel/jailhouse.c b/arch/x86/kernel/jailhouse.c index a15fe0e92cf9..108c48d0d40e 100644 --- a/arch/x86/kernel/jailhouse.c +++ b/arch/x86/kernel/jailhouse.c | |||
| @@ -37,7 +37,7 @@ static uint32_t __init jailhouse_detect(void) | |||
| 37 | return jailhouse_cpuid_base(); | 37 | return jailhouse_cpuid_base(); |
| 38 | } | 38 | } |
| 39 | 39 | ||
| 40 | static void jailhouse_get_wallclock(struct timespec *now) | 40 | static void jailhouse_get_wallclock(struct timespec64 *now) |
| 41 | { | 41 | { |
| 42 | memset(now, 0, sizeof(*now)); | 42 | memset(now, 0, sizeof(*now)); |
| 43 | } | 43 | } |
diff --git a/arch/x86/kernel/kvmclock.c b/arch/x86/kernel/kvmclock.c index 8b26c9e01cc4..bf8d1eb7fca3 100644 --- a/arch/x86/kernel/kvmclock.c +++ b/arch/x86/kernel/kvmclock.c | |||
| @@ -53,7 +53,7 @@ static struct pvclock_wall_clock *wall_clock; | |||
| 53 | * have elapsed since the hypervisor wrote the data. So we try to account for | 53 | * have elapsed since the hypervisor wrote the data. So we try to account for |
| 54 | * that with system time | 54 | * that with system time |
| 55 | */ | 55 | */ |
| 56 | static void kvm_get_wallclock(struct timespec *now) | 56 | static void kvm_get_wallclock(struct timespec64 *now) |
| 57 | { | 57 | { |
| 58 | struct pvclock_vcpu_time_info *vcpu_time; | 58 | struct pvclock_vcpu_time_info *vcpu_time; |
| 59 | int low, high; | 59 | int low, high; |
| @@ -72,7 +72,7 @@ static void kvm_get_wallclock(struct timespec *now) | |||
| 72 | put_cpu(); | 72 | put_cpu(); |
| 73 | } | 73 | } |
| 74 | 74 | ||
| 75 | static int kvm_set_wallclock(const struct timespec *now) | 75 | static int kvm_set_wallclock(const struct timespec64 *now) |
| 76 | { | 76 | { |
| 77 | return -ENODEV; | 77 | return -ENODEV; |
| 78 | } | 78 | } |
diff --git a/arch/x86/kernel/pvclock.c b/arch/x86/kernel/pvclock.c index 761f6af6efa5..637982efecd8 100644 --- a/arch/x86/kernel/pvclock.c +++ b/arch/x86/kernel/pvclock.c | |||
| @@ -123,28 +123,35 @@ u64 pvclock_clocksource_read(struct pvclock_vcpu_time_info *src) | |||
| 123 | 123 | ||
| 124 | void pvclock_read_wallclock(struct pvclock_wall_clock *wall_clock, | 124 | void pvclock_read_wallclock(struct pvclock_wall_clock *wall_clock, |
| 125 | struct pvclock_vcpu_time_info *vcpu_time, | 125 | struct pvclock_vcpu_time_info *vcpu_time, |
| 126 | struct timespec *ts) | 126 | struct timespec64 *ts) |
| 127 | { | 127 | { |
| 128 | u32 version; | 128 | u32 version; |
| 129 | u64 delta; | 129 | u64 delta; |
| 130 | struct timespec now; | 130 | struct timespec64 now; |
| 131 | 131 | ||
| 132 | /* get wallclock at system boot */ | 132 | /* get wallclock at system boot */ |
| 133 | do { | 133 | do { |
| 134 | version = wall_clock->version; | 134 | version = wall_clock->version; |
| 135 | rmb(); /* fetch version before time */ | 135 | rmb(); /* fetch version before time */ |
| 136 | /* | ||
| 137 | * Note: wall_clock->sec is a u32 value, so it can | ||
| 138 | * only store dates between 1970 and 2106. To allow | ||
| 139 | * times beyond that, we need to create a new hypercall | ||
| 140 | * interface with an extended pvclock_wall_clock structure | ||
| 141 | * like ARM has. | ||
| 142 | */ | ||
| 136 | now.tv_sec = wall_clock->sec; | 143 | now.tv_sec = wall_clock->sec; |
| 137 | now.tv_nsec = wall_clock->nsec; | 144 | now.tv_nsec = wall_clock->nsec; |
| 138 | rmb(); /* fetch time before checking version */ | 145 | rmb(); /* fetch time before checking version */ |
| 139 | } while ((wall_clock->version & 1) || (version != wall_clock->version)); | 146 | } while ((wall_clock->version & 1) || (version != wall_clock->version)); |
| 140 | 147 | ||
| 141 | delta = pvclock_clocksource_read(vcpu_time); /* time since system boot */ | 148 | delta = pvclock_clocksource_read(vcpu_time); /* time since system boot */ |
| 142 | delta += now.tv_sec * (u64)NSEC_PER_SEC + now.tv_nsec; | 149 | delta += now.tv_sec * NSEC_PER_SEC + now.tv_nsec; |
| 143 | 150 | ||
| 144 | now.tv_nsec = do_div(delta, NSEC_PER_SEC); | 151 | now.tv_nsec = do_div(delta, NSEC_PER_SEC); |
| 145 | now.tv_sec = delta; | 152 | now.tv_sec = delta; |
| 146 | 153 | ||
| 147 | set_normalized_timespec(ts, now.tv_sec, now.tv_nsec); | 154 | set_normalized_timespec64(ts, now.tv_sec, now.tv_nsec); |
| 148 | } | 155 | } |
| 149 | 156 | ||
| 150 | void pvclock_set_pvti_cpu0_va(struct pvclock_vsyscall_time_info *pvti) | 157 | void pvclock_set_pvti_cpu0_va(struct pvclock_vsyscall_time_info *pvti) |
diff --git a/arch/x86/kernel/rtc.c b/arch/x86/kernel/rtc.c index f7b82ed7b5b5..586f718b8e95 100644 --- a/arch/x86/kernel/rtc.c +++ b/arch/x86/kernel/rtc.c | |||
| @@ -39,7 +39,7 @@ EXPORT_SYMBOL(rtc_lock); | |||
| 39 | * jump to the next second precisely 500 ms later. Check the Motorola | 39 | * jump to the next second precisely 500 ms later. Check the Motorola |
| 40 | * MC146818A or Dallas DS12887 data sheet for details. | 40 | * MC146818A or Dallas DS12887 data sheet for details. |
| 41 | */ | 41 | */ |
| 42 | int mach_set_rtc_mmss(const struct timespec *now) | 42 | int mach_set_rtc_mmss(const struct timespec64 *now) |
| 43 | { | 43 | { |
| 44 | unsigned long long nowtime = now->tv_sec; | 44 | unsigned long long nowtime = now->tv_sec; |
| 45 | struct rtc_time tm; | 45 | struct rtc_time tm; |
| @@ -60,7 +60,7 @@ int mach_set_rtc_mmss(const struct timespec *now) | |||
| 60 | return retval; | 60 | return retval; |
| 61 | } | 61 | } |
| 62 | 62 | ||
| 63 | void mach_get_cmos_time(struct timespec *now) | 63 | void mach_get_cmos_time(struct timespec64 *now) |
| 64 | { | 64 | { |
| 65 | unsigned int status, year, mon, day, hour, min, sec, century = 0; | 65 | unsigned int status, year, mon, day, hour, min, sec, century = 0; |
| 66 | unsigned long flags; | 66 | unsigned long flags; |
| @@ -118,7 +118,7 @@ void mach_get_cmos_time(struct timespec *now) | |||
| 118 | } else | 118 | } else |
| 119 | year += CMOS_YEARS_OFFS; | 119 | year += CMOS_YEARS_OFFS; |
| 120 | 120 | ||
| 121 | now->tv_sec = mktime(year, mon, day, hour, min, sec); | 121 | now->tv_sec = mktime64(year, mon, day, hour, min, sec); |
| 122 | now->tv_nsec = 0; | 122 | now->tv_nsec = 0; |
| 123 | } | 123 | } |
| 124 | 124 | ||
| @@ -145,13 +145,13 @@ void rtc_cmos_write(unsigned char val, unsigned char addr) | |||
| 145 | } | 145 | } |
| 146 | EXPORT_SYMBOL(rtc_cmos_write); | 146 | EXPORT_SYMBOL(rtc_cmos_write); |
| 147 | 147 | ||
| 148 | int update_persistent_clock(struct timespec now) | 148 | int update_persistent_clock64(struct timespec64 now) |
| 149 | { | 149 | { |
| 150 | return x86_platform.set_wallclock(&now); | 150 | return x86_platform.set_wallclock(&now); |
| 151 | } | 151 | } |
| 152 | 152 | ||
| 153 | /* not static: needed by APM */ | 153 | /* not static: needed by APM */ |
| 154 | void read_persistent_clock(struct timespec *ts) | 154 | void read_persistent_clock64(struct timespec64 *ts) |
| 155 | { | 155 | { |
| 156 | x86_platform.get_wallclock(ts); | 156 | x86_platform.get_wallclock(ts); |
| 157 | } | 157 | } |
diff --git a/arch/x86/platform/intel-mid/intel_mid_vrtc.c b/arch/x86/platform/intel-mid/intel_mid_vrtc.c index 58024862a7eb..a52914aa3b6c 100644 --- a/arch/x86/platform/intel-mid/intel_mid_vrtc.c +++ b/arch/x86/platform/intel-mid/intel_mid_vrtc.c | |||
| @@ -57,7 +57,7 @@ void vrtc_cmos_write(unsigned char val, unsigned char reg) | |||
| 57 | } | 57 | } |
| 58 | EXPORT_SYMBOL_GPL(vrtc_cmos_write); | 58 | EXPORT_SYMBOL_GPL(vrtc_cmos_write); |
| 59 | 59 | ||
| 60 | void vrtc_get_time(struct timespec *now) | 60 | void vrtc_get_time(struct timespec64 *now) |
| 61 | { | 61 | { |
| 62 | u8 sec, min, hour, mday, mon; | 62 | u8 sec, min, hour, mday, mon; |
| 63 | unsigned long flags; | 63 | unsigned long flags; |
| @@ -83,18 +83,18 @@ void vrtc_get_time(struct timespec *now) | |||
| 83 | pr_info("vRTC: sec: %d min: %d hour: %d day: %d " | 83 | pr_info("vRTC: sec: %d min: %d hour: %d day: %d " |
| 84 | "mon: %d year: %d\n", sec, min, hour, mday, mon, year); | 84 | "mon: %d year: %d\n", sec, min, hour, mday, mon, year); |
| 85 | 85 | ||
| 86 | now->tv_sec = mktime(year, mon, mday, hour, min, sec); | 86 | now->tv_sec = mktime64(year, mon, mday, hour, min, sec); |
| 87 | now->tv_nsec = 0; | 87 | now->tv_nsec = 0; |
| 88 | } | 88 | } |
| 89 | 89 | ||
| 90 | int vrtc_set_mmss(const struct timespec *now) | 90 | int vrtc_set_mmss(const struct timespec64 *now) |
| 91 | { | 91 | { |
| 92 | unsigned long flags; | 92 | unsigned long flags; |
| 93 | struct rtc_time tm; | 93 | struct rtc_time tm; |
| 94 | int year; | 94 | int year; |
| 95 | int retval = 0; | 95 | int retval = 0; |
| 96 | 96 | ||
| 97 | rtc_time_to_tm(now->tv_sec, &tm); | 97 | rtc_time64_to_tm(now->tv_sec, &tm); |
| 98 | if (!rtc_valid_tm(&tm) && tm.tm_year >= 72) { | 98 | if (!rtc_valid_tm(&tm) && tm.tm_year >= 72) { |
| 99 | /* | 99 | /* |
| 100 | * tm.year is the number of years since 1900, and the | 100 | * tm.year is the number of years since 1900, and the |
| @@ -110,8 +110,8 @@ int vrtc_set_mmss(const struct timespec *now) | |||
| 110 | vrtc_cmos_write(tm.tm_sec, RTC_SECONDS); | 110 | vrtc_cmos_write(tm.tm_sec, RTC_SECONDS); |
| 111 | spin_unlock_irqrestore(&rtc_lock, flags); | 111 | spin_unlock_irqrestore(&rtc_lock, flags); |
| 112 | } else { | 112 | } else { |
| 113 | pr_err("%s: Invalid vRTC value: write of %lx to vRTC failed\n", | 113 | pr_err("%s: Invalid vRTC value: write of %llx to vRTC failed\n", |
| 114 | __func__, now->tv_sec); | 114 | __func__, (s64)now->tv_sec); |
| 115 | retval = -EINVAL; | 115 | retval = -EINVAL; |
| 116 | } | 116 | } |
| 117 | return retval; | 117 | return retval; |
diff --git a/arch/x86/xen/time.c b/arch/x86/xen/time.c index 29163c43ebbd..e0f1bcf01d63 100644 --- a/arch/x86/xen/time.c +++ b/arch/x86/xen/time.c | |||
| @@ -57,7 +57,7 @@ static u64 xen_clocksource_get_cycles(struct clocksource *cs) | |||
| 57 | return xen_clocksource_read(); | 57 | return xen_clocksource_read(); |
| 58 | } | 58 | } |
| 59 | 59 | ||
| 60 | static void xen_read_wallclock(struct timespec *ts) | 60 | static void xen_read_wallclock(struct timespec64 *ts) |
| 61 | { | 61 | { |
| 62 | struct shared_info *s = HYPERVISOR_shared_info; | 62 | struct shared_info *s = HYPERVISOR_shared_info; |
| 63 | struct pvclock_wall_clock *wall_clock = &(s->wc); | 63 | struct pvclock_wall_clock *wall_clock = &(s->wc); |
| @@ -68,12 +68,12 @@ static void xen_read_wallclock(struct timespec *ts) | |||
| 68 | put_cpu_var(xen_vcpu); | 68 | put_cpu_var(xen_vcpu); |
| 69 | } | 69 | } |
| 70 | 70 | ||
| 71 | static void xen_get_wallclock(struct timespec *now) | 71 | static void xen_get_wallclock(struct timespec64 *now) |
| 72 | { | 72 | { |
| 73 | xen_read_wallclock(now); | 73 | xen_read_wallclock(now); |
| 74 | } | 74 | } |
| 75 | 75 | ||
| 76 | static int xen_set_wallclock(const struct timespec *now) | 76 | static int xen_set_wallclock(const struct timespec64 *now) |
| 77 | { | 77 | { |
| 78 | return -ENODEV; | 78 | return -ENODEV; |
| 79 | } | 79 | } |
| @@ -461,7 +461,7 @@ static void __init xen_time_init(void) | |||
| 461 | { | 461 | { |
| 462 | struct pvclock_vcpu_time_info *pvti; | 462 | struct pvclock_vcpu_time_info *pvti; |
| 463 | int cpu = smp_processor_id(); | 463 | int cpu = smp_processor_id(); |
| 464 | struct timespec tp; | 464 | struct timespec64 tp; |
| 465 | 465 | ||
| 466 | /* As Dom0 is never moved, no penalty on using TSC there */ | 466 | /* As Dom0 is never moved, no penalty on using TSC there */ |
| 467 | if (xen_initial_domain()) | 467 | if (xen_initial_domain()) |
| @@ -479,7 +479,7 @@ static void __init xen_time_init(void) | |||
| 479 | 479 | ||
| 480 | /* Set initial system time with full resolution */ | 480 | /* Set initial system time with full resolution */ |
| 481 | xen_read_wallclock(&tp); | 481 | xen_read_wallclock(&tp); |
| 482 | do_settimeofday(&tp); | 482 | do_settimeofday64(&tp); |
| 483 | 483 | ||
| 484 | setup_force_cpu_cap(X86_FEATURE_TSC); | 484 | setup_force_cpu_cap(X86_FEATURE_TSC); |
| 485 | 485 | ||
diff --git a/arch/xtensa/include/uapi/asm/msgbuf.h b/arch/xtensa/include/uapi/asm/msgbuf.h index 36e2e103ca38..d6915e9f071c 100644 --- a/arch/xtensa/include/uapi/asm/msgbuf.h +++ b/arch/xtensa/include/uapi/asm/msgbuf.h | |||
| @@ -7,7 +7,6 @@ | |||
| 7 | * between kernel and user space. | 7 | * between kernel and user space. |
| 8 | * | 8 | * |
| 9 | * Pad space is left for: | 9 | * Pad space is left for: |
| 10 | * - 64-bit time_t to solve y2038 problem | ||
| 11 | * - 2 miscellaneous 32-bit values | 10 | * - 2 miscellaneous 32-bit values |
| 12 | * | 11 | * |
| 13 | * This file is subject to the terms and conditions of the GNU General | 12 | * This file is subject to the terms and conditions of the GNU General |
| @@ -21,19 +20,19 @@ | |||
| 21 | struct msqid64_ds { | 20 | struct msqid64_ds { |
| 22 | struct ipc64_perm msg_perm; | 21 | struct ipc64_perm msg_perm; |
| 23 | #ifdef __XTENSA_EB__ | 22 | #ifdef __XTENSA_EB__ |
| 24 | unsigned int __unused1; | 23 | unsigned long msg_stime_high; |
| 25 | __kernel_time_t msg_stime; /* last msgsnd time */ | 24 | unsigned long msg_stime; /* last msgsnd time */ |
| 26 | unsigned int __unused2; | 25 | unsigned long msg_rtime_high; |
| 27 | __kernel_time_t msg_rtime; /* last msgrcv time */ | 26 | unsigned long msg_rtime; /* last msgrcv time */ |
| 28 | unsigned int __unused3; | 27 | unsigned long msg_ctime_high; |
| 29 | __kernel_time_t msg_ctime; /* last change time */ | 28 | unsigned long msg_ctime; /* last change time */ |
| 30 | #elif defined(__XTENSA_EL__) | 29 | #elif defined(__XTENSA_EL__) |
| 31 | __kernel_time_t msg_stime; /* last msgsnd time */ | 30 | unsigned long msg_stime; /* last msgsnd time */ |
| 32 | unsigned int __unused1; | 31 | unsigned long msg_stime_high; |
| 33 | __kernel_time_t msg_rtime; /* last msgrcv time */ | 32 | unsigned long msg_rtime; /* last msgrcv time */ |
| 34 | unsigned int __unused2; | 33 | unsigned long msg_rtime_high; |
| 35 | __kernel_time_t msg_ctime; /* last change time */ | 34 | unsigned long msg_ctime; /* last change time */ |
| 36 | unsigned int __unused3; | 35 | unsigned long msg_ctime_high; |
| 37 | #else | 36 | #else |
| 38 | # error processor byte order undefined! | 37 | # error processor byte order undefined! |
| 39 | #endif | 38 | #endif |
diff --git a/arch/xtensa/include/uapi/asm/sembuf.h b/arch/xtensa/include/uapi/asm/sembuf.h index f61b6331a10c..09f348d643f1 100644 --- a/arch/xtensa/include/uapi/asm/sembuf.h +++ b/arch/xtensa/include/uapi/asm/sembuf.h | |||
| @@ -14,7 +14,6 @@ | |||
| 14 | * between kernel and user space. | 14 | * between kernel and user space. |
| 15 | * | 15 | * |
| 16 | * Pad space is left for: | 16 | * Pad space is left for: |
| 17 | * - 64-bit time_t to solve y2038 problem | ||
| 18 | * - 2 miscellaneous 32-bit values | 17 | * - 2 miscellaneous 32-bit values |
| 19 | * | 18 | * |
| 20 | */ | 19 | */ |
| @@ -27,15 +26,15 @@ | |||
| 27 | struct semid64_ds { | 26 | struct semid64_ds { |
| 28 | struct ipc64_perm sem_perm; /* permissions .. see ipc.h */ | 27 | struct ipc64_perm sem_perm; /* permissions .. see ipc.h */ |
| 29 | #ifdef __XTENSA_EL__ | 28 | #ifdef __XTENSA_EL__ |
| 30 | __kernel_time_t sem_otime; /* last semop time */ | 29 | unsigned long sem_otime; /* last semop time */ |
| 31 | unsigned long __unused1; | 30 | unsigned long sem_otime_high; |
| 32 | __kernel_time_t sem_ctime; /* last change time */ | 31 | unsigned long sem_ctime; /* last change time */ |
| 33 | unsigned long __unused2; | 32 | unsigned long sem_ctime_high; |
| 34 | #else | 33 | #else |
| 35 | unsigned long __unused1; | 34 | unsigned long sem_otime_high; |
| 36 | __kernel_time_t sem_otime; /* last semop time */ | 35 | unsigned long sem_otime; /* last semop time */ |
| 37 | unsigned long __unused2; | 36 | unsigned long sem_ctime_high; |
| 38 | __kernel_time_t sem_ctime; /* last change time */ | 37 | unsigned long sem_ctime; /* last change time */ |
| 39 | #endif | 38 | #endif |
| 40 | unsigned long sem_nsems; /* no. of semaphores in array */ | 39 | unsigned long sem_nsems; /* no. of semaphores in array */ |
| 41 | unsigned long __unused3; | 40 | unsigned long __unused3; |
diff --git a/arch/xtensa/include/uapi/asm/shmbuf.h b/arch/xtensa/include/uapi/asm/shmbuf.h index 26550bdc8430..554a57a6a90f 100644 --- a/arch/xtensa/include/uapi/asm/shmbuf.h +++ b/arch/xtensa/include/uapi/asm/shmbuf.h | |||
| @@ -4,10 +4,10 @@ | |||
| 4 | * | 4 | * |
| 5 | * The shmid64_ds structure for Xtensa architecture. | 5 | * The shmid64_ds structure for Xtensa architecture. |
| 6 | * Note extra padding because this structure is passed back and forth | 6 | * Note extra padding because this structure is passed back and forth |
| 7 | * between kernel and user space. | 7 | * between kernel and user space, but the padding is on the wrong |
| 8 | * side for big-endian xtensa, for historic reasons. | ||
| 8 | * | 9 | * |
| 9 | * Pad space is left for: | 10 | * Pad space is left for: |
| 10 | * - 64-bit time_t to solve y2038 problem | ||
| 11 | * - 2 miscellaneous 32-bit values | 11 | * - 2 miscellaneous 32-bit values |
| 12 | * | 12 | * |
| 13 | * This file is subject to the terms and conditions of the GNU General Public | 13 | * This file is subject to the terms and conditions of the GNU General Public |
| @@ -20,42 +20,21 @@ | |||
| 20 | #ifndef _XTENSA_SHMBUF_H | 20 | #ifndef _XTENSA_SHMBUF_H |
| 21 | #define _XTENSA_SHMBUF_H | 21 | #define _XTENSA_SHMBUF_H |
| 22 | 22 | ||
| 23 | #if defined (__XTENSA_EL__) | ||
| 24 | struct shmid64_ds { | 23 | struct shmid64_ds { |
| 25 | struct ipc64_perm shm_perm; /* operation perms */ | 24 | struct ipc64_perm shm_perm; /* operation perms */ |
| 26 | size_t shm_segsz; /* size of segment (bytes) */ | 25 | size_t shm_segsz; /* size of segment (bytes) */ |
| 27 | __kernel_time_t shm_atime; /* last attach time */ | 26 | unsigned long shm_atime; /* last attach time */ |
| 28 | unsigned long __unused1; | 27 | unsigned long shm_atime_high; |
| 29 | __kernel_time_t shm_dtime; /* last detach time */ | 28 | unsigned long shm_dtime; /* last detach time */ |
| 30 | unsigned long __unused2; | 29 | unsigned long shm_dtime_high; |
| 31 | __kernel_time_t shm_ctime; /* last change time */ | 30 | unsigned long shm_ctime; /* last change time */ |
| 32 | unsigned long __unused3; | 31 | unsigned long shm_ctime_high; |
| 33 | __kernel_pid_t shm_cpid; /* pid of creator */ | 32 | __kernel_pid_t shm_cpid; /* pid of creator */ |
| 34 | __kernel_pid_t shm_lpid; /* pid of last operator */ | 33 | __kernel_pid_t shm_lpid; /* pid of last operator */ |
| 35 | unsigned long shm_nattch; /* no. of current attaches */ | 34 | unsigned long shm_nattch; /* no. of current attaches */ |
| 36 | unsigned long __unused4; | 35 | unsigned long __unused4; |
| 37 | unsigned long __unused5; | 36 | unsigned long __unused5; |
| 38 | }; | 37 | }; |
| 39 | #elif defined (__XTENSA_EB__) | ||
| 40 | struct shmid64_ds { | ||
| 41 | struct ipc64_perm shm_perm; /* operation perms */ | ||
| 42 | size_t shm_segsz; /* size of segment (bytes) */ | ||
| 43 | __kernel_time_t shm_atime; /* last attach time */ | ||
| 44 | unsigned long __unused1; | ||
| 45 | __kernel_time_t shm_dtime; /* last detach time */ | ||
| 46 | unsigned long __unused2; | ||
| 47 | __kernel_time_t shm_ctime; /* last change time */ | ||
| 48 | unsigned long __unused3; | ||
| 49 | __kernel_pid_t shm_cpid; /* pid of creator */ | ||
| 50 | __kernel_pid_t shm_lpid; /* pid of last operator */ | ||
| 51 | unsigned long shm_nattch; /* no. of current attaches */ | ||
| 52 | unsigned long __unused4; | ||
| 53 | unsigned long __unused5; | ||
| 54 | }; | ||
| 55 | #else | ||
| 56 | # error endian order not defined | ||
| 57 | #endif | ||
| 58 | |||
| 59 | 38 | ||
| 60 | struct shminfo64 { | 39 | struct shminfo64 { |
| 61 | unsigned long shmmax; | 40 | unsigned long shmmax; |
diff --git a/include/linux/syscalls.h b/include/linux/syscalls.h index 796ea267f1c7..390e814fdc8d 100644 --- a/include/linux/syscalls.h +++ b/include/linux/syscalls.h | |||
| @@ -686,8 +686,8 @@ asmlinkage long sys_sysinfo(struct sysinfo __user *info); | |||
| 686 | /* ipc/mqueue.c */ | 686 | /* ipc/mqueue.c */ |
| 687 | asmlinkage long sys_mq_open(const char __user *name, int oflag, umode_t mode, struct mq_attr __user *attr); | 687 | asmlinkage long sys_mq_open(const char __user *name, int oflag, umode_t mode, struct mq_attr __user *attr); |
| 688 | asmlinkage long sys_mq_unlink(const char __user *name); | 688 | asmlinkage long sys_mq_unlink(const char __user *name); |
| 689 | asmlinkage long sys_mq_timedsend(mqd_t mqdes, const char __user *msg_ptr, size_t msg_len, unsigned int msg_prio, const struct timespec __user *abs_timeout); | 689 | asmlinkage long sys_mq_timedsend(mqd_t mqdes, const char __user *msg_ptr, size_t msg_len, unsigned int msg_prio, const struct __kernel_timespec __user *abs_timeout); |
| 690 | asmlinkage long sys_mq_timedreceive(mqd_t mqdes, char __user *msg_ptr, size_t msg_len, unsigned int __user *msg_prio, const struct timespec __user *abs_timeout); | 690 | asmlinkage long sys_mq_timedreceive(mqd_t mqdes, char __user *msg_ptr, size_t msg_len, unsigned int __user *msg_prio, const struct __kernel_timespec __user *abs_timeout); |
| 691 | asmlinkage long sys_mq_notify(mqd_t mqdes, const struct sigevent __user *notification); | 691 | asmlinkage long sys_mq_notify(mqd_t mqdes, const struct sigevent __user *notification); |
| 692 | asmlinkage long sys_mq_getsetattr(mqd_t mqdes, const struct mq_attr __user *mqstat, struct mq_attr __user *omqstat); | 692 | asmlinkage long sys_mq_getsetattr(mqd_t mqdes, const struct mq_attr __user *mqstat, struct mq_attr __user *omqstat); |
| 693 | 693 | ||
| @@ -704,7 +704,7 @@ asmlinkage long sys_semget(key_t key, int nsems, int semflg); | |||
| 704 | asmlinkage long sys_semctl(int semid, int semnum, int cmd, unsigned long arg); | 704 | asmlinkage long sys_semctl(int semid, int semnum, int cmd, unsigned long arg); |
| 705 | asmlinkage long sys_semtimedop(int semid, struct sembuf __user *sops, | 705 | asmlinkage long sys_semtimedop(int semid, struct sembuf __user *sops, |
| 706 | unsigned nsops, | 706 | unsigned nsops, |
| 707 | const struct timespec __user *timeout); | 707 | const struct __kernel_timespec __user *timeout); |
| 708 | asmlinkage long sys_semop(int semid, struct sembuf __user *sops, | 708 | asmlinkage long sys_semop(int semid, struct sembuf __user *sops, |
| 709 | unsigned nsops); | 709 | unsigned nsops); |
| 710 | 710 | ||
diff --git a/include/linux/time32.h b/include/linux/time32.h index d2bcd4377b56..0b14f936100a 100644 --- a/include/linux/time32.h +++ b/include/linux/time32.h | |||
| @@ -18,25 +18,14 @@ | |||
| 18 | /* timespec64 is defined as timespec here */ | 18 | /* timespec64 is defined as timespec here */ |
| 19 | static inline struct timespec timespec64_to_timespec(const struct timespec64 ts64) | 19 | static inline struct timespec timespec64_to_timespec(const struct timespec64 ts64) |
| 20 | { | 20 | { |
| 21 | return ts64; | 21 | return *(const struct timespec *)&ts64; |
| 22 | } | 22 | } |
| 23 | 23 | ||
| 24 | static inline struct timespec64 timespec_to_timespec64(const struct timespec ts) | 24 | static inline struct timespec64 timespec_to_timespec64(const struct timespec ts) |
| 25 | { | 25 | { |
| 26 | return ts; | 26 | return *(const struct timespec64 *)&ts; |
| 27 | } | 27 | } |
| 28 | 28 | ||
| 29 | # define timespec_equal timespec64_equal | ||
| 30 | # define timespec_compare timespec64_compare | ||
| 31 | # define set_normalized_timespec set_normalized_timespec64 | ||
| 32 | # define timespec_add timespec64_add | ||
| 33 | # define timespec_sub timespec64_sub | ||
| 34 | # define timespec_valid timespec64_valid | ||
| 35 | # define timespec_valid_strict timespec64_valid_strict | ||
| 36 | # define timespec_to_ns timespec64_to_ns | ||
| 37 | # define ns_to_timespec ns_to_timespec64 | ||
| 38 | # define timespec_add_ns timespec64_add_ns | ||
| 39 | |||
| 40 | #else | 29 | #else |
| 41 | static inline struct timespec timespec64_to_timespec(const struct timespec64 ts64) | 30 | static inline struct timespec timespec64_to_timespec(const struct timespec64 ts64) |
| 42 | { | 31 | { |
| @@ -55,6 +44,7 @@ static inline struct timespec64 timespec_to_timespec64(const struct timespec ts) | |||
| 55 | ret.tv_nsec = ts.tv_nsec; | 44 | ret.tv_nsec = ts.tv_nsec; |
| 56 | return ret; | 45 | return ret; |
| 57 | } | 46 | } |
| 47 | #endif | ||
| 58 | 48 | ||
| 59 | static inline int timespec_equal(const struct timespec *a, | 49 | static inline int timespec_equal(const struct timespec *a, |
| 60 | const struct timespec *b) | 50 | const struct timespec *b) |
| @@ -159,8 +149,6 @@ static __always_inline void timespec_add_ns(struct timespec *a, u64 ns) | |||
| 159 | a->tv_nsec = ns; | 149 | a->tv_nsec = ns; |
| 160 | } | 150 | } |
| 161 | 151 | ||
| 162 | #endif | ||
| 163 | |||
| 164 | /** | 152 | /** |
| 165 | * time_to_tm - converts the calendar time to local broken-down time | 153 | * time_to_tm - converts the calendar time to local broken-down time |
| 166 | * | 154 | * |
diff --git a/include/linux/time64.h b/include/linux/time64.h index 0d96887ba4e0..0a7b2f79cec7 100644 --- a/include/linux/time64.h +++ b/include/linux/time64.h | |||
| @@ -16,11 +16,6 @@ typedef __u64 timeu64_t; | |||
| 16 | 16 | ||
| 17 | #include <uapi/linux/time.h> | 17 | #include <uapi/linux/time.h> |
| 18 | 18 | ||
| 19 | #if __BITS_PER_LONG == 64 | ||
| 20 | /* this trick allows us to optimize out timespec64_to_timespec */ | ||
| 21 | # define timespec64 timespec | ||
| 22 | #define itimerspec64 itimerspec | ||
| 23 | #else | ||
| 24 | struct timespec64 { | 19 | struct timespec64 { |
| 25 | time64_t tv_sec; /* seconds */ | 20 | time64_t tv_sec; /* seconds */ |
| 26 | long tv_nsec; /* nanoseconds */ | 21 | long tv_nsec; /* nanoseconds */ |
| @@ -31,8 +26,6 @@ struct itimerspec64 { | |||
| 31 | struct timespec64 it_value; | 26 | struct timespec64 it_value; |
| 32 | }; | 27 | }; |
| 33 | 28 | ||
| 34 | #endif | ||
| 35 | |||
| 36 | /* Parameters used to convert the timespec values: */ | 29 | /* Parameters used to convert the timespec values: */ |
| 37 | #define MSEC_PER_SEC 1000L | 30 | #define MSEC_PER_SEC 1000L |
| 38 | #define USEC_PER_MSEC 1000L | 31 | #define USEC_PER_MSEC 1000L |
diff --git a/include/linux/timekeeping.h b/include/linux/timekeeping.h index 588a0e4b1ab9..86bc2026efce 100644 --- a/include/linux/timekeeping.h +++ b/include/linux/timekeeping.h | |||
| @@ -19,27 +19,25 @@ extern void xtime_update(unsigned long ticks); | |||
| 19 | extern int do_settimeofday64(const struct timespec64 *ts); | 19 | extern int do_settimeofday64(const struct timespec64 *ts); |
| 20 | extern int do_sys_settimeofday64(const struct timespec64 *tv, | 20 | extern int do_sys_settimeofday64(const struct timespec64 *tv, |
| 21 | const struct timezone *tz); | 21 | const struct timezone *tz); |
| 22 | /* | ||
| 23 | * Kernel time accessors | ||
| 24 | */ | ||
| 25 | struct timespec64 current_kernel_time64(void); | ||
| 26 | 22 | ||
| 27 | /* | 23 | /* |
| 28 | * timespec64 based interfaces | 24 | * timespec64 based interfaces |
| 29 | */ | 25 | */ |
| 30 | struct timespec64 get_monotonic_coarse64(void); | 26 | extern void ktime_get_raw_ts64(struct timespec64 *ts); |
| 31 | extern void getrawmonotonic64(struct timespec64 *ts); | ||
| 32 | extern void ktime_get_ts64(struct timespec64 *ts); | 27 | extern void ktime_get_ts64(struct timespec64 *ts); |
| 28 | extern void ktime_get_real_ts64(struct timespec64 *tv); | ||
| 29 | extern void ktime_get_coarse_ts64(struct timespec64 *ts); | ||
| 30 | extern void ktime_get_coarse_real_ts64(struct timespec64 *ts); | ||
| 31 | |||
| 32 | void getboottime64(struct timespec64 *ts); | ||
| 33 | |||
| 34 | /* | ||
| 35 | * time64_t base interfaces | ||
| 36 | */ | ||
| 33 | extern time64_t ktime_get_seconds(void); | 37 | extern time64_t ktime_get_seconds(void); |
| 34 | extern time64_t __ktime_get_real_seconds(void); | 38 | extern time64_t __ktime_get_real_seconds(void); |
| 35 | extern time64_t ktime_get_real_seconds(void); | 39 | extern time64_t ktime_get_real_seconds(void); |
| 36 | 40 | ||
| 37 | extern int __getnstimeofday64(struct timespec64 *tv); | ||
| 38 | extern void getnstimeofday64(struct timespec64 *tv); | ||
| 39 | extern void getboottime64(struct timespec64 *ts); | ||
| 40 | |||
| 41 | #define ktime_get_real_ts64(ts) getnstimeofday64(ts) | ||
| 42 | |||
| 43 | /* | 41 | /* |
| 44 | * ktime_t based interfaces | 42 | * ktime_t based interfaces |
| 45 | */ | 43 | */ |
| @@ -53,6 +51,7 @@ enum tk_offsets { | |||
| 53 | 51 | ||
| 54 | extern ktime_t ktime_get(void); | 52 | extern ktime_t ktime_get(void); |
| 55 | extern ktime_t ktime_get_with_offset(enum tk_offsets offs); | 53 | extern ktime_t ktime_get_with_offset(enum tk_offsets offs); |
| 54 | extern ktime_t ktime_get_coarse_with_offset(enum tk_offsets offs); | ||
| 56 | extern ktime_t ktime_mono_to_any(ktime_t tmono, enum tk_offsets offs); | 55 | extern ktime_t ktime_mono_to_any(ktime_t tmono, enum tk_offsets offs); |
| 57 | extern ktime_t ktime_get_raw(void); | 56 | extern ktime_t ktime_get_raw(void); |
| 58 | extern u32 ktime_get_resolution_ns(void); | 57 | extern u32 ktime_get_resolution_ns(void); |
| @@ -65,6 +64,11 @@ static inline ktime_t ktime_get_real(void) | |||
| 65 | return ktime_get_with_offset(TK_OFFS_REAL); | 64 | return ktime_get_with_offset(TK_OFFS_REAL); |
| 66 | } | 65 | } |
| 67 | 66 | ||
| 67 | static inline ktime_t ktime_get_coarse_real(void) | ||
| 68 | { | ||
| 69 | return ktime_get_coarse_with_offset(TK_OFFS_REAL); | ||
| 70 | } | ||
| 71 | |||
| 68 | /** | 72 | /** |
| 69 | * ktime_get_boottime - Returns monotonic time since boot in ktime_t format | 73 | * ktime_get_boottime - Returns monotonic time since boot in ktime_t format |
| 70 | * | 74 | * |
| @@ -76,6 +80,11 @@ static inline ktime_t ktime_get_boottime(void) | |||
| 76 | return ktime_get_with_offset(TK_OFFS_BOOT); | 80 | return ktime_get_with_offset(TK_OFFS_BOOT); |
| 77 | } | 81 | } |
| 78 | 82 | ||
| 83 | static inline ktime_t ktime_get_coarse_boottime(void) | ||
| 84 | { | ||
| 85 | return ktime_get_coarse_with_offset(TK_OFFS_BOOT); | ||
| 86 | } | ||
| 87 | |||
| 79 | /** | 88 | /** |
| 80 | * ktime_get_clocktai - Returns the TAI time of day in ktime_t format | 89 | * ktime_get_clocktai - Returns the TAI time of day in ktime_t format |
| 81 | */ | 90 | */ |
| @@ -84,6 +93,11 @@ static inline ktime_t ktime_get_clocktai(void) | |||
| 84 | return ktime_get_with_offset(TK_OFFS_TAI); | 93 | return ktime_get_with_offset(TK_OFFS_TAI); |
| 85 | } | 94 | } |
| 86 | 95 | ||
| 96 | static inline ktime_t ktime_get_coarse_clocktai(void) | ||
| 97 | { | ||
| 98 | return ktime_get_coarse_with_offset(TK_OFFS_TAI); | ||
| 99 | } | ||
| 100 | |||
| 87 | /** | 101 | /** |
| 88 | * ktime_mono_to_real - Convert monotonic time to clock realtime | 102 | * ktime_mono_to_real - Convert monotonic time to clock realtime |
| 89 | */ | 103 | */ |
| @@ -123,18 +137,40 @@ extern u64 ktime_get_boot_fast_ns(void); | |||
| 123 | extern u64 ktime_get_real_fast_ns(void); | 137 | extern u64 ktime_get_real_fast_ns(void); |
| 124 | 138 | ||
| 125 | /* | 139 | /* |
| 126 | * timespec64 interfaces utilizing the ktime based ones | 140 | * timespec64/time64_t interfaces utilizing the ktime based ones |
| 141 | * for API completeness, these could be implemented more efficiently | ||
| 142 | * if needed. | ||
| 127 | */ | 143 | */ |
| 128 | static inline void get_monotonic_boottime64(struct timespec64 *ts) | 144 | static inline void ktime_get_boottime_ts64(struct timespec64 *ts) |
| 129 | { | 145 | { |
| 130 | *ts = ktime_to_timespec64(ktime_get_boottime()); | 146 | *ts = ktime_to_timespec64(ktime_get_boottime()); |
| 131 | } | 147 | } |
| 132 | 148 | ||
| 133 | static inline void timekeeping_clocktai64(struct timespec64 *ts) | 149 | static inline void ktime_get_coarse_boottime_ts64(struct timespec64 *ts) |
| 150 | { | ||
| 151 | *ts = ktime_to_timespec64(ktime_get_coarse_boottime()); | ||
| 152 | } | ||
| 153 | |||
| 154 | static inline time64_t ktime_get_boottime_seconds(void) | ||
| 155 | { | ||
| 156 | return ktime_divns(ktime_get_coarse_boottime(), NSEC_PER_SEC); | ||
| 157 | } | ||
| 158 | |||
| 159 | static inline void ktime_get_clocktai_ts64(struct timespec64 *ts) | ||
| 134 | { | 160 | { |
| 135 | *ts = ktime_to_timespec64(ktime_get_clocktai()); | 161 | *ts = ktime_to_timespec64(ktime_get_clocktai()); |
| 136 | } | 162 | } |
| 137 | 163 | ||
| 164 | static inline void ktime_get_coarse_clocktai_ts64(struct timespec64 *ts) | ||
| 165 | { | ||
| 166 | *ts = ktime_to_timespec64(ktime_get_coarse_clocktai()); | ||
| 167 | } | ||
| 168 | |||
| 169 | static inline time64_t ktime_get_clocktai_seconds(void) | ||
| 170 | { | ||
| 171 | return ktime_divns(ktime_get_coarse_clocktai(), NSEC_PER_SEC); | ||
| 172 | } | ||
| 173 | |||
| 138 | /* | 174 | /* |
| 139 | * RTC specific | 175 | * RTC specific |
| 140 | */ | 176 | */ |
| @@ -210,5 +246,30 @@ extern void read_persistent_clock64(struct timespec64 *ts); | |||
| 210 | extern void read_boot_clock64(struct timespec64 *ts); | 246 | extern void read_boot_clock64(struct timespec64 *ts); |
| 211 | extern int update_persistent_clock64(struct timespec64 now); | 247 | extern int update_persistent_clock64(struct timespec64 now); |
| 212 | 248 | ||
| 249 | /* | ||
| 250 | * deprecated aliases, don't use in new code | ||
| 251 | */ | ||
| 252 | #define getnstimeofday64(ts) ktime_get_real_ts64(ts) | ||
| 253 | #define get_monotonic_boottime64(ts) ktime_get_boottime_ts64(ts) | ||
| 254 | #define getrawmonotonic64(ts) ktime_get_raw_ts64(ts) | ||
| 255 | #define timekeeping_clocktai64(ts) ktime_get_clocktai_ts64(ts) | ||
| 256 | |||
| 257 | static inline struct timespec64 current_kernel_time64(void) | ||
| 258 | { | ||
| 259 | struct timespec64 ts; | ||
| 260 | |||
| 261 | ktime_get_coarse_real_ts64(&ts); | ||
| 262 | |||
| 263 | return ts; | ||
| 264 | } | ||
| 265 | |||
| 266 | static inline struct timespec64 get_monotonic_coarse64(void) | ||
| 267 | { | ||
| 268 | struct timespec64 ts; | ||
| 269 | |||
| 270 | ktime_get_coarse_ts64(&ts); | ||
| 271 | |||
| 272 | return ts; | ||
| 273 | } | ||
| 213 | 274 | ||
| 214 | #endif | 275 | #endif |
diff --git a/include/linux/timekeeping32.h b/include/linux/timekeeping32.h index 3616b4becb59..8762c2f45f8b 100644 --- a/include/linux/timekeeping32.h +++ b/include/linux/timekeeping32.h | |||
| @@ -11,55 +11,13 @@ unsigned long get_seconds(void); | |||
| 11 | 11 | ||
| 12 | static inline struct timespec current_kernel_time(void) | 12 | static inline struct timespec current_kernel_time(void) |
| 13 | { | 13 | { |
| 14 | struct timespec64 now = current_kernel_time64(); | 14 | struct timespec64 ts64; |
| 15 | |||
| 16 | return timespec64_to_timespec(now); | ||
| 17 | } | ||
| 18 | |||
| 19 | #if BITS_PER_LONG == 64 | ||
| 20 | /** | ||
| 21 | * Deprecated. Use do_settimeofday64(). | ||
| 22 | */ | ||
| 23 | static inline int do_settimeofday(const struct timespec *ts) | ||
| 24 | { | ||
| 25 | return do_settimeofday64(ts); | ||
| 26 | } | ||
| 27 | |||
| 28 | static inline int __getnstimeofday(struct timespec *ts) | ||
| 29 | { | ||
| 30 | return __getnstimeofday64(ts); | ||
| 31 | } | ||
| 32 | |||
| 33 | static inline void getnstimeofday(struct timespec *ts) | ||
| 34 | { | ||
| 35 | getnstimeofday64(ts); | ||
| 36 | } | ||
| 37 | |||
| 38 | static inline void ktime_get_ts(struct timespec *ts) | ||
| 39 | { | ||
| 40 | ktime_get_ts64(ts); | ||
| 41 | } | ||
| 42 | |||
| 43 | static inline void ktime_get_real_ts(struct timespec *ts) | ||
| 44 | { | ||
| 45 | getnstimeofday64(ts); | ||
| 46 | } | ||
| 47 | 15 | ||
| 48 | static inline void getrawmonotonic(struct timespec *ts) | 16 | ktime_get_coarse_real_ts64(&ts64); |
| 49 | { | ||
| 50 | getrawmonotonic64(ts); | ||
| 51 | } | ||
| 52 | 17 | ||
| 53 | static inline struct timespec get_monotonic_coarse(void) | 18 | return timespec64_to_timespec(ts64); |
| 54 | { | ||
| 55 | return get_monotonic_coarse64(); | ||
| 56 | } | 19 | } |
| 57 | 20 | ||
| 58 | static inline void getboottime(struct timespec *ts) | ||
| 59 | { | ||
| 60 | return getboottime64(ts); | ||
| 61 | } | ||
| 62 | #else | ||
| 63 | /** | 21 | /** |
| 64 | * Deprecated. Use do_settimeofday64(). | 22 | * Deprecated. Use do_settimeofday64(). |
| 65 | */ | 23 | */ |
| @@ -71,20 +29,11 @@ static inline int do_settimeofday(const struct timespec *ts) | |||
| 71 | return do_settimeofday64(&ts64); | 29 | return do_settimeofday64(&ts64); |
| 72 | } | 30 | } |
| 73 | 31 | ||
| 74 | static inline int __getnstimeofday(struct timespec *ts) | ||
| 75 | { | ||
| 76 | struct timespec64 ts64; | ||
| 77 | int ret = __getnstimeofday64(&ts64); | ||
| 78 | |||
| 79 | *ts = timespec64_to_timespec(ts64); | ||
| 80 | return ret; | ||
| 81 | } | ||
| 82 | |||
| 83 | static inline void getnstimeofday(struct timespec *ts) | 32 | static inline void getnstimeofday(struct timespec *ts) |
| 84 | { | 33 | { |
| 85 | struct timespec64 ts64; | 34 | struct timespec64 ts64; |
| 86 | 35 | ||
| 87 | getnstimeofday64(&ts64); | 36 | ktime_get_real_ts64(&ts64); |
| 88 | *ts = timespec64_to_timespec(ts64); | 37 | *ts = timespec64_to_timespec(ts64); |
| 89 | } | 38 | } |
| 90 | 39 | ||
| @@ -100,7 +49,7 @@ static inline void ktime_get_real_ts(struct timespec *ts) | |||
| 100 | { | 49 | { |
| 101 | struct timespec64 ts64; | 50 | struct timespec64 ts64; |
| 102 | 51 | ||
| 103 | getnstimeofday64(&ts64); | 52 | ktime_get_real_ts64(&ts64); |
| 104 | *ts = timespec64_to_timespec(ts64); | 53 | *ts = timespec64_to_timespec(ts64); |
| 105 | } | 54 | } |
| 106 | 55 | ||
| @@ -108,13 +57,17 @@ static inline void getrawmonotonic(struct timespec *ts) | |||
| 108 | { | 57 | { |
| 109 | struct timespec64 ts64; | 58 | struct timespec64 ts64; |
| 110 | 59 | ||
| 111 | getrawmonotonic64(&ts64); | 60 | ktime_get_raw_ts64(&ts64); |
| 112 | *ts = timespec64_to_timespec(ts64); | 61 | *ts = timespec64_to_timespec(ts64); |
| 113 | } | 62 | } |
| 114 | 63 | ||
| 115 | static inline struct timespec get_monotonic_coarse(void) | 64 | static inline struct timespec get_monotonic_coarse(void) |
| 116 | { | 65 | { |
| 117 | return timespec64_to_timespec(get_monotonic_coarse64()); | 66 | struct timespec64 ts64; |
| 67 | |||
| 68 | ktime_get_coarse_ts64(&ts64); | ||
| 69 | |||
| 70 | return timespec64_to_timespec(ts64); | ||
| 118 | } | 71 | } |
| 119 | 72 | ||
| 120 | static inline void getboottime(struct timespec *ts) | 73 | static inline void getboottime(struct timespec *ts) |
| @@ -124,7 +77,6 @@ static inline void getboottime(struct timespec *ts) | |||
| 124 | getboottime64(&ts64); | 77 | getboottime64(&ts64); |
| 125 | *ts = timespec64_to_timespec(ts64); | 78 | *ts = timespec64_to_timespec(ts64); |
| 126 | } | 79 | } |
| 127 | #endif | ||
| 128 | 80 | ||
| 129 | /* | 81 | /* |
| 130 | * Timespec interfaces utilizing the ktime based ones | 82 | * Timespec interfaces utilizing the ktime based ones |
diff --git a/include/uapi/asm-generic/msgbuf.h b/include/uapi/asm-generic/msgbuf.h index fb306ebdb36f..9fe4881557cb 100644 --- a/include/uapi/asm-generic/msgbuf.h +++ b/include/uapi/asm-generic/msgbuf.h | |||
| @@ -18,31 +18,30 @@ | |||
| 18 | * On big-endian systems, the padding is in the wrong place. | 18 | * On big-endian systems, the padding is in the wrong place. |
| 19 | * | 19 | * |
| 20 | * Pad space is left for: | 20 | * Pad space is left for: |
| 21 | * - 64-bit time_t to solve y2038 problem | ||
| 22 | * - 2 miscellaneous 32-bit values | 21 | * - 2 miscellaneous 32-bit values |
| 23 | */ | 22 | */ |
| 24 | 23 | ||
| 25 | struct msqid64_ds { | 24 | struct msqid64_ds { |
| 26 | struct ipc64_perm msg_perm; | 25 | struct ipc64_perm msg_perm; |
| 26 | #if __BITS_PER_LONG == 64 | ||
| 27 | __kernel_time_t msg_stime; /* last msgsnd time */ | 27 | __kernel_time_t msg_stime; /* last msgsnd time */ |
| 28 | #if __BITS_PER_LONG != 64 | ||
| 29 | unsigned long __unused1; | ||
| 30 | #endif | ||
| 31 | __kernel_time_t msg_rtime; /* last msgrcv time */ | 28 | __kernel_time_t msg_rtime; /* last msgrcv time */ |
| 32 | #if __BITS_PER_LONG != 64 | ||
| 33 | unsigned long __unused2; | ||
| 34 | #endif | ||
| 35 | __kernel_time_t msg_ctime; /* last change time */ | 29 | __kernel_time_t msg_ctime; /* last change time */ |
| 36 | #if __BITS_PER_LONG != 64 | 30 | #else |
| 37 | unsigned long __unused3; | 31 | unsigned long msg_stime; /* last msgsnd time */ |
| 32 | unsigned long msg_stime_high; | ||
| 33 | unsigned long msg_rtime; /* last msgrcv time */ | ||
| 34 | unsigned long msg_rtime_high; | ||
| 35 | unsigned long msg_ctime; /* last change time */ | ||
| 36 | unsigned long msg_ctime_high; | ||
| 38 | #endif | 37 | #endif |
| 39 | __kernel_ulong_t msg_cbytes; /* current number of bytes on queue */ | 38 | unsigned long msg_cbytes; /* current number of bytes on queue */ |
| 40 | __kernel_ulong_t msg_qnum; /* number of messages in queue */ | 39 | unsigned long msg_qnum; /* number of messages in queue */ |
| 41 | __kernel_ulong_t msg_qbytes; /* max number of bytes on queue */ | 40 | unsigned long msg_qbytes; /* max number of bytes on queue */ |
| 42 | __kernel_pid_t msg_lspid; /* pid of last msgsnd */ | 41 | __kernel_pid_t msg_lspid; /* pid of last msgsnd */ |
| 43 | __kernel_pid_t msg_lrpid; /* last receive pid */ | 42 | __kernel_pid_t msg_lrpid; /* last receive pid */ |
| 44 | __kernel_ulong_t __unused4; | 43 | unsigned long __unused4; |
| 45 | __kernel_ulong_t __unused5; | 44 | unsigned long __unused5; |
| 46 | }; | 45 | }; |
| 47 | 46 | ||
| 48 | #endif /* __ASM_GENERIC_MSGBUF_H */ | 47 | #endif /* __ASM_GENERIC_MSGBUF_H */ |
diff --git a/include/uapi/asm-generic/sembuf.h b/include/uapi/asm-generic/sembuf.h index cbf9cfe977d6..0bae010f1b64 100644 --- a/include/uapi/asm-generic/sembuf.h +++ b/include/uapi/asm-generic/sembuf.h | |||
| @@ -13,23 +13,29 @@ | |||
| 13 | * everyone just ended up making identical copies without specific | 13 | * everyone just ended up making identical copies without specific |
| 14 | * optimizations, so we may just as well all use the same one. | 14 | * optimizations, so we may just as well all use the same one. |
| 15 | * | 15 | * |
| 16 | * 64 bit architectures typically define a 64 bit __kernel_time_t, | 16 | * 64 bit architectures use a 64-bit __kernel_time_t here, while |
| 17 | * 32 bit architectures have a pair of unsigned long values. | ||
| 17 | * so they do not need the first two padding words. | 18 | * so they do not need the first two padding words. |
| 18 | * On big-endian systems, the padding is in the wrong place. | ||
| 19 | * | 19 | * |
| 20 | * Pad space is left for: | 20 | * On big-endian systems, the padding is in the wrong place for |
| 21 | * - 64-bit time_t to solve y2038 problem | 21 | * historic reasons, so user space has to reconstruct a time_t |
| 22 | * - 2 miscellaneous 32-bit values | 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 | ||
| 23 | */ | 28 | */ |
| 24 | struct semid64_ds { | 29 | struct semid64_ds { |
| 25 | struct ipc64_perm sem_perm; /* permissions .. see ipc.h */ | 30 | struct ipc64_perm sem_perm; /* permissions .. see ipc.h */ |
| 31 | #if __BITS_PER_LONG == 64 | ||
| 26 | __kernel_time_t sem_otime; /* last semop time */ | 32 | __kernel_time_t sem_otime; /* last semop time */ |
| 27 | #if __BITS_PER_LONG != 64 | ||
| 28 | unsigned long __unused1; | ||
| 29 | #endif | ||
| 30 | __kernel_time_t sem_ctime; /* last change time */ | 33 | __kernel_time_t sem_ctime; /* last change time */ |
| 31 | #if __BITS_PER_LONG != 64 | 34 | #else |
| 32 | unsigned long __unused2; | 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; | ||
| 33 | #endif | 39 | #endif |
| 34 | unsigned long sem_nsems; /* no. of semaphores in array */ | 40 | unsigned long sem_nsems; /* no. of semaphores in array */ |
| 35 | unsigned long __unused3; | 41 | unsigned long __unused3; |
diff --git a/include/uapi/asm-generic/shmbuf.h b/include/uapi/asm-generic/shmbuf.h index 2b6c3bb97f97..e504422fc501 100644 --- a/include/uapi/asm-generic/shmbuf.h +++ b/include/uapi/asm-generic/shmbuf.h | |||
| @@ -19,42 +19,41 @@ | |||
| 19 | * | 19 | * |
| 20 | * | 20 | * |
| 21 | * Pad space is left for: | 21 | * Pad space is left for: |
| 22 | * - 64-bit time_t to solve y2038 problem | ||
| 23 | * - 2 miscellaneous 32-bit values | 22 | * - 2 miscellaneous 32-bit values |
| 24 | */ | 23 | */ |
| 25 | 24 | ||
| 26 | struct shmid64_ds { | 25 | struct shmid64_ds { |
| 27 | struct ipc64_perm shm_perm; /* operation perms */ | 26 | struct ipc64_perm shm_perm; /* operation perms */ |
| 28 | size_t shm_segsz; /* size of segment (bytes) */ | 27 | size_t shm_segsz; /* size of segment (bytes) */ |
| 28 | #if __BITS_PER_LONG == 64 | ||
| 29 | __kernel_time_t shm_atime; /* last attach time */ | 29 | __kernel_time_t shm_atime; /* last attach time */ |
| 30 | #if __BITS_PER_LONG != 64 | ||
| 31 | unsigned long __unused1; | ||
| 32 | #endif | ||
| 33 | __kernel_time_t shm_dtime; /* last detach time */ | 30 | __kernel_time_t shm_dtime; /* last detach time */ |
| 34 | #if __BITS_PER_LONG != 64 | ||
| 35 | unsigned long __unused2; | ||
| 36 | #endif | ||
| 37 | __kernel_time_t shm_ctime; /* last change time */ | 31 | __kernel_time_t shm_ctime; /* last change time */ |
| 38 | #if __BITS_PER_LONG != 64 | 32 | #else |
| 39 | unsigned long __unused3; | 33 | unsigned long shm_atime; /* last attach time */ |
| 34 | unsigned long shm_atime_high; | ||
| 35 | unsigned long shm_dtime; /* last detach time */ | ||
| 36 | unsigned long shm_dtime_high; | ||
| 37 | unsigned long shm_ctime; /* last change time */ | ||
| 38 | unsigned long shm_ctime_high; | ||
| 40 | #endif | 39 | #endif |
| 41 | __kernel_pid_t shm_cpid; /* pid of creator */ | 40 | __kernel_pid_t shm_cpid; /* pid of creator */ |
| 42 | __kernel_pid_t shm_lpid; /* pid of last operator */ | 41 | __kernel_pid_t shm_lpid; /* pid of last operator */ |
| 43 | __kernel_ulong_t shm_nattch; /* no. of current attaches */ | 42 | unsigned long shm_nattch; /* no. of current attaches */ |
| 44 | __kernel_ulong_t __unused4; | 43 | unsigned long __unused4; |
| 45 | __kernel_ulong_t __unused5; | 44 | unsigned long __unused5; |
| 46 | }; | 45 | }; |
| 47 | 46 | ||
| 48 | struct shminfo64 { | 47 | struct shminfo64 { |
| 49 | __kernel_ulong_t shmmax; | 48 | unsigned long shmmax; |
| 50 | __kernel_ulong_t shmmin; | 49 | unsigned long shmmin; |
| 51 | __kernel_ulong_t shmmni; | 50 | unsigned long shmmni; |
| 52 | __kernel_ulong_t shmseg; | 51 | unsigned long shmseg; |
| 53 | __kernel_ulong_t shmall; | 52 | unsigned long shmall; |
| 54 | __kernel_ulong_t __unused1; | 53 | unsigned long __unused1; |
| 55 | __kernel_ulong_t __unused2; | 54 | unsigned long __unused2; |
| 56 | __kernel_ulong_t __unused3; | 55 | unsigned long __unused3; |
| 57 | __kernel_ulong_t __unused4; | 56 | unsigned long __unused4; |
| 58 | }; | 57 | }; |
| 59 | 58 | ||
| 60 | #endif /* __ASM_GENERIC_SHMBUF_H */ | 59 | #endif /* __ASM_GENERIC_SHMBUF_H */ |
diff --git a/ipc/mqueue.c b/ipc/mqueue.c index a808f29d4c5a..c0d58f390c3b 100644 --- a/ipc/mqueue.c +++ b/ipc/mqueue.c | |||
| @@ -691,7 +691,7 @@ static void __do_notify(struct mqueue_inode_info *info) | |||
| 691 | wake_up(&info->wait_q); | 691 | wake_up(&info->wait_q); |
| 692 | } | 692 | } |
| 693 | 693 | ||
| 694 | static int prepare_timeout(const struct timespec __user *u_abs_timeout, | 694 | static int prepare_timeout(const struct __kernel_timespec __user *u_abs_timeout, |
| 695 | struct timespec64 *ts) | 695 | struct timespec64 *ts) |
| 696 | { | 696 | { |
| 697 | if (get_timespec64(ts, u_abs_timeout)) | 697 | if (get_timespec64(ts, u_abs_timeout)) |
| @@ -1128,7 +1128,7 @@ out: | |||
| 1128 | 1128 | ||
| 1129 | SYSCALL_DEFINE5(mq_timedsend, mqd_t, mqdes, const char __user *, u_msg_ptr, | 1129 | SYSCALL_DEFINE5(mq_timedsend, mqd_t, mqdes, const char __user *, u_msg_ptr, |
| 1130 | size_t, msg_len, unsigned int, msg_prio, | 1130 | size_t, msg_len, unsigned int, msg_prio, |
| 1131 | const struct timespec __user *, u_abs_timeout) | 1131 | const struct __kernel_timespec __user *, u_abs_timeout) |
| 1132 | { | 1132 | { |
| 1133 | struct timespec64 ts, *p = NULL; | 1133 | struct timespec64 ts, *p = NULL; |
| 1134 | if (u_abs_timeout) { | 1134 | if (u_abs_timeout) { |
| @@ -1142,7 +1142,7 @@ SYSCALL_DEFINE5(mq_timedsend, mqd_t, mqdes, const char __user *, u_msg_ptr, | |||
| 1142 | 1142 | ||
| 1143 | SYSCALL_DEFINE5(mq_timedreceive, mqd_t, mqdes, char __user *, u_msg_ptr, | 1143 | SYSCALL_DEFINE5(mq_timedreceive, mqd_t, mqdes, char __user *, u_msg_ptr, |
| 1144 | size_t, msg_len, unsigned int __user *, u_msg_prio, | 1144 | size_t, msg_len, unsigned int __user *, u_msg_prio, |
| 1145 | const struct timespec __user *, u_abs_timeout) | 1145 | const struct __kernel_timespec __user *, u_abs_timeout) |
| 1146 | { | 1146 | { |
| 1147 | struct timespec64 ts, *p = NULL; | 1147 | struct timespec64 ts, *p = NULL; |
| 1148 | if (u_abs_timeout) { | 1148 | if (u_abs_timeout) { |
| @@ -1420,6 +1420,47 @@ COMPAT_SYSCALL_DEFINE4(mq_open, const char __user *, u_name, | |||
| 1420 | return do_mq_open(u_name, oflag, mode, p); | 1420 | return do_mq_open(u_name, oflag, mode, p); |
| 1421 | } | 1421 | } |
| 1422 | 1422 | ||
| 1423 | COMPAT_SYSCALL_DEFINE2(mq_notify, mqd_t, mqdes, | ||
| 1424 | const struct compat_sigevent __user *, u_notification) | ||
| 1425 | { | ||
| 1426 | struct sigevent n, *p = NULL; | ||
| 1427 | if (u_notification) { | ||
| 1428 | if (get_compat_sigevent(&n, u_notification)) | ||
| 1429 | return -EFAULT; | ||
| 1430 | if (n.sigev_notify == SIGEV_THREAD) | ||
| 1431 | n.sigev_value.sival_ptr = compat_ptr(n.sigev_value.sival_int); | ||
| 1432 | p = &n; | ||
| 1433 | } | ||
| 1434 | return do_mq_notify(mqdes, p); | ||
| 1435 | } | ||
| 1436 | |||
| 1437 | COMPAT_SYSCALL_DEFINE3(mq_getsetattr, mqd_t, mqdes, | ||
| 1438 | const struct compat_mq_attr __user *, u_mqstat, | ||
| 1439 | struct compat_mq_attr __user *, u_omqstat) | ||
| 1440 | { | ||
| 1441 | int ret; | ||
| 1442 | struct mq_attr mqstat, omqstat; | ||
| 1443 | struct mq_attr *new = NULL, *old = NULL; | ||
| 1444 | |||
| 1445 | if (u_mqstat) { | ||
| 1446 | new = &mqstat; | ||
| 1447 | if (get_compat_mq_attr(new, u_mqstat)) | ||
| 1448 | return -EFAULT; | ||
| 1449 | } | ||
| 1450 | if (u_omqstat) | ||
| 1451 | old = &omqstat; | ||
| 1452 | |||
| 1453 | ret = do_mq_getsetattr(mqdes, new, old); | ||
| 1454 | if (ret || !old) | ||
| 1455 | return ret; | ||
| 1456 | |||
| 1457 | if (put_compat_mq_attr(old, u_omqstat)) | ||
| 1458 | return -EFAULT; | ||
| 1459 | return 0; | ||
| 1460 | } | ||
| 1461 | #endif | ||
| 1462 | |||
| 1463 | #ifdef CONFIG_COMPAT_32BIT_TIME | ||
| 1423 | static int compat_prepare_timeout(const struct compat_timespec __user *p, | 1464 | static int compat_prepare_timeout(const struct compat_timespec __user *p, |
| 1424 | struct timespec64 *ts) | 1465 | struct timespec64 *ts) |
| 1425 | { | 1466 | { |
| @@ -1459,45 +1500,6 @@ COMPAT_SYSCALL_DEFINE5(mq_timedreceive, mqd_t, mqdes, | |||
| 1459 | } | 1500 | } |
| 1460 | return do_mq_timedreceive(mqdes, u_msg_ptr, msg_len, u_msg_prio, p); | 1501 | return do_mq_timedreceive(mqdes, u_msg_ptr, msg_len, u_msg_prio, p); |
| 1461 | } | 1502 | } |
| 1462 | |||
| 1463 | COMPAT_SYSCALL_DEFINE2(mq_notify, mqd_t, mqdes, | ||
| 1464 | const struct compat_sigevent __user *, u_notification) | ||
| 1465 | { | ||
| 1466 | struct sigevent n, *p = NULL; | ||
| 1467 | if (u_notification) { | ||
| 1468 | if (get_compat_sigevent(&n, u_notification)) | ||
| 1469 | return -EFAULT; | ||
| 1470 | if (n.sigev_notify == SIGEV_THREAD) | ||
| 1471 | n.sigev_value.sival_ptr = compat_ptr(n.sigev_value.sival_int); | ||
| 1472 | p = &n; | ||
| 1473 | } | ||
| 1474 | return do_mq_notify(mqdes, p); | ||
| 1475 | } | ||
| 1476 | |||
| 1477 | COMPAT_SYSCALL_DEFINE3(mq_getsetattr, mqd_t, mqdes, | ||
| 1478 | const struct compat_mq_attr __user *, u_mqstat, | ||
| 1479 | struct compat_mq_attr __user *, u_omqstat) | ||
| 1480 | { | ||
| 1481 | int ret; | ||
| 1482 | struct mq_attr mqstat, omqstat; | ||
| 1483 | struct mq_attr *new = NULL, *old = NULL; | ||
| 1484 | |||
| 1485 | if (u_mqstat) { | ||
| 1486 | new = &mqstat; | ||
| 1487 | if (get_compat_mq_attr(new, u_mqstat)) | ||
| 1488 | return -EFAULT; | ||
| 1489 | } | ||
| 1490 | if (u_omqstat) | ||
| 1491 | old = &omqstat; | ||
| 1492 | |||
| 1493 | ret = do_mq_getsetattr(mqdes, new, old); | ||
| 1494 | if (ret || !old) | ||
| 1495 | return ret; | ||
| 1496 | |||
| 1497 | if (put_compat_mq_attr(old, u_omqstat)) | ||
| 1498 | return -EFAULT; | ||
| 1499 | return 0; | ||
| 1500 | } | ||
| 1501 | #endif | 1503 | #endif |
| 1502 | 1504 | ||
| 1503 | static const struct inode_operations mqueue_dir_inode_operations = { | 1505 | static const struct inode_operations mqueue_dir_inode_operations = { |
| @@ -537,6 +537,11 @@ static int msgctl_stat(struct ipc_namespace *ns, int msqid, | |||
| 537 | p->msg_stime = msq->q_stime; | 537 | p->msg_stime = msq->q_stime; |
| 538 | p->msg_rtime = msq->q_rtime; | 538 | p->msg_rtime = msq->q_rtime; |
| 539 | p->msg_ctime = msq->q_ctime; | 539 | p->msg_ctime = msq->q_ctime; |
| 540 | #ifndef CONFIG_64BIT | ||
| 541 | p->msg_stime_high = msq->q_stime >> 32; | ||
| 542 | p->msg_rtime_high = msq->q_rtime >> 32; | ||
| 543 | p->msg_ctime_high = msq->q_ctime >> 32; | ||
| 544 | #endif | ||
| 540 | p->msg_cbytes = msq->q_cbytes; | 545 | p->msg_cbytes = msq->q_cbytes; |
| 541 | p->msg_qnum = msq->q_qnum; | 546 | p->msg_qnum = msq->q_qnum; |
| 542 | p->msg_qbytes = msq->q_qbytes; | 547 | p->msg_qbytes = msq->q_qbytes; |
| @@ -646,9 +651,12 @@ static int copy_compat_msqid_to_user(void __user *buf, struct msqid64_ds *in, | |||
| 646 | struct compat_msqid64_ds v; | 651 | struct compat_msqid64_ds v; |
| 647 | memset(&v, 0, sizeof(v)); | 652 | memset(&v, 0, sizeof(v)); |
| 648 | to_compat_ipc64_perm(&v.msg_perm, &in->msg_perm); | 653 | to_compat_ipc64_perm(&v.msg_perm, &in->msg_perm); |
| 649 | v.msg_stime = in->msg_stime; | 654 | v.msg_stime = lower_32_bits(in->msg_stime); |
| 650 | v.msg_rtime = in->msg_rtime; | 655 | v.msg_stime_high = upper_32_bits(in->msg_stime); |
| 651 | v.msg_ctime = in->msg_ctime; | 656 | v.msg_rtime = lower_32_bits(in->msg_rtime); |
| 657 | v.msg_rtime_high = upper_32_bits(in->msg_rtime); | ||
| 658 | v.msg_ctime = lower_32_bits(in->msg_ctime); | ||
| 659 | v.msg_ctime_high = upper_32_bits(in->msg_ctime); | ||
| 652 | v.msg_cbytes = in->msg_cbytes; | 660 | v.msg_cbytes = in->msg_cbytes; |
| 653 | v.msg_qnum = in->msg_qnum; | 661 | v.msg_qnum = in->msg_qnum; |
| 654 | v.msg_qbytes = in->msg_qbytes; | 662 | v.msg_qbytes = in->msg_qbytes; |
| @@ -758,7 +766,7 @@ static inline int pipelined_send(struct msg_queue *msq, struct msg_msg *msg, | |||
| 758 | WRITE_ONCE(msr->r_msg, ERR_PTR(-E2BIG)); | 766 | WRITE_ONCE(msr->r_msg, ERR_PTR(-E2BIG)); |
| 759 | } else { | 767 | } else { |
| 760 | ipc_update_pid(&msq->q_lrpid, task_pid(msr->r_tsk)); | 768 | ipc_update_pid(&msq->q_lrpid, task_pid(msr->r_tsk)); |
| 761 | msq->q_rtime = get_seconds(); | 769 | msq->q_rtime = ktime_get_real_seconds(); |
| 762 | 770 | ||
| 763 | wake_q_add(wake_q, msr->r_tsk); | 771 | wake_q_add(wake_q, msr->r_tsk); |
| 764 | WRITE_ONCE(msr->r_msg, msg); | 772 | WRITE_ONCE(msr->r_msg, msg); |
| @@ -859,7 +867,7 @@ static long do_msgsnd(int msqid, long mtype, void __user *mtext, | |||
| 859 | } | 867 | } |
| 860 | 868 | ||
| 861 | ipc_update_pid(&msq->q_lspid, task_tgid(current)); | 869 | ipc_update_pid(&msq->q_lspid, task_tgid(current)); |
| 862 | msq->q_stime = get_seconds(); | 870 | msq->q_stime = ktime_get_real_seconds(); |
| 863 | 871 | ||
| 864 | if (!pipelined_send(msq, msg, &wake_q)) { | 872 | if (!pipelined_send(msq, msg, &wake_q)) { |
| 865 | /* no one is waiting for this message, enqueue it */ | 873 | /* no one is waiting for this message, enqueue it */ |
| @@ -1087,7 +1095,7 @@ static long do_msgrcv(int msqid, void __user *buf, size_t bufsz, long msgtyp, in | |||
| 1087 | 1095 | ||
| 1088 | list_del(&msg->m_list); | 1096 | list_del(&msg->m_list); |
| 1089 | msq->q_qnum--; | 1097 | msq->q_qnum--; |
| 1090 | msq->q_rtime = get_seconds(); | 1098 | msq->q_rtime = ktime_get_real_seconds(); |
| 1091 | ipc_update_pid(&msq->q_lrpid, task_tgid(current)); | 1099 | ipc_update_pid(&msq->q_lrpid, task_tgid(current)); |
| 1092 | msq->q_cbytes -= msg->m_ts; | 1100 | msq->q_cbytes -= msg->m_ts; |
| 1093 | atomic_sub(msg->m_ts, &ns->msg_bytes); | 1101 | atomic_sub(msg->m_ts, &ns->msg_bytes); |
| @@ -70,6 +70,7 @@ | |||
| 70 | * The worst-case behavior is nevertheless O(N^2) for N wakeups. | 70 | * The worst-case behavior is nevertheless O(N^2) for N wakeups. |
| 71 | */ | 71 | */ |
| 72 | 72 | ||
| 73 | #include <linux/compat.h> | ||
| 73 | #include <linux/slab.h> | 74 | #include <linux/slab.h> |
| 74 | #include <linux/spinlock.h> | 75 | #include <linux/spinlock.h> |
| 75 | #include <linux/init.h> | 76 | #include <linux/init.h> |
| @@ -104,7 +105,7 @@ struct sem { | |||
| 104 | /* that alter the semaphore */ | 105 | /* that alter the semaphore */ |
| 105 | struct list_head pending_const; /* pending single-sop operations */ | 106 | struct list_head pending_const; /* pending single-sop operations */ |
| 106 | /* that do not alter the semaphore*/ | 107 | /* that do not alter the semaphore*/ |
| 107 | time_t sem_otime; /* candidate for sem_otime */ | 108 | time64_t sem_otime; /* candidate for sem_otime */ |
| 108 | } ____cacheline_aligned_in_smp; | 109 | } ____cacheline_aligned_in_smp; |
| 109 | 110 | ||
| 110 | /* One sem_array data structure for each set of semaphores in the system. */ | 111 | /* One sem_array data structure for each set of semaphores in the system. */ |
| @@ -984,10 +985,10 @@ again: | |||
| 984 | static void set_semotime(struct sem_array *sma, struct sembuf *sops) | 985 | static void set_semotime(struct sem_array *sma, struct sembuf *sops) |
| 985 | { | 986 | { |
| 986 | if (sops == NULL) { | 987 | if (sops == NULL) { |
| 987 | sma->sems[0].sem_otime = get_seconds(); | 988 | sma->sems[0].sem_otime = ktime_get_real_seconds(); |
| 988 | } else { | 989 | } else { |
| 989 | sma->sems[sops[0].sem_num].sem_otime = | 990 | sma->sems[sops[0].sem_num].sem_otime = |
| 990 | get_seconds(); | 991 | ktime_get_real_seconds(); |
| 991 | } | 992 | } |
| 992 | } | 993 | } |
| 993 | 994 | ||
| @@ -1214,6 +1215,7 @@ static int semctl_stat(struct ipc_namespace *ns, int semid, | |||
| 1214 | int cmd, struct semid64_ds *semid64) | 1215 | int cmd, struct semid64_ds *semid64) |
| 1215 | { | 1216 | { |
| 1216 | struct sem_array *sma; | 1217 | struct sem_array *sma; |
| 1218 | time64_t semotime; | ||
| 1217 | int id = 0; | 1219 | int id = 0; |
| 1218 | int err; | 1220 | int err; |
| 1219 | 1221 | ||
| @@ -1257,8 +1259,13 @@ static int semctl_stat(struct ipc_namespace *ns, int semid, | |||
| 1257 | } | 1259 | } |
| 1258 | 1260 | ||
| 1259 | kernel_to_ipc64_perm(&sma->sem_perm, &semid64->sem_perm); | 1261 | kernel_to_ipc64_perm(&sma->sem_perm, &semid64->sem_perm); |
| 1260 | semid64->sem_otime = get_semotime(sma); | 1262 | semotime = get_semotime(sma); |
| 1263 | semid64->sem_otime = semotime; | ||
| 1261 | semid64->sem_ctime = sma->sem_ctime; | 1264 | semid64->sem_ctime = sma->sem_ctime; |
| 1265 | #ifndef CONFIG_64BIT | ||
| 1266 | semid64->sem_otime_high = semotime >> 32; | ||
| 1267 | semid64->sem_ctime_high = sma->sem_ctime >> 32; | ||
| 1268 | #endif | ||
| 1262 | semid64->sem_nsems = sma->sem_nsems; | 1269 | semid64->sem_nsems = sma->sem_nsems; |
| 1263 | 1270 | ||
| 1264 | ipc_unlock_object(&sma->sem_perm); | 1271 | ipc_unlock_object(&sma->sem_perm); |
| @@ -1704,8 +1711,10 @@ static int copy_compat_semid_to_user(void __user *buf, struct semid64_ds *in, | |||
| 1704 | struct compat_semid64_ds v; | 1711 | struct compat_semid64_ds v; |
| 1705 | memset(&v, 0, sizeof(v)); | 1712 | memset(&v, 0, sizeof(v)); |
| 1706 | to_compat_ipc64_perm(&v.sem_perm, &in->sem_perm); | 1713 | to_compat_ipc64_perm(&v.sem_perm, &in->sem_perm); |
| 1707 | v.sem_otime = in->sem_otime; | 1714 | v.sem_otime = lower_32_bits(in->sem_otime); |
| 1708 | v.sem_ctime = in->sem_ctime; | 1715 | v.sem_otime_high = upper_32_bits(in->sem_otime); |
| 1716 | v.sem_ctime = lower_32_bits(in->sem_ctime); | ||
| 1717 | v.sem_ctime_high = upper_32_bits(in->sem_ctime); | ||
| 1709 | v.sem_nsems = in->sem_nsems; | 1718 | v.sem_nsems = in->sem_nsems; |
| 1710 | return copy_to_user(buf, &v, sizeof(v)); | 1719 | return copy_to_user(buf, &v, sizeof(v)); |
| 1711 | } else { | 1720 | } else { |
| @@ -2168,7 +2177,7 @@ out_free: | |||
| 2168 | } | 2177 | } |
| 2169 | 2178 | ||
| 2170 | long ksys_semtimedop(int semid, struct sembuf __user *tsops, | 2179 | long ksys_semtimedop(int semid, struct sembuf __user *tsops, |
| 2171 | unsigned int nsops, const struct timespec __user *timeout) | 2180 | unsigned int nsops, const struct __kernel_timespec __user *timeout) |
| 2172 | { | 2181 | { |
| 2173 | if (timeout) { | 2182 | if (timeout) { |
| 2174 | struct timespec64 ts; | 2183 | struct timespec64 ts; |
| @@ -2180,12 +2189,12 @@ long ksys_semtimedop(int semid, struct sembuf __user *tsops, | |||
| 2180 | } | 2189 | } |
| 2181 | 2190 | ||
| 2182 | SYSCALL_DEFINE4(semtimedop, int, semid, struct sembuf __user *, tsops, | 2191 | SYSCALL_DEFINE4(semtimedop, int, semid, struct sembuf __user *, tsops, |
| 2183 | unsigned int, nsops, const struct timespec __user *, timeout) | 2192 | unsigned int, nsops, const struct __kernel_timespec __user *, timeout) |
| 2184 | { | 2193 | { |
| 2185 | return ksys_semtimedop(semid, tsops, nsops, timeout); | 2194 | return ksys_semtimedop(semid, tsops, nsops, timeout); |
| 2186 | } | 2195 | } |
| 2187 | 2196 | ||
| 2188 | #ifdef CONFIG_COMPAT | 2197 | #ifdef CONFIG_COMPAT_32BIT_TIME |
| 2189 | long compat_ksys_semtimedop(int semid, struct sembuf __user *tsems, | 2198 | long compat_ksys_semtimedop(int semid, struct sembuf __user *tsems, |
| 2190 | unsigned int nsops, | 2199 | unsigned int nsops, |
| 2191 | const struct compat_timespec __user *timeout) | 2200 | const struct compat_timespec __user *timeout) |
| @@ -1002,6 +1002,11 @@ static int shmctl_stat(struct ipc_namespace *ns, int shmid, | |||
| 1002 | tbuf->shm_atime = shp->shm_atim; | 1002 | tbuf->shm_atime = shp->shm_atim; |
| 1003 | tbuf->shm_dtime = shp->shm_dtim; | 1003 | tbuf->shm_dtime = shp->shm_dtim; |
| 1004 | tbuf->shm_ctime = shp->shm_ctim; | 1004 | tbuf->shm_ctime = shp->shm_ctim; |
| 1005 | #ifndef CONFIG_64BIT | ||
| 1006 | tbuf->shm_atime_high = shp->shm_atim >> 32; | ||
| 1007 | tbuf->shm_dtime_high = shp->shm_dtim >> 32; | ||
| 1008 | tbuf->shm_ctime_high = shp->shm_ctim >> 32; | ||
| 1009 | #endif | ||
| 1005 | tbuf->shm_cpid = pid_vnr(shp->shm_cprid); | 1010 | tbuf->shm_cpid = pid_vnr(shp->shm_cprid); |
| 1006 | tbuf->shm_lpid = pid_vnr(shp->shm_lprid); | 1011 | tbuf->shm_lpid = pid_vnr(shp->shm_lprid); |
| 1007 | tbuf->shm_nattch = shp->shm_nattch; | 1012 | tbuf->shm_nattch = shp->shm_nattch; |
| @@ -1233,9 +1238,12 @@ static int copy_compat_shmid_to_user(void __user *buf, struct shmid64_ds *in, | |||
| 1233 | struct compat_shmid64_ds v; | 1238 | struct compat_shmid64_ds v; |
| 1234 | memset(&v, 0, sizeof(v)); | 1239 | memset(&v, 0, sizeof(v)); |
| 1235 | to_compat_ipc64_perm(&v.shm_perm, &in->shm_perm); | 1240 | to_compat_ipc64_perm(&v.shm_perm, &in->shm_perm); |
| 1236 | v.shm_atime = in->shm_atime; | 1241 | v.shm_atime = lower_32_bits(in->shm_atime); |
| 1237 | v.shm_dtime = in->shm_dtime; | 1242 | v.shm_atime_high = upper_32_bits(in->shm_atime); |
| 1238 | v.shm_ctime = in->shm_ctime; | 1243 | v.shm_dtime = lower_32_bits(in->shm_dtime); |
| 1244 | v.shm_dtime_high = upper_32_bits(in->shm_dtime); | ||
| 1245 | v.shm_ctime = lower_32_bits(in->shm_ctime); | ||
| 1246 | v.shm_ctime_high = upper_32_bits(in->shm_ctime); | ||
| 1239 | v.shm_segsz = in->shm_segsz; | 1247 | v.shm_segsz = in->shm_segsz; |
| 1240 | v.shm_nattch = in->shm_nattch; | 1248 | v.shm_nattch = in->shm_nattch; |
| 1241 | v.shm_cpid = in->shm_cpid; | 1249 | v.shm_cpid = in->shm_cpid; |
diff --git a/ipc/syscall.c b/ipc/syscall.c index 77a883ef2eca..65d405f1ba0c 100644 --- a/ipc/syscall.c +++ b/ipc/syscall.c | |||
| @@ -30,9 +30,14 @@ SYSCALL_DEFINE6(ipc, unsigned int, call, int, first, unsigned long, second, | |||
| 30 | return ksys_semtimedop(first, (struct sembuf __user *)ptr, | 30 | return ksys_semtimedop(first, (struct sembuf __user *)ptr, |
| 31 | second, NULL); | 31 | second, NULL); |
| 32 | case SEMTIMEDOP: | 32 | case SEMTIMEDOP: |
| 33 | return ksys_semtimedop(first, (struct sembuf __user *)ptr, | 33 | if (IS_ENABLED(CONFIG_64BIT) || !IS_ENABLED(CONFIG_64BIT_TIME)) |
| 34 | second, | 34 | return ksys_semtimedop(first, ptr, second, |
| 35 | (const struct timespec __user *)fifth); | 35 | (const struct __kernel_timespec __user *)fifth); |
| 36 | else if (IS_ENABLED(CONFIG_COMPAT_32BIT_TIME)) | ||
| 37 | return compat_ksys_semtimedop(first, ptr, second, | ||
| 38 | (const struct compat_timespec __user *)fifth); | ||
| 39 | else | ||
| 40 | return -ENOSYS; | ||
| 36 | 41 | ||
| 37 | case SEMGET: | 42 | case SEMGET: |
| 38 | return ksys_semget(first, second, third); | 43 | return ksys_semget(first, second, third); |
| @@ -130,6 +135,8 @@ COMPAT_SYSCALL_DEFINE6(ipc, u32, call, int, first, int, second, | |||
| 130 | /* struct sembuf is the same on 32 and 64bit :)) */ | 135 | /* struct sembuf is the same on 32 and 64bit :)) */ |
| 131 | return ksys_semtimedop(first, compat_ptr(ptr), second, NULL); | 136 | return ksys_semtimedop(first, compat_ptr(ptr), second, NULL); |
| 132 | case SEMTIMEDOP: | 137 | case SEMTIMEDOP: |
| 138 | if (!IS_ENABLED(CONFIG_COMPAT_32BIT_TIME)) | ||
| 139 | return -ENOSYS; | ||
| 133 | return compat_ksys_semtimedop(first, compat_ptr(ptr), second, | 140 | return compat_ksys_semtimedop(first, compat_ptr(ptr), second, |
| 134 | compat_ptr(fifth)); | 141 | compat_ptr(fifth)); |
| 135 | case SEMGET: | 142 | case SEMGET: |
diff --git a/ipc/util.h b/ipc/util.h index acc5159e96d0..0aba3230d007 100644 --- a/ipc/util.h +++ b/ipc/util.h | |||
| @@ -251,7 +251,7 @@ static inline int compat_ipc_parse_version(int *cmd) | |||
| 251 | /* for __ARCH_WANT_SYS_IPC */ | 251 | /* for __ARCH_WANT_SYS_IPC */ |
| 252 | long ksys_semtimedop(int semid, struct sembuf __user *tsops, | 252 | long ksys_semtimedop(int semid, struct sembuf __user *tsops, |
| 253 | unsigned int nsops, | 253 | unsigned int nsops, |
| 254 | const struct timespec __user *timeout); | 254 | const struct __kernel_timespec __user *timeout); |
| 255 | long ksys_semget(key_t key, int nsems, int semflg); | 255 | long ksys_semget(key_t key, int nsems, int semflg); |
| 256 | long ksys_semctl(int semid, int semnum, int cmd, unsigned long arg); | 256 | long ksys_semctl(int semid, int semnum, int cmd, unsigned long arg); |
| 257 | long ksys_msgget(key_t key, int msgflg); | 257 | long ksys_msgget(key_t key, int msgflg); |
| @@ -265,10 +265,10 @@ long ksys_shmdt(char __user *shmaddr); | |||
| 265 | long ksys_shmctl(int shmid, int cmd, struct shmid_ds __user *buf); | 265 | long ksys_shmctl(int shmid, int cmd, struct shmid_ds __user *buf); |
| 266 | 266 | ||
| 267 | /* for CONFIG_ARCH_WANT_OLD_COMPAT_IPC */ | 267 | /* for CONFIG_ARCH_WANT_OLD_COMPAT_IPC */ |
| 268 | #ifdef CONFIG_COMPAT | ||
| 269 | long compat_ksys_semtimedop(int semid, struct sembuf __user *tsems, | 268 | long compat_ksys_semtimedop(int semid, struct sembuf __user *tsems, |
| 270 | unsigned int nsops, | 269 | unsigned int nsops, |
| 271 | const struct compat_timespec __user *timeout); | 270 | const struct compat_timespec __user *timeout); |
| 271 | #ifdef CONFIG_COMPAT | ||
| 272 | long compat_ksys_semctl(int semid, int semnum, int cmd, int arg); | 272 | long compat_ksys_semctl(int semid, int semnum, int cmd, int arg); |
| 273 | long compat_ksys_msgctl(int msqid, int cmd, void __user *uptr); | 273 | long compat_ksys_msgctl(int msqid, int cmd, void __user *uptr); |
| 274 | long compat_ksys_msgrcv(int msqid, compat_uptr_t msgp, compat_ssize_t msgsz, | 274 | long compat_ksys_msgrcv(int msqid, compat_uptr_t msgp, compat_ssize_t msgsz, |
diff --git a/kernel/time/time.c b/kernel/time/time.c index ccd751e95fcb..6fa99213fc72 100644 --- a/kernel/time/time.c +++ b/kernel/time/time.c | |||
| @@ -407,7 +407,6 @@ time64_t mktime64(const unsigned int year0, const unsigned int mon0, | |||
| 407 | } | 407 | } |
| 408 | EXPORT_SYMBOL(mktime64); | 408 | EXPORT_SYMBOL(mktime64); |
| 409 | 409 | ||
| 410 | #if __BITS_PER_LONG == 32 | ||
| 411 | /** | 410 | /** |
| 412 | * set_normalized_timespec - set timespec sec and nsec parts and normalize | 411 | * set_normalized_timespec - set timespec sec and nsec parts and normalize |
| 413 | * | 412 | * |
| @@ -468,7 +467,6 @@ struct timespec ns_to_timespec(const s64 nsec) | |||
| 468 | return ts; | 467 | return ts; |
| 469 | } | 468 | } |
| 470 | EXPORT_SYMBOL(ns_to_timespec); | 469 | EXPORT_SYMBOL(ns_to_timespec); |
| 471 | #endif | ||
| 472 | 470 | ||
| 473 | /** | 471 | /** |
| 474 | * ns_to_timeval - Convert nanoseconds to timeval | 472 | * ns_to_timeval - Convert nanoseconds to timeval |
diff --git a/kernel/time/timekeeping.c b/kernel/time/timekeeping.c index 49cbceef5deb..4786df904c22 100644 --- a/kernel/time/timekeeping.c +++ b/kernel/time/timekeeping.c | |||
| @@ -705,18 +705,19 @@ static void timekeeping_forward_now(struct timekeeper *tk) | |||
| 705 | } | 705 | } |
| 706 | 706 | ||
| 707 | /** | 707 | /** |
| 708 | * __getnstimeofday64 - Returns the time of day in a timespec64. | 708 | * ktime_get_real_ts64 - Returns the time of day in a timespec64. |
| 709 | * @ts: pointer to the timespec to be set | 709 | * @ts: pointer to the timespec to be set |
| 710 | * | 710 | * |
| 711 | * Updates the time of day in the timespec. | 711 | * Returns the time of day in a timespec64 (WARN if suspended). |
| 712 | * Returns 0 on success, or -ve when suspended (timespec will be undefined). | ||
| 713 | */ | 712 | */ |
| 714 | int __getnstimeofday64(struct timespec64 *ts) | 713 | void ktime_get_real_ts64(struct timespec64 *ts) |
| 715 | { | 714 | { |
| 716 | struct timekeeper *tk = &tk_core.timekeeper; | 715 | struct timekeeper *tk = &tk_core.timekeeper; |
| 717 | unsigned long seq; | 716 | unsigned long seq; |
| 718 | u64 nsecs; | 717 | u64 nsecs; |
| 719 | 718 | ||
| 719 | WARN_ON(timekeeping_suspended); | ||
| 720 | |||
| 720 | do { | 721 | do { |
| 721 | seq = read_seqcount_begin(&tk_core.seq); | 722 | seq = read_seqcount_begin(&tk_core.seq); |
| 722 | 723 | ||
| @@ -727,28 +728,8 @@ int __getnstimeofday64(struct timespec64 *ts) | |||
| 727 | 728 | ||
| 728 | ts->tv_nsec = 0; | 729 | ts->tv_nsec = 0; |
| 729 | timespec64_add_ns(ts, nsecs); | 730 | timespec64_add_ns(ts, nsecs); |
| 730 | |||
| 731 | /* | ||
| 732 | * Do not bail out early, in case there were callers still using | ||
| 733 | * the value, even in the face of the WARN_ON. | ||
| 734 | */ | ||
| 735 | if (unlikely(timekeeping_suspended)) | ||
| 736 | return -EAGAIN; | ||
| 737 | return 0; | ||
| 738 | } | ||
| 739 | EXPORT_SYMBOL(__getnstimeofday64); | ||
| 740 | |||
| 741 | /** | ||
| 742 | * getnstimeofday64 - Returns the time of day in a timespec64. | ||
| 743 | * @ts: pointer to the timespec64 to be set | ||
| 744 | * | ||
| 745 | * Returns the time of day in a timespec64 (WARN if suspended). | ||
| 746 | */ | ||
| 747 | void getnstimeofday64(struct timespec64 *ts) | ||
| 748 | { | ||
| 749 | WARN_ON(__getnstimeofday64(ts)); | ||
| 750 | } | 731 | } |
| 751 | EXPORT_SYMBOL(getnstimeofday64); | 732 | EXPORT_SYMBOL(ktime_get_real_ts64); |
| 752 | 733 | ||
| 753 | ktime_t ktime_get(void) | 734 | ktime_t ktime_get(void) |
| 754 | { | 735 | { |
| @@ -814,6 +795,25 @@ ktime_t ktime_get_with_offset(enum tk_offsets offs) | |||
| 814 | } | 795 | } |
| 815 | EXPORT_SYMBOL_GPL(ktime_get_with_offset); | 796 | EXPORT_SYMBOL_GPL(ktime_get_with_offset); |
| 816 | 797 | ||
| 798 | ktime_t ktime_get_coarse_with_offset(enum tk_offsets offs) | ||
| 799 | { | ||
| 800 | struct timekeeper *tk = &tk_core.timekeeper; | ||
| 801 | unsigned int seq; | ||
| 802 | ktime_t base, *offset = offsets[offs]; | ||
| 803 | |||
| 804 | WARN_ON(timekeeping_suspended); | ||
| 805 | |||
| 806 | do { | ||
| 807 | seq = read_seqcount_begin(&tk_core.seq); | ||
| 808 | base = ktime_add(tk->tkr_mono.base, *offset); | ||
| 809 | |||
| 810 | } while (read_seqcount_retry(&tk_core.seq, seq)); | ||
| 811 | |||
| 812 | return base; | ||
| 813 | |||
| 814 | } | ||
| 815 | EXPORT_SYMBOL_GPL(ktime_get_coarse_with_offset); | ||
| 816 | |||
| 817 | /** | 817 | /** |
| 818 | * ktime_mono_to_any() - convert mononotic time to any other time | 818 | * ktime_mono_to_any() - convert mononotic time to any other time |
| 819 | * @tmono: time to convert. | 819 | * @tmono: time to convert. |
| @@ -1410,12 +1410,12 @@ int timekeeping_notify(struct clocksource *clock) | |||
| 1410 | } | 1410 | } |
| 1411 | 1411 | ||
| 1412 | /** | 1412 | /** |
| 1413 | * getrawmonotonic64 - Returns the raw monotonic time in a timespec | 1413 | * ktime_get_raw_ts64 - Returns the raw monotonic time in a timespec |
| 1414 | * @ts: pointer to the timespec64 to be set | 1414 | * @ts: pointer to the timespec64 to be set |
| 1415 | * | 1415 | * |
| 1416 | * Returns the raw monotonic time (completely un-modified by ntp) | 1416 | * Returns the raw monotonic time (completely un-modified by ntp) |
| 1417 | */ | 1417 | */ |
| 1418 | void getrawmonotonic64(struct timespec64 *ts) | 1418 | void ktime_get_raw_ts64(struct timespec64 *ts) |
| 1419 | { | 1419 | { |
| 1420 | struct timekeeper *tk = &tk_core.timekeeper; | 1420 | struct timekeeper *tk = &tk_core.timekeeper; |
| 1421 | unsigned long seq; | 1421 | unsigned long seq; |
| @@ -1431,7 +1431,7 @@ void getrawmonotonic64(struct timespec64 *ts) | |||
| 1431 | ts->tv_nsec = 0; | 1431 | ts->tv_nsec = 0; |
| 1432 | timespec64_add_ns(ts, nsecs); | 1432 | timespec64_add_ns(ts, nsecs); |
| 1433 | } | 1433 | } |
| 1434 | EXPORT_SYMBOL(getrawmonotonic64); | 1434 | EXPORT_SYMBOL(ktime_get_raw_ts64); |
| 1435 | 1435 | ||
| 1436 | 1436 | ||
| 1437 | /** | 1437 | /** |
| @@ -2133,23 +2133,20 @@ unsigned long get_seconds(void) | |||
| 2133 | } | 2133 | } |
| 2134 | EXPORT_SYMBOL(get_seconds); | 2134 | EXPORT_SYMBOL(get_seconds); |
| 2135 | 2135 | ||
| 2136 | struct timespec64 current_kernel_time64(void) | 2136 | void ktime_get_coarse_real_ts64(struct timespec64 *ts) |
| 2137 | { | 2137 | { |
| 2138 | struct timekeeper *tk = &tk_core.timekeeper; | 2138 | struct timekeeper *tk = &tk_core.timekeeper; |
| 2139 | struct timespec64 now; | ||
| 2140 | unsigned long seq; | 2139 | unsigned long seq; |
| 2141 | 2140 | ||
| 2142 | do { | 2141 | do { |
| 2143 | seq = read_seqcount_begin(&tk_core.seq); | 2142 | seq = read_seqcount_begin(&tk_core.seq); |
| 2144 | 2143 | ||
| 2145 | now = tk_xtime(tk); | 2144 | *ts = tk_xtime(tk); |
| 2146 | } while (read_seqcount_retry(&tk_core.seq, seq)); | 2145 | } while (read_seqcount_retry(&tk_core.seq, seq)); |
| 2147 | |||
| 2148 | return now; | ||
| 2149 | } | 2146 | } |
| 2150 | EXPORT_SYMBOL(current_kernel_time64); | 2147 | EXPORT_SYMBOL(ktime_get_coarse_real_ts64); |
| 2151 | 2148 | ||
| 2152 | struct timespec64 get_monotonic_coarse64(void) | 2149 | void ktime_get_coarse_ts64(struct timespec64 *ts) |
| 2153 | { | 2150 | { |
| 2154 | struct timekeeper *tk = &tk_core.timekeeper; | 2151 | struct timekeeper *tk = &tk_core.timekeeper; |
| 2155 | struct timespec64 now, mono; | 2152 | struct timespec64 now, mono; |
| @@ -2162,12 +2159,10 @@ struct timespec64 get_monotonic_coarse64(void) | |||
| 2162 | mono = tk->wall_to_monotonic; | 2159 | mono = tk->wall_to_monotonic; |
| 2163 | } while (read_seqcount_retry(&tk_core.seq, seq)); | 2160 | } while (read_seqcount_retry(&tk_core.seq, seq)); |
| 2164 | 2161 | ||
| 2165 | set_normalized_timespec64(&now, now.tv_sec + mono.tv_sec, | 2162 | set_normalized_timespec64(ts, now.tv_sec + mono.tv_sec, |
| 2166 | now.tv_nsec + mono.tv_nsec); | 2163 | now.tv_nsec + mono.tv_nsec); |
| 2167 | |||
| 2168 | return now; | ||
| 2169 | } | 2164 | } |
| 2170 | EXPORT_SYMBOL(get_monotonic_coarse64); | 2165 | EXPORT_SYMBOL(ktime_get_coarse_ts64); |
| 2171 | 2166 | ||
| 2172 | /* | 2167 | /* |
| 2173 | * Must hold jiffies_lock | 2168 | * Must hold jiffies_lock |
