1b2441318SGreg Kroah-Hartman /* SPDX-License-Identifier: GPL-2.0 */ 2c6557e7fSMartin Schwidefsky #ifndef _ASM_S390X_COMPAT_H 3c6557e7fSMartin Schwidefsky #define _ASM_S390X_COMPAT_H 4c6557e7fSMartin Schwidefsky /* 5c6557e7fSMartin Schwidefsky * Architecture specific compatibility types 6c6557e7fSMartin Schwidefsky */ 7c6557e7fSMartin Schwidefsky #include <linux/types.h> 8c6557e7fSMartin Schwidefsky #include <linux/sched.h> 968db0cf1SIngo Molnar #include <linux/sched/task_stack.h> 107757591aSHeiko Carstens #include <linux/thread_info.h> 11c6557e7fSMartin Schwidefsky 124f59c718SAl Viro #define __TYPE_IS_PTR(t) (!__builtin_types_compatible_p( \ 134f59c718SAl Viro typeof(0?(__force t)0:0ULL), u64)) 149a205286SHeiko Carstens 159a205286SHeiko Carstens #define __SC_DELOUSE(t,v) ({ \ 169a205286SHeiko Carstens BUILD_BUG_ON(sizeof(t) > 4 && !__TYPE_IS_PTR(t)); \ 174f59c718SAl Viro (__force t)(__TYPE_IS_PTR(t) ? ((v) & 0x7fffffff) : (v)); \ 189a205286SHeiko Carstens }) 1946836613SAl Viro 20c6557e7fSMartin Schwidefsky #define PSW32_MASK_PER 0x40000000UL 21c6557e7fSMartin Schwidefsky #define PSW32_MASK_DAT 0x04000000UL 22c6557e7fSMartin Schwidefsky #define PSW32_MASK_IO 0x02000000UL 23c6557e7fSMartin Schwidefsky #define PSW32_MASK_EXT 0x01000000UL 24c6557e7fSMartin Schwidefsky #define PSW32_MASK_KEY 0x00F00000UL 25b50511e4SMartin Schwidefsky #define PSW32_MASK_BASE 0x00080000UL /* Always one */ 26c6557e7fSMartin Schwidefsky #define PSW32_MASK_MCHECK 0x00040000UL 27c6557e7fSMartin Schwidefsky #define PSW32_MASK_WAIT 0x00020000UL 28c6557e7fSMartin Schwidefsky #define PSW32_MASK_PSTATE 0x00010000UL 29c6557e7fSMartin Schwidefsky #define PSW32_MASK_ASC 0x0000C000UL 30c6557e7fSMartin Schwidefsky #define PSW32_MASK_CC 0x00003000UL 31c6557e7fSMartin Schwidefsky #define PSW32_MASK_PM 0x00000f00UL 325ebf250dSHeiko Carstens #define PSW32_MASK_RI 0x00000080UL 33c6557e7fSMartin Schwidefsky 34fa968ee2SMartin Schwidefsky #define PSW32_MASK_USER 0x0000FF00UL 35b50511e4SMartin Schwidefsky 36b50511e4SMartin Schwidefsky #define PSW32_ADDR_AMODE 0x80000000UL 37c6557e7fSMartin Schwidefsky #define PSW32_ADDR_INSN 0x7FFFFFFFUL 38c6557e7fSMartin Schwidefsky 39b50511e4SMartin Schwidefsky #define PSW32_DEFAULT_KEY (((u32) PAGE_DEFAULT_ACC) << 20) 40c6557e7fSMartin Schwidefsky 41c6557e7fSMartin Schwidefsky #define PSW32_ASC_PRIMARY 0x00000000UL 42c6557e7fSMartin Schwidefsky #define PSW32_ASC_ACCREG 0x00004000UL 43c6557e7fSMartin Schwidefsky #define PSW32_ASC_SECONDARY 0x00008000UL 44c6557e7fSMartin Schwidefsky #define PSW32_ASC_HOME 0x0000C000UL 45c6557e7fSMartin Schwidefsky 46f26946d7SHeiko Carstens #define PSW32_USER_BITS (PSW32_MASK_DAT | PSW32_MASK_IO | PSW32_MASK_EXT | \ 47f26946d7SHeiko Carstens PSW32_DEFAULT_KEY | PSW32_MASK_BASE | \ 48075dfd82SHeiko Carstens PSW32_MASK_MCHECK | PSW32_MASK_PSTATE | \ 49075dfd82SHeiko Carstens PSW32_ASC_PRIMARY) 50c6557e7fSMartin Schwidefsky 51c6557e7fSMartin Schwidefsky #define COMPAT_USER_HZ 100 52e28cbf22SChristoph Hellwig #define COMPAT_UTS_MACHINE "s390\0\0\0\0" 53c6557e7fSMartin Schwidefsky 54c6557e7fSMartin Schwidefsky typedef u32 compat_size_t; 55c6557e7fSMartin Schwidefsky typedef s32 compat_ssize_t; 56c6557e7fSMartin Schwidefsky typedef s32 compat_time_t; 57c6557e7fSMartin Schwidefsky typedef s32 compat_clock_t; 58c6557e7fSMartin Schwidefsky typedef s32 compat_pid_t; 59c6557e7fSMartin Schwidefsky typedef u16 __compat_uid_t; 60c6557e7fSMartin Schwidefsky typedef u16 __compat_gid_t; 61c6557e7fSMartin Schwidefsky typedef u32 __compat_uid32_t; 62c6557e7fSMartin Schwidefsky typedef u32 __compat_gid32_t; 63c6557e7fSMartin Schwidefsky typedef u16 compat_mode_t; 64c6557e7fSMartin Schwidefsky typedef u32 compat_ino_t; 65c6557e7fSMartin Schwidefsky typedef u16 compat_dev_t; 66c6557e7fSMartin Schwidefsky typedef s32 compat_off_t; 67c6557e7fSMartin Schwidefsky typedef s64 compat_loff_t; 68c6557e7fSMartin Schwidefsky typedef u16 compat_nlink_t; 69c6557e7fSMartin Schwidefsky typedef u16 compat_ipc_pid_t; 70c6557e7fSMartin Schwidefsky typedef s32 compat_daddr_t; 71c6557e7fSMartin Schwidefsky typedef u32 compat_caddr_t; 72c6557e7fSMartin Schwidefsky typedef __kernel_fsid_t compat_fsid_t; 73c6557e7fSMartin Schwidefsky typedef s32 compat_key_t; 74c6557e7fSMartin Schwidefsky typedef s32 compat_timer_t; 75c6557e7fSMartin Schwidefsky 76c6557e7fSMartin Schwidefsky typedef s32 compat_int_t; 77c6557e7fSMartin Schwidefsky typedef s32 compat_long_t; 78c6557e7fSMartin Schwidefsky typedef s64 compat_s64; 79c6557e7fSMartin Schwidefsky typedef u32 compat_uint_t; 80c6557e7fSMartin Schwidefsky typedef u32 compat_ulong_t; 81c6557e7fSMartin Schwidefsky typedef u64 compat_u64; 82751f409dSDenys Vlasenko typedef u32 compat_uptr_t; 83c6557e7fSMartin Schwidefsky 84e4371f60SHeiko Carstens typedef struct { 85e4371f60SHeiko Carstens u32 mask; 86e4371f60SHeiko Carstens u32 addr; 87e4371f60SHeiko Carstens } __aligned(8) psw_compat_t; 88e4371f60SHeiko Carstens 89e4371f60SHeiko Carstens typedef struct { 90e4371f60SHeiko Carstens psw_compat_t psw; 91e4371f60SHeiko Carstens u32 gprs[NUM_GPRS]; 92e4371f60SHeiko Carstens u32 acrs[NUM_ACRS]; 93e4371f60SHeiko Carstens u32 orig_gpr2; 94e4371f60SHeiko Carstens } s390_compat_regs; 95e4371f60SHeiko Carstens 96e4371f60SHeiko Carstens typedef struct { 97e4371f60SHeiko Carstens u32 gprs_high[NUM_GPRS]; 98e4371f60SHeiko Carstens } s390_compat_regs_high; 99e4371f60SHeiko Carstens 100c6557e7fSMartin Schwidefsky struct compat_timespec { 101c6557e7fSMartin Schwidefsky compat_time_t tv_sec; 102c6557e7fSMartin Schwidefsky s32 tv_nsec; 103c6557e7fSMartin Schwidefsky }; 104c6557e7fSMartin Schwidefsky 105c6557e7fSMartin Schwidefsky struct compat_timeval { 106c6557e7fSMartin Schwidefsky compat_time_t tv_sec; 107c6557e7fSMartin Schwidefsky s32 tv_usec; 108c6557e7fSMartin Schwidefsky }; 109c6557e7fSMartin Schwidefsky 110c6557e7fSMartin Schwidefsky struct compat_stat { 111c6557e7fSMartin Schwidefsky compat_dev_t st_dev; 112c6557e7fSMartin Schwidefsky u16 __pad1; 113c6557e7fSMartin Schwidefsky compat_ino_t st_ino; 114c6557e7fSMartin Schwidefsky compat_mode_t st_mode; 115c6557e7fSMartin Schwidefsky compat_nlink_t st_nlink; 116c6557e7fSMartin Schwidefsky __compat_uid_t st_uid; 117c6557e7fSMartin Schwidefsky __compat_gid_t st_gid; 118c6557e7fSMartin Schwidefsky compat_dev_t st_rdev; 119c6557e7fSMartin Schwidefsky u16 __pad2; 120c6557e7fSMartin Schwidefsky u32 st_size; 121c6557e7fSMartin Schwidefsky u32 st_blksize; 122c6557e7fSMartin Schwidefsky u32 st_blocks; 123c6557e7fSMartin Schwidefsky u32 st_atime; 124c6557e7fSMartin Schwidefsky u32 st_atime_nsec; 125c6557e7fSMartin Schwidefsky u32 st_mtime; 126c6557e7fSMartin Schwidefsky u32 st_mtime_nsec; 127c6557e7fSMartin Schwidefsky u32 st_ctime; 128c6557e7fSMartin Schwidefsky u32 st_ctime_nsec; 129c6557e7fSMartin Schwidefsky u32 __unused4; 130c6557e7fSMartin Schwidefsky u32 __unused5; 131c6557e7fSMartin Schwidefsky }; 132c6557e7fSMartin Schwidefsky 133c6557e7fSMartin Schwidefsky struct compat_flock { 134c6557e7fSMartin Schwidefsky short l_type; 135c6557e7fSMartin Schwidefsky short l_whence; 136c6557e7fSMartin Schwidefsky compat_off_t l_start; 137c6557e7fSMartin Schwidefsky compat_off_t l_len; 138c6557e7fSMartin Schwidefsky compat_pid_t l_pid; 139c6557e7fSMartin Schwidefsky }; 140c6557e7fSMartin Schwidefsky 141c6557e7fSMartin Schwidefsky #define F_GETLK64 12 142c6557e7fSMartin Schwidefsky #define F_SETLK64 13 143c6557e7fSMartin Schwidefsky #define F_SETLKW64 14 144c6557e7fSMartin Schwidefsky 145c6557e7fSMartin Schwidefsky struct compat_flock64 { 146c6557e7fSMartin Schwidefsky short l_type; 147c6557e7fSMartin Schwidefsky short l_whence; 148c6557e7fSMartin Schwidefsky compat_loff_t l_start; 149c6557e7fSMartin Schwidefsky compat_loff_t l_len; 150c6557e7fSMartin Schwidefsky compat_pid_t l_pid; 151c6557e7fSMartin Schwidefsky }; 152c6557e7fSMartin Schwidefsky 153c6557e7fSMartin Schwidefsky struct compat_statfs { 154b8668fd0SHeiko Carstens u32 f_type; 155b8668fd0SHeiko Carstens u32 f_bsize; 156b8668fd0SHeiko Carstens u32 f_blocks; 157b8668fd0SHeiko Carstens u32 f_bfree; 158b8668fd0SHeiko Carstens u32 f_bavail; 159b8668fd0SHeiko Carstens u32 f_files; 160b8668fd0SHeiko Carstens u32 f_ffree; 161c6557e7fSMartin Schwidefsky compat_fsid_t f_fsid; 162b8668fd0SHeiko Carstens u32 f_namelen; 163b8668fd0SHeiko Carstens u32 f_frsize; 164b8668fd0SHeiko Carstens u32 f_flags; 165b8668fd0SHeiko Carstens u32 f_spare[4]; 166b8668fd0SHeiko Carstens }; 167b8668fd0SHeiko Carstens 168b8668fd0SHeiko Carstens struct compat_statfs64 { 169b8668fd0SHeiko Carstens u32 f_type; 170b8668fd0SHeiko Carstens u32 f_bsize; 171b8668fd0SHeiko Carstens u64 f_blocks; 172b8668fd0SHeiko Carstens u64 f_bfree; 173b8668fd0SHeiko Carstens u64 f_bavail; 174b8668fd0SHeiko Carstens u64 f_files; 175b8668fd0SHeiko Carstens u64 f_ffree; 176b8668fd0SHeiko Carstens compat_fsid_t f_fsid; 177b8668fd0SHeiko Carstens u32 f_namelen; 178b8668fd0SHeiko Carstens u32 f_frsize; 179b8668fd0SHeiko Carstens u32 f_flags; 180b8668fd0SHeiko Carstens u32 f_spare[4]; 181c6557e7fSMartin Schwidefsky }; 182c6557e7fSMartin Schwidefsky 183c6557e7fSMartin Schwidefsky #define COMPAT_RLIM_INFINITY 0xffffffff 184c6557e7fSMartin Schwidefsky 185c6557e7fSMartin Schwidefsky typedef u32 compat_old_sigset_t; /* at least 32 bits */ 186c6557e7fSMartin Schwidefsky 187c6557e7fSMartin Schwidefsky #define _COMPAT_NSIG 64 188c6557e7fSMartin Schwidefsky #define _COMPAT_NSIG_BPW 32 189c6557e7fSMartin Schwidefsky 190c6557e7fSMartin Schwidefsky typedef u32 compat_sigset_word; 191c6557e7fSMartin Schwidefsky 192751f409dSDenys Vlasenko typedef union compat_sigval { 193751f409dSDenys Vlasenko compat_int_t sival_int; 194751f409dSDenys Vlasenko compat_uptr_t sival_ptr; 195751f409dSDenys Vlasenko } compat_sigval_t; 196751f409dSDenys Vlasenko 197751f409dSDenys Vlasenko typedef struct compat_siginfo { 198751f409dSDenys Vlasenko int si_signo; 199751f409dSDenys Vlasenko int si_errno; 200751f409dSDenys Vlasenko int si_code; 201751f409dSDenys Vlasenko 202751f409dSDenys Vlasenko union { 203751f409dSDenys Vlasenko int _pad[128/sizeof(int) - 3]; 204751f409dSDenys Vlasenko 205751f409dSDenys Vlasenko /* kill() */ 206751f409dSDenys Vlasenko struct { 207751f409dSDenys Vlasenko pid_t _pid; /* sender's pid */ 208751f409dSDenys Vlasenko uid_t _uid; /* sender's uid */ 209751f409dSDenys Vlasenko } _kill; 210751f409dSDenys Vlasenko 211751f409dSDenys Vlasenko /* POSIX.1b timers */ 212751f409dSDenys Vlasenko struct { 213751f409dSDenys Vlasenko compat_timer_t _tid; /* timer id */ 214751f409dSDenys Vlasenko int _overrun; /* overrun count */ 215751f409dSDenys Vlasenko compat_sigval_t _sigval; /* same as below */ 216751f409dSDenys Vlasenko int _sys_private; /* not to be passed to user */ 217751f409dSDenys Vlasenko } _timer; 218751f409dSDenys Vlasenko 219751f409dSDenys Vlasenko /* POSIX.1b signals */ 220751f409dSDenys Vlasenko struct { 221751f409dSDenys Vlasenko pid_t _pid; /* sender's pid */ 222751f409dSDenys Vlasenko uid_t _uid; /* sender's uid */ 223751f409dSDenys Vlasenko compat_sigval_t _sigval; 224751f409dSDenys Vlasenko } _rt; 225751f409dSDenys Vlasenko 226751f409dSDenys Vlasenko /* SIGCHLD */ 227751f409dSDenys Vlasenko struct { 228751f409dSDenys Vlasenko pid_t _pid; /* which child */ 229751f409dSDenys Vlasenko uid_t _uid; /* sender's uid */ 230751f409dSDenys Vlasenko int _status;/* exit code */ 231751f409dSDenys Vlasenko compat_clock_t _utime; 232751f409dSDenys Vlasenko compat_clock_t _stime; 233751f409dSDenys Vlasenko } _sigchld; 234751f409dSDenys Vlasenko 235751f409dSDenys Vlasenko /* SIGILL, SIGFPE, SIGSEGV, SIGBUS */ 236751f409dSDenys Vlasenko struct { 237751f409dSDenys Vlasenko __u32 _addr; /* faulting insn/memory ref. - pointer */ 238751f409dSDenys Vlasenko } _sigfault; 239751f409dSDenys Vlasenko 240751f409dSDenys Vlasenko /* SIGPOLL */ 241751f409dSDenys Vlasenko struct { 242751f409dSDenys Vlasenko int _band; /* POLL_IN, POLL_OUT, POLL_MSG */ 243751f409dSDenys Vlasenko int _fd; 244751f409dSDenys Vlasenko } _sigpoll; 245751f409dSDenys Vlasenko } _sifields; 246751f409dSDenys Vlasenko } compat_siginfo_t; 247751f409dSDenys Vlasenko 248751f409dSDenys Vlasenko /* 249751f409dSDenys Vlasenko * How these fields are to be accessed. 250751f409dSDenys Vlasenko */ 251751f409dSDenys Vlasenko #define si_pid _sifields._kill._pid 252751f409dSDenys Vlasenko #define si_uid _sifields._kill._uid 253751f409dSDenys Vlasenko #define si_status _sifields._sigchld._status 254751f409dSDenys Vlasenko #define si_utime _sifields._sigchld._utime 255751f409dSDenys Vlasenko #define si_stime _sifields._sigchld._stime 256751f409dSDenys Vlasenko #define si_value _sifields._rt._sigval 257751f409dSDenys Vlasenko #define si_int _sifields._rt._sigval.sival_int 258751f409dSDenys Vlasenko #define si_ptr _sifields._rt._sigval.sival_ptr 259751f409dSDenys Vlasenko #define si_addr _sifields._sigfault._addr 260751f409dSDenys Vlasenko #define si_band _sifields._sigpoll._band 261751f409dSDenys Vlasenko #define si_fd _sifields._sigpoll._fd 262751f409dSDenys Vlasenko #define si_tid _sifields._timer._tid 263751f409dSDenys Vlasenko #define si_overrun _sifields._timer._overrun 264751f409dSDenys Vlasenko 265c6557e7fSMartin Schwidefsky #define COMPAT_OFF_T_MAX 0x7fffffff 266c6557e7fSMartin Schwidefsky #define COMPAT_LOFF_T_MAX 0x7fffffffffffffffL 267c6557e7fSMartin Schwidefsky 268c6557e7fSMartin Schwidefsky /* 269c6557e7fSMartin Schwidefsky * A pointer passed in from user mode. This should not 270c6557e7fSMartin Schwidefsky * be used for syscall parameters, just declare them 271c6557e7fSMartin Schwidefsky * as pointers because the syscall entry code will have 272c6557e7fSMartin Schwidefsky * appropriately converted them already. 273c6557e7fSMartin Schwidefsky */ 274c6557e7fSMartin Schwidefsky 275c6557e7fSMartin Schwidefsky static inline void __user *compat_ptr(compat_uptr_t uptr) 276c6557e7fSMartin Schwidefsky { 277c6557e7fSMartin Schwidefsky return (void __user *)(unsigned long)(uptr & 0x7fffffffUL); 278c6557e7fSMartin Schwidefsky } 279c6557e7fSMartin Schwidefsky 280c6557e7fSMartin Schwidefsky static inline compat_uptr_t ptr_to_compat(void __user *uptr) 281c6557e7fSMartin Schwidefsky { 282c6557e7fSMartin Schwidefsky return (u32)(unsigned long)uptr; 283c6557e7fSMartin Schwidefsky } 284c6557e7fSMartin Schwidefsky 2857757591aSHeiko Carstens #ifdef CONFIG_COMPAT 2867757591aSHeiko Carstens 2877757591aSHeiko Carstens static inline int is_compat_task(void) 2887757591aSHeiko Carstens { 2899eb31be3SHeiko Carstens return test_thread_flag(TIF_31BIT); 2907757591aSHeiko Carstens } 2917757591aSHeiko Carstens 292c41d68a5SH. Peter Anvin static inline void __user *arch_compat_alloc_user_space(long len) 293c6557e7fSMartin Schwidefsky { 294c6557e7fSMartin Schwidefsky unsigned long stack; 295c6557e7fSMartin Schwidefsky 296c6557e7fSMartin Schwidefsky stack = KSTK_ESP(current); 2977757591aSHeiko Carstens if (is_compat_task()) 298c6557e7fSMartin Schwidefsky stack &= 0x7fffffffUL; 299c6557e7fSMartin Schwidefsky return (void __user *) (stack - len); 300c6557e7fSMartin Schwidefsky } 301c6557e7fSMartin Schwidefsky 3020f58104cSHeiko Carstens #endif 3030f58104cSHeiko Carstens 304c6557e7fSMartin Schwidefsky struct compat_ipc64_perm { 305c6557e7fSMartin Schwidefsky compat_key_t key; 306c6557e7fSMartin Schwidefsky __compat_uid32_t uid; 307c6557e7fSMartin Schwidefsky __compat_gid32_t gid; 308c6557e7fSMartin Schwidefsky __compat_uid32_t cuid; 309c6557e7fSMartin Schwidefsky __compat_gid32_t cgid; 310c6557e7fSMartin Schwidefsky compat_mode_t mode; 311c6557e7fSMartin Schwidefsky unsigned short __pad1; 312c6557e7fSMartin Schwidefsky unsigned short seq; 313c6557e7fSMartin Schwidefsky unsigned short __pad2; 314c6557e7fSMartin Schwidefsky unsigned int __unused1; 315c6557e7fSMartin Schwidefsky unsigned int __unused2; 316c6557e7fSMartin Schwidefsky }; 317c6557e7fSMartin Schwidefsky 318c6557e7fSMartin Schwidefsky struct compat_semid64_ds { 319c6557e7fSMartin Schwidefsky struct compat_ipc64_perm sem_perm; 320c6557e7fSMartin Schwidefsky compat_time_t sem_otime; 321c6557e7fSMartin Schwidefsky compat_ulong_t __pad1; 322c6557e7fSMartin Schwidefsky compat_time_t sem_ctime; 323c6557e7fSMartin Schwidefsky compat_ulong_t __pad2; 324c6557e7fSMartin Schwidefsky compat_ulong_t sem_nsems; 325c6557e7fSMartin Schwidefsky compat_ulong_t __unused1; 326c6557e7fSMartin Schwidefsky compat_ulong_t __unused2; 327c6557e7fSMartin Schwidefsky }; 328c6557e7fSMartin Schwidefsky 329c6557e7fSMartin Schwidefsky struct compat_msqid64_ds { 330c6557e7fSMartin Schwidefsky struct compat_ipc64_perm msg_perm; 331c6557e7fSMartin Schwidefsky compat_time_t msg_stime; 332c6557e7fSMartin Schwidefsky compat_ulong_t __pad1; 333c6557e7fSMartin Schwidefsky compat_time_t msg_rtime; 334c6557e7fSMartin Schwidefsky compat_ulong_t __pad2; 335c6557e7fSMartin Schwidefsky compat_time_t msg_ctime; 336c6557e7fSMartin Schwidefsky compat_ulong_t __pad3; 337c6557e7fSMartin Schwidefsky compat_ulong_t msg_cbytes; 338c6557e7fSMartin Schwidefsky compat_ulong_t msg_qnum; 339c6557e7fSMartin Schwidefsky compat_ulong_t msg_qbytes; 340c6557e7fSMartin Schwidefsky compat_pid_t msg_lspid; 341c6557e7fSMartin Schwidefsky compat_pid_t msg_lrpid; 342c6557e7fSMartin Schwidefsky compat_ulong_t __unused1; 343c6557e7fSMartin Schwidefsky compat_ulong_t __unused2; 344c6557e7fSMartin Schwidefsky }; 345c6557e7fSMartin Schwidefsky 346c6557e7fSMartin Schwidefsky struct compat_shmid64_ds { 347c6557e7fSMartin Schwidefsky struct compat_ipc64_perm shm_perm; 348c6557e7fSMartin Schwidefsky compat_size_t shm_segsz; 349c6557e7fSMartin Schwidefsky compat_time_t shm_atime; 350c6557e7fSMartin Schwidefsky compat_ulong_t __pad1; 351c6557e7fSMartin Schwidefsky compat_time_t shm_dtime; 352c6557e7fSMartin Schwidefsky compat_ulong_t __pad2; 353c6557e7fSMartin Schwidefsky compat_time_t shm_ctime; 354c6557e7fSMartin Schwidefsky compat_ulong_t __pad3; 355c6557e7fSMartin Schwidefsky compat_pid_t shm_cpid; 356c6557e7fSMartin Schwidefsky compat_pid_t shm_lpid; 357c6557e7fSMartin Schwidefsky compat_ulong_t shm_nattch; 358c6557e7fSMartin Schwidefsky compat_ulong_t __unused1; 359c6557e7fSMartin Schwidefsky compat_ulong_t __unused2; 360c6557e7fSMartin Schwidefsky }; 361c6557e7fSMartin Schwidefsky #endif /* _ASM_S390X_COMPAT_H */ 362