On Tuesday 28 April 2015 16:05:43 Baolin Wang wrote:
This patch introduces the 'struct itimerspec64' for 64bit to replace itimerspec, and also introduces the conversion methods: itimerspec64_to_itimerspec() and itimerspec_to_itimerspec64(), that makes itimerspec ready for 2038 year.
Signed-off-by: Baolin Wang baolin.wang@linaro.org
include/linux/time64.h | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+)
diff --git a/include/linux/time64.h b/include/linux/time64.h index a383147..031b69a 100644 --- a/include/linux/time64.h +++ b/include/linux/time64.h @@ -11,11 +11,18 @@ typedef __s64 time64_t; */ #if __BITS_PER_LONG == 64 # define timespec64 timespec +#define itimerspec64 itimerspec #else struct timespec64 { time64_t tv_sec; /* seconds */ long tv_nsec; /* nanoseconds */ };
+struct itimerspec64 {
- struct timespec64 it_interval; /* timer period */
- struct timespec64 it_value; /* timer expiration */
+};
#endif
This part looks ok now, it's what Thomas suggested
/* Parameters used to convert the timespec values: */ @@ -187,4 +194,22 @@ static __always_inline void timespec64_add_ns(struct timespec64 *a, u64 ns) #endif +static inline struct itimerspec itimerspec64_to_itimerspec(struct itimerspec64 *its64) +{
- struct itimerspec ret;
- ret.it_interval = timespec64_to_timespec(its64->it_interval);
- ret.it_value = timespec64_to_timespec(its64->it_value);
- return ret;
+}
+static inline struct itimerspec64 itimerspec_to_itimerspec64(struct itimerspec *its) +{
- struct itimerspec64 ret;
- ret.it_interval = timespec_to_timespec64(its->it_interval);
- ret.it_value = timespec_to_timespec64(its->it_value);
- return ret;
+}
#endif /* _LINUX_TIME64_H */
However here you forgot to adapt to the change above. While this code does the right think on 64-bit, it would be more efficient to use assignment or memcpy here for the case that itimerspec and itimerspec64 are defined to be the same.
Arnd