Skip to content

Commit

Permalink
asm-generic: compat: Cleanup duplicate definitions
Browse files Browse the repository at this point in the history
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

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>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Cc: Palmer Dabbelt <palmer@dabbelt.com>
  • Loading branch information
guoren83 committed Feb 10, 2022
1 parent cbd6bc2 commit ac589e7
Show file tree
Hide file tree
Showing 8 changed files with 168 additions and 284 deletions.
71 changes: 7 additions & 64 deletions arch/arm64/include/asm/compat.h
Expand Up @@ -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
Expand All @@ -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__
Expand Down Expand Up @@ -87,64 +88,6 @@ struct compat_statfs {
#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);
Expand Down
18 changes: 7 additions & 11 deletions arch/mips/include/asm/compat.h
Expand Up @@ -9,28 +9,28 @@
#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_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;
Expand Down Expand Up @@ -73,10 +73,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;
Expand Down
29 changes: 5 additions & 24 deletions arch/parisc/include/asm/compat.h
Expand Up @@ -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 */
Expand Down Expand Up @@ -53,21 +53,6 @@ struct compat_stat {
u32 st_spare4[3];
};

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] */
Expand All @@ -77,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;
Expand Down
30 changes: 5 additions & 25 deletions arch/powerpc/include/asm/compat.h
Expand Up @@ -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;
Expand All @@ -44,25 +43,6 @@ struct compat_stat {
u32 __unused4[2];
};

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.
Expand Down
79 changes: 12 additions & 67 deletions arch/s390/include/asm/compat.h
Expand Up @@ -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( \
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -132,10 +138,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
Expand All @@ -158,61 +160,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 */

0 comments on commit ac589e7

Please sign in to comment.