Merge branch 'timers-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull timekeeping updates from Thomas Gleixner: "The timers and timekeeping departement provides: - Another large y2038 update with further preparations for providing the y2038 safe timespecs closer to the syscalls. - An overhaul of the SHCMT clocksource driver - SPDX license identifier updates - Small cleanups and fixes all over the place" * 'timers-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (31 commits) tick/sched : Remove redundant cpu_online() check clocksource/drivers/dw_apb: Add reset control clocksource: Remove obsolete CLOCKSOURCE_OF_DECLARE clocksource/drivers: Unify the names to timer-* format clocksource/drivers/sh_cmt: Add R-Car gen3 support dt-bindings: timer: renesas: cmt: document R-Car gen3 support clocksource/drivers/sh_cmt: Properly line-wrap sh_cmt_of_table[] initializer clocksource/drivers/sh_cmt: Fix clocksource width for 32-bit machines clocksource/drivers/sh_cmt: Fixup for 64-bit machines clocksource/drivers/sh_tmu: Convert to SPDX identifiers clocksource/drivers/sh_mtu2: Convert to SPDX identifiers clocksource/drivers/sh_cmt: Convert to SPDX identifiers clocksource/drivers/renesas-ostm: Convert to SPDX identifiers clocksource: Convert to using %pOFn instead of device_node.name tick/broadcast: Remove redundant check RISC-V: Request newstat syscalls y2038: signal: Change rt_sigtimedwait to use __kernel_timespec y2038: socket: Change recvmmsg to use __kernel_timespec y2038: sched: Change sched_rr_get_interval to use __kernel_timespec y2038: utimes: Rework #ifdef guards for compat syscalls ...
This commit is contained in:
@@ -1,3 +1,25 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
#ifndef __ASM_GENERIC_COMPAT_H
|
||||
#define __ASM_GENERIC_COMPAT_H
|
||||
|
||||
/* This is an empty stub for 32-bit-only architectures */
|
||||
/* These types are common across all compat ABIs */
|
||||
typedef u32 compat_size_t;
|
||||
typedef s32 compat_ssize_t;
|
||||
typedef s32 compat_clock_t;
|
||||
typedef s32 compat_pid_t;
|
||||
typedef u32 compat_ino_t;
|
||||
typedef s32 compat_off_t;
|
||||
typedef s64 compat_loff_t;
|
||||
typedef s32 compat_daddr_t;
|
||||
typedef s32 compat_timer_t;
|
||||
typedef s32 compat_key_t;
|
||||
typedef s16 compat_short_t;
|
||||
typedef s32 compat_int_t;
|
||||
typedef s32 compat_long_t;
|
||||
typedef u16 compat_ushort_t;
|
||||
typedef u32 compat_uint_t;
|
||||
typedef u32 compat_ulong_t;
|
||||
typedef u32 compat_uptr_t;
|
||||
typedef u32 compat_aio_context_t;
|
||||
|
||||
#endif
|
||||
|
@@ -1,13 +0,0 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
#include <uapi/asm-generic/unistd.h>
|
||||
#include <linux/export.h>
|
||||
|
||||
/*
|
||||
* These are required system calls, we should
|
||||
* invert the logic eventually and let them
|
||||
* be selected by default.
|
||||
*/
|
||||
#if __BITS_PER_LONG == 32
|
||||
#define __ARCH_WANT_STAT64
|
||||
#define __ARCH_WANT_SYS_LLSEEK
|
||||
#endif
|
@@ -262,9 +262,6 @@ extern int clocksource_i8253_init(void);
|
||||
#define TIMER_OF_DECLARE(name, compat, fn) \
|
||||
OF_DECLARE_1_RET(timer, name, compat, fn)
|
||||
|
||||
#define CLOCKSOURCE_OF_DECLARE(name, compat, fn) \
|
||||
TIMER_OF_DECLARE(name, compat, fn)
|
||||
|
||||
#ifdef CONFIG_TIMER_PROBE
|
||||
extern void timer_probe(void);
|
||||
#else
|
||||
|
@@ -7,7 +7,7 @@
|
||||
*/
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/compat_time.h>
|
||||
#include <linux/time.h>
|
||||
|
||||
#include <linux/stat.h>
|
||||
#include <linux/param.h> /* for HZ */
|
||||
@@ -113,19 +113,12 @@ typedef struct compat_sigaltstack {
|
||||
typedef __compat_uid32_t compat_uid_t;
|
||||
typedef __compat_gid32_t compat_gid_t;
|
||||
|
||||
typedef compat_ulong_t compat_aio_context_t;
|
||||
|
||||
struct compat_sel_arg_struct;
|
||||
struct rusage;
|
||||
|
||||
struct compat_utimbuf {
|
||||
compat_time_t actime;
|
||||
compat_time_t modtime;
|
||||
};
|
||||
|
||||
struct compat_itimerval {
|
||||
struct compat_timeval it_interval;
|
||||
struct compat_timeval it_value;
|
||||
struct old_timeval32 it_interval;
|
||||
struct old_timeval32 it_value;
|
||||
};
|
||||
|
||||
struct itimerval;
|
||||
@@ -149,7 +142,7 @@ struct compat_timex {
|
||||
compat_long_t constant;
|
||||
compat_long_t precision;
|
||||
compat_long_t tolerance;
|
||||
struct compat_timeval time;
|
||||
struct old_timeval32 time;
|
||||
compat_long_t tick;
|
||||
compat_long_t ppsfreq;
|
||||
compat_long_t jitter;
|
||||
@@ -310,8 +303,8 @@ struct compat_rlimit {
|
||||
};
|
||||
|
||||
struct compat_rusage {
|
||||
struct compat_timeval ru_utime;
|
||||
struct compat_timeval ru_stime;
|
||||
struct old_timeval32 ru_utime;
|
||||
struct old_timeval32 ru_stime;
|
||||
compat_long_t ru_maxrss;
|
||||
compat_long_t ru_ixrss;
|
||||
compat_long_t ru_idrss;
|
||||
@@ -460,8 +453,8 @@ int copy_siginfo_to_user32(struct compat_siginfo __user *to, const kernel_siginf
|
||||
int get_compat_sigevent(struct sigevent *event,
|
||||
const struct compat_sigevent __user *u_event);
|
||||
|
||||
static inline int compat_timeval_compare(struct compat_timeval *lhs,
|
||||
struct compat_timeval *rhs)
|
||||
static inline int old_timeval32_compare(struct old_timeval32 *lhs,
|
||||
struct old_timeval32 *rhs)
|
||||
{
|
||||
if (lhs->tv_sec < rhs->tv_sec)
|
||||
return -1;
|
||||
@@ -470,8 +463,8 @@ static inline int compat_timeval_compare(struct compat_timeval *lhs,
|
||||
return lhs->tv_usec - rhs->tv_usec;
|
||||
}
|
||||
|
||||
static inline int compat_timespec_compare(struct compat_timespec *lhs,
|
||||
struct compat_timespec *rhs)
|
||||
static inline int old_timespec32_compare(struct old_timespec32 *lhs,
|
||||
struct old_timespec32 *rhs)
|
||||
{
|
||||
if (lhs->tv_sec < rhs->tv_sec)
|
||||
return -1;
|
||||
@@ -555,12 +548,12 @@ 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 compat_timespec __user *timeout);
|
||||
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,
|
||||
struct io_event __user *events,
|
||||
struct compat_timespec __user *timeout,
|
||||
struct old_timespec32 __user *timeout,
|
||||
const struct __compat_aio_sigset __user *usig);
|
||||
|
||||
/* fs/cookies.c */
|
||||
@@ -645,11 +638,11 @@ asmlinkage long compat_sys_sendfile64(int out_fd, int in_fd,
|
||||
asmlinkage long compat_sys_pselect6(int n, compat_ulong_t __user *inp,
|
||||
compat_ulong_t __user *outp,
|
||||
compat_ulong_t __user *exp,
|
||||
struct compat_timespec __user *tsp,
|
||||
struct old_timespec32 __user *tsp,
|
||||
void __user *sig);
|
||||
asmlinkage long compat_sys_ppoll(struct pollfd __user *ufds,
|
||||
unsigned int nfds,
|
||||
struct compat_timespec __user *tsp,
|
||||
struct old_timespec32 __user *tsp,
|
||||
const compat_sigset_t __user *sigmask,
|
||||
compat_size_t sigsetsize);
|
||||
|
||||
@@ -674,15 +667,15 @@ asmlinkage long compat_sys_newfstat(unsigned int fd,
|
||||
|
||||
/* fs/timerfd.c */
|
||||
asmlinkage long compat_sys_timerfd_gettime(int ufd,
|
||||
struct compat_itimerspec __user *otmr);
|
||||
struct old_itimerspec32 __user *otmr);
|
||||
asmlinkage long compat_sys_timerfd_settime(int ufd, int flags,
|
||||
const struct compat_itimerspec __user *utmr,
|
||||
struct compat_itimerspec __user *otmr);
|
||||
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 compat_timespec __user *t,
|
||||
struct old_timespec32 __user *t,
|
||||
int flags);
|
||||
|
||||
/* kernel/exit.c */
|
||||
@@ -694,7 +687,7 @@ 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 compat_timespec __user *utime, u32 __user *uaddr2,
|
||||
struct old_timespec32 __user *utime, u32 __user *uaddr2,
|
||||
u32 val3);
|
||||
asmlinkage long
|
||||
compat_sys_set_robust_list(struct compat_robust_list_head __user *head,
|
||||
@@ -704,8 +697,8 @@ 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 compat_timespec __user *rqtp,
|
||||
struct compat_timespec __user *rmtp);
|
||||
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,
|
||||
@@ -725,19 +718,19 @@ 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 compat_itimerspec __user *setting);
|
||||
struct old_itimerspec32 __user *setting);
|
||||
asmlinkage long compat_sys_timer_settime(timer_t timer_id, int flags,
|
||||
struct compat_itimerspec __user *new,
|
||||
struct compat_itimerspec __user *old);
|
||||
struct old_itimerspec32 __user *new,
|
||||
struct old_itimerspec32 __user *old);
|
||||
asmlinkage long compat_sys_clock_settime(clockid_t which_clock,
|
||||
struct compat_timespec __user *tp);
|
||||
struct old_timespec32 __user *tp);
|
||||
asmlinkage long compat_sys_clock_gettime(clockid_t which_clock,
|
||||
struct compat_timespec __user *tp);
|
||||
struct old_timespec32 __user *tp);
|
||||
asmlinkage long compat_sys_clock_getres(clockid_t which_clock,
|
||||
struct compat_timespec __user *tp);
|
||||
struct old_timespec32 __user *tp);
|
||||
asmlinkage long compat_sys_clock_nanosleep(clockid_t which_clock, int flags,
|
||||
struct compat_timespec __user *rqtp,
|
||||
struct compat_timespec __user *rmtp);
|
||||
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,
|
||||
@@ -751,7 +744,7 @@ 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 compat_timespec __user *interval);
|
||||
struct old_timespec32 __user *interval);
|
||||
|
||||
/* kernel/signal.c */
|
||||
asmlinkage long compat_sys_sigaltstack(const compat_stack_t __user *uss_ptr,
|
||||
@@ -771,7 +764,7 @@ 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,
|
||||
struct compat_siginfo __user *uinfo,
|
||||
struct compat_timespec __user *uts, compat_size_t sigsetsize);
|
||||
struct old_timespec32 __user *uts, compat_size_t sigsetsize);
|
||||
asmlinkage long compat_sys_rt_sigqueueinfo(compat_pid_t pid, int sig,
|
||||
struct compat_siginfo __user *uinfo);
|
||||
/* No generic prototype for rt_sigreturn */
|
||||
@@ -785,9 +778,9 @@ asmlinkage long compat_sys_setrlimit(unsigned int resource,
|
||||
asmlinkage long compat_sys_getrusage(int who, struct compat_rusage __user *ru);
|
||||
|
||||
/* kernel/time.c */
|
||||
asmlinkage long compat_sys_gettimeofday(struct compat_timeval __user *tv,
|
||||
asmlinkage long compat_sys_gettimeofday(struct old_timeval32 __user *tv,
|
||||
struct timezone __user *tz);
|
||||
asmlinkage long compat_sys_settimeofday(struct compat_timeval __user *tv,
|
||||
asmlinkage long compat_sys_settimeofday(struct old_timeval32 __user *tv,
|
||||
struct timezone __user *tz);
|
||||
asmlinkage long compat_sys_adjtimex(struct compat_timex __user *utp);
|
||||
|
||||
@@ -801,11 +794,11 @@ asmlinkage long compat_sys_mq_open(const char __user *u_name,
|
||||
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 compat_timespec __user *u_abs_timeout);
|
||||
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 compat_timespec __user *u_abs_timeout);
|
||||
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,
|
||||
@@ -822,7 +815,7 @@ 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 compat_timespec __user *timeout);
|
||||
unsigned nsems, const struct old_timespec32 __user *timeout);
|
||||
|
||||
/* ipc/shm.c */
|
||||
asmlinkage long compat_sys_shmctl(int first, int second, void __user *uptr);
|
||||
@@ -879,7 +872,7 @@ asmlinkage long compat_sys_rt_tgsigqueueinfo(compat_pid_t tgid,
|
||||
struct compat_siginfo __user *uinfo);
|
||||
asmlinkage long compat_sys_recvmmsg(int fd, struct compat_mmsghdr __user *mmsg,
|
||||
unsigned vlen, unsigned int flags,
|
||||
struct compat_timespec __user *timeout);
|
||||
struct old_timespec32 __user *timeout);
|
||||
asmlinkage long compat_sys_wait4(compat_pid_t pid,
|
||||
compat_uint_t __user *stat_addr, int options,
|
||||
struct compat_rusage __user *ru);
|
||||
@@ -931,7 +924,7 @@ asmlinkage long compat_sys_pwritev64v2(unsigned long fd,
|
||||
asmlinkage long compat_sys_open(const char __user *filename, int flags,
|
||||
umode_t mode);
|
||||
asmlinkage long compat_sys_utimes(const char __user *filename,
|
||||
struct compat_timeval __user *t);
|
||||
struct old_timeval32 __user *t);
|
||||
|
||||
/* __ARCH_WANT_SYSCALL_NO_FLAGS */
|
||||
asmlinkage long compat_sys_signalfd(int ufd,
|
||||
@@ -945,15 +938,15 @@ asmlinkage long compat_sys_newlstat(const char __user *filename,
|
||||
struct compat_stat __user *statbuf);
|
||||
|
||||
/* __ARCH_WANT_SYSCALL_DEPRECATED */
|
||||
asmlinkage long compat_sys_time(compat_time_t __user *tloc);
|
||||
asmlinkage long compat_sys_time(old_time32_t __user *tloc);
|
||||
asmlinkage long compat_sys_utime(const char __user *filename,
|
||||
struct compat_utimbuf __user *t);
|
||||
struct old_utimbuf32 __user *t);
|
||||
asmlinkage long compat_sys_futimesat(unsigned int dfd,
|
||||
const char __user *filename,
|
||||
struct compat_timeval __user *t);
|
||||
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 compat_timeval __user *tvp);
|
||||
struct old_timeval32 __user *tvp);
|
||||
asmlinkage long compat_sys_ustat(unsigned dev, struct compat_ustat __user *u32);
|
||||
asmlinkage long compat_sys_recv(int fd, void __user *buf, compat_size_t len,
|
||||
unsigned flags);
|
||||
@@ -986,7 +979,7 @@ asmlinkage long compat_sys_sigaction(int sig,
|
||||
#endif
|
||||
|
||||
/* obsolete: kernel/time/time.c */
|
||||
asmlinkage long compat_sys_stime(compat_time_t __user *tptr);
|
||||
asmlinkage long compat_sys_stime(old_time32_t __user *tptr);
|
||||
|
||||
/* obsolete: net/socket.c */
|
||||
asmlinkage long compat_sys_socketcall(int call, u32 __user *args);
|
||||
@@ -1005,15 +998,15 @@ static inline bool in_compat_syscall(void) { return is_compat_task(); }
|
||||
#endif
|
||||
|
||||
/**
|
||||
* ns_to_compat_timeval - Compat version of ns_to_timeval
|
||||
* ns_to_old_timeval32 - Compat version of ns_to_timeval
|
||||
* @nsec: the nanoseconds value to be converted
|
||||
*
|
||||
* Returns the compat_timeval representation of the nsec parameter.
|
||||
* Returns the old_timeval32 representation of the nsec parameter.
|
||||
*/
|
||||
static inline struct compat_timeval ns_to_compat_timeval(s64 nsec)
|
||||
static inline struct old_timeval32 ns_to_old_timeval32(s64 nsec)
|
||||
{
|
||||
struct timeval tv;
|
||||
struct compat_timeval ctv;
|
||||
struct old_timeval32 ctv;
|
||||
|
||||
tv = ns_to_timeval(nsec);
|
||||
ctv.tv_sec = tv.tv_sec;
|
||||
|
@@ -1,32 +0,0 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
#ifndef _LINUX_COMPAT_TIME_H
|
||||
#define _LINUX_COMPAT_TIME_H
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/time64.h>
|
||||
|
||||
typedef s32 compat_time_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_itimerspec {
|
||||
struct compat_timespec it_interval;
|
||||
struct compat_timespec it_value;
|
||||
};
|
||||
|
||||
extern int compat_get_timespec64(struct timespec64 *, const void __user *);
|
||||
extern int compat_put_timespec64(const struct timespec64 *, void __user *);
|
||||
extern int get_compat_itimerspec64(struct itimerspec64 *its,
|
||||
const struct compat_itimerspec __user *uits);
|
||||
extern int put_compat_itimerspec64(const struct itimerspec64 *its,
|
||||
struct compat_itimerspec __user *uits);
|
||||
|
||||
#endif /* _LINUX_COMPAT_TIME_H */
|
@@ -27,10 +27,10 @@ struct compat_elf_prstatus
|
||||
compat_pid_t pr_ppid;
|
||||
compat_pid_t pr_pgrp;
|
||||
compat_pid_t pr_sid;
|
||||
struct compat_timeval pr_utime;
|
||||
struct compat_timeval pr_stime;
|
||||
struct compat_timeval pr_cutime;
|
||||
struct compat_timeval pr_cstime;
|
||||
struct old_timeval32 pr_utime;
|
||||
struct old_timeval32 pr_stime;
|
||||
struct old_timeval32 pr_cutime;
|
||||
struct old_timeval32 pr_cstime;
|
||||
compat_elf_gregset_t pr_reg;
|
||||
#ifdef CONFIG_BINFMT_ELF_FDPIC
|
||||
compat_ulong_t pr_exec_fdpic_loadmap;
|
||||
|
@@ -10,7 +10,7 @@
|
||||
#include <linux/time64.h>
|
||||
|
||||
struct timespec;
|
||||
struct compat_timespec;
|
||||
struct old_timespec32;
|
||||
struct pollfd;
|
||||
|
||||
enum timespec_type {
|
||||
@@ -40,7 +40,7 @@ struct restart_block {
|
||||
enum timespec_type type;
|
||||
union {
|
||||
struct __kernel_timespec __user *rmtp;
|
||||
struct compat_timespec __user *compat_rmtp;
|
||||
struct old_timespec32 __user *compat_rmtp;
|
||||
};
|
||||
u64 expires;
|
||||
} nanosleep;
|
||||
|
@@ -348,7 +348,7 @@ struct ucred {
|
||||
extern int move_addr_to_kernel(void __user *uaddr, int ulen, struct sockaddr_storage *kaddr);
|
||||
extern int put_cmsg(struct msghdr*, int level, int type, int len, void *data);
|
||||
|
||||
struct timespec;
|
||||
struct timespec64;
|
||||
|
||||
/* The __sys_...msg variants allow MSG_CMSG_COMPAT iff
|
||||
* forbid_cmsg_compat==false
|
||||
@@ -358,7 +358,7 @@ extern long __sys_recvmsg(int fd, struct user_msghdr __user *msg,
|
||||
extern long __sys_sendmsg(int fd, struct user_msghdr __user *msg,
|
||||
unsigned int flags, bool forbid_cmsg_compat);
|
||||
extern int __sys_recvmmsg(int fd, struct mmsghdr __user *mmsg, unsigned int vlen,
|
||||
unsigned int flags, struct timespec *timeout);
|
||||
unsigned int flags, struct timespec64 *timeout);
|
||||
extern int __sys_sendmmsg(int fd, struct mmsghdr __user *mmsg,
|
||||
unsigned int vlen, unsigned int flags,
|
||||
bool forbid_cmsg_compat);
|
||||
|
@@ -60,7 +60,7 @@ struct tms;
|
||||
struct utimbuf;
|
||||
struct mq_attr;
|
||||
struct compat_stat;
|
||||
struct compat_timeval;
|
||||
struct old_timeval32;
|
||||
struct robust_list_head;
|
||||
struct getcpu_cache;
|
||||
struct old_linux_dirent;
|
||||
@@ -513,7 +513,8 @@ asmlinkage long sys_timerfd_gettime(int ufd, struct __kernel_itimerspec __user *
|
||||
|
||||
/* fs/utimes.c */
|
||||
asmlinkage long sys_utimensat(int dfd, const char __user *filename,
|
||||
struct timespec __user *utimes, int flags);
|
||||
struct __kernel_timespec __user *utimes,
|
||||
int flags);
|
||||
|
||||
/* kernel/acct.c */
|
||||
asmlinkage long sys_acct(const char __user *name);
|
||||
@@ -613,7 +614,7 @@ asmlinkage long sys_sched_yield(void);
|
||||
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 timespec __user *interval);
|
||||
struct __kernel_timespec __user *interval);
|
||||
|
||||
/* kernel/signal.c */
|
||||
asmlinkage long sys_restart_syscall(void);
|
||||
@@ -634,7 +635,7 @@ asmlinkage long sys_rt_sigprocmask(int how, sigset_t __user *set,
|
||||
asmlinkage long sys_rt_sigpending(sigset_t __user *set, size_t sigsetsize);
|
||||
asmlinkage long sys_rt_sigtimedwait(const sigset_t __user *uthese,
|
||||
siginfo_t __user *uinfo,
|
||||
const struct timespec __user *uts,
|
||||
const struct __kernel_timespec __user *uts,
|
||||
size_t sigsetsize);
|
||||
asmlinkage long sys_rt_sigqueueinfo(pid_t pid, int sig, siginfo_t __user *uinfo);
|
||||
|
||||
@@ -829,7 +830,7 @@ asmlinkage long sys_perf_event_open(
|
||||
asmlinkage long sys_accept4(int, struct sockaddr __user *, int __user *, int);
|
||||
asmlinkage long sys_recvmmsg(int fd, struct mmsghdr __user *msg,
|
||||
unsigned int vlen, unsigned flags,
|
||||
struct timespec __user *timeout);
|
||||
struct __kernel_timespec __user *timeout);
|
||||
|
||||
asmlinkage long sys_wait4(pid_t pid, int __user *stat_addr,
|
||||
int options, struct rusage __user *ru);
|
||||
@@ -954,8 +955,6 @@ asmlinkage long sys_access(const char __user *filename, int mode);
|
||||
asmlinkage long sys_rename(const char __user *oldname,
|
||||
const char __user *newname);
|
||||
asmlinkage long sys_symlink(const char __user *old, const char __user *new);
|
||||
asmlinkage long sys_utimes(char __user *filename,
|
||||
struct timeval __user *utimes);
|
||||
#if defined(__ARCH_WANT_STAT64) || defined(__ARCH_WANT_COMPAT_STAT64)
|
||||
asmlinkage long sys_stat64(const char __user *filename,
|
||||
struct stat64 __user *statbuf);
|
||||
@@ -985,14 +984,18 @@ 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);
|
||||
#ifdef __ARCH_WANT_SYS_UTIME
|
||||
asmlinkage long sys_utime(char __user *filename,
|
||||
struct utimbuf __user *times);
|
||||
asmlinkage long sys_utimes(char __user *filename,
|
||||
struct timeval __user *utimes);
|
||||
asmlinkage long sys_futimesat(int dfd, const char __user *filename,
|
||||
struct timeval __user *utimes);
|
||||
#endif
|
||||
asmlinkage long sys_creat(const char __user *pathname, umode_t mode);
|
||||
asmlinkage long sys_getdents(unsigned int fd,
|
||||
struct linux_dirent __user *dirent,
|
||||
unsigned int count);
|
||||
asmlinkage long sys_futimesat(int dfd, const char __user *filename,
|
||||
struct timeval __user *utimes);
|
||||
asmlinkage long sys_select(int n, fd_set __user *inp, fd_set __user *outp,
|
||||
fd_set __user *exp, struct timeval __user *tvp);
|
||||
asmlinkage long sys_poll(struct pollfd __user *ufds, unsigned int nfds,
|
||||
|
@@ -13,6 +13,36 @@
|
||||
|
||||
#define TIME_T_MAX (time_t)((1UL << ((sizeof(time_t) << 3) - 1)) - 1)
|
||||
|
||||
typedef s32 old_time32_t;
|
||||
|
||||
struct old_timespec32 {
|
||||
old_time32_t tv_sec;
|
||||
s32 tv_nsec;
|
||||
};
|
||||
|
||||
struct old_timeval32 {
|
||||
old_time32_t tv_sec;
|
||||
s32 tv_usec;
|
||||
};
|
||||
|
||||
struct old_itimerspec32 {
|
||||
struct old_timespec32 it_interval;
|
||||
struct old_timespec32 it_value;
|
||||
};
|
||||
|
||||
struct old_utimbuf32 {
|
||||
old_time32_t actime;
|
||||
old_time32_t modtime;
|
||||
};
|
||||
|
||||
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);
|
||||
|
||||
|
||||
#if __BITS_PER_LONG == 64
|
||||
|
||||
/* timespec64 is defined as timespec here */
|
||||
@@ -105,16 +135,6 @@ static inline bool timespec_valid(const struct timespec *ts)
|
||||
return true;
|
||||
}
|
||||
|
||||
static inline bool timespec_valid_strict(const struct timespec *ts)
|
||||
{
|
||||
if (!timespec_valid(ts))
|
||||
return false;
|
||||
/* Disallow values that could overflow ktime_t */
|
||||
if ((unsigned long long)ts->tv_sec >= KTIME_SEC_MAX)
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* timespec_to_ns - Convert timespec to nanoseconds
|
||||
* @ts: pointer to the timespec variable to be converted
|
||||
@@ -149,19 +169,6 @@ static __always_inline void timespec_add_ns(struct timespec *a, u64 ns)
|
||||
a->tv_nsec = ns;
|
||||
}
|
||||
|
||||
/**
|
||||
* time_to_tm - converts the calendar time to local broken-down time
|
||||
*
|
||||
* @totalsecs the number of seconds elapsed since 00:00:00 on January 1, 1970,
|
||||
* Coordinated Universal Time (UTC).
|
||||
* @offset offset seconds adding to totalsecs.
|
||||
* @result pointer to struct tm variable to receive broken-down time
|
||||
*/
|
||||
static inline void time_to_tm(time_t totalsecs, int offset, struct tm *result)
|
||||
{
|
||||
time64_to_tm(totalsecs, offset, result);
|
||||
}
|
||||
|
||||
static inline unsigned long mktime(const unsigned int year,
|
||||
const unsigned int mon, const unsigned int day,
|
||||
const unsigned int hour, const unsigned int min,
|
||||
@@ -183,8 +190,6 @@ static inline bool timeval_valid(const struct timeval *tv)
|
||||
return true;
|
||||
}
|
||||
|
||||
extern struct timespec timespec_trunc(struct timespec t, unsigned int gran);
|
||||
|
||||
/**
|
||||
* timeval_to_ns - Convert timeval to nanoseconds
|
||||
* @ts: pointer to the timeval variable to be converted
|
||||
@@ -208,18 +213,17 @@ extern struct timeval ns_to_timeval(const s64 nsec);
|
||||
extern struct __kernel_old_timeval ns_to_kernel_old_timeval(s64 nsec);
|
||||
|
||||
/*
|
||||
* New aliases for compat time functions. These will be used to replace
|
||||
* the compat code so it can be shared between 32-bit and 64-bit builds
|
||||
* both of which provide compatibility with old 32-bit tasks.
|
||||
* Old names for the 32-bit time_t interfaces, these will be removed
|
||||
* when everything uses the new names.
|
||||
*/
|
||||
#define old_time32_t compat_time_t
|
||||
#define old_timeval32 compat_timeval
|
||||
#define old_timespec32 compat_timespec
|
||||
#define old_itimerspec32 compat_itimerspec
|
||||
#define ns_to_old_timeval32 ns_to_compat_timeval
|
||||
#define get_old_itimerspec32 get_compat_itimerspec64
|
||||
#define put_old_itimerspec32 put_compat_itimerspec64
|
||||
#define get_old_timespec32 compat_get_timespec64
|
||||
#define put_old_timespec32 compat_put_timespec64
|
||||
#define compat_time_t old_time32_t
|
||||
#define compat_timeval old_timeval32
|
||||
#define compat_timespec old_timespec32
|
||||
#define compat_itimerspec old_itimerspec32
|
||||
#define ns_to_compat_timeval ns_to_old_timeval32
|
||||
#define get_compat_itimerspec64 get_old_itimerspec32
|
||||
#define put_compat_itimerspec64 put_old_itimerspec32
|
||||
#define compat_get_timespec64 get_old_timespec32
|
||||
#define compat_put_timespec64 put_old_timespec32
|
||||
|
||||
#endif
|
||||
|
@@ -266,9 +266,6 @@ extern int update_persistent_clock64(struct timespec64 now);
|
||||
* deprecated aliases, don't use in new code
|
||||
*/
|
||||
#define getnstimeofday64(ts) ktime_get_real_ts64(ts)
|
||||
#define get_monotonic_boottime64(ts) ktime_get_boottime_ts64(ts)
|
||||
#define getrawmonotonic64(ts) ktime_get_raw_ts64(ts)
|
||||
#define timekeeping_clocktai64(ts) ktime_get_clocktai_ts64(ts)
|
||||
|
||||
static inline struct timespec64 current_kernel_time64(void)
|
||||
{
|
||||
@@ -279,13 +276,4 @@ static inline struct timespec64 current_kernel_time64(void)
|
||||
return ts;
|
||||
}
|
||||
|
||||
static inline struct timespec64 get_monotonic_coarse64(void)
|
||||
{
|
||||
struct timespec64 ts;
|
||||
|
||||
ktime_get_coarse_ts64(&ts);
|
||||
|
||||
return ts;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
@@ -6,27 +6,18 @@
|
||||
* over time so we can remove the file here.
|
||||
*/
|
||||
|
||||
extern void do_gettimeofday(struct timeval *tv);
|
||||
unsigned long get_seconds(void);
|
||||
|
||||
static inline struct timespec current_kernel_time(void)
|
||||
static inline void do_gettimeofday(struct timeval *tv)
|
||||
{
|
||||
struct timespec64 ts64;
|
||||
struct timespec64 now;
|
||||
|
||||
ktime_get_coarse_real_ts64(&ts64);
|
||||
|
||||
return timespec64_to_timespec(ts64);
|
||||
ktime_get_real_ts64(&now);
|
||||
tv->tv_sec = now.tv_sec;
|
||||
tv->tv_usec = now.tv_nsec/1000;
|
||||
}
|
||||
|
||||
/**
|
||||
* Deprecated. Use do_settimeofday64().
|
||||
*/
|
||||
static inline int do_settimeofday(const struct timespec *ts)
|
||||
static inline unsigned long get_seconds(void)
|
||||
{
|
||||
struct timespec64 ts64;
|
||||
|
||||
ts64 = timespec_to_timespec64(*ts);
|
||||
return do_settimeofday64(&ts64);
|
||||
return ktime_get_real_seconds();
|
||||
}
|
||||
|
||||
static inline void getnstimeofday(struct timespec *ts)
|
||||
@@ -45,14 +36,6 @@ static inline void ktime_get_ts(struct timespec *ts)
|
||||
*ts = timespec64_to_timespec(ts64);
|
||||
}
|
||||
|
||||
static inline void ktime_get_real_ts(struct timespec *ts)
|
||||
{
|
||||
struct timespec64 ts64;
|
||||
|
||||
ktime_get_real_ts64(&ts64);
|
||||
*ts = timespec64_to_timespec(ts64);
|
||||
}
|
||||
|
||||
static inline void getrawmonotonic(struct timespec *ts)
|
||||
{
|
||||
struct timespec64 ts64;
|
||||
@@ -61,15 +44,6 @@ static inline void getrawmonotonic(struct timespec *ts)
|
||||
*ts = timespec64_to_timespec(ts64);
|
||||
}
|
||||
|
||||
static inline struct timespec get_monotonic_coarse(void)
|
||||
{
|
||||
struct timespec64 ts64;
|
||||
|
||||
ktime_get_coarse_ts64(&ts64);
|
||||
|
||||
return timespec64_to_timespec(ts64);
|
||||
}
|
||||
|
||||
static inline void getboottime(struct timespec *ts)
|
||||
{
|
||||
struct timespec64 ts64;
|
||||
@@ -78,19 +52,6 @@ static inline void getboottime(struct timespec *ts)
|
||||
*ts = timespec64_to_timespec(ts64);
|
||||
}
|
||||
|
||||
/*
|
||||
* Timespec interfaces utilizing the ktime based ones
|
||||
*/
|
||||
static inline void get_monotonic_boottime(struct timespec *ts)
|
||||
{
|
||||
*ts = ktime_to_timespec(ktime_get_boottime());
|
||||
}
|
||||
|
||||
static inline void timekeeping_clocktai(struct timespec *ts)
|
||||
{
|
||||
*ts = ktime_to_timespec(ktime_get_clocktai());
|
||||
}
|
||||
|
||||
/*
|
||||
* Persistent clock related interfaces
|
||||
*/
|
||||
|
@@ -242,10 +242,12 @@ __SYSCALL(__NR_tee, sys_tee)
|
||||
/* fs/stat.c */
|
||||
#define __NR_readlinkat 78
|
||||
__SYSCALL(__NR_readlinkat, sys_readlinkat)
|
||||
#if defined(__ARCH_WANT_NEW_STAT) || defined(__ARCH_WANT_STAT64)
|
||||
#define __NR3264_fstatat 79
|
||||
__SC_3264(__NR3264_fstatat, sys_fstatat64, sys_newfstatat)
|
||||
#define __NR3264_fstat 80
|
||||
__SC_3264(__NR3264_fstat, sys_fstat64, sys_newfstat)
|
||||
#endif
|
||||
|
||||
/* fs/sync.c */
|
||||
#define __NR_sync 81
|
||||
|
Reference in New Issue
Block a user