Inter-revision diff: patch 3

Comparing v6 (message) to v4 (message)

--- v6
+++ v4
@@ -1,29 +1,77 @@
-From: Christoph Hellwig <hch@lst.de>
+From: Guo Ren <guoren@linux.alibaba.com>
 
-Provide a single common definition for the compat_flock and
-compat_flock64 structures using the same tricks as for the native
-variants.  Another extra define is added for the packing required on
-x86.
+There are 7 64bit architectures that support Linux COMPAT mode to
+run 32bit applications. A lot of definitions are duplicate:
+ - COMPAT_USER_HZ
+ - COMPAT_RLIM_INFINITY
+ - COMPAT_OFF_T_MAX
+ - __compat_uid_t, __compat_uid_t
+ - compat_dev_t
+ - compat_ipc_pid_t
+ - struct compat_flock
+ - struct compat_flock64
+ - struct compat_statfs
+ - struct compat_ipc64_perm, compat_semid64_ds,
+	  compat_msqid64_ds, compat_shmid64_ds
 
-Signed-off-by: Christoph Hellwig <hch@lst.de>
+Cleanup duplicate definitions and merge them into asm-generic.
+
+Signed-off-by: Guo Ren <guoren@linux.alibaba.com>
 Signed-off-by: Guo Ren <guoren@kernel.org>
-Reviewed-by: Arnd Bergmann <arnd@arndb.de>
+Cc: Arnd Bergmann <arnd@arndb.de>
+Cc: Palmer Dabbelt <palmer@dabbelt.com>
 ---
- arch/arm64/include/asm/compat.h   | 16 ----------------
- arch/mips/include/asm/compat.h    | 19 ++-----------------
- arch/parisc/include/asm/compat.h  | 16 ----------------
- arch/powerpc/include/asm/compat.h | 16 ----------------
- arch/s390/include/asm/compat.h    | 16 ----------------
- arch/sparc/include/asm/compat.h   | 18 +-----------------
- arch/x86/include/asm/compat.h     | 20 +++-----------------
- include/linux/compat.h            | 31 +++++++++++++++++++++++++++++++
- 8 files changed, 37 insertions(+), 115 deletions(-)
+ arch/arm64/include/asm/compat.h   | 106 ++-----------------------
+ arch/mips/include/asm/compat.h    |  27 ++-----
+ arch/parisc/include/asm/compat.h  |  45 ++---------
+ arch/powerpc/include/asm/compat.h |  46 ++---------
+ arch/s390/include/asm/compat.h    |  95 +++-------------------
+ arch/sparc/include/asm/compat.h   |  42 ++++------
+ arch/x86/include/asm/compat.h     |  89 +++------------------
+ include/asm-generic/compat.h      | 126 ++++++++++++++++++++++++++++++
+ 8 files changed, 193 insertions(+), 383 deletions(-)
 
 diff --git a/arch/arm64/include/asm/compat.h b/arch/arm64/include/asm/compat.h
-index 276328765408..e0faec1984a1 100644
+index eaa6ca062d89..5b911f3625e8 100644
 --- a/arch/arm64/include/asm/compat.h
 +++ b/arch/arm64/include/asm/compat.h
-@@ -65,22 +65,6 @@ struct compat_stat {
+@@ -8,6 +8,13 @@
+ #define compat_mode_t compat_mode_t
+ typedef u16		compat_mode_t;
+ 
++#define __compat_uid_t	__compat_uid_t
++typedef u16		__compat_uid_t;
++typedef u16		__compat_gid_t;
++
++#define compat_ipc_pid_t compat_ipc_pid_t
++typedef u16		 compat_ipc_pid_t;
++
+ #include <asm-generic/compat.h>
+ 
+ #ifdef CONFIG_COMPAT
+@@ -19,21 +26,15 @@ typedef u16		compat_mode_t;
+ #include <linux/sched.h>
+ #include <linux/sched/task_stack.h>
+ 
+-#define COMPAT_USER_HZ		100
+ #ifdef __AARCH64EB__
+ #define COMPAT_UTS_MACHINE	"armv8b\0\0"
+ #else
+ #define COMPAT_UTS_MACHINE	"armv8l\0\0"
+ #endif
+ 
+-typedef u16		__compat_uid_t;
+-typedef u16		__compat_gid_t;
+ typedef u16		__compat_uid16_t;
+ typedef u16		__compat_gid16_t;
+-typedef u32		compat_dev_t;
+ typedef s32		compat_nlink_t;
+-typedef u16		compat_ipc_pid_t;
+-typedef __kernel_fsid_t	compat_fsid_t;
+ 
+ struct compat_stat {
+ #ifdef __AARCH64EB__
+@@ -65,106 +66,13 @@ struct compat_stat {
  	compat_ulong_t	__unused4[2];
  };
  
@@ -35,6 +83,10 @@
 -	compat_pid_t	l_pid;
 -};
 -
+ #define F_GETLK64	12	/*  using 'struct flock64' */
+ #define F_SETLK64	13
+ #define F_SETLKW64	14
+ 
 -struct compat_flock64 {
 -	short		l_type;
 -	short		l_whence;
@@ -43,27 +95,134 @@
 -	compat_pid_t	l_pid;
 -};
 -
- struct compat_statfs {
- 	int		f_type;
- 	int		f_bsize;
+-struct compat_statfs {
+-	int		f_type;
+-	int		f_bsize;
+-	int		f_blocks;
+-	int		f_bfree;
+-	int		f_bavail;
+-	int		f_files;
+-	int		f_ffree;
+-	compat_fsid_t	f_fsid;
+-	int		f_namelen;	/* SunOS ignores this field. */
+-	int		f_frsize;
+-	int		f_flags;
+-	int		f_spare[4];
+-};
+-
+-#define COMPAT_RLIM_INFINITY		0xffffffff
+-
+-#define COMPAT_OFF_T_MAX	0x7fffffff
+-
+ #define compat_user_stack_pointer() (user_stack_pointer(task_pt_regs(current)))
+ #define COMPAT_MINSIGSTKSZ	2048
+ 
+-struct compat_ipc64_perm {
+-	compat_key_t key;
+-	__compat_uid32_t uid;
+-	__compat_gid32_t gid;
+-	__compat_uid32_t cuid;
+-	__compat_gid32_t cgid;
+-	unsigned short mode;
+-	unsigned short __pad1;
+-	unsigned short seq;
+-	unsigned short __pad2;
+-	compat_ulong_t unused1;
+-	compat_ulong_t unused2;
+-};
+-
+-struct compat_semid64_ds {
+-	struct compat_ipc64_perm sem_perm;
+-	compat_ulong_t sem_otime;
+-	compat_ulong_t sem_otime_high;
+-	compat_ulong_t sem_ctime;
+-	compat_ulong_t sem_ctime_high;
+-	compat_ulong_t sem_nsems;
+-	compat_ulong_t __unused3;
+-	compat_ulong_t __unused4;
+-};
+-
+-struct compat_msqid64_ds {
+-	struct compat_ipc64_perm msg_perm;
+-	compat_ulong_t msg_stime;
+-	compat_ulong_t msg_stime_high;
+-	compat_ulong_t msg_rtime;
+-	compat_ulong_t msg_rtime_high;
+-	compat_ulong_t msg_ctime;
+-	compat_ulong_t msg_ctime_high;
+-	compat_ulong_t msg_cbytes;
+-	compat_ulong_t msg_qnum;
+-	compat_ulong_t msg_qbytes;
+-	compat_pid_t   msg_lspid;
+-	compat_pid_t   msg_lrpid;
+-	compat_ulong_t __unused4;
+-	compat_ulong_t __unused5;
+-};
+-
+-struct compat_shmid64_ds {
+-	struct compat_ipc64_perm shm_perm;
+-	compat_size_t  shm_segsz;
+-	compat_ulong_t shm_atime;
+-	compat_ulong_t shm_atime_high;
+-	compat_ulong_t shm_dtime;
+-	compat_ulong_t shm_dtime_high;
+-	compat_ulong_t shm_ctime;
+-	compat_ulong_t shm_ctime_high;
+-	compat_pid_t   shm_cpid;
+-	compat_pid_t   shm_lpid;
+-	compat_ulong_t shm_nattch;
+-	compat_ulong_t __unused4;
+-	compat_ulong_t __unused5;
+-};
+-
+ static inline int is_compat_task(void)
+ {
+ 	return test_thread_flag(TIF_32BIT);
 diff --git a/arch/mips/include/asm/compat.h b/arch/mips/include/asm/compat.h
-index 6a350c1f70d7..6d6e5a451f4d 100644
+index bbb3bc5a42fd..ceab66ba052b 100644
 --- a/arch/mips/include/asm/compat.h
 +++ b/arch/mips/include/asm/compat.h
-@@ -55,23 +55,8 @@ struct compat_stat {
- 	s32		st_pad4[14];
- };
- 
--struct compat_flock {
--	short		l_type;
--	short		l_whence;
--	compat_off_t	l_start;
--	compat_off_t	l_len;
--	s32		l_sysid;
--	compat_pid_t	l_pid;
--	s32		pad[4];
--};
--
+@@ -9,28 +9,29 @@
+ #include <asm/page.h>
+ #include <asm/ptrace.h>
+ 
++#define __compat_uid_t	__compat_uid_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;
+ #define __compat_uid32_t __compat_uid32_t
+-#define __compat_gid32_t __compat_gid32_t
++
++#define compat_flock		compat_flock
++#define compat_statfs		compat_statfs
++#define compat_ipc64_perm	compat_ipc64_perm
+ 
+ #define _COMPAT_NSIG		128		/* Don't ask !$@#% ...	*/
+ #define _COMPAT_NSIG_BPW	32
+ typedef u32		compat_sigset_word;
+ 
++#define COMPAT_RLIM_INFINITY	0x7fffffffUL
++
+ #include <asm-generic/compat.h>
+ 
+-#define COMPAT_USER_HZ		100
+ #define COMPAT_UTS_MACHINE	"mips\0\0\0"
+ 
+-typedef u32		compat_dev_t;
+ typedef u32		compat_nlink_t;
+-typedef s32		compat_ipc_pid_t;
+-typedef struct {
+-	s32	val[2];
+-} compat_fsid_t;
+ 
+ struct compat_stat {
+ 	compat_dev_t	st_dev;
+@@ -69,14 +70,6 @@ struct compat_flock {
+ #define F_SETLK64	34
+ #define F_SETLKW64	35
+ 
 -struct compat_flock64 {
 -	short		l_type;
 -	short		l_whence;
@@ -71,16 +230,48 @@
 -	compat_loff_t	l_len;
 -	compat_pid_t	l_pid;
 -};
-+#define __ARCH_COMPAT_FLOCK_EXTRA_SYSID		s32 l_sysid;
-+#define __ARCH_COMPAT_FLOCK_PAD			s32 pad[4];
- 
+-
  struct compat_statfs {
  	int		f_type;
+ 	int		f_bsize;
+@@ -92,10 +85,6 @@ struct compat_statfs {
+ 	int		f_spare[5];
+ };
+ 
+-#define COMPAT_RLIM_INFINITY	0x7fffffffUL
+-
+-#define COMPAT_OFF_T_MAX	0x7fffffff
+-
+ struct compat_ipc64_perm {
+ 	compat_key_t key;
+ 	__compat_uid32_t uid;
 diff --git a/arch/parisc/include/asm/compat.h b/arch/parisc/include/asm/compat.h
-index c04f5a637c39..a1e4534d8050 100644
+index c04f5a637c39..339d1b833fa7 100644
 --- a/arch/parisc/include/asm/compat.h
 +++ b/arch/parisc/include/asm/compat.h
-@@ -53,22 +53,6 @@ struct compat_stat {
+@@ -11,16 +11,16 @@
+ #define compat_mode_t compat_mode_t
+ typedef u16	compat_mode_t;
+ 
++#define compat_ipc_pid_t compat_ipc_pid_t
++typedef u16	compat_ipc_pid_t;
++
++#define compat_ipc64_perm compat_ipc64_perm
++
+ #include <asm-generic/compat.h>
+ 
+-#define COMPAT_USER_HZ 		100
+ #define COMPAT_UTS_MACHINE	"parisc\0\0"
+ 
+-typedef u32	__compat_uid_t;
+-typedef u32	__compat_gid_t;
+-typedef u32	compat_dev_t;
+ typedef u16	compat_nlink_t;
+-typedef u16	compat_ipc_pid_t;
+ 
+ struct compat_stat {
+ 	compat_dev_t		st_dev;	/* dev_t is 32 bits on parisc */
+@@ -53,37 +53,6 @@ struct compat_stat {
  	u32			st_spare4[3];
  };
  
@@ -100,14 +291,67 @@
 -	compat_pid_t		l_pid;
 -};
 -
- struct compat_statfs {
- 	s32		f_type;
- 	s32		f_bsize;
+-struct compat_statfs {
+-	s32		f_type;
+-	s32		f_bsize;
+-	s32		f_blocks;
+-	s32		f_bfree;
+-	s32		f_bavail;
+-	s32		f_files;
+-	s32		f_ffree;
+-	__kernel_fsid_t	f_fsid;
+-	s32		f_namelen;
+-	s32		f_frsize;
+-	s32		f_flags;
+-	s32		f_spare[4];
+-};
+-
+ struct compat_sigcontext {
+ 	compat_int_t sc_flags;
+ 	compat_int_t sc_gr[32]; /* PSW in sc_gr[0] */
+@@ -93,10 +62,6 @@ struct compat_sigcontext {
+ 	compat_int_t sc_sar; /* cr11 */
+ };
+ 
+-#define COMPAT_RLIM_INFINITY 0xffffffff
+-
+-#define COMPAT_OFF_T_MAX	0x7fffffff
+-
+ struct compat_ipc64_perm {
+ 	compat_key_t key;
+ 	__compat_uid_t uid;
 diff --git a/arch/powerpc/include/asm/compat.h b/arch/powerpc/include/asm/compat.h
-index 83d8f70779cb..5ef3c7c83c34 100644
+index 7afc96fb6524..a71d235bc5d7 100644
 --- a/arch/powerpc/include/asm/compat.h
 +++ b/arch/powerpc/include/asm/compat.h
-@@ -44,22 +44,6 @@ struct compat_stat {
+@@ -8,21 +8,20 @@
+ #include <linux/types.h>
+ #include <linux/sched.h>
+ 
++#define compat_ipc_pid_t compat_ipc_pid_t
++typedef u16		compat_ipc_pid_t;
++
++#define compat_ipc64_perm compat_ipc64_perm
++
+ #include <asm-generic/compat.h>
+ 
+-#define COMPAT_USER_HZ		100
+ #ifdef __BIG_ENDIAN__
+ #define COMPAT_UTS_MACHINE	"ppc\0\0"
+ #else
+ #define COMPAT_UTS_MACHINE	"ppcle\0\0"
+ #endif
+ 
+-typedef u32		__compat_uid_t;
+-typedef u32		__compat_gid_t;
+-typedef u32		compat_dev_t;
+ typedef s16		compat_nlink_t;
+-typedef u16		compat_ipc_pid_t;
+-typedef __kernel_fsid_t	compat_fsid_t;
+ 
+ struct compat_stat {
+ 	compat_dev_t	st_dev;
+@@ -44,45 +43,10 @@ struct compat_stat {
  	u32		__unused4[2];
  };
  
@@ -119,6 +363,10 @@
 -	compat_pid_t	l_pid;
 -};
 -
+ #define F_GETLK64	12	/*  using 'struct flock64' */
+ #define F_SETLK64	13
+ #define F_SETLKW64	14
+ 
 -struct compat_flock64 {
 -	short		l_type;
 -	short		l_whence;
@@ -127,14 +375,68 @@
 -	compat_pid_t	l_pid;
 -};
 -
- struct compat_statfs {
- 	int		f_type;
- 	int		f_bsize;
+-struct compat_statfs {
+-	int		f_type;
+-	int		f_bsize;
+-	int		f_blocks;
+-	int		f_bfree;
+-	int		f_bavail;
+-	int		f_files;
+-	int		f_ffree;
+-	compat_fsid_t	f_fsid;
+-	int		f_namelen;	/* SunOS ignores this field. */
+-	int		f_frsize;
+-	int		f_flags;
+-	int		f_spare[4];
+-};
+-
+-#define COMPAT_RLIM_INFINITY		0xffffffff
+-
+-#define COMPAT_OFF_T_MAX	0x7fffffff
+-
+ /*
+  * ipc64_perm is actually 32/64bit clean but since the compat layer refers to
+  * it we may as well define it.
 diff --git a/arch/s390/include/asm/compat.h b/arch/s390/include/asm/compat.h
-index 0f14b3188b1b..07f04d37068b 100644
+index cdc7ae72529d..028a79c2de00 100644
 --- a/arch/s390/include/asm/compat.h
 +++ b/arch/s390/include/asm/compat.h
-@@ -102,22 +102,6 @@ struct compat_stat {
+@@ -12,6 +12,18 @@
+ #define compat_mode_t	compat_mode_t
+ typedef u16		compat_mode_t;
+ 
++#define __compat_uid_t	__compat_uid_t
++typedef u16		__compat_uid_t;
++typedef u16		__compat_gid_t;
++
++#define compat_dev_t	compat_dev_t
++typedef u16		compat_dev_t;
++
++#define compat_ipc_pid_t compat_ipc_pid_t
++typedef u16		 compat_ipc_pid_t;
++
++#define compat_statfs	compat_statfs
++
+ #include <asm-generic/compat.h>
+ 
+ #define __TYPE_IS_PTR(t) (!__builtin_types_compatible_p( \
+@@ -53,15 +65,9 @@ typedef u16		compat_mode_t;
+ 			 PSW32_MASK_MCHECK | PSW32_MASK_PSTATE | \
+ 			 PSW32_ASC_PRIMARY)
+ 
+-#define COMPAT_USER_HZ		100
+ #define COMPAT_UTS_MACHINE	"s390\0\0\0\0"
+ 
+-typedef u16		__compat_uid_t;
+-typedef u16		__compat_gid_t;
+-typedef u16		compat_dev_t;
+ typedef u16		compat_nlink_t;
+-typedef u16		compat_ipc_pid_t;
+-typedef __kernel_fsid_t	compat_fsid_t;
+ 
+ typedef struct {
+ 	u32 mask;
+@@ -102,26 +108,10 @@ struct compat_stat {
  	u32		__unused5;
  };
  
@@ -146,6 +448,10 @@
 -	compat_pid_t	l_pid;
 -};
 -
+ #define F_GETLK64       12
+ #define F_SETLK64       13
+ #define F_SETLKW64      14    
+ 
 -struct compat_flock64 {
 -	short		l_type;
 -	short		l_whence;
@@ -157,12 +463,181 @@
  struct compat_statfs {
  	u32		f_type;
  	u32		f_bsize;
+@@ -152,10 +142,6 @@ struct compat_statfs64 {
+ 	u32		f_spare[4];
+ };
+ 
+-#define COMPAT_RLIM_INFINITY		0xffffffff
+-
+-#define COMPAT_OFF_T_MAX	0x7fffffff
+-
+ /*
+  * A pointer passed in from user mode. This should not
+  * be used for syscall parameters, just declare them
+@@ -178,61 +164,4 @@ static inline int is_compat_task(void)
+ 
+ #endif
+ 
+-struct compat_ipc64_perm {
+-	compat_key_t key;
+-	__compat_uid32_t uid;
+-	__compat_gid32_t gid;
+-	__compat_uid32_t cuid;
+-	__compat_gid32_t cgid;
+-	compat_mode_t mode;
+-	unsigned short __pad1;
+-	unsigned short seq;
+-	unsigned short __pad2;
+-	unsigned int __unused1;
+-	unsigned int __unused2;
+-};
+-
+-struct compat_semid64_ds {
+-	struct compat_ipc64_perm sem_perm;
+-	compat_ulong_t sem_otime;
+-	compat_ulong_t sem_otime_high;
+-	compat_ulong_t sem_ctime;
+-	compat_ulong_t sem_ctime_high;
+-	compat_ulong_t sem_nsems;
+-	compat_ulong_t __unused1;
+-	compat_ulong_t __unused2;
+-};
+-
+-struct compat_msqid64_ds {
+-	struct compat_ipc64_perm msg_perm;
+-	compat_ulong_t msg_stime;
+-	compat_ulong_t msg_stime_high;
+-	compat_ulong_t msg_rtime;
+-	compat_ulong_t msg_rtime_high;
+-	compat_ulong_t msg_ctime;
+-	compat_ulong_t msg_ctime_high;
+-	compat_ulong_t msg_cbytes;
+-	compat_ulong_t msg_qnum;
+-	compat_ulong_t msg_qbytes;
+-	compat_pid_t   msg_lspid;
+-	compat_pid_t   msg_lrpid;
+-	compat_ulong_t __unused1;
+-	compat_ulong_t __unused2;
+-};
+-
+-struct compat_shmid64_ds {
+-	struct compat_ipc64_perm shm_perm;
+-	compat_size_t  shm_segsz;
+-	compat_ulong_t shm_atime;
+-	compat_ulong_t shm_atime_high;
+-	compat_ulong_t shm_dtime;
+-	compat_ulong_t shm_dtime_high;
+-	compat_ulong_t shm_ctime;
+-	compat_ulong_t shm_ctime_high;
+-	compat_pid_t   shm_cpid;
+-	compat_pid_t   shm_lpid;
+-	compat_ulong_t shm_nattch;
+-	compat_ulong_t __unused1;
+-	compat_ulong_t __unused2;
+-};
+ #endif /* _ASM_S390X_COMPAT_H */
 diff --git a/arch/sparc/include/asm/compat.h b/arch/sparc/include/asm/compat.h
-index 108078751bb5..d78fb44942e0 100644
+index bd949fcf9d63..63a32f1b13c4 100644
 --- a/arch/sparc/include/asm/compat.h
 +++ b/arch/sparc/include/asm/compat.h
-@@ -75,23 +75,7 @@ struct compat_stat64 {
- 	unsigned int	__unused5;
+@@ -9,17 +9,28 @@
+ #define compat_mode_t	compat_mode_t
+ typedef u16		compat_mode_t;
+ 
++#define __compat_uid_t	__compat_uid_t
++typedef u16		__compat_uid_t;
++typedef u16		__compat_gid_t;
++
++#define compat_dev_t	compat_dev_t
++typedef u16		compat_dev_t;
++
++#define compat_ipc_pid_t compat_ipc_pid_t
++typedef u16		 compat_ipc_pid_t;
++
++#define compat_flock	compat_flock
++#define compat_flock64	compat_flock64
++
++#define compat_ipc64_perm compat_ipc64_perm
++
++#define COMPAT_RLIM_INFINITY 0x7fffffff
++
+ #include <asm-generic/compat.h>
+ 
+-#define COMPAT_USER_HZ		100
+ #define COMPAT_UTS_MACHINE	"sparc\0\0"
+ 
+-typedef u16		__compat_uid_t;
+-typedef u16		__compat_gid_t;
+-typedef u16		compat_dev_t;
+ typedef s16		compat_nlink_t;
+-typedef u16		compat_ipc_pid_t;
+-typedef __kernel_fsid_t	compat_fsid_t;
+ 
+ struct compat_stat {
+ 	compat_dev_t	st_dev;
+@@ -97,25 +108,6 @@ struct compat_flock64 {
+ 	short		__unused;
+ };
+ 
+-struct compat_statfs {
+-	int		f_type;
+-	int		f_bsize;
+-	int		f_blocks;
+-	int		f_bfree;
+-	int		f_bavail;
+-	int		f_files;
+-	int		f_ffree;
+-	compat_fsid_t	f_fsid;
+-	int		f_namelen;	/* SunOS ignores this field. */
+-	int		f_frsize;
+-	int		f_flags;
+-	int		f_spare[4];
+-};
+-
+-#define COMPAT_RLIM_INFINITY 0x7fffffff
+-
+-#define COMPAT_OFF_T_MAX	0x7fffffff
+-
+ struct compat_ipc64_perm {
+ 	compat_key_t key;
+ 	__compat_uid32_t uid;
+diff --git a/arch/x86/include/asm/compat.h b/arch/x86/include/asm/compat.h
+index 7516e4199b3c..d3523cf1b673 100644
+--- a/arch/x86/include/asm/compat.h
++++ b/arch/x86/include/asm/compat.h
+@@ -15,17 +15,24 @@
+ #define compat_mode_t	compat_mode_t
+ typedef u16		compat_mode_t;
+ 
++#define __compat_uid_t	__compat_uid_t
++typedef u16		__compat_uid_t;
++typedef u16		__compat_gid_t;
++
++#define compat_dev_t	compat_dev_t
++typedef u16		compat_dev_t;
++
++#define compat_ipc_pid_t compat_ipc_pid_t
++typedef u16		 compat_ipc_pid_t;
++
++#define compat_flock64	compat_flock64
++#define compat_statfs	compat_statfs
++
+ #include <asm-generic/compat.h>
+ 
+-#define COMPAT_USER_HZ		100
+ #define COMPAT_UTS_MACHINE	"i686\0\0"
+ 
+-typedef u16		__compat_uid_t;
+-typedef u16		__compat_gid_t;
+-typedef u16		compat_dev_t;
+ typedef u16		compat_nlink_t;
+-typedef u16		compat_ipc_pid_t;
+-typedef __kernel_fsid_t	compat_fsid_t;
+ 
+ struct compat_stat {
+ 	compat_dev_t	st_dev;
+@@ -50,14 +57,6 @@ struct compat_stat {
+ 	u32		__unused5;
  };
  
 -struct compat_flock {
@@ -171,96 +646,229 @@
 -	compat_off_t	l_start;
 -	compat_off_t	l_len;
 -	compat_pid_t	l_pid;
--	short		__unused;
--};
--
--struct compat_flock64 {
--	short		l_type;
--	short		l_whence;
--	compat_loff_t	l_start;
--	compat_loff_t	l_len;
--	compat_pid_t	l_pid;
--	short		__unused;
--};
-+#define __ARCH_COMPAT_FLOCK_PAD		short __unused;
- 
- struct compat_statfs {
- 	int		f_type;
-diff --git a/arch/x86/include/asm/compat.h b/arch/x86/include/asm/compat.h
-index 8d19a212f4f2..de794d895866 100644
---- a/arch/x86/include/asm/compat.h
-+++ b/arch/x86/include/asm/compat.h
-@@ -50,25 +50,11 @@ struct compat_stat {
- 	u32		__unused5;
- };
- 
--struct compat_flock {
--	short		l_type;
--	short		l_whence;
--	compat_off_t	l_start;
--	compat_off_t	l_len;
--	compat_pid_t	l_pid;
--};
--
- /*
-- * IA32 uses 4 byte alignment for 64 bit quantities,
-- * so we need to pack this structure.
-+ * IA32 uses 4 byte alignment for 64 bit quantities, so we need to pack the
-+ * compat flock64 structure.
-  */
--struct compat_flock64 {
--	short		l_type;
--	short		l_whence;
--	compat_loff_t	l_start;
--	compat_loff_t	l_len;
--	compat_pid_t	l_pid;
--} __attribute__((packed));
-+#define __ARCH_NEED_COMPAT_FLOCK64_PACKED
- 
- struct compat_statfs {
- 	int		f_type;
-diff --git a/include/linux/compat.h b/include/linux/compat.h
-index 1c758b0e0359..a0481fe6c5d5 100644
---- a/include/linux/compat.h
-+++ b/include/linux/compat.h
-@@ -258,6 +258,37 @@ struct compat_rlimit {
- 	compat_ulong_t	rlim_max;
- };
- 
-+#ifdef __ARCH_NEED_COMPAT_FLOCK64_PACKED
-+#define __ARCH_COMPAT_FLOCK64_PACK	__attribute__((packed))
-+#else
-+#define __ARCH_COMPAT_FLOCK64_PACK
-+#endif
-+
+-};
+-
+ #define F_GETLK64	12	/*  using 'struct flock64' */
+ #define F_SETLK64	13
+ #define F_SETLKW64	14
+@@ -89,68 +88,6 @@ struct compat_statfs {
+ 	int		f_spare[4];
+ };
+ 
+-#define COMPAT_RLIM_INFINITY		0xffffffff
+-
+-#define COMPAT_OFF_T_MAX	0x7fffffff
+-
+-struct compat_ipc64_perm {
+-	compat_key_t key;
+-	__compat_uid32_t uid;
+-	__compat_gid32_t gid;
+-	__compat_uid32_t cuid;
+-	__compat_gid32_t cgid;
+-	unsigned short mode;
+-	unsigned short __pad1;
+-	unsigned short seq;
+-	unsigned short __pad2;
+-	compat_ulong_t unused1;
+-	compat_ulong_t unused2;
+-};
+-
+-struct compat_semid64_ds {
+-	struct compat_ipc64_perm sem_perm;
+-	compat_ulong_t sem_otime;
+-	compat_ulong_t sem_otime_high;
+-	compat_ulong_t sem_ctime;
+-	compat_ulong_t sem_ctime_high;
+-	compat_ulong_t sem_nsems;
+-	compat_ulong_t __unused3;
+-	compat_ulong_t __unused4;
+-};
+-
+-struct compat_msqid64_ds {
+-	struct compat_ipc64_perm msg_perm;
+-	compat_ulong_t msg_stime;
+-	compat_ulong_t msg_stime_high;
+-	compat_ulong_t msg_rtime;
+-	compat_ulong_t msg_rtime_high;
+-	compat_ulong_t msg_ctime;
+-	compat_ulong_t msg_ctime_high;
+-	compat_ulong_t msg_cbytes;
+-	compat_ulong_t msg_qnum;
+-	compat_ulong_t msg_qbytes;
+-	compat_pid_t   msg_lspid;
+-	compat_pid_t   msg_lrpid;
+-	compat_ulong_t __unused4;
+-	compat_ulong_t __unused5;
+-};
+-
+-struct compat_shmid64_ds {
+-	struct compat_ipc64_perm shm_perm;
+-	compat_size_t  shm_segsz;
+-	compat_ulong_t shm_atime;
+-	compat_ulong_t shm_atime_high;
+-	compat_ulong_t shm_dtime;
+-	compat_ulong_t shm_dtime_high;
+-	compat_ulong_t shm_ctime;
+-	compat_ulong_t shm_ctime_high;
+-	compat_pid_t   shm_cpid;
+-	compat_pid_t   shm_lpid;
+-	compat_ulong_t shm_nattch;
+-	compat_ulong_t __unused4;
+-	compat_ulong_t __unused5;
+-};
+-
+ #ifdef CONFIG_X86_X32_ABI
+ #define COMPAT_USE_64BIT_TIME \
+ 	(!!(task_pt_regs(current)->orig_ax & __X32_SYSCALL_BIT))
+diff --git a/include/asm-generic/compat.h b/include/asm-generic/compat.h
+index d46c0201cc34..32269059058a 100644
+--- a/include/asm-generic/compat.h
++++ b/include/asm-generic/compat.h
+@@ -2,6 +2,18 @@
+ #ifndef __ASM_GENERIC_COMPAT_H
+ #define __ASM_GENERIC_COMPAT_H
+ 
++#ifndef COMPAT_USER_HZ
++#define COMPAT_USER_HZ		100
++#endif
++
++#ifndef COMPAT_RLIM_INFINITY
++#define COMPAT_RLIM_INFINITY	0xffffffff
++#endif
++
++#ifndef COMPAT_OFF_T_MAX
++#define COMPAT_OFF_T_MAX	0x7fffffff
++#endif
++
+ /* These types are common across all compat ABIs */
+ typedef u32 compat_size_t;
+ typedef s32 compat_ssize_t;
+@@ -24,6 +36,11 @@ typedef u32 compat_caddr_t;
+ typedef u32 compat_aio_context_t;
+ typedef u32 compat_old_sigset_t;
+ 
++#ifndef __compat_uid_t
++typedef u32 __compat_uid_t;
++typedef u32 __compat_gid_t;
++#endif
++
+ #ifndef __compat_uid32_t
+ typedef u32 __compat_uid32_t;
+ typedef u32 __compat_gid32_t;
+@@ -47,4 +64,113 @@ typedef u32 compat_sigset_word;
+ #define _COMPAT_NSIG_BPW 32
+ #endif
+ 
++#ifndef compat_dev_t
++typedef u32 compat_dev_t;
++#endif
++
++#ifndef compat_ipc_pid_t
++typedef s32 compat_ipc_pid_t;
++#endif
++
++#ifndef compat_fsid_t
++typedef __kernel_fsid_t	compat_fsid_t;
++#endif
++
++#ifndef compat_flock
 +struct compat_flock {
-+	short			l_type;
-+	short			l_whence;
-+	compat_off_t		l_start;
-+	compat_off_t		l_len;
-+#ifdef __ARCH_COMPAT_FLOCK_EXTRA_SYSID
-+	__ARCH_COMPAT_FLOCK_EXTRA_SYSID
-+#endif
-+	compat_pid_t		l_pid;
-+#ifdef __ARCH_COMPAT_FLOCK_PAD
-+	__ARCH_COMPAT_FLOCK_PAD
-+#endif
++	compat_short_t	l_type;
++	compat_short_t	l_whence;
++	compat_off_t	l_start;
++	compat_off_t	l_len;
++	compat_pid_t	l_pid;
 +};
-+
++#endif
++
++#ifndef compat_flock64
 +struct compat_flock64 {
-+	short		l_type;
-+	short		l_whence;
++	compat_short_t	l_type;
++	compat_short_t	l_whence;
 +	compat_loff_t	l_start;
 +	compat_loff_t	l_len;
 +	compat_pid_t	l_pid;
-+#ifdef __ARCH_COMPAT_FLOCK64_PAD
-+	__ARCH_COMPAT_FLOCK64_PAD
-+#endif
-+} __ARCH_COMPAT_FLOCK64_PACK;
-+
- struct compat_rusage {
- 	struct old_timeval32 ru_utime;
- 	struct old_timeval32 ru_stime;
++};
++#endif
++
++#ifndef compat_statfs
++struct compat_statfs {
++	compat_int_t	f_type;
++	compat_int_t	f_bsize;
++	compat_int_t	f_blocks;
++	compat_int_t	f_bfree;
++	compat_int_t	f_bavail;
++	compat_int_t	f_files;
++	compat_int_t	f_ffree;
++	compat_fsid_t	f_fsid;
++	compat_int_t	f_namelen;
++	compat_int_t	f_frsize;
++	compat_int_t	f_flags;
++	compat_int_t	f_spare[4];
++};
++#endif
++
++#ifndef compat_ipc64_perm
++struct compat_ipc64_perm {
++	compat_key_t key;
++	__compat_uid32_t uid;
++	__compat_gid32_t gid;
++	__compat_uid32_t cuid;
++	__compat_gid32_t cgid;
++	compat_mode_t	mode;
++	unsigned char	__pad1[4 - sizeof(compat_mode_t)];
++	compat_ushort_t	seq;
++	compat_ushort_t	__pad2;
++	compat_ulong_t	unused1;
++	compat_ulong_t	unused2;
++};
++
++struct compat_semid64_ds {
++	struct compat_ipc64_perm sem_perm;
++	compat_ulong_t sem_otime;
++	compat_ulong_t sem_otime_high;
++	compat_ulong_t sem_ctime;
++	compat_ulong_t sem_ctime_high;
++	compat_ulong_t sem_nsems;
++	compat_ulong_t __unused3;
++	compat_ulong_t __unused4;
++};
++
++struct compat_msqid64_ds {
++	struct compat_ipc64_perm msg_perm;
++	compat_ulong_t msg_stime;
++	compat_ulong_t msg_stime_high;
++	compat_ulong_t msg_rtime;
++	compat_ulong_t msg_rtime_high;
++	compat_ulong_t msg_ctime;
++	compat_ulong_t msg_ctime_high;
++	compat_ulong_t msg_cbytes;
++	compat_ulong_t msg_qnum;
++	compat_ulong_t msg_qbytes;
++	compat_pid_t   msg_lspid;
++	compat_pid_t   msg_lrpid;
++	compat_ulong_t __unused4;
++	compat_ulong_t __unused5;
++};
++
++struct compat_shmid64_ds {
++	struct compat_ipc64_perm shm_perm;
++	compat_size_t  shm_segsz;
++	compat_ulong_t shm_atime;
++	compat_ulong_t shm_atime_high;
++	compat_ulong_t shm_dtime;
++	compat_ulong_t shm_dtime_high;
++	compat_ulong_t shm_ctime;
++	compat_ulong_t shm_ctime_high;
++	compat_pid_t   shm_cpid;
++	compat_pid_t   shm_lpid;
++	compat_ulong_t shm_nattch;
++	compat_ulong_t __unused4;
++	compat_ulong_t __unused5;
++};
++#endif
++
+ #endif
 -- 
 2.25.1
 
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help