diff options
| author | Al Viro <[email protected]> | 2017-06-07 09:42:31 +0100 |
|---|---|---|
| committer | Thomas Gleixner <[email protected]> | 2017-06-14 00:00:42 +0200 |
| commit | edbeda46322fbcb15af2d2d0f2daffb0cd349a5a (patch) | |
| tree | a4aa5436d4e5dcce6f4d041d13c521e1660331b7 /include/linux/restart_block.h | |
| parent | 99e6c0e6ec349575886ca7daffc9cb7ec583176f (diff) | |
time/posix-timers: Move the compat copyouts to the nanosleep implementations
Turn restart_block.nanosleep.{rmtp,compat_rmtp} into a tagged union (kind =
1 -> native, kind = 2 -> compat, kind = 0 -> nothing) and make the places
doing actual copyout handle compat as well as native (that will become a
helper in the next commit). Result: compat wrappers, messing with
reassignments, etc. are gone.
[ tglx: Folded in a variant of Peter Zijlstras enum patch ]
Signed-off-by: Al Viro <[email protected]>
Signed-off-by: Thomas Gleixner <[email protected]>
Cc: John Stultz <[email protected]>
Cc: Peter Zijlstra <[email protected]>
Link: http://lkml.kernel.org/r/[email protected]
Diffstat (limited to 'include/linux/restart_block.h')
| -rw-r--r-- | include/linux/restart_block.h | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/include/linux/restart_block.h b/include/linux/restart_block.h index 0d905d8ec553..19df8422606c 100644 --- a/include/linux/restart_block.h +++ b/include/linux/restart_block.h @@ -11,6 +11,14 @@ struct timespec; struct compat_timespec; struct pollfd; +enum timespec_type { + TT_NONE = 0, + TT_NATIVE = 1, +#ifdef CONFIG_COMPAT + TT_COMPAT = 2, +#endif +}; + /* * System call restart block. */ @@ -29,10 +37,13 @@ struct restart_block { /* For nanosleep */ struct { clockid_t clockid; - struct timespec __user *rmtp; + enum timespec_type type; + union { + struct timespec __user *rmtp; #ifdef CONFIG_COMPAT - struct compat_timespec __user *compat_rmtp; + struct compat_timespec __user *compat_rmtp; #endif + }; u64 expires; } nanosleep; /* For poll */ |
