Skip to contentSkip to conversation

posix_clocks: Prepare syscalls for 64 bit time_t conversion

PATCH Superseded Deepa Dinamani 7 participants 21 messages Jan 16, 2018 – Mar 12, 2018

Subsystems (22)
Network drivers x86 PowerPC MIPS +18 more subsystems

v3 of 5 Superseded Latest is v5 →

lore
Share & tools
lore
#0 lore raw

v3 cover posix_clocks: Prepare syscalls for 64 bit time_t conversion

The series is a preparation series for individual architectures to use 64 bit time_t syscalls in compat and 32 bit emulation modes.

This is a follow up to the series Arnd Bergmann posted:
https://sourceware.org/ml/libc-alpha/2015-05/msg00070.html [1]

Big picture is as per the lwn article:
https://lwn.net/Articles/643234/ [2]

The series is directed at converting posix clock syscalls:
clock_gettime, clock_settime, clock_getres and clock_nanosleep to use a new data structure __kernel_timespec at syscall boundaries. __kernel_timespec maintains 64 bit time_t across all execution modes.

vdso will be handled as part of each architecture when they enable support for 64 bit time_t.

The compat syscalls are repurposed to provide backward compatibility by using them as native syscalls as well for 32 bit architectures. They will continue to use timespec at syscall boundaries.

CONFIG_64_BIT_TIME controls whether the syscalls use __kernel_timespec or timespec at syscall boundaries.

The series does the following:
1. Enable compat syscalls on 32 bit architectures.
2. Add a new __kernel_timespec type to be used as the data structure for all the new syscalls.
3. Add new config CONFIG_64BIT_TIME(intead of the CONFIG_COMPAT_TIME in
[1] and [2] to switch to new definition of __kernel_timespec. It is the same as struct timespec otherwise.
4. Add new CONFIG_32BIT_TIME to conditionally compile compat syscalls.

* Changes since v2:
* Dropped the ARCH_HAS_64BIT_TIME config.
* Fixed zeroing out of higher order bits of tv_nsec for real.
* Addressed minor review comments from v1.
* Changes since v1:
* Introduce CONFIG_32BIT_TIME
* Fixed zeroing out of higher order bits of tv_nsec
* Included Arnd's changes to fix up use of compat headers

I decided against using LEGACY_TIME_SYSCALLS to conditionally compile legacy time syscalls such as sys_nanosleep because this will need to enclose compat_sys_nanosleep as well. So, defining it as

config LEGACY_TIME_SYSCALLS

     def_bool 64BIT || !64BIT_TIME

will not include compat_sys_nanosleep. We will instead need a new config to exclusively mark legacy syscalls.

Deepa Dinamani (10):
compat: Make compat helpers independent of CONFIG_COMPAT
include: Move compat_timespec/ timeval to compat_time.h
compat: enable compat_get/put_timespec64 always
arch: introduce CONFIG_64BIT_TIME
arch: Introduce CONFIG_COMPAT_32BIT_TIME
posix-clocks: Make compat syscalls depend on CONFIG_COMPAT_32BIT_TIME
include: Add new y2038 safe __kernel_timespec
fix get_timespec64() for y2038 safe compat interfaces change time types to new y2038 safe __kernel_* types
nanosleep: change time types to safe __kernel_* types

 arch/Kconfig                           | 15 +++++++++
 arch/arm64/include/asm/compat.h        | 11 -------
 arch/arm64/include/asm/stat.h          |  1 +
 arch/arm64/kernel/hw_breakpoint.c      |  1 -
 arch/arm64/kernel/perf_regs.c          |  2 +-
 arch/arm64/kernel/process.c            |  1 -
 arch/mips/include/asm/compat.h         | 11 -------
 arch/mips/kernel/signal32.c            |  2 +-
 arch/parisc/include/asm/compat.h       | 11 -------
 arch/powerpc/include/asm/compat.h      | 11 -------
 arch/powerpc/kernel/asm-offsets.c      |  2 +-
 arch/powerpc/oprofile/backtrace.c      |  2 +-
 arch/s390/hypfs/hypfs_sprp.c           |  1 -
 arch/s390/include/asm/compat.h         | 11 -------
 arch/s390/include/asm/elf.h            |  3 +-
 arch/s390/kvm/priv.c                   |  1 -
 arch/s390/pci/pci_clp.c                |  1 -
 arch/sparc/include/asm/compat.h        | 11 -------
 arch/tile/include/asm/compat.h         | 11 -------
 arch/x86/events/core.c                 |  2 +-
 arch/x86/include/asm/compat.h          | 11 -------
 arch/x86/include/asm/ftrace.h          |  2 +-
 arch/x86/include/asm/sys_ia32.h        |  2 +-
 arch/x86/kernel/sys_x86_64.c           |  2 +-
 drivers/s390/block/dasd_ioctl.c        |  1 -
 drivers/s390/char/fs3270.c             |  1 -
 drivers/s390/char/sclp_ctl.c           |  1 -
 drivers/s390/char/vmcp.c               |  1 -
 drivers/s390/cio/chsc_sch.c            |  1 -
 drivers/s390/net/qeth_core_main.c      |  2 +-
 include/linux/compat.h                 | 11 ++++---
 include/linux/compat_time.h            | 23 ++++++++++++++
 include/linux/restart_block.h          |  7 ++--
 include/linux/syscalls.h               | 12 +++----
 include/linux/time.h                   |  4 +--
 include/linux/time64.h                 | 10 +++++-
 include/uapi/asm-generic/posix_types.h |  1 +
 include/uapi/linux/time.h              |  7 ++++
 kernel/compat.c                        | 52 +++++-------------------------
 kernel/time/hrtimer.c                  | 10 ++++--
 kernel/time/posix-stubs.c              | 12 ++++---
 kernel/time/posix-timers.c             | 24 ++++++++++----
 kernel/time/time.c                     | 58 +++++++++++++++++++++++++++++++---
 43 files changed, 176 insertions(+), 190 deletions(-)
 create mode 100644 include/linux/compat_time.h

base-commit: 8418f88764046d0e8ca6a3c04a69a0e57189aa1e

Signature · 42 lines
2.14.1

Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
#2 lore raw

PATCH v3 2/10 include: Move compat_timespec/ timeval to compat_time.h

All the current architecture specific defines for these are the same. Refactor these common defines to a common header file.

The new common linux/compat_time.h is also useful as it will eventually be used to hold all the defines that are needed for compat time types that support non y2038 safe types. New architectures need not have to define these new types as they will only use new y2038 safe syscalls. This file can be deleted after y2038 when we stop supporting non y2038 safe syscalls.

The patch also requires an operation similar to:

git grep "asm/compat\.h" | cut -d ":" -f 1 | xargs -n 1 sed -i -e "s%asm/compat.h%linux/compat.h%g"

---
 arch/arm64/include/asm/compat.h   | 11 -----------
 arch/arm64/include/asm/stat.h     |  1 +
 arch/arm64/kernel/hw_breakpoint.c |  1 -
 arch/arm64/kernel/perf_regs.c     |  2 +-
 arch/arm64/kernel/process.c       |  1 -
 arch/mips/include/asm/compat.h    | 11 -----------
 arch/mips/kernel/signal32.c       |  2 +-
 arch/parisc/include/asm/compat.h  | 11 -----------
 arch/powerpc/include/asm/compat.h | 11 -----------
 arch/powerpc/kernel/asm-offsets.c |  2 +-
 arch/powerpc/oprofile/backtrace.c |  2 +-
 arch/s390/hypfs/hypfs_sprp.c      |  1 -
 arch/s390/include/asm/compat.h    | 11 -----------
 arch/s390/include/asm/elf.h       |  3 +--
 arch/s390/kvm/priv.c              |  1 -
 arch/s390/pci/pci_clp.c           |  1 -
 arch/sparc/include/asm/compat.h   | 11 -----------
 arch/tile/include/asm/compat.h    | 11 -----------
 arch/x86/events/core.c            |  2 +-
 arch/x86/include/asm/compat.h     | 11 -----------
 arch/x86/include/asm/ftrace.h     |  2 +-
 arch/x86/include/asm/sys_ia32.h   |  2 +-
 arch/x86/kernel/sys_x86_64.c      |  2 +-
 drivers/s390/block/dasd_ioctl.c   |  1 -
 drivers/s390/char/fs3270.c        |  1 -
 drivers/s390/char/sclp_ctl.c      |  1 -
 drivers/s390/char/vmcp.c          |  1 -
 drivers/s390/cio/chsc_sch.c       |  1 -
 drivers/s390/net/qeth_core_main.c |  2 +-
 include/linux/compat.h            |  1 +
 include/linux/compat_time.h       | 19 +++++++++++++++++++
 31 files changed, 31 insertions(+), 109 deletions(-)
 create mode 100644 include/linux/compat_time.h
arch/arm64/include/asm/compat.h +0 -11
index a3c7f271ad4c..977b5064afc1 100644
@@ -34,7 +34,6 @@
 
 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 u16		__compat_uid_t;
@@ -66,16 +65,6 @@ 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;
arch/arm64/include/asm/stat.h +1 -0
index 15e35598ac40..eab738019707 100644
@@ -20,6 +20,7 @@
 
 #ifdef CONFIG_COMPAT
 
+#include <linux/compat_time.h>
 #include <asm/compat.h>
 
 /*
arch/arm64/kernel/hw_breakpoint.c +0 -1
index 74bb56f656ef..413dbe530da8 100644
@@ -30,7 +30,6 @@
 #include <linux/smp.h>
 #include <linux/uaccess.h>
 
-#include <asm/compat.h>
 #include <asm/current.h>
 #include <asm/debug-monitors.h>
 #include <asm/hw_breakpoint.h>
arch/arm64/kernel/perf_regs.c +1 -1
index 1d091d048d04..929fc369d0be 100644
@@ -5,7 +5,7 @@
 #include <linux/bug.h>
 #include <linux/sched/task_stack.h>
 
-#include <asm/compat.h>
+#include <linux/compat.h>
 #include <asm/perf_regs.h>
 #include <asm/ptrace.h>
 
arch/arm64/kernel/process.c +0 -1
index ad8aeb098b31..a1cca69fc14f 100644
@@ -51,7 +51,6 @@
 #include <linux/thread_info.h>
 
 #include <asm/alternative.h>
-#include <asm/compat.h>
 #include <asm/cacheflush.h>
 #include <asm/exec.h>
 #include <asm/fpsimd.h>
arch/mips/include/asm/compat.h +0 -11
index 49691331ada4..ccbf14e33282 100644
@@ -14,7 +14,6 @@
 
 typedef u32		compat_size_t;
 typedef s32		compat_ssize_t;
-typedef s32		compat_time_t;
 typedef s32		compat_clock_t;
 typedef s32		compat_suseconds_t;
 
@@ -46,16 +45,6 @@ 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 {
 	compat_dev_t	st_dev;
 	s32		st_pad1[3];
arch/mips/kernel/signal32.c +1 -1
index cf5c7c05e5a3..a6b04c70a8cb 100644
@@ -14,7 +14,7 @@
 #include <linux/signal.h>
 #include <linux/syscalls.h>
 
-#include <asm/compat.h>
+#include <linux/compat.h>
 #include <asm/compat-signal.h>
 #include <linux/uaccess.h>
 #include <asm/unistd.h>
arch/parisc/include/asm/compat.h +0 -11
index acf8aa07cbe0..90f844b16beb 100644
@@ -13,7 +13,6 @@
 
 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;
@@ -40,16 +39,6 @@ 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 {
 	compat_dev_t		st_dev;	/* dev_t is 32 bits on parisc */
 	compat_ino_t		st_ino;	/* 32 bits */
arch/powerpc/include/asm/compat.h +0 -11
index 8a2aecfe9b02..517dbcfc2240 100644
@@ -17,7 +17,6 @@
 
 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;
@@ -45,16 +44,6 @@ 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 {
 	compat_dev_t	st_dev;
 	compat_ino_t	st_ino;
arch/powerpc/kernel/asm-offsets.c +1 -1
index a6c72f720e8a..18a32e3c3718 100644
@@ -42,7 +42,7 @@
 #include <asm/paca.h>
 #include <asm/lppaca.h>
 #include <asm/cache.h>
-#include <asm/compat.h>
+#include <linux/compat.h>
 #include <asm/mmu.h>
 #include <asm/hvcall.h>
 #include <asm/xics.h>
arch/powerpc/oprofile/backtrace.c +1 -1
index ecc66d5f02c9..11ff763c03ad 100644
@@ -11,7 +11,7 @@
 #include <linux/sched.h>
 #include <asm/processor.h>
 #include <linux/uaccess.h>
-#include <asm/compat.h>
+#include <linux/compat.h>
 #include <asm/oprofile_impl.h>
 
 #define STACK_SP(STACK)		*(STACK)
arch/s390/hypfs/hypfs_sprp.c +0 -1
index ae0ed8dd5f1b..5d85a039391c 100644
@@ -13,7 +13,6 @@
 #include <linux/string.h>
 #include <linux/types.h>
 #include <linux/uaccess.h>
-#include <asm/compat.h>
 #include <asm/diag.h>
 #include <asm/sclp.h>
 #include "hypfs.h"
arch/s390/include/asm/compat.h +0 -11
index 5e6a63641a5f..7e587eb9fb58 100644
@@ -53,7 +53,6 @@
 
 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 u16		__compat_uid_t;
@@ -97,16 +96,6 @@ typedef struct {
 	u32 gprs_high[NUM_GPRS];
 } s390_compat_regs_high;
 
-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 {
 	compat_dev_t	st_dev;
 	u16		__pad1;
arch/s390/include/asm/elf.h +1 -2
index 1a61b1b997f2..3e15c77c7c9a 100644
@@ -126,7 +126,7 @@
  */
 
 #include <asm/ptrace.h>
-#include <asm/compat.h>
+#include <linux/compat.h>
 #include <asm/syscall.h>
 #include <asm/user.h>
 
@@ -136,7 +136,6 @@ typedef s390_regs elf_gregset_t;
 typedef s390_fp_regs compat_elf_fpregset_t;
 typedef s390_compat_regs compat_elf_gregset_t;
 
-#include <linux/compat.h>
 #include <linux/sched/mm.h>	/* for task_struct */
 #include <asm/mmu_context.h>
 
arch/s390/kvm/priv.c +0 -1
index 0714bfa56da0..5db2e40479aa 100644
@@ -26,7 +26,6 @@
 #include <asm/gmap.h>
 #include <asm/io.h>
 #include <asm/ptrace.h>
-#include <asm/compat.h>
 #include <asm/sclp.h>
 #include "gaccess.h"
 #include "kvm-s390.h"
arch/s390/pci/pci_clp.c +0 -1
index 93cd0f1ca12b..19b2d2a9b43d 100644
@@ -19,7 +19,6 @@
 #include <linux/uaccess.h>
 #include <asm/pci_debug.h>
 #include <asm/pci_clp.h>
-#include <asm/compat.h>
 #include <asm/clp.h>
 #include <uapi/asm/clp.h>
 
arch/sparc/include/asm/compat.h +0 -11
index fa38c78de0f0..5b49b6a66cdb 100644
@@ -11,7 +11,6 @@
 
 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 u16		__compat_uid_t;
@@ -39,16 +38,6 @@ 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 {
 	compat_dev_t	st_dev;
 	compat_ino_t	st_ino;
arch/tile/include/asm/compat.h +0 -11
index 62a7b83025dd..21ab5b80f5c7 100644
@@ -29,7 +29,6 @@ typedef u32		compat_ulong_t;
 typedef u32		compat_size_t;
 typedef s32		compat_ssize_t;
 typedef s32		compat_off_t;
-typedef s32		compat_time_t;
 typedef s32		compat_clock_t;
 typedef u32		compat_ino_t;
 typedef u32		compat_caddr_t;
@@ -59,16 +58,6 @@ typedef unsigned long compat_elf_greg_t;
 #define COMPAT_ELF_NGREG (sizeof(struct pt_regs) / sizeof(compat_elf_greg_t))
 typedef compat_elf_greg_t compat_elf_gregset_t[COMPAT_ELF_NGREG];
 
-struct compat_timespec {
-	compat_time_t	tv_sec;
-	s32		tv_nsec;
-};
-
-struct compat_timeval {
-	compat_time_t	tv_sec;
-	s32		tv_usec;
-};
-
 #define compat_stat stat
 #define compat_statfs statfs
 
arch/x86/events/core.c +1 -1
index 140d33288e78..6b8961912781 100644
@@ -2391,7 +2391,7 @@ static unsigned long get_segment_base(unsigned int segment)
 
 #ifdef CONFIG_IA32_EMULATION
 
-#include <asm/compat.h>
+#include <linux/compat.h>
 
 static inline int
 perf_callchain_user32(struct pt_regs *regs, struct perf_callchain_entry_ctx *entry)
arch/x86/include/asm/compat.h +0 -11
index 2cbd75dd2fd3..160804ed875e 100644
@@ -17,7 +17,6 @@
 
 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 u16		__compat_uid_t;
@@ -46,16 +45,6 @@ typedef u32		compat_u32;
 typedef u64 __attribute__((aligned(4))) 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 {
 	compat_dev_t	st_dev;
 	u16		__pad1;
arch/x86/include/asm/ftrace.h +1 -1
index 09ad88572746..db25aa15b705 100644
@@ -49,7 +49,7 @@ int ftrace_int3_handler(struct pt_regs *regs);
 #if !defined(__ASSEMBLY__) && !defined(COMPILE_OFFSETS)
 
 #if defined(CONFIG_FTRACE_SYSCALLS) && defined(CONFIG_IA32_EMULATION)
-#include <asm/compat.h>
+#include <linux/compat.h>
 
 /*
  * Because ia32 syscalls do not map to x86_64 syscall numbers
arch/x86/include/asm/sys_ia32.h +1 -1
index 82c34ee25a65..8527b26ad36f 100644
@@ -16,7 +16,7 @@
 #include <linux/linkage.h>
 #include <linux/types.h>
 #include <linux/signal.h>
-#include <asm/compat.h>
+#include <linux/compat.h>
 #include <asm/ia32.h>
 
 /* ia32/sys_ia32.c */
arch/x86/kernel/sys_x86_64.c +1 -1
index 676774b9bb8d..9d8ea652e31c 100644
@@ -19,7 +19,7 @@
 #include <linux/elf.h>
 
 #include <asm/elf.h>
-#include <asm/compat.h>
+#include <linux/compat.h>
 #include <asm/ia32.h>
 #include <asm/syscalls.h>
 #include <asm/mpx.h>
drivers/s390/block/dasd_ioctl.c +0 -1
index 7bdc6aaa0ba3..2016e0ed5865 100644
@@ -18,7 +18,6 @@
 #include <linux/fs.h>
 #include <linux/blkpg.h>
 #include <linux/slab.h>
-#include <asm/compat.h>
 #include <asm/ccwdev.h>
 #include <asm/schid.h>
 #include <asm/cmb.h>
drivers/s390/char/fs3270.c +0 -1
index 61822480a2a0..16a4e8528bbc 100644
@@ -19,7 +19,6 @@
 #include <linux/slab.h>
 #include <linux/types.h>
 
-#include <asm/compat.h>
 #include <asm/ccwdev.h>
 #include <asm/cio.h>
 #include <asm/ebcdic.h>
drivers/s390/char/sclp_ctl.c +0 -1
index a78cea0c3a09..248b5db3eaa8 100644
@@ -14,7 +14,6 @@
 #include <linux/init.h>
 #include <linux/ioctl.h>
 #include <linux/fs.h>
-#include <asm/compat.h>
 #include <asm/sclp_ctl.h>
 #include <asm/sclp.h>
 
drivers/s390/char/vmcp.c +0 -1
index 17e411c57576..948ce82a7725 100644
@@ -23,7 +23,6 @@
 #include <linux/mutex.h>
 #include <linux/cma.h>
 #include <linux/mm.h>
-#include <asm/compat.h>
 #include <asm/cpcmd.h>
 #include <asm/debug.h>
 #include <asm/vmcp.h>
drivers/s390/cio/chsc_sch.c +0 -1
index 0015729d917d..8d9f36625ba5 100644
@@ -16,7 +16,6 @@
 #include <linux/miscdevice.h>
 #include <linux/kernel_stat.h>
 
-#include <asm/compat.h>
 #include <asm/cio.h>
 #include <asm/chsc.h>
 #include <asm/isc.h>
drivers/s390/net/qeth_core_main.c +1 -1
index 6abd3bc285e4..e070adf32cd4 100644
@@ -32,7 +32,7 @@
 #include <asm/chpid.h>
 #include <asm/io.h>
 #include <asm/sysinfo.h>
-#include <asm/compat.h>
+#include <linux/compat.h>
 #include <asm/diag.h>
 #include <asm/cio.h>
 #include <asm/ccwdev.h>
include/linux/compat.h +1 -0
index b24aaf66feb4..2f79dac5ed65 100644
@@ -7,6 +7,7 @@
  */
 
 #include <linux/types.h>
+#include <linux/compat_time.h>
 
 #include <linux/stat.h>
 #include <linux/param.h>	/* for HZ */
include/linux/compat_time.h new file +19 -0
new file mode 100644
index 000000000000..56a54a1e4355
@@ -0,0 +1,19 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef _LINUX_COMPAT_TIME_H
+#define _LINUX_COMPAT_TIME_H
+
+#include <linux/types.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;
+};
+
+#endif /* _LINUX_COMPAT_TIME_H */
Signature · 1 line
2.14.1
#16 lore raw

PATCH v3 7/10 include: Add new y2038 safe __kernel_timespec

In reply to Deepa Dinamani

The new struct __kernel_timespec is similar to current internal kernel struct timespec64 on 64 bit architecture. The compat structure however is similar to below on little endian systems (padding and tv_nsec are switched for big endian systems):

typedef s32 compat_long_t;
typedef s64 compat_kernel_time64_t;

struct compat_kernel_timespec {
       compat_kernel_time64_t  tv_sec;
       compat_long_t           tv_nsec;
       compat_long_t           padding;
};

This allows for both the native and compat representations to be the same and syscalls using this type as part of their ABI can have a single entry point to both.

Note that the compat define is not included anywhere in the kernel explicitly to avoid confusion.

These types will be used by the new syscalls that will be introduced in the consequent patches.
Most of the new syscalls are just an update to the existing native ones with this new type. Hence, put this new type under an ifdef so that the architectures can define CONFIG_64BIT_TIME when they are ready to handle this switch.

---
 include/linux/time64.h                 | 10 +++++++++-
 include/uapi/asm-generic/posix_types.h |  1 +
 include/uapi/linux/time.h              |  7 +++++++
 3 files changed, 17 insertions(+), 1 deletion(-)
include/linux/time64.h +9 -1
index 93d39499838e..0d96887ba4e0 100644
@@ -2,12 +2,20 @@
 #ifndef _LINUX_TIME64_H
 #define _LINUX_TIME64_H
 
-#include <uapi/linux/time.h>
 #include <linux/math64.h>
 
 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
+#endif
+
+#include <uapi/linux/time.h>
+
 #if __BITS_PER_LONG == 64
 /* this trick allows us to optimize out timespec64_to_timespec */
 # define timespec64 timespec
include/uapi/asm-generic/posix_types.h +1 -0
index 5e6ea22bd525..f0733a26ebfc 100644
@@ -87,6 +87,7 @@ typedef struct {
 typedef __kernel_long_t	__kernel_off_t;
 typedef long long	__kernel_loff_t;
 typedef __kernel_long_t	__kernel_time_t;
+typedef long long __kernel_time64_t;
 typedef __kernel_long_t	__kernel_clock_t;
 typedef int		__kernel_timer_t;
 typedef int		__kernel_clockid_t;
include/uapi/linux/time.h +7 -0
index 53f8dd84beb5..0ad4510884b0 100644
@@ -42,6 +42,13 @@ struct itimerval {
 	struct timeval it_value;	/* current value */
 };
 
+#ifndef __kernel_timespec
+struct __kernel_timespec {
+	__kernel_time64_t       tv_sec;                 /* seconds */
+	long long               tv_nsec;                /* nanoseconds */
+};
+#endif
+
 /*
  * The IDs of the various system clocks (for POSIX.1b interval timers):
  */
Signature · 1 line
2.14.1
#18 lore raw

PATCH v3 9/10 change time types to new y2038 safe __kernel_* types

In reply to Deepa Dinamani

Change over clock_settime, clock_gettime and clock_getres syscalls to use __kernel_timespec times. This will enable changing over of these syscalls to use new y2038 safe syscalls when the architectures define the CONFIG_64BIT_TIME.

---
 include/linux/syscalls.h   | 6 +++---
 kernel/time/posix-stubs.c  | 6 +++---
 kernel/time/posix-timers.c | 6 +++---
 3 files changed, 9 insertions(+), 9 deletions(-)
include/linux/syscalls.h +3 -3
index a78186d826d7..7ac1bb9ea7da 100644
@@ -309,13 +309,13 @@ asmlinkage long sys_timer_settime(timer_t timer_id, int flags,
 				struct itimerspec __user *old_setting);
 asmlinkage long sys_timer_delete(timer_t timer_id);
 asmlinkage long sys_clock_settime(clockid_t which_clock,
-				const struct timespec __user *tp);
+				const struct __kernel_timespec __user *tp);
 asmlinkage long sys_clock_gettime(clockid_t which_clock,
-				struct timespec __user *tp);
+				struct __kernel_timespec __user *tp);
 asmlinkage long sys_clock_adjtime(clockid_t which_clock,
 				struct timex __user *tx);
 asmlinkage long sys_clock_getres(clockid_t which_clock,
-				struct timespec __user *tp);
+				struct __kernel_timespec __user *tp);
 asmlinkage long sys_clock_nanosleep(clockid_t which_clock, int flags,
 				const struct timespec __user *rqtp,
 				struct timespec __user *rmtp);
kernel/time/posix-stubs.c +3 -3
index 0645cfa93609..28c22f54d0f2 100644
@@ -49,7 +49,7 @@ SYS_NI(alarm);
  */
 
 SYSCALL_DEFINE2(clock_settime, const clockid_t, which_clock,
-		const struct timespec __user *, tp)
+		const struct __kernel_timespec __user *, tp)
 {
 	struct timespec64 new_tp;
 
@@ -80,7 +80,7 @@ int do_clock_gettime(clockid_t which_clock, struct timespec64 *tp)
 	return 0;
 }
 SYSCALL_DEFINE2(clock_gettime, const clockid_t, which_clock,
-		struct timespec __user *, tp)
+		struct __kernel_timespec __user *, tp)
 {
 	int ret;
 	struct timespec64 kernel_tp;
@@ -94,7 +94,7 @@ SYSCALL_DEFINE2(clock_gettime, const clockid_t, which_clock,
 	return 0;
 }
 
-SYSCALL_DEFINE2(clock_getres, const clockid_t, which_clock, struct timespec __user *, tp)
+SYSCALL_DEFINE2(clock_getres, const clockid_t, which_clock, struct __kernel_timespec __user *, tp)
 {
 	struct timespec64 rtn_tp = {
 		.tv_sec = 0,
kernel/time/posix-timers.c +3 -3
index 673525f98ecf..da17eb61edda 100644
@@ -1039,7 +1039,7 @@ void exit_itimers(struct signal_struct *sig)
 }
 
 SYSCALL_DEFINE2(clock_settime, const clockid_t, which_clock,
-		const struct timespec __user *, tp)
+		const struct __kernel_timespec __user *, tp)
 {
 	const struct k_clock *kc = clockid_to_kclock(which_clock);
 	struct timespec64 new_tp;
@@ -1054,7 +1054,7 @@ SYSCALL_DEFINE2(clock_settime, const clockid_t, which_clock,
 }
 
 SYSCALL_DEFINE2(clock_gettime, const clockid_t, which_clock,
-		struct timespec __user *,tp)
+		struct __kernel_timespec __user *, tp)
 {
 	const struct k_clock *kc = clockid_to_kclock(which_clock);
 	struct timespec64 kernel_tp;
@@ -1095,7 +1095,7 @@ SYSCALL_DEFINE2(clock_adjtime, const clockid_t, which_clock,
 }
 
 SYSCALL_DEFINE2(clock_getres, const clockid_t, which_clock,
-		struct timespec __user *, tp)
+		struct __kernel_timespec __user *, tp)
 {
 	const struct k_clock *kc = clockid_to_kclock(which_clock);
 	struct timespec64 rtn_tp;
Signature · 1 line
2.14.1
#19 lore raw

PATCH v3 10/10 nanosleep: change time types to safe __kernel_* types

In reply to Deepa Dinamani

Change over clock_nanosleep syscalls to use y2038 safe __kernel_timespec times. This will enable changing over of these syscalls to use new y2038 safe syscalls when the architectures define the CONFIG_64BIT_TIME.

Note that nanosleep syscall is deprecated and does not have a plan for making it y2038 safe. But, the syscall should work as before on 64 bit machines and on 32 bit machines, the syscall works correctly until y2038 as before using the existing compat syscall version. There is no new syscall for supporting 64 bit time_t on 32 bit architectures.

---
 include/linux/restart_block.h | 7 ++-----
 include/linux/syscalls.h      | 6 +++---
 kernel/time/hrtimer.c         | 8 ++++++--
 kernel/time/posix-stubs.c     | 4 ++--
 kernel/time/posix-timers.c    | 4 ++--
 5 files changed, 15 insertions(+), 14 deletions(-)
include/linux/restart_block.h +2 -5
index bcfdb918cd81..5d83d0c1d06c 100644
@@ -7,6 +7,7 @@
 
 #include <linux/compiler.h>
 #include <linux/types.h>
+#include <linux/time64.h>
 
 struct timespec;
 struct compat_timespec;
@@ -15,9 +16,7 @@ struct pollfd;
 enum timespec_type {
 	TT_NONE		= 0,
 	TT_NATIVE	= 1,
-#ifdef CONFIG_COMPAT
 	TT_COMPAT	= 2,
-#endif
 };
 
 /*
@@ -40,10 +39,8 @@ struct restart_block {
 			clockid_t clockid;
 			enum timespec_type type;
 			union {
-				struct timespec __user *rmtp;
-#ifdef CONFIG_COMPAT
+				struct __kernel_timespec __user *rmtp;
 				struct compat_timespec __user *compat_rmtp;
-#endif
 			};
 			u64 expires;
 		} nanosleep;
include/linux/syscalls.h +3 -3
index 7ac1bb9ea7da..4df16a70b0d7 100644
@@ -254,7 +254,7 @@ asmlinkage long sys_adjtimex(struct timex __user *txc_p);
 asmlinkage long sys_times(struct tms __user *tbuf);
 
 asmlinkage long sys_gettid(void);
-asmlinkage long sys_nanosleep(struct timespec __user *rqtp, struct timespec __user *rmtp);
+asmlinkage long sys_nanosleep(struct __kernel_timespec __user *rqtp, struct __kernel_timespec __user *rmtp);
 asmlinkage long sys_alarm(unsigned int seconds);
 asmlinkage long sys_getpid(void);
 asmlinkage long sys_getppid(void);
@@ -317,8 +317,8 @@ asmlinkage long sys_clock_adjtime(clockid_t which_clock,
 asmlinkage long sys_clock_getres(clockid_t which_clock,
 				struct __kernel_timespec __user *tp);
 asmlinkage long sys_clock_nanosleep(clockid_t which_clock, int flags,
-				const struct timespec __user *rqtp,
-				struct timespec __user *rmtp);
+				const struct __kernel_timespec __user *rqtp,
+				struct __kernel_timespec __user *rmtp);
 
 asmlinkage long sys_nice(int increment);
 asmlinkage long sys_sched_setscheduler(pid_t pid, int policy,
kernel/time/hrtimer.c +6 -2
index 65cc7272d954..ee636646cc07 100644
@@ -1540,8 +1540,10 @@ long hrtimer_nanosleep(const struct timespec64 *rqtp,
 	return ret;
 }
 
-SYSCALL_DEFINE2(nanosleep, struct timespec __user *, rqtp,
-		struct timespec __user *, rmtp)
+#if !defined(CONFIG_64BIT_TIME) || defined(CONFIG_64BIT)
+
+SYSCALL_DEFINE2(nanosleep, struct __kernel_timespec __user *, rqtp,
+		struct __kernel_timespec __user *, rmtp)
 {
 	struct timespec64 tu;
 
@@ -1556,6 +1558,8 @@ SYSCALL_DEFINE2(nanosleep, struct timespec __user *, rqtp,
 	return hrtimer_nanosleep(&tu, HRTIMER_MODE_REL, CLOCK_MONOTONIC);
 }
 
+#endif
+
 #ifdef CONFIG_COMPAT_32BIT_TIME
 
 COMPAT_SYSCALL_DEFINE2(nanosleep, struct compat_timespec __user *, rqtp,
kernel/time/posix-stubs.c +2 -2
index 28c22f54d0f2..f7e7a05e651d 100644
@@ -114,8 +114,8 @@ SYSCALL_DEFINE2(clock_getres, const clockid_t, which_clock, struct __kernel_time
 }
 
 SYSCALL_DEFINE4(clock_nanosleep, const clockid_t, which_clock, int, flags,
-		const struct timespec __user *, rqtp,
-		struct timespec __user *, rmtp)
+		const struct __kernel_timespec __user *, rqtp,
+		struct __kernel_timespec __user *, rmtp)
 {
 	struct timespec64 t;
 
kernel/time/posix-timers.c +2 -2
index da17eb61edda..31ce3482884d 100644
@@ -1210,8 +1210,8 @@ static int common_nsleep(const clockid_t which_clock, int flags,
 }
 
 SYSCALL_DEFINE4(clock_nanosleep, const clockid_t, which_clock, int, flags,
-		const struct timespec __user *, rqtp,
-		struct timespec __user *, rmtp)
+		const struct __kernel_timespec __user *, rqtp,
+		struct __kernel_timespec __user *, rmtp)
 {
 	const struct k_clock *kc = clockid_to_kclock(which_clock);
 	struct timespec64 t;
Signature · 1 line
2.14.1
#1 lore raw

PATCH v3 1/10 compat: Make compat helpers independent of CONFIG_COMPAT

In reply to Deepa Dinamani

Many of the compat time syscalls are also repurposed as 32 bit native syscalls to provide backward compatibility while adding new y2038 safe sycalls.
Enabling the helpers makes this possible.

---
 include/linux/compat.h | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)
include/linux/compat.h +6 -2
index 0fc36406f32c..b24aaf66feb4 100644
@@ -8,8 +8,6 @@
 
 #include <linux/types.h>
 
-#ifdef CONFIG_COMPAT
-
 #include <linux/stat.h>
 #include <linux/param.h>	/* for HZ */
 #include <linux/sem.h>
@@ -19,9 +17,11 @@
 #include <linux/aio_abi.h>	/* for aio_context_t */
 #include <linux/unistd.h>
 
+#ifdef CONFIG_COMPAT
 #include <asm/compat.h>
 #include <asm/siginfo.h>
 #include <asm/signal.h>
+#endif
 
 #ifndef COMPAT_USE_64BIT_TIME
 #define COMPAT_USE_64BIT_TIME 0
@@ -58,6 +58,8 @@
 	}								\
 	static inline long C_SYSC##name(__MAP(x,__SC_DECL,__VA_ARGS__))
 
+#ifdef CONFIG_COMPAT
+
 #ifndef compat_user_stack_pointer
 #define compat_user_stack_pointer() current_user_stack_pointer()
 #endif
@@ -771,7 +773,9 @@ static inline struct compat_timeval ns_to_compat_timeval(s64 nsec)
 #else /* !CONFIG_COMPAT */
 
 #define is_compat_task() (0)
+#ifndef in_compat_syscall
 static inline bool in_compat_syscall(void) { return false; }
+#endif
 
 #endif /* CONFIG_COMPAT */
 
Signature · 1 line
2.14.1
#12 lore raw

PATCH v3 3/10 compat: enable compat_get/put_timespec64 always

In reply to Deepa Dinamani

These functions are used in the repurposed compat syscalls to provide backward compatibility for using 32 bit time_t on 32 bit systems.

---
 include/linux/compat.h      |  2 --
 include/linux/compat_time.h |  4 ++++
 kernel/compat.c             | 52 +++++++--------------------------------------
 kernel/time/time.c          | 44 ++++++++++++++++++++++++++++++++++++++
 4 files changed, 56 insertions(+), 46 deletions(-)
include/linux/compat.h +0 -2
index 2f79dac5ed65..e06f11886000 100644
@@ -168,8 +168,6 @@ extern int compat_get_timespec(struct timespec *, const void __user *);
 extern int compat_put_timespec(const struct timespec *, void __user *);
 extern int compat_get_timeval(struct timeval *, const void __user *);
 extern int compat_put_timeval(const struct timeval *, void __user *);
-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,
include/linux/compat_time.h +4 -0
index 56a54a1e4355..31f2774f1994 100644
@@ -3,6 +3,7 @@
 #define _LINUX_COMPAT_TIME_H
 
 #include <linux/types.h>
+#include <linux/time64.h>
 
 typedef s32		compat_time_t;
 
@@ -16,4 +17,7 @@ struct compat_timeval {
 	s32		tv_usec;
 };
 
+extern int compat_get_timespec64(struct timespec64 *, const void __user *);
+extern int compat_put_timespec64(const struct timespec64 *, void __user *);
+
 #endif /* _LINUX_COMPAT_TIME_H */
kernel/compat.c +8 -44

64 lines not on this page · raw message

kernel/time/time.c +44 -0

50 lines not on this page · raw message

Signature · 1 line
2.14.1
#17 lore raw

PATCH v3 8/10 fix get_timespec64() for y2038 safe compat interfaces

In reply to Deepa Dinamani

get/put_timespec64() interfaces will eventually be used for conversions between the new y2038 safe struct __kernel_timespec and struct timespec64.

The new y2038 safe syscalls have a common entry for native and compat interfaces.
On compat interfaces, the high order bits of nanoseconds should be zeroed out. This is because the application code or the libc do not guarantee zeroing of these. If used without zeroing, kernel might be at risk of using timespec values incorrectly.

Note that clearing of bits is dependent on CONFIG_64BIT_TIME for now. This is until COMPAT_USE_64BIT_TIME has been handled correctly. x86 will be the first architecture that will use the CONFIG_64BIT_TIME.

---
 include/linux/time.h |  4 ++--
 kernel/time/time.c   | 14 ++++++++++----
 2 files changed, 12 insertions(+), 6 deletions(-)
include/linux/time.h +2 -2
index 4b62a2c0a661..aed74463592d 100644
@@ -10,9 +10,9 @@
 extern struct timezone sys_tz;
 
 int get_timespec64(struct timespec64 *ts,
-		const struct timespec __user *uts);
+		const struct __kernel_timespec __user *uts);
 int put_timespec64(const struct timespec64 *ts,
-		struct timespec __user *uts);
+		struct __kernel_timespec __user *uts);
 int get_itimerspec64(struct itimerspec64 *it,
 			const struct itimerspec __user *uit);
 int put_itimerspec64(const struct itimerspec64 *it,
kernel/time/time.c +10 -4
index 02367a381f44..05121aec6897 100644
@@ -841,9 +841,9 @@ struct timespec64 timespec64_add_safe(const struct timespec64 lhs,
 }
 
 int get_timespec64(struct timespec64 *ts,
-		   const struct timespec __user *uts)
+		   const struct __kernel_timespec __user *uts)
 {
-	struct timespec kts;
+	struct __kernel_timespec kts;
 	int ret;
 
 	ret = copy_from_user(&kts, uts, sizeof(kts));
@@ -851,6 +851,11 @@ int get_timespec64(struct timespec64 *ts,
 		return -EFAULT;
 
 	ts->tv_sec = kts.tv_sec;
+
+	/* Zero out the padding for 32 bit systems or in compat mode */
+	if (IS_ENABLED(CONFIG_64BIT_TIME) && (!IS_ENABLED(CONFIG_64BIT) || in_compat_syscall()))
+		kts.tv_nsec &= 0xFFFFFFFFUL;
+
 	ts->tv_nsec = kts.tv_nsec;
 
 	return 0;
@@ -858,12 +863,13 @@ int get_timespec64(struct timespec64 *ts,
 EXPORT_SYMBOL_GPL(get_timespec64);
 
 int put_timespec64(const struct timespec64 *ts,
-		   struct timespec __user *uts)
+		   struct __kernel_timespec __user *uts)
 {
-	struct timespec kts = {
+	struct __kernel_timespec kts = {
 		.tv_sec = ts->tv_sec,
 		.tv_nsec = ts->tv_nsec
 	};
+
 	return copy_to_user(uts, &kts, sizeof(kts)) ? -EFAULT : 0;
 }
 EXPORT_SYMBOL_GPL(put_timespec64);
Signature · 1 line
2.14.1
#15 lore raw

PATCH v3 6/10 posix-clocks: Make compat syscalls depend on CONFIG_COMPAT_32BIT_TIME

In reply to Deepa Dinamani

clock_gettime, clock_settime, clock_getres and clock_nanosleep compat syscalls are also repurposed to provide backward compatibility to support 32 bit time_t on 32 bit systems.

Note that nanosleep compat syscall will also be treated the same way as the above syscalls as it shares common handler functions with clock_nanosleep. But, there is no plan to provide y2038 safe solution for nanosleep.

---
 kernel/time/hrtimer.c      |  2 +-
 kernel/time/posix-stubs.c  |  2 ++
 kernel/time/posix-timers.c | 14 ++++++++++++--
 3 files changed, 15 insertions(+), 3 deletions(-)
kernel/time/hrtimer.c +1 -1
index 6d8183b38e35..65cc7272d954 100644
@@ -1556,7 +1556,7 @@ SYSCALL_DEFINE2(nanosleep, struct timespec __user *, rqtp,
 	return hrtimer_nanosleep(&tu, HRTIMER_MODE_REL, CLOCK_MONOTONIC);
 }
 
-#ifdef CONFIG_COMPAT
+#ifdef CONFIG_COMPAT_32BIT_TIME
 
 COMPAT_SYSCALL_DEFINE2(nanosleep, struct compat_timespec __user *, rqtp,
 		       struct compat_timespec __user *, rmtp)
kernel/time/posix-stubs.c +2 -0
index b258bee13b02..0645cfa93609 100644
@@ -148,7 +148,9 @@ COMPAT_SYS_NI(timer_settime);
 COMPAT_SYS_NI(timer_gettime);
 COMPAT_SYS_NI(getitimer);
 COMPAT_SYS_NI(setitimer);
+#endif
 
+#ifdef CONFIG_COMPAT_32BIT_TIME
 COMPAT_SYSCALL_DEFINE2(clock_settime, const clockid_t, which_clock,
 		       struct compat_timespec __user *, tp)
 {
kernel/time/posix-timers.c +12 -2
index ec999f32c840..673525f98ecf 100644
@@ -1112,7 +1112,7 @@ SYSCALL_DEFINE2(clock_getres, const clockid_t, which_clock,
 	return error;
 }
 
-#ifdef CONFIG_COMPAT
+#ifdef CONFIG_COMPAT_32BIT_TIME
 
 COMPAT_SYSCALL_DEFINE2(clock_settime, clockid_t, which_clock,
 		       struct compat_timespec __user *, tp)
@@ -1147,6 +1147,10 @@ COMPAT_SYSCALL_DEFINE2(clock_gettime, clockid_t, which_clock,
 	return err;
 }
 
+#endif
+
+#ifdef CONFIG_COMPAT
+
 COMPAT_SYSCALL_DEFINE2(clock_adjtime, clockid_t, which_clock,
 		       struct compat_timex __user *, utp)
 {
@@ -1171,6 +1175,10 @@ COMPAT_SYSCALL_DEFINE2(clock_adjtime, clockid_t, which_clock,
 	return err;
 }
 
+#endif
+
+#ifdef CONFIG_COMPAT_32BIT_TIME
+
 COMPAT_SYSCALL_DEFINE2(clock_getres, clockid_t, which_clock,
 		       struct compat_timespec __user *, tp)
 {
@@ -1226,7 +1234,8 @@ SYSCALL_DEFINE4(clock_nanosleep, const clockid_t, which_clock, int, flags,
 	return kc->nsleep(which_clock, flags, &t);
 }
 
-#ifdef CONFIG_COMPAT
+#ifdef CONFIG_COMPAT_32BIT_TIME
+
 COMPAT_SYSCALL_DEFINE4(clock_nanosleep, clockid_t, which_clock, int, flags,
 		       struct compat_timespec __user *, rqtp,
 		       struct compat_timespec __user *, rmtp)
@@ -1251,6 +1260,7 @@ COMPAT_SYSCALL_DEFINE4(clock_nanosleep, clockid_t, which_clock, int, flags,
 
 	return kc->nsleep(which_clock, flags, &t);
 }
+
 #endif
 
 static const struct k_clock clock_realtime = {
Signature · 1 line
2.14.1
#14 lore raw

PATCH v3 5/10 arch: Introduce CONFIG_COMPAT_32BIT_TIME

In reply to Deepa Dinamani

Compat functions are now used to support 32 bit time_t in compat mode on 64 bit architectures and in native mode on 32 bit architectures.

Introduce COMPAT_32BIT_TIME to conditionally compile these functions.

Note that turning off 32 bit time_t support requires more changes on architecture side. For instance, architecure syscall tables need to be updated to drop support for 32 bit time_t syscalls.

---
 arch/Kconfig | 7 +++++++
 1 file changed, 7 insertions(+)
arch/Kconfig +7 -0
index 183f6293d596..cb2f68d04def 100644
@@ -884,6 +884,13 @@ config 64BIT_TIME
 	  architectures, and 64-bit architectures as part of compat syscall
 	  handling.
 
+config COMPAT_32BIT_TIME
+	def_bool (!64BIT && 64BIT_TIME) || COMPAT
+	help
+	  This enables 32 bit time_t support in addition to 64 bit time_t support.
+	  This is relevant on all 32-bit architectures, and 64-bit architectures
+	  as part of compat syscall handling.
+
 config ARCH_NO_COHERENT_DMA_MMAP
 	bool
 
Signature · 1 line
2.14.1
#13 lore raw

PATCH v3 4/10 arch: introduce CONFIG_64BIT_TIME

In reply to Deepa Dinamani

There are a total of 53 system calls (aside from ioctl) that pass a time_t or derived data structure as an argument, and in order to extend time_t to 64-bit, we have to replace them with new system calls and keep providing backwards compatibility.

To avoid adding completely new and untested code for this purpose, we introduce a new CONFIG_64BIT_TIME symbol. Every architecture that supports new 64 bit time_t syscalls enables this config.

After this is done for all architectures, the CONFIG_64BIT_TIME symbol will be deleted.

---
 arch/Kconfig | 8 ++++++++
 1 file changed, 8 insertions(+)
arch/Kconfig +8 -0
index 4b839b404dfc..183f6293d596 100644
@@ -876,6 +876,14 @@ config OLD_SIGACTION
 config COMPAT_OLD_SIGACTION
 	bool
 
+config 64BIT_TIME
+	def_bool ARCH_HAS_64BIT_TIME
+	help
+	  This should be selected by all architectures that need to support
+	  new system calls with a 64-bit time_t. This is relevant on all 32-bit
+	  architectures, and 64-bit architectures as part of compat syscall
+	  handling.
+
 config ARCH_NO_COHERENT_DMA_MMAP
 	bool
 
Signature · 1 line
2.14.1
maintainer Acked-by on v3 2/10
#3 lore raw

Re: [PATCH v3 02/10] include: Move compat_timespec/ timeval to compat_time.h

In reply to Deepa Dinamani
Quoted 11 lines · Deepa Dinamani

All the current architecture specific defines for these are the same. Refactor these common defines to a common header file.

The new common linux/compat_time.h is also useful as it will eventually be used to hold all the defines that are needed for compat time types that support non y2038 safe types. New architectures need not have to define these new types as they will only use new y2038 safe syscalls. This file can be deleted after y2038 when we stop supporting non y2038 safe syscalls.

For arm64:

maintainer
#20 lore raw
In reply to Deepa Dinamani
Quoted 24 lines · Deepa Dinamani

The series is a preparation series for individual architectures to use 64 bit time_t syscalls in compat and 32 bit emulation modes.

This is a follow up to the series Arnd Bergmann posted:
https://sourceware.org/ml/libc-alpha/2015-05/msg00070.html [1]

Big picture is as per the lwn article:
https://lwn.net/Articles/643234/ [2]

The series is directed at converting posix clock syscalls:
clock_gettime, clock_settime, clock_getres and clock_nanosleep to use a new data structure __kernel_timespec at syscall boundaries. __kernel_timespec maintains 64 bit time_t across all execution modes.

vdso will be handled as part of each architecture when they enable support for 64 bit time_t.

The compat syscalls are repurposed to provide backward compatibility by using them as native syscalls as well for 32 bit architectures. They will continue to use timespec at syscall boundaries.

CONFIG_64_BIT_TIME controls whether the syscalls use __kernel_timespec or timespec at syscall boundaries.

Quoted 8 lines

The series does the following:
1. Enable compat syscalls on 32 bit architectures.
2. Add a new __kernel_timespec type to be used as the data structure for all the new syscalls.
3. Add new config CONFIG_64BIT_TIME(intead of the CONFIG_COMPAT_TIME in
[1] and [2] to switch to new definition of __kernel_timespec. It is the same as struct timespec otherwise.
4. Add new CONFIG_32BIT_TIME to conditionally compile compat syscalls.

This looks all good to me. I think we should have this included in linux-next as soon as possible, but this probably means after -rc1 at the current point, since it's a bit late for 4.16.

I'll pick up the series into my randconfig build tree again to find possible build
time regressions. Otherwise the way I'd stage it out is to put it into my y2038 branch after -rc1 and then send a pull request to Thomas for the tip tree a week later. It seems unlikely that any major problems come up, so we could plan to address additional requests for changes by adding commits on top once it's in linux-next.

Arnd

maintainer Acked-by on v3 2/10
#4 lore raw

Re: [PATCH v3 02/10] include: Move compat_timespec/ timeval to compat_time.h

In reply to Deepa Dinamani

T24gTW9uLCAxNSBKYW4gMjAxOCAxODoxODoxMCAtMDgwMApEZWVwYSBEaW5hbWFuaSA8ZGVlcGEu a2VybmVsQGdtYWlsLmNvbT4gd3JvdGU6Cgo+IGRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRl L2FzbS9mdHJhY2UuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2Z0cmFjZS5oCj4gaW5kZXggMDlh ZDg4NTcyNzQ2Li5kYjI1YWExNWI3MDUgMTAwNjQ0Cj4gLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9h c20vZnRyYWNlLmgKPiArKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9mdHJhY2UuaAoKQWNrZWQt Ynk6IFN0ZXZlbiBSb3N0ZWR0IChWTXdhcmUpIDxyb3N0ZWR0QGdvb2RtaXMub3JnPgoKLS0gU3Rl dmUKCj4gQEAgLTQ5LDcgKzQ5LDcgQEAgaW50IGZ0cmFjZV9pbnQzX2hhbmRsZXIoc3RydWN0IHB0 X3JlZ3MgKnJlZ3MpOwo+ICAjaWYgIWRlZmluZWQoX19BU1NFTUJMWV9fKSAmJiAhZGVmaW5lZChD T01QSUxFX09GRlNFVFMpCj4gIAo+ICAjaWYgZGVmaW5lZChDT05GSUdfRlRSQUNFX1NZU0NBTExT KSAmJiBkZWZpbmVkKENPTkZJR19JQTMyX0VNVUxBVElPTikKPiAtI2luY2x1ZGUgPGFzbS9jb21w YXQuaD4KPiArI2luY2x1ZGUgPGxpbnV4L2NvbXBhdC5oPgo+ICAKPiAgLyoKPiAgICogQmVjYXVz ZSBpYTMyIHN5c2NhbGxzIGRvIG5vdCBtYXAgdG8geDg2XzY0IHN5c2NhbGwgbnVtYmVycwpfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpZMjAzOCBtYWlsaW5n IGxpc3QKWTIwMzhAbGlzdHMubGluYXJvLm9yZwpodHRwczovL2xpc3RzLmxpbmFyby5vcmcvbWFp bG1hbi9saXN0aW5mby95MjAzOAo=

Acked-by on v3 2/10
#5 lore raw

Re: [PATCH v3 02/10] include: Move compat_timespec/ timeval to compat_time.h

In reply to Deepa Dinamani
Quoted 11 lines · Deepa Dinamani

All the current architecture specific defines for these are the same. Refactor these common defines to a common header file.

The new common linux/compat_time.h is also useful as it will eventually be used to hold all the defines that are needed for compat time types that support non y2038 safe types. New architectures need not have to define these new types as they will only use new y2038 safe syscalls. This file can be deleted after y2038 when we stop supporting non y2038 safe syscalls.

...

Quoted 2 lines
 arch/mips/include/asm/compat.h    | 11 -----------
 arch/mips/kernel/signal32.c       |  2 +-

For MIPS:

Cheers
James

_______________________________________________
devel mailing list
[email protected]
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel

maintainer Acked-by on v3 2/10
#6 lore raw

Re: [PATCH v3 02/10] include: Move compat_timespec/ timeval to compat_time.h

In reply to Deepa Dinamani

T24gMTYuMDEuMjAxOCAwMzoxOCwgRGVlcGEgRGluYW1hbmkgd3JvdGU6Cj4gQWxsIHRoZSBjdXJy ZW50IGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBkZWZpbmVzIGZvciB0aGVzZQo+IGFyZSB0aGUgc2Ft ZS4gUmVmYWN0b3IgdGhlc2UgY29tbW9uIGRlZmluZXMgdG8gYSBjb21tb24KPiBoZWFkZXIgZmls ZS4KPiAKPiBUaGUgbmV3IGNvbW1vbiBsaW51eC9jb21wYXRfdGltZS5oIGlzIGFsc28gdXNlZnVs IGFzIGl0Cj4gd2lsbCBldmVudHVhbGx5IGJlIHVzZWQgdG8gaG9sZCBhbGwgdGhlIGRlZmluZXMg dGhhdAo+IGFyZSBuZWVkZWQgZm9yIGNvbXBhdCB0aW1lIHR5cGVzIHRoYXQgc3VwcG9ydCBub24g eTIwMzgKPiBzYWZlIHR5cGVzLiBOZXcgYXJjaGl0ZWN0dXJlcyBuZWVkIG5vdCBoYXZlIHRvIGRl ZmluZSB0aGVzZQo+IG5ldyB0eXBlcyBhcyB0aGV5IHdpbGwgb25seSB1c2UgbmV3IHkyMDM4IHNh ZmUgc3lzY2FsbHMuCj4gVGhpcyBmaWxlIGNhbiBiZSBkZWxldGVkIGFmdGVyIHkyMDM4IHdoZW4g d2Ugc3RvcCBzdXBwb3J0aW5nCj4gbm9uIHkyMDM4IHNhZmUgc3lzY2FsbHMuCgpGb3IgcGFyaXNj OgoKQWNrZWQtYnk6IEhlbGdlIERlbGxlciA8ZGVsbGVyQGdteC5kZT4gIyBwYXJpc2MKX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWTIwMzggbWFpbGluZyBs aXN0ClkyMDM4QGxpc3RzLmxpbmFyby5vcmcKaHR0cHM6Ly9saXN0cy5saW5hcm8ub3JnL21haWxt YW4vbGlzdGluZm8veTIwMzgK

#7 lore raw

Re: [PATCH v3 02/10] include: Move compat_timespec/ timeval to compat_time.h

In reply to Deepa Dinamani
Quoted 11 lines · Deepa Dinamani

All the current architecture specific defines for these are the same. Refactor these common defines to a common header file.

The new common linux/compat_time.h is also useful as it will eventually be used to hold all the defines that are needed for compat time types that support non y2038 safe types. New architectures need not have to define these new types as they will only use new y2038 safe syscalls. This file can be deleted after y2038 when we stop supporting non y2038 safe syscalls.

You are now include a <linux/*.h> from several asm files
(
arch/arm64/include/asm/stat.h
arch/s390/include/asm/elf.h
arch/x86/include/asm/ftrace.h
arch/x86/include/asm/sys_ia32.h
)
It works, and it is done in many places, but it looks somewhat weird. Would it make sense to have an asm-generic/compate-time.h instead? Asking for opinions here.

Quoted 4 lines

The patch also requires an operation similar to:

git grep "asm/compat\.h" | cut -d ":" -f 1 | xargs -n 1 sed -i -e "s%asm/compat.h%linux/compat.h%g"

some comments from the s390 perspective:

arch/s390/hypfs/hypfs_sprp.c

Quoted 2 lines
arch/s390/hypfs/hypfs_sprp.c +0 -0

ok.
[...]

arch/s390/include/asm/elf.h line 131

Quoted 10 lines
arch/s390/include/asm/elf.h +1 -1
@@ -126,7 +126,7 @@
  */
 
 #include <asm/ptrace.h>
-#include <asm/compat.h>
+#include <linux/compat.h>
 #include <asm/syscall.h>
 #include <asm/user.h>

see above.
[...]

arch/s390/kvm/priv.c

Quoted 2 lines
arch/s390/kvm/priv.c +0 -0

ok

arch/s390/pci/pci_clp.c

Quoted 2 lines
arch/s390/pci/pci_clp.c +0 -0

ok

drivers/s390/block/dasd_ioctl.c

Quoted 2 lines
drivers/s390/block/dasd_ioctl.c +0 -0

ok

drivers/s390/char/fs3270.c

Quoted 2 lines
drivers/s390/char/fs3270.c +0 -0

ok

drivers/s390/char/sclp_ctl.c

Quoted 2 lines
drivers/s390/char/sclp_ctl.c +0 -0

ok

drivers/s390/char/vmcp.c

Quoted 2 lines
drivers/s390/char/vmcp.c +0 -0

ok

drivers/s390/cio/chsc_sch.c

Quoted 2 lines
drivers/s390/cio/chsc_sch.c +0 -0

ok

drivers/s390/net/qeth_core_main.c line 38

Quoted 11 lines
drivers/s390/net/qeth_core_main.c +1 -1
@@ -32,7 +32,7 @@
 #include <asm/chpid.h>
 #include <asm/io.h>
 #include <asm/sysinfo.h>
-#include <asm/compat.h>
+#include <linux/compat.h>
 #include <asm/diag.h>
 #include <asm/cio.h>
 #include <asm/ccwdev.h>

Can you move that into the other includes (where all the other <linux/*> includes are.

maintainer
#8 lore raw

Re: [PATCH v3 02/10] include: Move compat_timespec/ timeval to compat_time.h

T24gTW9uLCBNYXIgNSwgMjAxOCBhdCAxMDozMCBBTSwgQ2hyaXN0aWFuIEJvcm50cmFlZ2VyCjxi b3JudHJhZWdlckBkZS5pYm0uY29tPiB3cm90ZToKPiBPbiAwMS8xNi8yMDE4IDAzOjE4IEFNLCBE ZWVwYSBEaW5hbWFuaSB3cm90ZToKPj4gQWxsIHRoZSBjdXJyZW50IGFyY2hpdGVjdHVyZSBzcGVj aWZpYyBkZWZpbmVzIGZvciB0aGVzZQo+PiBhcmUgdGhlIHNhbWUuIFJlZmFjdG9yIHRoZXNlIGNv bW1vbiBkZWZpbmVzIHRvIGEgY29tbW9uCj4+IGhlYWRlciBmaWxlLgo+Pgo+PiBUaGUgbmV3IGNv bW1vbiBsaW51eC9jb21wYXRfdGltZS5oIGlzIGFsc28gdXNlZnVsIGFzIGl0Cj4+IHdpbGwgZXZl bnR1YWxseSBiZSB1c2VkIHRvIGhvbGQgYWxsIHRoZSBkZWZpbmVzIHRoYXQKPj4gYXJlIG5lZWRl ZCBmb3IgY29tcGF0IHRpbWUgdHlwZXMgdGhhdCBzdXBwb3J0IG5vbiB5MjAzOAo+PiBzYWZlIHR5 cGVzLiBOZXcgYXJjaGl0ZWN0dXJlcyBuZWVkIG5vdCBoYXZlIHRvIGRlZmluZSB0aGVzZQo+PiBu ZXcgdHlwZXMgYXMgdGhleSB3aWxsIG9ubHkgdXNlIG5ldyB5MjAzOCBzYWZlIHN5c2NhbGxzLgo+ PiBUaGlzIGZpbGUgY2FuIGJlIGRlbGV0ZWQgYWZ0ZXIgeTIwMzggd2hlbiB3ZSBzdG9wIHN1cHBv cnRpbmcKPj4gbm9uIHkyMDM4IHNhZmUgc3lzY2FsbHMuCj4KPiBZb3UgYXJlIG5vdyBpbmNsdWRl IGEgPGxpbnV4LyouaD4gZnJvbSBzZXZlcmFsIGFzbSBmaWxlcwo+ICgKPiAgYXJjaC9hcm02NC9p bmNsdWRlL2FzbS9zdGF0LmgKPiAgYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2VsZi5oCj4gIGFyY2gv eDg2L2luY2x1ZGUvYXNtL2Z0cmFjZS5oCj4gIGFyY2gveDg2L2luY2x1ZGUvYXNtL3N5c19pYTMy LmgKPiApCj4gSXQgd29ya3MsIGFuZCBpdCBpcyBkb25lIGluIG1hbnkgcGxhY2VzLCBidXQgaXQg bG9va3Mgc29tZXdoYXQgd2VpcmQuCj4gV291bGQgaXQgbWFrZSBzZW5zZSB0byBoYXZlIGFuIGFz bS1nZW5lcmljL2NvbXBhdGUtdGltZS5oIGluc3RlYWQ/IEFza2luZyBmb3IKPiBvcGluaW9ucyBo ZXJlLgoKSSBkb24ndCB0aGluayB3ZSBoYXZlIHN1Y2ggYSBydWxlLiBJZiBhIGhlYWRlciBmaWxl IGlzIGNvbW1vbiB0byBhbGwKYXJjaGl0ZWN0dXJlcyAoaS5lLiBubyBhcmNoaXRlY3R1cmUgdXNl cyBhIGRpZmZlcmVudCBpbXBsZW1lbnRhdGlvbiksCml0IHNob3VsZCBiZSBpbiBpbmNsdWRlL2xp bnV4IHJhdGhlciB0aGFuIGluY2x1ZGUvYXNtLWdlbmVyaWMsIHJlZ2FyZGxlc3MKb2Ygd2hldGhl ciBpdCBjYW4gYmUgdXNlZCBieSBhc3NlbWJsZXIgZmlsZXMgb3Igbm90LgoKPj4gLS0tIGEvZHJp dmVycy9zMzkwL25ldC9xZXRoX2NvcmVfbWFpbi5jCj4+ICsrKyBiL2RyaXZlcnMvczM5MC9uZXQv cWV0aF9jb3JlX21haW4uYwo+PiBAQCAtMzIsNyArMzIsNyBAQAo+PiAgI2luY2x1ZGUgPGFzbS9j aHBpZC5oPgo+PiAgI2luY2x1ZGUgPGFzbS9pby5oPgo+PiAgI2luY2x1ZGUgPGFzbS9zeXNpbmZv Lmg+Cj4+IC0jaW5jbHVkZSA8YXNtL2NvbXBhdC5oPgo+PiArI2luY2x1ZGUgPGxpbnV4L2NvbXBh dC5oPgo+PiAgI2luY2x1ZGUgPGFzbS9kaWFnLmg+Cj4+ICAjaW5jbHVkZSA8YXNtL2Npby5oPgo+ PiAgI2luY2x1ZGUgPGFzbS9jY3dkZXYuaD4KPgo+IENhbiB5b3UgbW92ZSB0aGF0IGludG8gdGhl IG90aGVyIGluY2x1ZGVzICh3aGVyZSBhbGwgdGhlIG90aGVyIDxsaW51eC8qPiBpbmNsdWRlcyBh cmUuCgpHb29kIGNhdGNoLCB0aGlzIGlzIGRlZmluaXRlbHkgYSBydWxlIHdlIGhhdmUgOy0pCgog ICAgICAgQXJuZApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XwpZMjAzOCBtYWlsaW5nIGxpc3QKWTIwMzhAbGlzdHMubGluYXJvLm9yZwpodHRwczovL2xpc3Rz LmxpbmFyby5vcmcvbWFpbG1hbi9saXN0aW5mby95MjAzOAo=

#9 lore raw

Re: [PATCH v3 02/10] include: Move compat_timespec/ timeval to compat_time.h

CgpPbiAwMy8wNi8yMDE4IDAxOjQ2IFBNLCBBcm5kIEJlcmdtYW5uIHdyb3RlOgo+IE9uIE1vbiwg TWFyIDUsIDIwMTggYXQgMTA6MzAgQU0sIENocmlzdGlhbiBCb3JudHJhZWdlcgo+IDxib3JudHJh ZWdlckBkZS5pYm0uY29tPiB3cm90ZToKPj4gT24gMDEvMTYvMjAxOCAwMzoxOCBBTSwgRGVlcGEg RGluYW1hbmkgd3JvdGU6Cj4+PiBBbGwgdGhlIGN1cnJlbnQgYXJjaGl0ZWN0dXJlIHNwZWNpZmlj IGRlZmluZXMgZm9yIHRoZXNlCj4+PiBhcmUgdGhlIHNhbWUuIFJlZmFjdG9yIHRoZXNlIGNvbW1v biBkZWZpbmVzIHRvIGEgY29tbW9uCj4+PiBoZWFkZXIgZmlsZS4KPj4+Cj4+PiBUaGUgbmV3IGNv bW1vbiBsaW51eC9jb21wYXRfdGltZS5oIGlzIGFsc28gdXNlZnVsIGFzIGl0Cj4+PiB3aWxsIGV2 ZW50dWFsbHkgYmUgdXNlZCB0byBob2xkIGFsbCB0aGUgZGVmaW5lcyB0aGF0Cj4+PiBhcmUgbmVl ZGVkIGZvciBjb21wYXQgdGltZSB0eXBlcyB0aGF0IHN1cHBvcnQgbm9uIHkyMDM4Cj4+PiBzYWZl IHR5cGVzLiBOZXcgYXJjaGl0ZWN0dXJlcyBuZWVkIG5vdCBoYXZlIHRvIGRlZmluZSB0aGVzZQo+ Pj4gbmV3IHR5cGVzIGFzIHRoZXkgd2lsbCBvbmx5IHVzZSBuZXcgeTIwMzggc2FmZSBzeXNjYWxs cy4KPj4+IFRoaXMgZmlsZSBjYW4gYmUgZGVsZXRlZCBhZnRlciB5MjAzOCB3aGVuIHdlIHN0b3Ag c3VwcG9ydGluZwo+Pj4gbm9uIHkyMDM4IHNhZmUgc3lzY2FsbHMuCj4+Cj4+IFlvdSBhcmUgbm93 IGluY2x1ZGUgYSA8bGludXgvKi5oPiBmcm9tIHNldmVyYWwgYXNtIGZpbGVzCj4+ICgKPj4gIGFy Y2gvYXJtNjQvaW5jbHVkZS9hc20vc3RhdC5oCj4+ICBhcmNoL3MzOTAvaW5jbHVkZS9hc20vZWxm LmgKPj4gIGFyY2gveDg2L2luY2x1ZGUvYXNtL2Z0cmFjZS5oCj4+ICBhcmNoL3g4Ni9pbmNsdWRl L2FzbS9zeXNfaWEzMi5oCj4+ICkKPj4gSXQgd29ya3MsIGFuZCBpdCBpcyBkb25lIGluIG1hbnkg cGxhY2VzLCBidXQgaXQgbG9va3Mgc29tZXdoYXQgd2VpcmQuCj4+IFdvdWxkIGl0IG1ha2Ugc2Vu c2UgdG8gaGF2ZSBhbiBhc20tZ2VuZXJpYy9jb21wYXRlLXRpbWUuaCBpbnN0ZWFkPyBBc2tpbmcg Zm9yCj4+IG9waW5pb25zIGhlcmUuCj4gCj4gSSBkb24ndCB0aGluayB3ZSBoYXZlIHN1Y2ggYSBy dWxlLiBJZiBhIGhlYWRlciBmaWxlIGlzIGNvbW1vbiB0byBhbGwKPiBhcmNoaXRlY3R1cmVzIChp LmUuIG5vIGFyY2hpdGVjdHVyZSB1c2VzIGEgZGlmZmVyZW50IGltcGxlbWVudGF0aW9uKSwKPiBp dCBzaG91bGQgYmUgaW4gaW5jbHVkZS9saW51eCByYXRoZXIgdGhhbiBpbmNsdWRlL2FzbS1nZW5l cmljLCByZWdhcmRsZXNzCj4gb2Ygd2hldGhlciBpdCBjYW4gYmUgdXNlZCBieSBhc3NlbWJsZXIg ZmlsZXMgb3Igbm90Lgo+IAo+Pj4gLS0tIGEvZHJpdmVycy9zMzkwL25ldC9xZXRoX2NvcmVfbWFp bi5jCj4+PiArKysgYi9kcml2ZXJzL3MzOTAvbmV0L3FldGhfY29yZV9tYWluLmMKPj4+IEBAIC0z Miw3ICszMiw3IEBACj4+PiAgI2luY2x1ZGUgPGFzbS9jaHBpZC5oPgo+Pj4gICNpbmNsdWRlIDxh c20vaW8uaD4KPj4+ICAjaW5jbHVkZSA8YXNtL3N5c2luZm8uaD4KPj4+IC0jaW5jbHVkZSA8YXNt L2NvbXBhdC5oPgo+Pj4gKyNpbmNsdWRlIDxsaW51eC9jb21wYXQuaD4KPj4+ICAjaW5jbHVkZSA8 YXNtL2RpYWcuaD4KPj4+ICAjaW5jbHVkZSA8YXNtL2Npby5oPgo+Pj4gICNpbmNsdWRlIDxhc20v Y2N3ZGV2Lmg+Cj4+Cj4+IENhbiB5b3UgbW92ZSB0aGF0IGludG8gdGhlIG90aGVyIGluY2x1ZGVz ICh3aGVyZSBhbGwgdGhlIG90aGVyIDxsaW51eC8qPiBpbmNsdWRlcyBhcmUuCj4gCj4gR29vZCBj YXRjaCwgdGhpcyBpcyBkZWZpbml0ZWx5IGEgcnVsZSB3ZSBoYXZlIDstKQoKRldJVywgdGhpcyB3 YXMgYWxzbyBicm9rZW4gZm9yIAphcmNoL3g4Ni9pbmNsdWRlL2FzbS9zeXNfaWEzMi5oCgpfX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpZMjAzOCBtYWlsaW5n IGxpc3QKWTIwMzhAbGlzdHMubGluYXJvLm9yZwpodHRwczovL2xpc3RzLmxpbmFyby5vcmcvbWFp bG1hbi9saXN0aW5mby95MjAzOAo=

#10 lore raw

Re: [PATCH v3 02/10] include: Move compat_timespec/ timeval to compat_time.h

Quoted 48 lines · Christian Borntraeger
Quoted 45 lines · Arnd Bergmann
Quoted 13 lines · Christian Borntraeger
Quoted 11 lines · Deepa Dinamani

All the current architecture specific defines for these are the same. Refactor these common defines to a common header file.

The new common linux/compat_time.h is also useful as it will eventually be used to hold all the defines that are needed for compat time types that support non y2038 safe types. New architectures need not have to define these new types as they will only use new y2038 safe syscalls. This file can be deleted after y2038 when we stop supporting non y2038 safe syscalls.

Quoted 10 lines

You are now include a <linux/*.h> from several asm files
(
arch/arm64/include/asm/stat.h
arch/s390/include/asm/elf.h
arch/x86/include/asm/ftrace.h
arch/x86/include/asm/sys_ia32.h
)
It works, and it is done in many places, but it looks somewhat weird. Would it make sense to have an asm-generic/compate-time.h instead? Asking for opinions here.

I don't think we have such a rule. If a header file is common to all architectures (i.e. no architecture uses a different implementation), it should be in include/linux rather than include/asm-generic, regardless of whether it can be used by assembler files or not.

Quoted 13 lines

drivers/s390/net/qeth_core_main.c line 38

Quoted 11 lines
drivers/s390/net/qeth_core_main.c +1 -1
@@ -32,7 +32,7 @@
 #include <asm/chpid.h>
 #include <asm/io.h>
 #include <asm/sysinfo.h>
-#include <asm/compat.h>
+#include <linux/compat.h>
 #include <asm/diag.h>
 #include <asm/cio.h>
 #include <asm/ccwdev.h>

Can you move that into the other includes (where all the other <linux/*> includes are.

Quoted 4 lines
Quoted 1 line

Good catch, this is definitely a rule we have ;-)

FWIW, this was also broken for
arch/x86/include/asm/sys_ia32.h

The reason that this was done this way is because of the sed script mentioned in the commit text.
I was trying to make minimal change apart from the script so that we don't have other changes like moving the lines to keep the patch simpler.
I will fix this by hand since this is preferred.
I will post an update.

-Deepa

#11 lore raw

Re: [PATCH v3 02/10] include: Move compat_timespec/ timeval to compat_time.h

I posted the updated series. I fixed up the order of include files where I could find some order.
There have been other commits that used scripts to do such replacements and have already stomped on the order.
For example:

commit 7c0f6ba682b9c7632072ffbedf8d328c8f3c42ba
Author: Linus Torvalds <[email protected]> Replace <asm/uaccess.h> with <linux/uaccess.h> globally

-Deepa

Quoted 64 lines · Deepa Dinamani
Quoted 48 lines · Christian Borntraeger
Quoted 45 lines · Arnd Bergmann
Quoted 13 lines · Christian Borntraeger
Quoted 11 lines · Deepa Dinamani

All the current architecture specific defines for these are the same. Refactor these common defines to a common header file.

The new common linux/compat_time.h is also useful as it will eventually be used to hold all the defines that are needed for compat time types that support non y2038 safe types. New architectures need not have to define these new types as they will only use new y2038 safe syscalls. This file can be deleted after y2038 when we stop supporting non y2038 safe syscalls.

Quoted 10 lines

You are now include a <linux/*.h> from several asm files
(
arch/arm64/include/asm/stat.h
arch/s390/include/asm/elf.h
arch/x86/include/asm/ftrace.h
arch/x86/include/asm/sys_ia32.h
)
It works, and it is done in many places, but it looks somewhat weird. Would it make sense to have an asm-generic/compate-time.h instead? Asking for opinions here.

I don't think we have such a rule. If a header file is common to all architectures (i.e. no architecture uses a different implementation), it should be in include/linux rather than include/asm-generic, regardless of whether it can be used by assembler files or not.

Quoted 13 lines

drivers/s390/net/qeth_core_main.c line 38

Quoted 11 lines
drivers/s390/net/qeth_core_main.c +1 -1
@@ -32,7 +32,7 @@
 #include <asm/chpid.h>
 #include <asm/io.h>
 #include <asm/sysinfo.h>
-#include <asm/compat.h>
+#include <linux/compat.h>
 #include <asm/diag.h>
 #include <asm/cio.h>
 #include <asm/ccwdev.h>

Can you move that into the other includes (where all the other <linux/*> includes are.

Quoted 4 lines
Quoted 1 line

Good catch, this is definitely a rule we have ;-)

FWIW, this was also broken for
arch/x86/include/asm/sys_ia32.h

The reason that this was done this way is because of the sed script mentioned in the commit text.
I was trying to make minimal change apart from the script so that we don't have other changes like moving the lines to keep the patch simpler.
I will fix this by hand since this is preferred.
I will post an update.

-Deepa