Merge branch 'timers-2038-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull year 2038 updates from Thomas Gleixner:
"Another round of changes to make the kernel ready for 2038. After lots
of preparatory work this is the first set of syscalls which are 2038
safe:
403 clock_gettime64
404 clock_settime64
405 clock_adjtime64
406 clock_getres_time64
407 clock_nanosleep_time64
408 timer_gettime64
409 timer_settime64
410 timerfd_gettime64
411 timerfd_settime64
412 utimensat_time64
413 pselect6_time64
414 ppoll_time64
416 io_pgetevents_time64
417 recvmmsg_time64
418 mq_timedsend_time64
419 mq_timedreceiv_time64
420 semtimedop_time64
421 rt_sigtimedwait_time64
422 futex_time64
423 sched_rr_get_interval_time64
The syscall numbers are identical all over the architectures"
* 'timers-2038-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (36 commits)
riscv: Use latest system call ABI
checksyscalls: fix up mq_timedreceive and stat exceptions
unicore32: Fix __ARCH_WANT_STAT64 definition
asm-generic: Make time32 syscall numbers optional
asm-generic: Drop getrlimit and setrlimit syscalls from default list
32-bit userspace ABI: introduce ARCH_32BIT_OFF_T config option
compat ABI: use non-compat openat and open_by_handle_at variants
y2038: add 64-bit time_t syscalls to all 32-bit architectures
y2038: rename old time and utime syscalls
y2038: remove struct definition redirects
y2038: use time32 syscall names on 32-bit
syscalls: remove obsolete __IGNORE_ macros
y2038: syscalls: rename y2038 compat syscalls
x86/x32: use time64 versions of sigtimedwait and recvmmsg
timex: change syscalls to use struct __kernel_timex
timex: use __kernel_timex internally
sparc64: add custom adjtimex/clock_adjtime functions
time: fix sys_timer_settime prototype
time: Add struct __kernel_timex
time: make adjtime compat handling available for 32 bit
...
This commit is contained in:
@@ -132,37 +132,6 @@ struct compat_tms {
|
||||
compat_clock_t tms_cstime;
|
||||
};
|
||||
|
||||
struct compat_timex {
|
||||
compat_uint_t modes;
|
||||
compat_long_t offset;
|
||||
compat_long_t freq;
|
||||
compat_long_t maxerror;
|
||||
compat_long_t esterror;
|
||||
compat_int_t status;
|
||||
compat_long_t constant;
|
||||
compat_long_t precision;
|
||||
compat_long_t tolerance;
|
||||
struct old_timeval32 time;
|
||||
compat_long_t tick;
|
||||
compat_long_t ppsfreq;
|
||||
compat_long_t jitter;
|
||||
compat_int_t shift;
|
||||
compat_long_t stabil;
|
||||
compat_long_t jitcnt;
|
||||
compat_long_t calcnt;
|
||||
compat_long_t errcnt;
|
||||
compat_long_t stbcnt;
|
||||
compat_int_t tai;
|
||||
|
||||
compat_int_t:32; compat_int_t:32; compat_int_t:32; compat_int_t:32;
|
||||
compat_int_t:32; compat_int_t:32; compat_int_t:32; compat_int_t:32;
|
||||
compat_int_t:32; compat_int_t:32; compat_int_t:32;
|
||||
};
|
||||
|
||||
struct timex;
|
||||
int compat_get_timex(struct timex *, const struct compat_timex __user *);
|
||||
int compat_put_timex(struct compat_timex __user *, const struct timex *);
|
||||
|
||||
#define _COMPAT_NSIG_WORDS (_COMPAT_NSIG / _COMPAT_NSIG_BPW)
|
||||
|
||||
typedef struct {
|
||||
@@ -551,11 +520,6 @@ int __compat_save_altstack(compat_stack_t __user *, unsigned long);
|
||||
asmlinkage long compat_sys_io_setup(unsigned nr_reqs, u32 __user *ctx32p);
|
||||
asmlinkage long compat_sys_io_submit(compat_aio_context_t ctx_id, int nr,
|
||||
u32 __user *iocb);
|
||||
asmlinkage long compat_sys_io_getevents(compat_aio_context_t ctx_id,
|
||||
compat_long_t min_nr,
|
||||
compat_long_t nr,
|
||||
struct io_event __user *events,
|
||||
struct old_timespec32 __user *timeout);
|
||||
asmlinkage long compat_sys_io_pgetevents(compat_aio_context_t ctx_id,
|
||||
compat_long_t min_nr,
|
||||
compat_long_t nr,
|
||||
@@ -648,7 +612,7 @@ asmlinkage long compat_sys_sendfile64(int out_fd, int in_fd,
|
||||
compat_loff_t __user *offset, compat_size_t count);
|
||||
|
||||
/* fs/select.c */
|
||||
asmlinkage long compat_sys_pselect6(int n, compat_ulong_t __user *inp,
|
||||
asmlinkage long compat_sys_pselect6_time32(int n, compat_ulong_t __user *inp,
|
||||
compat_ulong_t __user *outp,
|
||||
compat_ulong_t __user *exp,
|
||||
struct old_timespec32 __user *tsp,
|
||||
@@ -658,7 +622,7 @@ asmlinkage long compat_sys_pselect6_time64(int n, compat_ulong_t __user *inp,
|
||||
compat_ulong_t __user *exp,
|
||||
struct __kernel_timespec __user *tsp,
|
||||
void __user *sig);
|
||||
asmlinkage long compat_sys_ppoll(struct pollfd __user *ufds,
|
||||
asmlinkage long compat_sys_ppoll_time32(struct pollfd __user *ufds,
|
||||
unsigned int nfds,
|
||||
struct old_timespec32 __user *tsp,
|
||||
const compat_sigset_t __user *sigmask,
|
||||
@@ -688,19 +652,6 @@ asmlinkage long compat_sys_newfstat(unsigned int fd,
|
||||
|
||||
/* fs/sync.c: No generic prototype for sync_file_range and sync_file_range2 */
|
||||
|
||||
/* fs/timerfd.c */
|
||||
asmlinkage long compat_sys_timerfd_gettime(int ufd,
|
||||
struct old_itimerspec32 __user *otmr);
|
||||
asmlinkage long compat_sys_timerfd_settime(int ufd, int flags,
|
||||
const struct old_itimerspec32 __user *utmr,
|
||||
struct old_itimerspec32 __user *otmr);
|
||||
|
||||
/* fs/utimes.c */
|
||||
asmlinkage long compat_sys_utimensat(unsigned int dfd,
|
||||
const char __user *filename,
|
||||
struct old_timespec32 __user *t,
|
||||
int flags);
|
||||
|
||||
/* kernel/exit.c */
|
||||
asmlinkage long compat_sys_waitid(int, compat_pid_t,
|
||||
struct compat_siginfo __user *, int,
|
||||
@@ -709,9 +660,6 @@ asmlinkage long compat_sys_waitid(int, compat_pid_t,
|
||||
|
||||
|
||||
/* kernel/futex.c */
|
||||
asmlinkage long compat_sys_futex(u32 __user *uaddr, int op, u32 val,
|
||||
struct old_timespec32 __user *utime, u32 __user *uaddr2,
|
||||
u32 val3);
|
||||
asmlinkage long
|
||||
compat_sys_set_robust_list(struct compat_robust_list_head __user *head,
|
||||
compat_size_t len);
|
||||
@@ -719,10 +667,6 @@ asmlinkage long
|
||||
compat_sys_get_robust_list(int pid, compat_uptr_t __user *head_ptr,
|
||||
compat_size_t __user *len_ptr);
|
||||
|
||||
/* kernel/hrtimer.c */
|
||||
asmlinkage long compat_sys_nanosleep(struct old_timespec32 __user *rqtp,
|
||||
struct old_timespec32 __user *rmtp);
|
||||
|
||||
/* kernel/itimer.c */
|
||||
asmlinkage long compat_sys_getitimer(int which,
|
||||
struct compat_itimerval __user *it);
|
||||
@@ -740,20 +684,6 @@ asmlinkage long compat_sys_kexec_load(compat_ulong_t entry,
|
||||
asmlinkage long compat_sys_timer_create(clockid_t which_clock,
|
||||
struct compat_sigevent __user *timer_event_spec,
|
||||
timer_t __user *created_timer_id);
|
||||
asmlinkage long compat_sys_timer_gettime(timer_t timer_id,
|
||||
struct old_itimerspec32 __user *setting);
|
||||
asmlinkage long compat_sys_timer_settime(timer_t timer_id, int flags,
|
||||
struct old_itimerspec32 __user *new,
|
||||
struct old_itimerspec32 __user *old);
|
||||
asmlinkage long compat_sys_clock_settime(clockid_t which_clock,
|
||||
struct old_timespec32 __user *tp);
|
||||
asmlinkage long compat_sys_clock_gettime(clockid_t which_clock,
|
||||
struct old_timespec32 __user *tp);
|
||||
asmlinkage long compat_sys_clock_getres(clockid_t which_clock,
|
||||
struct old_timespec32 __user *tp);
|
||||
asmlinkage long compat_sys_clock_nanosleep(clockid_t which_clock, int flags,
|
||||
struct old_timespec32 __user *rqtp,
|
||||
struct old_timespec32 __user *rmtp);
|
||||
|
||||
/* kernel/ptrace.c */
|
||||
asmlinkage long compat_sys_ptrace(compat_long_t request, compat_long_t pid,
|
||||
@@ -766,8 +696,6 @@ asmlinkage long compat_sys_sched_setaffinity(compat_pid_t pid,
|
||||
asmlinkage long compat_sys_sched_getaffinity(compat_pid_t pid,
|
||||
unsigned int len,
|
||||
compat_ulong_t __user *user_mask_ptr);
|
||||
asmlinkage long compat_sys_sched_rr_get_interval(compat_pid_t pid,
|
||||
struct old_timespec32 __user *interval);
|
||||
|
||||
/* kernel/signal.c */
|
||||
asmlinkage long compat_sys_sigaltstack(const compat_stack_t __user *uss_ptr,
|
||||
@@ -785,7 +713,7 @@ asmlinkage long compat_sys_rt_sigprocmask(int how, compat_sigset_t __user *set,
|
||||
compat_size_t sigsetsize);
|
||||
asmlinkage long compat_sys_rt_sigpending(compat_sigset_t __user *uset,
|
||||
compat_size_t sigsetsize);
|
||||
asmlinkage long compat_sys_rt_sigtimedwait(compat_sigset_t __user *uthese,
|
||||
asmlinkage long compat_sys_rt_sigtimedwait_time32(compat_sigset_t __user *uthese,
|
||||
struct compat_siginfo __user *uinfo,
|
||||
struct old_timespec32 __user *uts, compat_size_t sigsetsize);
|
||||
asmlinkage long compat_sys_rt_sigtimedwait_time64(compat_sigset_t __user *uthese,
|
||||
@@ -808,7 +736,6 @@ asmlinkage long compat_sys_gettimeofday(struct old_timeval32 __user *tv,
|
||||
struct timezone __user *tz);
|
||||
asmlinkage long compat_sys_settimeofday(struct old_timeval32 __user *tv,
|
||||
struct timezone __user *tz);
|
||||
asmlinkage long compat_sys_adjtimex(struct compat_timex __user *utp);
|
||||
|
||||
/* kernel/timer.c */
|
||||
asmlinkage long compat_sys_sysinfo(struct compat_sysinfo __user *info);
|
||||
@@ -817,14 +744,6 @@ asmlinkage long compat_sys_sysinfo(struct compat_sysinfo __user *info);
|
||||
asmlinkage long compat_sys_mq_open(const char __user *u_name,
|
||||
int oflag, compat_mode_t mode,
|
||||
struct compat_mq_attr __user *u_attr);
|
||||
asmlinkage long compat_sys_mq_timedsend(mqd_t mqdes,
|
||||
const char __user *u_msg_ptr,
|
||||
compat_size_t msg_len, unsigned int msg_prio,
|
||||
const struct old_timespec32 __user *u_abs_timeout);
|
||||
asmlinkage ssize_t compat_sys_mq_timedreceive(mqd_t mqdes,
|
||||
char __user *u_msg_ptr,
|
||||
compat_size_t msg_len, unsigned int __user *u_msg_prio,
|
||||
const struct old_timespec32 __user *u_abs_timeout);
|
||||
asmlinkage long compat_sys_mq_notify(mqd_t mqdes,
|
||||
const struct compat_sigevent __user *u_notification);
|
||||
asmlinkage long compat_sys_mq_getsetattr(mqd_t mqdes,
|
||||
@@ -840,8 +759,6 @@ asmlinkage long compat_sys_msgsnd(int msqid, compat_uptr_t msgp,
|
||||
|
||||
/* ipc/sem.c */
|
||||
asmlinkage long compat_sys_semctl(int semid, int semnum, int cmd, int arg);
|
||||
asmlinkage long compat_sys_semtimedop(int semid, struct sembuf __user *tsems,
|
||||
unsigned nsems, const struct old_timespec32 __user *timeout);
|
||||
|
||||
/* ipc/shm.c */
|
||||
asmlinkage long compat_sys_shmctl(int first, int second, void __user *uptr);
|
||||
@@ -899,7 +816,7 @@ asmlinkage long compat_sys_rt_tgsigqueueinfo(compat_pid_t tgid,
|
||||
asmlinkage long compat_sys_recvmmsg_time64(int fd, struct compat_mmsghdr __user *mmsg,
|
||||
unsigned vlen, unsigned int flags,
|
||||
struct __kernel_timespec __user *timeout);
|
||||
asmlinkage long compat_sys_recvmmsg(int fd, struct compat_mmsghdr __user *mmsg,
|
||||
asmlinkage long compat_sys_recvmmsg_time32(int fd, struct compat_mmsghdr __user *mmsg,
|
||||
unsigned vlen, unsigned int flags,
|
||||
struct old_timespec32 __user *timeout);
|
||||
asmlinkage long compat_sys_wait4(compat_pid_t pid,
|
||||
@@ -910,8 +827,6 @@ asmlinkage long compat_sys_fanotify_mark(int, unsigned int, __u32, __u32,
|
||||
asmlinkage long compat_sys_open_by_handle_at(int mountdirfd,
|
||||
struct file_handle __user *handle,
|
||||
int flags);
|
||||
asmlinkage long compat_sys_clock_adjtime(clockid_t which_clock,
|
||||
struct compat_timex __user *tp);
|
||||
asmlinkage long compat_sys_sendmmsg(int fd, struct compat_mmsghdr __user *mmsg,
|
||||
unsigned vlen, unsigned int flags);
|
||||
asmlinkage ssize_t compat_sys_process_vm_readv(compat_pid_t pid,
|
||||
@@ -952,8 +867,6 @@ asmlinkage long compat_sys_pwritev64v2(unsigned long fd,
|
||||
/* __ARCH_WANT_SYSCALL_NO_AT */
|
||||
asmlinkage long compat_sys_open(const char __user *filename, int flags,
|
||||
umode_t mode);
|
||||
asmlinkage long compat_sys_utimes(const char __user *filename,
|
||||
struct old_timeval32 __user *t);
|
||||
|
||||
/* __ARCH_WANT_SYSCALL_NO_FLAGS */
|
||||
asmlinkage long compat_sys_signalfd(int ufd,
|
||||
@@ -967,12 +880,6 @@ asmlinkage long compat_sys_newlstat(const char __user *filename,
|
||||
struct compat_stat __user *statbuf);
|
||||
|
||||
/* __ARCH_WANT_SYSCALL_DEPRECATED */
|
||||
asmlinkage long compat_sys_time(old_time32_t __user *tloc);
|
||||
asmlinkage long compat_sys_utime(const char __user *filename,
|
||||
struct old_utimbuf32 __user *t);
|
||||
asmlinkage long compat_sys_futimesat(unsigned int dfd,
|
||||
const char __user *filename,
|
||||
struct old_timeval32 __user *t);
|
||||
asmlinkage long compat_sys_select(int n, compat_ulong_t __user *inp,
|
||||
compat_ulong_t __user *outp, compat_ulong_t __user *exp,
|
||||
struct old_timeval32 __user *tvp);
|
||||
@@ -1007,9 +914,6 @@ asmlinkage long compat_sys_sigaction(int sig,
|
||||
struct compat_old_sigaction __user *oact);
|
||||
#endif
|
||||
|
||||
/* obsolete: kernel/time/time.c */
|
||||
asmlinkage long compat_sys_stime(old_time32_t __user *tptr);
|
||||
|
||||
/* obsolete: net/socket.c */
|
||||
asmlinkage long compat_sys_socketcall(int call, u32 __user *args);
|
||||
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
O_NOATIME | O_CLOEXEC | O_PATH | __O_TMPFILE)
|
||||
|
||||
#ifndef force_o_largefile
|
||||
#define force_o_largefile() (BITS_PER_LONG != 32)
|
||||
#define force_o_largefile() (!IS_ENABLED(CONFIG_ARCH_32BIT_OFF_T))
|
||||
#endif
|
||||
|
||||
#if BITS_PER_LONG == 32
|
||||
|
||||
@@ -51,7 +51,7 @@ struct posix_clock;
|
||||
struct posix_clock_operations {
|
||||
struct module *owner;
|
||||
|
||||
int (*clock_adjtime)(struct posix_clock *pc, struct timex *tx);
|
||||
int (*clock_adjtime)(struct posix_clock *pc, struct __kernel_timex *tx);
|
||||
|
||||
int (*clock_gettime)(struct posix_clock *pc, struct timespec64 *ts);
|
||||
|
||||
|
||||
@@ -54,7 +54,7 @@ struct __sysctl_args;
|
||||
struct sysinfo;
|
||||
struct timespec;
|
||||
struct timeval;
|
||||
struct timex;
|
||||
struct __kernel_timex;
|
||||
struct timezone;
|
||||
struct tms;
|
||||
struct utimbuf;
|
||||
@@ -297,6 +297,11 @@ asmlinkage long sys_io_getevents(aio_context_t ctx_id,
|
||||
long nr,
|
||||
struct io_event __user *events,
|
||||
struct __kernel_timespec __user *timeout);
|
||||
asmlinkage long sys_io_getevents_time32(__u32 ctx_id,
|
||||
__s32 min_nr,
|
||||
__s32 nr,
|
||||
struct io_event __user *events,
|
||||
struct old_timespec32 __user *timeout);
|
||||
asmlinkage long sys_io_pgetevents(aio_context_t ctx_id,
|
||||
long min_nr,
|
||||
long nr,
|
||||
@@ -522,11 +527,19 @@ asmlinkage long sys_timerfd_settime(int ufd, int flags,
|
||||
const struct __kernel_itimerspec __user *utmr,
|
||||
struct __kernel_itimerspec __user *otmr);
|
||||
asmlinkage long sys_timerfd_gettime(int ufd, struct __kernel_itimerspec __user *otmr);
|
||||
asmlinkage long sys_timerfd_gettime32(int ufd,
|
||||
struct old_itimerspec32 __user *otmr);
|
||||
asmlinkage long sys_timerfd_settime32(int ufd, int flags,
|
||||
const struct old_itimerspec32 __user *utmr,
|
||||
struct old_itimerspec32 __user *otmr);
|
||||
|
||||
/* fs/utimes.c */
|
||||
asmlinkage long sys_utimensat(int dfd, const char __user *filename,
|
||||
struct __kernel_timespec __user *utimes,
|
||||
int flags);
|
||||
asmlinkage long sys_utimensat_time32(unsigned int dfd,
|
||||
const char __user *filename,
|
||||
struct old_timespec32 __user *t, int flags);
|
||||
|
||||
/* kernel/acct.c */
|
||||
asmlinkage long sys_acct(const char __user *name);
|
||||
@@ -555,6 +568,9 @@ asmlinkage long sys_unshare(unsigned long unshare_flags);
|
||||
asmlinkage long sys_futex(u32 __user *uaddr, int op, u32 val,
|
||||
struct __kernel_timespec __user *utime, u32 __user *uaddr2,
|
||||
u32 val3);
|
||||
asmlinkage long sys_futex_time32(u32 __user *uaddr, int op, u32 val,
|
||||
struct old_timespec32 __user *utime, u32 __user *uaddr2,
|
||||
u32 val3);
|
||||
asmlinkage long sys_get_robust_list(int pid,
|
||||
struct robust_list_head __user * __user *head_ptr,
|
||||
size_t __user *len_ptr);
|
||||
@@ -564,6 +580,8 @@ asmlinkage long sys_set_robust_list(struct robust_list_head __user *head,
|
||||
/* kernel/hrtimer.c */
|
||||
asmlinkage long sys_nanosleep(struct __kernel_timespec __user *rqtp,
|
||||
struct __kernel_timespec __user *rmtp);
|
||||
asmlinkage long sys_nanosleep_time32(struct old_timespec32 __user *rqtp,
|
||||
struct old_timespec32 __user *rmtp);
|
||||
|
||||
/* kernel/itimer.c */
|
||||
asmlinkage long sys_getitimer(int which, struct itimerval __user *value);
|
||||
@@ -591,7 +609,7 @@ asmlinkage long sys_timer_gettime(timer_t timer_id,
|
||||
asmlinkage long sys_timer_getoverrun(timer_t timer_id);
|
||||
asmlinkage long sys_timer_settime(timer_t timer_id, int flags,
|
||||
const struct __kernel_itimerspec __user *new_setting,
|
||||
struct itimerspec __user *old_setting);
|
||||
struct __kernel_itimerspec __user *old_setting);
|
||||
asmlinkage long sys_timer_delete(timer_t timer_id);
|
||||
asmlinkage long sys_clock_settime(clockid_t which_clock,
|
||||
const struct __kernel_timespec __user *tp);
|
||||
@@ -602,6 +620,20 @@ asmlinkage long sys_clock_getres(clockid_t which_clock,
|
||||
asmlinkage long sys_clock_nanosleep(clockid_t which_clock, int flags,
|
||||
const struct __kernel_timespec __user *rqtp,
|
||||
struct __kernel_timespec __user *rmtp);
|
||||
asmlinkage long sys_timer_gettime32(timer_t timer_id,
|
||||
struct old_itimerspec32 __user *setting);
|
||||
asmlinkage long sys_timer_settime32(timer_t timer_id, int flags,
|
||||
struct old_itimerspec32 __user *new,
|
||||
struct old_itimerspec32 __user *old);
|
||||
asmlinkage long sys_clock_settime32(clockid_t which_clock,
|
||||
struct old_timespec32 __user *tp);
|
||||
asmlinkage long sys_clock_gettime32(clockid_t which_clock,
|
||||
struct old_timespec32 __user *tp);
|
||||
asmlinkage long sys_clock_getres_time32(clockid_t which_clock,
|
||||
struct old_timespec32 __user *tp);
|
||||
asmlinkage long sys_clock_nanosleep_time32(clockid_t which_clock, int flags,
|
||||
struct old_timespec32 __user *rqtp,
|
||||
struct old_timespec32 __user *rmtp);
|
||||
|
||||
/* kernel/printk.c */
|
||||
asmlinkage long sys_syslog(int type, char __user *buf, int len);
|
||||
@@ -627,6 +659,8 @@ asmlinkage long sys_sched_get_priority_max(int policy);
|
||||
asmlinkage long sys_sched_get_priority_min(int policy);
|
||||
asmlinkage long sys_sched_rr_get_interval(pid_t pid,
|
||||
struct __kernel_timespec __user *interval);
|
||||
asmlinkage long sys_sched_rr_get_interval_time32(pid_t pid,
|
||||
struct old_timespec32 __user *interval);
|
||||
|
||||
/* kernel/signal.c */
|
||||
asmlinkage long sys_restart_syscall(void);
|
||||
@@ -695,7 +729,8 @@ asmlinkage long sys_gettimeofday(struct timeval __user *tv,
|
||||
struct timezone __user *tz);
|
||||
asmlinkage long sys_settimeofday(struct timeval __user *tv,
|
||||
struct timezone __user *tz);
|
||||
asmlinkage long sys_adjtimex(struct timex __user *txc_p);
|
||||
asmlinkage long sys_adjtimex(struct __kernel_timex __user *txc_p);
|
||||
asmlinkage long sys_adjtimex_time32(struct old_timex32 __user *txc_p);
|
||||
|
||||
/* kernel/timer.c */
|
||||
asmlinkage long sys_getpid(void);
|
||||
@@ -714,9 +749,18 @@ asmlinkage long sys_mq_timedsend(mqd_t mqdes, const char __user *msg_ptr, size_t
|
||||
asmlinkage long sys_mq_timedreceive(mqd_t mqdes, char __user *msg_ptr, size_t msg_len, unsigned int __user *msg_prio, const struct __kernel_timespec __user *abs_timeout);
|
||||
asmlinkage long sys_mq_notify(mqd_t mqdes, const struct sigevent __user *notification);
|
||||
asmlinkage long sys_mq_getsetattr(mqd_t mqdes, const struct mq_attr __user *mqstat, struct mq_attr __user *omqstat);
|
||||
asmlinkage long sys_mq_timedreceive_time32(mqd_t mqdes,
|
||||
char __user *u_msg_ptr,
|
||||
unsigned int msg_len, unsigned int __user *u_msg_prio,
|
||||
const struct old_timespec32 __user *u_abs_timeout);
|
||||
asmlinkage long sys_mq_timedsend_time32(mqd_t mqdes,
|
||||
const char __user *u_msg_ptr,
|
||||
unsigned int msg_len, unsigned int msg_prio,
|
||||
const struct old_timespec32 __user *u_abs_timeout);
|
||||
|
||||
/* ipc/msg.c */
|
||||
asmlinkage long sys_msgget(key_t key, int msgflg);
|
||||
asmlinkage long sys_old_msgctl(int msqid, int cmd, struct msqid_ds __user *buf);
|
||||
asmlinkage long sys_msgctl(int msqid, int cmd, struct msqid_ds __user *buf);
|
||||
asmlinkage long sys_msgrcv(int msqid, struct msgbuf __user *msgp,
|
||||
size_t msgsz, long msgtyp, int msgflg);
|
||||
@@ -726,14 +770,19 @@ asmlinkage long sys_msgsnd(int msqid, struct msgbuf __user *msgp,
|
||||
/* ipc/sem.c */
|
||||
asmlinkage long sys_semget(key_t key, int nsems, int semflg);
|
||||
asmlinkage long sys_semctl(int semid, int semnum, int cmd, unsigned long arg);
|
||||
asmlinkage long sys_old_semctl(int semid, int semnum, int cmd, unsigned long arg);
|
||||
asmlinkage long sys_semtimedop(int semid, struct sembuf __user *sops,
|
||||
unsigned nsops,
|
||||
const struct __kernel_timespec __user *timeout);
|
||||
asmlinkage long sys_semtimedop_time32(int semid, struct sembuf __user *sops,
|
||||
unsigned nsops,
|
||||
const struct old_timespec32 __user *timeout);
|
||||
asmlinkage long sys_semop(int semid, struct sembuf __user *sops,
|
||||
unsigned nsops);
|
||||
|
||||
/* ipc/shm.c */
|
||||
asmlinkage long sys_shmget(key_t key, size_t size, int flag);
|
||||
asmlinkage long sys_old_shmctl(int shmid, int cmd, struct shmid_ds __user *buf);
|
||||
asmlinkage long sys_shmctl(int shmid, int cmd, struct shmid_ds __user *buf);
|
||||
asmlinkage long sys_shmat(int shmid, char __user *shmaddr, int shmflg);
|
||||
asmlinkage long sys_shmdt(char __user *shmaddr);
|
||||
@@ -867,7 +916,9 @@ asmlinkage long sys_open_by_handle_at(int mountdirfd,
|
||||
struct file_handle __user *handle,
|
||||
int flags);
|
||||
asmlinkage long sys_clock_adjtime(clockid_t which_clock,
|
||||
struct timex __user *tx);
|
||||
struct __kernel_timex __user *tx);
|
||||
asmlinkage long sys_clock_adjtime32(clockid_t which_clock,
|
||||
struct old_timex32 __user *tx);
|
||||
asmlinkage long sys_syncfs(int fd);
|
||||
asmlinkage long sys_setns(int fd, int nstype);
|
||||
asmlinkage long sys_sendmmsg(int fd, struct mmsghdr __user *msg,
|
||||
@@ -1003,6 +1054,7 @@ asmlinkage long sys_alarm(unsigned int seconds);
|
||||
asmlinkage long sys_getpgrp(void);
|
||||
asmlinkage long sys_pause(void);
|
||||
asmlinkage long sys_time(time_t __user *tloc);
|
||||
asmlinkage long sys_time32(old_time32_t __user *tloc);
|
||||
#ifdef __ARCH_WANT_SYS_UTIME
|
||||
asmlinkage long sys_utime(char __user *filename,
|
||||
struct utimbuf __user *times);
|
||||
@@ -1011,6 +1063,13 @@ asmlinkage long sys_utimes(char __user *filename,
|
||||
asmlinkage long sys_futimesat(int dfd, const char __user *filename,
|
||||
struct timeval __user *utimes);
|
||||
#endif
|
||||
asmlinkage long sys_futimesat_time32(unsigned int dfd,
|
||||
const char __user *filename,
|
||||
struct old_timeval32 __user *t);
|
||||
asmlinkage long sys_utime32(const char __user *filename,
|
||||
struct old_utimbuf32 __user *t);
|
||||
asmlinkage long sys_utimes_time32(const char __user *filename,
|
||||
struct old_timeval32 __user *t);
|
||||
asmlinkage long sys_creat(const char __user *pathname, umode_t mode);
|
||||
asmlinkage long sys_getdents(unsigned int fd,
|
||||
struct linux_dirent __user *dirent,
|
||||
@@ -1035,6 +1094,7 @@ asmlinkage long sys_fork(void);
|
||||
|
||||
/* obsolete: kernel/time/time.c */
|
||||
asmlinkage long sys_stime(time_t __user *tptr);
|
||||
asmlinkage long sys_stime32(old_time32_t __user *tptr);
|
||||
|
||||
/* obsolete: kernel/signal.c */
|
||||
asmlinkage long sys_sigpending(old_sigset_t __user *uset);
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
*/
|
||||
|
||||
#include <linux/time64.h>
|
||||
#include <linux/timex.h>
|
||||
|
||||
#define TIME_T_MAX (time_t)((1UL << ((sizeof(time_t) << 3) - 1)) - 1)
|
||||
|
||||
@@ -35,13 +36,42 @@ struct old_utimbuf32 {
|
||||
old_time32_t modtime;
|
||||
};
|
||||
|
||||
struct old_timex32 {
|
||||
u32 modes;
|
||||
s32 offset;
|
||||
s32 freq;
|
||||
s32 maxerror;
|
||||
s32 esterror;
|
||||
s32 status;
|
||||
s32 constant;
|
||||
s32 precision;
|
||||
s32 tolerance;
|
||||
struct old_timeval32 time;
|
||||
s32 tick;
|
||||
s32 ppsfreq;
|
||||
s32 jitter;
|
||||
s32 shift;
|
||||
s32 stabil;
|
||||
s32 jitcnt;
|
||||
s32 calcnt;
|
||||
s32 errcnt;
|
||||
s32 stbcnt;
|
||||
s32 tai;
|
||||
|
||||
s32:32; s32:32; s32:32; s32:32;
|
||||
s32:32; s32:32; s32:32; s32:32;
|
||||
s32:32; s32:32; s32:32;
|
||||
};
|
||||
|
||||
extern int get_old_timespec32(struct timespec64 *, const void __user *);
|
||||
extern int put_old_timespec32(const struct timespec64 *, void __user *);
|
||||
extern int get_old_itimerspec32(struct itimerspec64 *its,
|
||||
const struct old_itimerspec32 __user *uits);
|
||||
extern int put_old_itimerspec32(const struct itimerspec64 *its,
|
||||
struct old_itimerspec32 __user *uits);
|
||||
|
||||
struct __kernel_timex;
|
||||
int get_old_timex32(struct __kernel_timex *, const struct old_timex32 __user *);
|
||||
int put_old_timex32(struct old_timex32 __user *, const struct __kernel_timex *);
|
||||
|
||||
#if __BITS_PER_LONG == 64
|
||||
|
||||
|
||||
@@ -7,14 +7,6 @@
|
||||
typedef __s64 time64_t;
|
||||
typedef __u64 timeu64_t;
|
||||
|
||||
/* CONFIG_64BIT_TIME enables new 64 bit time_t syscalls in the compat path
|
||||
* and 32-bit emulation.
|
||||
*/
|
||||
#ifndef CONFIG_64BIT_TIME
|
||||
#define __kernel_timespec timespec
|
||||
#define __kernel_itimerspec itimerspec
|
||||
#endif
|
||||
|
||||
#include <uapi/linux/time.h>
|
||||
|
||||
struct timespec64 {
|
||||
|
||||
@@ -151,7 +151,9 @@ extern unsigned long tick_nsec; /* SHIFTED_HZ period (nsec) */
|
||||
#define NTP_INTERVAL_FREQ (HZ)
|
||||
#define NTP_INTERVAL_LENGTH (NSEC_PER_SEC/NTP_INTERVAL_FREQ)
|
||||
|
||||
extern int do_adjtimex(struct timex *);
|
||||
extern int do_adjtimex(struct __kernel_timex *);
|
||||
extern int do_clock_adjtime(const clockid_t which_clock, struct __kernel_timex * ktx);
|
||||
|
||||
extern void hardpps(const struct timespec64 *, const struct timespec64 *);
|
||||
|
||||
int read_current_timer(unsigned long *timer_val);
|
||||
|
||||
Reference in New Issue
Block a user