arm64: Refactor compat.h into compat-types.h
PATCH 1/1 arm64: Refactor compat.h into compat-types.h
This reduces the complexity of the includes needed for linux/stat.h and removes some possibilities for causing include loops.
One such issue was exposed by the Debian kernel's application of the aufs patches which led to:
In file included from /?PKGBUILDDIR?/include/linux/mm.h:23:0,
from /?PKGBUILDDIR?/include/linux/pid_namespace.h:6,
from /?PKGBUILDDIR?/include/linux/ptrace.h:9,
from /?PKGBUILDDIR?/arch/arm64/include/asm/compat.h:26,
from /?PKGBUILDDIR?/arch/arm64/include/asm/stat.h:23,
from /?PKGBUILDDIR?/include/linux/stat.h:5,
from /?PKGBUILDDIR?/include/linux/module.h:10,
from /?PKGBUILDDIR?/init/main.c:15:
/?PKGBUILDDIR?/include/linux/fs.h:1575:64: warning: 'struct kstat' declared inside parameter list [enabled by default]
int (*getattr) (struct vfsmount *mnt, struct dentry *, struct kstat *);
^/?PKGBUILDDIR?/include/linux/fs.h:1575:64: warning: its scope is only this definition or declaration, which is probably not what you want [enabled by default]
This is due to an extra fs.h include added to mm.h leading to a loop in the includes. Splitting out the type defintions from compat.h into compat-types.h allows asm/stat.h to only include the types header and avoids the loop.
Full logs in http://buildd.debian-ports.org/status/fetch.php?pkg=linux&arch=arm64&ver=3.14.12-1&stamp=1405234443
---
This is effectively v2 of "arm64: Move struct stat64 to uapi"
--- arch/arm64/include/asm/compat-types.h | 262 ++++++++++++++++++++++++++++++++++ arch/arm64/include/asm/compat.h | 238 +----------------------------- arch/arm64/include/asm/stat.h | 2 +- 3 files changed, 264 insertions(+), 238 deletions(-) create mode 100644 arch/arm64/include/asm/compat-types.h
arch/arm64/include/asm/compat-types.h new file +262 -0
@@ -0,0 +1,262 @@ +/* +* Copyright (C) 2012 ARM Ltd. +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License version 2 as +* published by the Free Software Foundation. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ +#ifndef __ASM_COMPAT_TYPES_H +#define __ASM_COMPAT_TYPES_H +#ifdef __KERNEL__ +#ifdef CONFIG_COMPAT + +#include <linux/types.h> + +typedef u32 compat_size_t ; +typedef s32 compat_ssize_t ; +typedef s32 compat_time_t ; +typedef s32 compat_clock_t ; +typedef s32 compat_pid_t ; +typedef u32 __compat_uid_t ; +typedef u32 __compat_gid_t ; +typedef u16 __compat_uid16_t ; +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_timespec { +compat_time_t tv_sec; +s32 tv_nsec; +}; + +struct compat_timeval { +compat_time_t tv_sec; +s32 tv_usec; +}; + +struct compat_stat { +#ifdef __AARCH64EB__ +short st_dev; +short __pad1; +#else +compat_dev_t st_dev; +#endif +compat_ino_t st_ino; +compat_mode_t st_mode; +compat_ushort_t st_nlink; +__compat_uid16_t st_uid; +__compat_gid16_t st_gid; +#ifdef __AARCH64EB__ +short st_rdev; +short __pad2; +#else +compat_dev_t st_rdev; +#endif +compat_off_t st_size; +compat_off_t st_blksize; +compat_off_t st_blocks; +compat_time_t st_atime; +compat_ulong_t st_atime_nsec; +compat_time_t st_mtime; +compat_ulong_t st_mtime_nsec; +compat_time_t st_ctime; +compat_ulong_t st_ctime_nsec; +compat_ulong_t __unused4[2 ]; +}; + +struct compat_flock { +short l_type; +short l_whence; +compat_off_t l_start; +compat_off_t l_len; +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; +compat_loff_t l_start; +compat_loff_t l_len; +compat_pid_t l_pid; +}; + +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 + +typedef u32 compat_old_sigset_t ; + +#define _COMPAT_NSIG 64 +#define _COMPAT_NSIG_BPW 32 + +typedef u32 compat_sigset_word ; + +typedef union compat_sigval { +compat_int_t sival_int; +compat_uptr_t sival_ptr; +}compat_sigval_t ; + +typedef struct compat_siginfo { +int si_signo; +int si_errno; +int si_code; + +union { +/* The padding is the same size as AArch64. */ +int _pad[128 /sizeof (int ) -3 ]; + +/* kill() */ +struct { +compat_pid_t _pid;/* sender's pid */ +__compat_uid32_t _uid;/* sender's uid */ + } _kill; + +/* POSIX.1b timers */ +struct { +compat_timer_t _tid;/* timer id */ +int _overrun;/* overrun count */ +compat_sigval_t _sigval;/* same as below */ +int _sys_private;/* not to be passed to user */ + } _timer; + +/* POSIX.1b signals */ +struct { +compat_pid_t _pid;/* sender's pid */ +__compat_uid32_t _uid;/* sender's uid */ +compat_sigval_t _sigval; + } _rt; + +/* SIGCHLD */ +struct { +compat_pid_t _pid;/* which child */ +__compat_uid32_t _uid;/* sender's uid */ +int _status;/* exit code */ +compat_clock_t _utime; +compat_clock_t _stime; + } _sigchld; + +/* SIGILL, SIGFPE, SIGSEGV, SIGBUS */ +struct { +compat_uptr_t _addr;/* faulting insn/memory ref. */ +short _addr_lsb;/* LSB of the reported address */ + } _sigfault; + +/* SIGPOLL */ +struct { +compat_long_t _band;/* POLL_IN, POLL_OUT, POLL_MSG */ +int _fd; + } _sigpoll; + } _sifields; +}compat_siginfo_t ; + +#define COMPAT_OFF_T_MAX 0x7fffffff +#define COMPAT_LOFF_T_MAX 0x7fffffffffffffffL + +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_time_t sem_otime; +compat_ulong_t __unused1; +compat_time_t sem_ctime; +compat_ulong_t __unused2; +compat_ulong_t sem_nsems; +compat_ulong_t __unused3; +compat_ulong_t __unused4; +}; + +struct compat_msqid64_ds { +struct compat_ipc64_perm msg_perm; +compat_time_t msg_stime; +compat_ulong_t __unused1; +compat_time_t msg_rtime; +compat_ulong_t __unused2; +compat_time_t msg_ctime; +compat_ulong_t __unused3; +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_time_t shm_atime; +compat_ulong_t __unused1; +compat_time_t shm_dtime; +compat_ulong_t __unused2; +compat_time_t shm_ctime; +compat_ulong_t __unused3; +compat_pid_t shm_cpid; +compat_pid_t shm_lpid; +compat_ulong_t shm_nattch; +compat_ulong_t __unused4; +compat_ulong_t __unused5; +}; + +#endif /* CONFIG_COMPAT */ +#endif /* __KERNEL__ */ +#endif /* __ASM_COMPAT_TYPES_H */
arch/arm64/include/asm/compat.h +1 -237
256 lines not on this page · raw message
arch/arm64/include/asm/stat.h +1 -1
@@ -20,7 +20,7 @@#ifdef CONFIG_COMPAT -#include <asm/compat.h> +#include <asm/compat-types.h> /* * struct stat64 is needed for compat tasks only. Its definition is different
Signature · 1 line
2.0.1
PATCH 1/1 arm64: Refactor compat.h into compat-types.h
Quoted 23 lines · Ian Campbell
This reduces the complexity of the includes needed for
linux/stat.hand removes some possibilities for causing include loops.One such issue was exposed by the Debian kernel's application of the aufs patches which led to:
In file included from /?PKGBUILDDIR?/include/linux/mm.h:23:0,
from /?PKGBUILDDIR?/include/linux/pid_namespace.h:6, from /?PKGBUILDDIR?/include/linux/ptrace.h:9, from /?PKGBUILDDIR?/arch/arm64/include/asm/compat.h:26, from /?PKGBUILDDIR?/arch/arm64/include/asm/stat.h:23, from /?PKGBUILDDIR?/include/linux/stat.h:5, from /?PKGBUILDDIR?/include/linux/module.h:10, from /?PKGBUILDDIR?/init/main.c:15: /?PKGBUILDDIR?/include/linux/fs.h:1575:64: warning: 'struct kstat' declared inside parameter list [enabled by default] int (*getattr) (struct vfsmount *mnt, struct dentry *, struct kstat *); ^/?PKGBUILDDIR?/include/linux/fs.h:1575:64: warning: its scope is only this definition or declaration, which is probably not what you want [enabled by default]
This is due to an extra
fs.hinclude added tomm.hleading to a loop in the includes. Splitting out the type defintions fromcompat.hintocompat-types.hallowsasm/stat.hto only include the types header and avoids the loop.
Quoted 7 lines
Full logs in http://buildd.debian-ports.org/status/fetch.php?pkg=linux&arch=arm64&ver=3.14.12-1&stamp=1405234443
Signed-off-by Ian Campbell <[email protected]>Cc Catalin Marinas <[email protected]>Cc Will Deacon <[email protected]>Cc linux-arm-kernel at lists.infradead.orgCc debian-kernel at lists.debian.org
Looks good to me, but I note Arnd's prior comment about mm.h including fs.h being a bug. If that's true, then this patch isn't needed at all and aufs should be fixed instead.
Will
PATCH 1/1 arm64: Refactor compat.h into compat-types.h
Quoted 26 lines · Will Deacon
Quoted 25 lines · Ian Campbell
This reduces the complexity of the includes needed for
linux/stat.hand removes some possibilities for causing include loops.One such issue was exposed by the Debian kernel's application of the aufs patches which led to:
In file included from /?PKGBUILDDIR?/include/linux/mm.h:23:0,
from /?PKGBUILDDIR?/include/linux/pid_namespace.h:6, from /?PKGBUILDDIR?/include/linux/ptrace.h:9, from /?PKGBUILDDIR?/arch/arm64/include/asm/compat.h:26, from /?PKGBUILDDIR?/arch/arm64/include/asm/stat.h:23, from /?PKGBUILDDIR?/include/linux/stat.h:5, from /?PKGBUILDDIR?/include/linux/module.h:10, from /?PKGBUILDDIR?/init/main.c:15: /?PKGBUILDDIR?/include/linux/fs.h:1575:64: warning: 'struct kstat' declared inside parameter list [enabled by default] int (*getattr) (struct vfsmount *mnt, struct dentry *, struct kstat *); ^/?PKGBUILDDIR?/include/linux/fs.h:1575:64: warning: its scope is only this definition or declaration, which is probably not what you want [enabled by default]
This is due to an extra
fs.hinclude added tomm.hleading to a loop in the includes. Splitting out the type defintions fromcompat.hintocompat-types.hallowsasm/stat.hto only include the types header and avoids the loop.Full logs in http://buildd.debian-ports.org/status/fetch.php?pkg=linux&arch=arm64&ver=3.14.12-1&stamp=1405234443
Quoted 7 lines
Quoted 5 lines
Signed-off-by Ian Campbell <[email protected]>Cc Catalin Marinas <[email protected]>Cc Will Deacon <[email protected]>Cc linux-arm-kernel at lists.infradead.orgCc debian-kernel at lists.debian.orgLooks good to me,
Thanks.
Quoted 3 lines
but I note Arnd's prior comment about
mm.hincludingfs.h
being a bug. If that's true, then this patch isn't needed at all and aufs should be fixed instead.
That's true as well and I've got a fix on the aufs side in the works too.
Simplifying the twisty header maze seems worthwhile in its own right too though.
Ian.