--- /dev/null
+From fb3739759474d150a9927b920a80ea2afb4c2a51 Mon Sep 17 00:00:00 2001
+From: Arnd Bergmann <arnd@arndb.de>
+Date: Wed, 18 Apr 2018 22:01:26 +0200
+Subject: asm-generic: Move common compat types to asm-generic/compat.h
+
+From: Arnd Bergmann <arnd@arndb.de>
+
+commit fb3739759474d150a9927b920a80ea2afb4c2a51 upstream.
+
+While converting compat system call handlers to work on 32-bit
+architectures, I found a number of types used in those handlers
+that are identical between all architectures.
+
+Let's move all the identical ones into asm-generic/compat.h to avoid
+having to add even more identical definitions of those types.
+
+For unknown reasons, mips defines __compat_gid32_t, __compat_uid32_t
+and compat_caddr_t as signed, while all others have them unsigned.
+This seems to be a mistake, but I'm leaving it alone here. The other
+types all differ by size or alignment on at least on architecture.
+
+compat_aio_context_t is currently defined in linux/compat.h but
+also needed for compat_sys_io_getevents(), so let's move it into
+the same place.
+
+While we still have not decided whether the 32-bit time handling
+will always use the compat syscalls, or in which form, I think this
+is a useful cleanup that we can merge regardless.
+
+Reviewed-by: Christoph Hellwig <hch@lst.de>
+Signed-off-by: Arnd Bergmann <arnd@arndb.de>
+Cc: Frank Scheiner <frank.scheiner@web.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ arch/arm64/include/asm/compat.h | 20 ++------------------
+ arch/mips/include/asm/compat.h | 22 ++--------------------
+ arch/parisc/include/asm/compat.h | 18 ++----------------
+ arch/powerpc/include/asm/compat.h | 18 ++----------------
+ arch/s390/include/asm/compat.h | 18 ++----------------
+ arch/sparc/include/asm/compat.h | 19 ++-----------------
+ arch/x86/include/asm/compat.h | 19 ++-----------------
+ include/asm-generic/compat.h | 24 +++++++++++++++++++++++-
+ include/linux/compat.h | 2 --
+ 9 files changed, 37 insertions(+), 123 deletions(-)
+
+--- a/arch/arm64/include/asm/compat.h
++++ b/arch/arm64/include/asm/compat.h
+@@ -25,6 +25,8 @@
+ #include <linux/sched.h>
+ #include <linux/sched/task_stack.h>
+
++#include <asm-generic/compat.h>
++
+ #define COMPAT_USER_HZ 100
+ #ifdef __AARCH64EB__
+ #define COMPAT_UTS_MACHINE "armv8b\0\0"
+@@ -32,10 +34,6 @@
+ #define COMPAT_UTS_MACHINE "armv8l\0\0"
+ #endif
+
+-typedef u32 compat_size_t;
+-typedef s32 compat_ssize_t;
+-typedef s32 compat_clock_t;
+-typedef s32 compat_pid_t;
+ typedef u16 __compat_uid_t;
+ typedef u16 __compat_gid_t;
+ typedef u16 __compat_uid16_t;
+@@ -43,27 +41,13 @@ typedef u16 __compat_gid16_t;
+ typedef u32 __compat_uid32_t;
+ typedef u32 __compat_gid32_t;
+ typedef u16 compat_mode_t;
+-typedef u32 compat_ino_t;
+ typedef u32 compat_dev_t;
+-typedef s32 compat_off_t;
+-typedef s64 compat_loff_t;
+ typedef s32 compat_nlink_t;
+ typedef u16 compat_ipc_pid_t;
+-typedef s32 compat_daddr_t;
+ typedef u32 compat_caddr_t;
+ typedef __kernel_fsid_t compat_fsid_t;
+-typedef s32 compat_key_t;
+-typedef s32 compat_timer_t;
+-
+-typedef s16 compat_short_t;
+-typedef s32 compat_int_t;
+-typedef s32 compat_long_t;
+ typedef s64 compat_s64;
+-typedef u16 compat_ushort_t;
+-typedef u32 compat_uint_t;
+-typedef u32 compat_ulong_t;
+ typedef u64 compat_u64;
+-typedef u32 compat_uptr_t;
+
+ struct compat_stat {
+ #ifdef __AARCH64EB__
+--- a/arch/mips/include/asm/compat.h
++++ b/arch/mips/include/asm/compat.h
+@@ -9,43 +9,25 @@
+ #include <asm/page.h>
+ #include <asm/ptrace.h>
+
++#include <asm-generic/compat.h>
++
+ #define COMPAT_USER_HZ 100
+ #define COMPAT_UTS_MACHINE "mips\0\0\0"
+
+-typedef u32 compat_size_t;
+-typedef s32 compat_ssize_t;
+-typedef s32 compat_clock_t;
+-typedef s32 compat_suseconds_t;
+-
+-typedef s32 compat_pid_t;
+ typedef s32 __compat_uid_t;
+ typedef s32 __compat_gid_t;
+ typedef __compat_uid_t __compat_uid32_t;
+ typedef __compat_gid_t __compat_gid32_t;
+ typedef u32 compat_mode_t;
+-typedef u32 compat_ino_t;
+ typedef u32 compat_dev_t;
+-typedef s32 compat_off_t;
+-typedef s64 compat_loff_t;
+ typedef u32 compat_nlink_t;
+ typedef s32 compat_ipc_pid_t;
+-typedef s32 compat_daddr_t;
+ typedef s32 compat_caddr_t;
+ typedef struct {
+ s32 val[2];
+ } compat_fsid_t;
+-typedef s32 compat_timer_t;
+-typedef s32 compat_key_t;
+-
+-typedef s16 compat_short_t;
+-typedef s32 compat_int_t;
+-typedef s32 compat_long_t;
+ typedef s64 compat_s64;
+-typedef u16 compat_ushort_t;
+-typedef u32 compat_uint_t;
+-typedef u32 compat_ulong_t;
+ typedef u64 compat_u64;
+-typedef u32 compat_uptr_t;
+
+ struct compat_stat {
+ compat_dev_t st_dev;
+--- a/arch/parisc/include/asm/compat.h
++++ b/arch/parisc/include/asm/compat.h
+@@ -8,36 +8,22 @@
+ #include <linux/sched.h>
+ #include <linux/thread_info.h>
+
++#include <asm-generic/compat.h>
++
+ #define COMPAT_USER_HZ 100
+ #define COMPAT_UTS_MACHINE "parisc\0\0"
+
+-typedef u32 compat_size_t;
+-typedef s32 compat_ssize_t;
+-typedef s32 compat_clock_t;
+-typedef s32 compat_pid_t;
+ typedef u32 __compat_uid_t;
+ typedef u32 __compat_gid_t;
+ typedef u32 __compat_uid32_t;
+ typedef u32 __compat_gid32_t;
+ typedef u16 compat_mode_t;
+-typedef u32 compat_ino_t;
+ typedef u32 compat_dev_t;
+-typedef s32 compat_off_t;
+-typedef s64 compat_loff_t;
+ typedef u16 compat_nlink_t;
+ typedef u16 compat_ipc_pid_t;
+-typedef s32 compat_daddr_t;
+ typedef u32 compat_caddr_t;
+-typedef s32 compat_key_t;
+-typedef s32 compat_timer_t;
+-
+-typedef s32 compat_int_t;
+-typedef s32 compat_long_t;
+ typedef s64 compat_s64;
+-typedef u32 compat_uint_t;
+-typedef u32 compat_ulong_t;
+ typedef u64 compat_u64;
+-typedef u32 compat_uptr_t;
+
+ struct compat_stat {
+ compat_dev_t st_dev; /* dev_t is 32 bits on parisc */
+--- a/arch/powerpc/include/asm/compat.h
++++ b/arch/powerpc/include/asm/compat.h
+@@ -8,6 +8,8 @@
+ #include <linux/types.h>
+ #include <linux/sched.h>
+
++#include <asm-generic/compat.h>
++
+ #define COMPAT_USER_HZ 100
+ #ifdef __BIG_ENDIAN__
+ #define COMPAT_UTS_MACHINE "ppc\0\0"
+@@ -15,34 +17,18 @@
+ #define COMPAT_UTS_MACHINE "ppcle\0\0"
+ #endif
+
+-typedef u32 compat_size_t;
+-typedef s32 compat_ssize_t;
+-typedef s32 compat_clock_t;
+-typedef s32 compat_pid_t;
+ typedef u32 __compat_uid_t;
+ typedef u32 __compat_gid_t;
+ typedef u32 __compat_uid32_t;
+ typedef u32 __compat_gid32_t;
+ typedef u32 compat_mode_t;
+-typedef u32 compat_ino_t;
+ typedef u32 compat_dev_t;
+-typedef s32 compat_off_t;
+-typedef s64 compat_loff_t;
+ typedef s16 compat_nlink_t;
+ typedef u16 compat_ipc_pid_t;
+-typedef s32 compat_daddr_t;
+ typedef u32 compat_caddr_t;
+ typedef __kernel_fsid_t compat_fsid_t;
+-typedef s32 compat_key_t;
+-typedef s32 compat_timer_t;
+-
+-typedef s32 compat_int_t;
+-typedef s32 compat_long_t;
+ typedef s64 compat_s64;
+-typedef u32 compat_uint_t;
+-typedef u32 compat_ulong_t;
+ typedef u64 compat_u64;
+-typedef u32 compat_uptr_t;
+
+ struct compat_stat {
+ compat_dev_t st_dev;
+--- a/arch/s390/include/asm/compat.h
++++ b/arch/s390/include/asm/compat.h
+@@ -9,6 +9,8 @@
+ #include <linux/sched/task_stack.h>
+ #include <linux/thread_info.h>
+
++#include <asm-generic/compat.h>
++
+ #define __TYPE_IS_PTR(t) (!__builtin_types_compatible_p( \
+ typeof(0?(__force t)0:0ULL), u64))
+
+@@ -51,34 +53,18 @@
+ #define COMPAT_USER_HZ 100
+ #define COMPAT_UTS_MACHINE "s390\0\0\0\0"
+
+-typedef u32 compat_size_t;
+-typedef s32 compat_ssize_t;
+-typedef s32 compat_clock_t;
+-typedef s32 compat_pid_t;
+ typedef u16 __compat_uid_t;
+ typedef u16 __compat_gid_t;
+ typedef u32 __compat_uid32_t;
+ typedef u32 __compat_gid32_t;
+ typedef u16 compat_mode_t;
+-typedef u32 compat_ino_t;
+ typedef u16 compat_dev_t;
+-typedef s32 compat_off_t;
+-typedef s64 compat_loff_t;
+ typedef u16 compat_nlink_t;
+ typedef u16 compat_ipc_pid_t;
+-typedef s32 compat_daddr_t;
+ typedef u32 compat_caddr_t;
+ typedef __kernel_fsid_t compat_fsid_t;
+-typedef s32 compat_key_t;
+-typedef s32 compat_timer_t;
+-
+-typedef s32 compat_int_t;
+-typedef s32 compat_long_t;
+ typedef s64 compat_s64;
+-typedef u32 compat_uint_t;
+-typedef u32 compat_ulong_t;
+ typedef u64 compat_u64;
+-typedef u32 compat_uptr_t;
+
+ typedef struct {
+ u32 mask;
+--- a/arch/sparc/include/asm/compat.h
++++ b/arch/sparc/include/asm/compat.h
+@@ -6,38 +6,23 @@
+ */
+ #include <linux/types.h>
+
++#include <asm-generic/compat.h>
++
+ #define COMPAT_USER_HZ 100
+ #define COMPAT_UTS_MACHINE "sparc\0\0"
+
+-typedef u32 compat_size_t;
+-typedef s32 compat_ssize_t;
+-typedef s32 compat_clock_t;
+-typedef s32 compat_pid_t;
+ typedef u16 __compat_uid_t;
+ typedef u16 __compat_gid_t;
+ typedef u32 __compat_uid32_t;
+ typedef u32 __compat_gid32_t;
+ typedef u16 compat_mode_t;
+-typedef u32 compat_ino_t;
+ typedef u16 compat_dev_t;
+-typedef s32 compat_off_t;
+-typedef s64 compat_loff_t;
+ typedef s16 compat_nlink_t;
+ typedef u16 compat_ipc_pid_t;
+-typedef s32 compat_daddr_t;
+ typedef u32 compat_caddr_t;
+ typedef __kernel_fsid_t compat_fsid_t;
+-typedef s32 compat_key_t;
+-typedef s32 compat_timer_t;
+-
+-typedef s32 compat_int_t;
+-typedef s32 compat_long_t;
+ typedef s64 compat_s64;
+-typedef u32 compat_uint_t;
+-typedef u32 compat_ulong_t;
+ typedef u64 compat_u64;
+-typedef u32 compat_uptr_t;
+-
+ struct compat_stat {
+ compat_dev_t st_dev;
+ compat_ino_t st_ino;
+--- a/arch/x86/include/asm/compat.h
++++ b/arch/x86/include/asm/compat.h
+@@ -12,38 +12,23 @@
+ #include <asm/user32.h>
+ #include <asm/unistd.h>
+
++#include <asm-generic/compat.h>
++
+ #define COMPAT_USER_HZ 100
+ #define COMPAT_UTS_MACHINE "i686\0\0"
+
+-typedef u32 compat_size_t;
+-typedef s32 compat_ssize_t;
+-typedef s32 compat_clock_t;
+-typedef s32 compat_pid_t;
+ typedef u16 __compat_uid_t;
+ typedef u16 __compat_gid_t;
+ typedef u32 __compat_uid32_t;
+ typedef u32 __compat_gid32_t;
+ typedef u16 compat_mode_t;
+-typedef u32 compat_ino_t;
+ typedef u16 compat_dev_t;
+-typedef s32 compat_off_t;
+-typedef s64 compat_loff_t;
+ typedef u16 compat_nlink_t;
+ typedef u16 compat_ipc_pid_t;
+-typedef s32 compat_daddr_t;
+ typedef u32 compat_caddr_t;
+ typedef __kernel_fsid_t compat_fsid_t;
+-typedef s32 compat_timer_t;
+-typedef s32 compat_key_t;
+-
+-typedef s32 compat_int_t;
+-typedef s32 compat_long_t;
+ typedef s64 __attribute__((aligned(4))) compat_s64;
+-typedef u32 compat_uint_t;
+-typedef u32 compat_ulong_t;
+-typedef u32 compat_u32;
+ typedef u64 __attribute__((aligned(4))) compat_u64;
+-typedef u32 compat_uptr_t;
+
+ struct compat_stat {
+ u32 st_dev;
+--- a/include/asm-generic/compat.h
++++ b/include/asm-generic/compat.h
+@@ -1,3 +1,25 @@
+ /* SPDX-License-Identifier: GPL-2.0 */
++#ifndef __ASM_GENERIC_COMPAT_H
++#define __ASM_GENERIC_COMPAT_H
+
+-/* This is an empty stub for 32-bit-only architectures */
++/* These types are common across all compat ABIs */
++typedef u32 compat_size_t;
++typedef s32 compat_ssize_t;
++typedef s32 compat_clock_t;
++typedef s32 compat_pid_t;
++typedef u32 compat_ino_t;
++typedef s32 compat_off_t;
++typedef s64 compat_loff_t;
++typedef s32 compat_daddr_t;
++typedef s32 compat_timer_t;
++typedef s32 compat_key_t;
++typedef s16 compat_short_t;
++typedef s32 compat_int_t;
++typedef s32 compat_long_t;
++typedef u16 compat_ushort_t;
++typedef u32 compat_uint_t;
++typedef u32 compat_ulong_t;
++typedef u32 compat_uptr_t;
++typedef u32 compat_aio_context_t;
++
++#endif
+--- a/include/linux/compat.h
++++ b/include/linux/compat.h
+@@ -113,8 +113,6 @@ typedef struct compat_sigaltstack {
+ typedef __compat_uid32_t compat_uid_t;
+ typedef __compat_gid32_t compat_gid_t;
+
+-typedef compat_ulong_t compat_aio_context_t;
+-
+ struct compat_sel_arg_struct;
+ struct rusage;
+