From: Deepa Dinamani <deepa.kernel@gmail.com>
To: linux-kernel@vger.kernel.org
Cc: arnd@arndb.de, y2038@lists.linaro.org,
linux-fsdevel@vger.kernel.org,
John Stultz <john.stultz@linaro.org>,
Thomas Gleixner <tglx@linutronix.de>
Subject: [PATCH 1/3] time: Add missing implementation for timespec64_add_safe()
Date: Fri, 29 Apr 2016 09:39:47 -0700 [thread overview]
Message-ID: <1461947989-21926-2-git-send-email-deepa.kernel@gmail.com> (raw)
In-Reply-To: <1461947989-21926-1-git-send-email-deepa.kernel@gmail.com>
timespec64_add_safe() has been defined in time64.h for
64 bit systems.
But, 32 bit systems only have an extern function prototype defined.
Provide a definition for the above function.
The function will be necessary as part of y2038 changes.
struct timespec is not y2038 safe. All references to timespec will
be replaced by struct timespec64. The function is meant to be a
replacement for timespec_add_safe().
The implementation is similar to timespec_add_safe().
Signed-off-by: Deepa Dinamani <deepa.kernel@gmail.com>
Cc: John Stultz <john.stultz@linaro.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
---
include/linux/time64.h | 4 +---
kernel/time/time.c | 25 +++++++++++++++++++++++++
2 files changed, 26 insertions(+), 3 deletions(-)
diff --git a/include/linux/time64.h b/include/linux/time64.h
index 367d5af..1778937 100644
--- a/include/linux/time64.h
+++ b/include/linux/time64.h
@@ -136,13 +136,11 @@ extern void set_normalized_timespec64(struct timespec64 *ts, time64_t sec, s64 n
/*
* timespec64_add_safe assumes both values are positive and checks for
- * overflow. It will return TIME_T_MAX if the returned value would be
- * smaller then either of the arguments.
+ * overflow. It will return TIME64_MAX in case of overflow.
*/
extern struct timespec64 timespec64_add_safe(const struct timespec64 lhs,
const struct timespec64 rhs);
-
static inline struct timespec64 timespec64_add(struct timespec64 lhs,
struct timespec64 rhs)
{
diff --git a/kernel/time/time.c b/kernel/time/time.c
index be115b0..558f5fe 100644
--- a/kernel/time/time.c
+++ b/kernel/time/time.c
@@ -769,3 +769,28 @@ struct timespec timespec_add_safe(const struct timespec lhs,
return res;
}
+
+#if __BITS_PER_LONG != 64
+
+/*
+ * Add two timespec64 values and do a safety check for overflow.
+ * It's assumed that both values are valid (>= 0).
+ * And, each timespec64 is in normalized form.
+ */
+struct timespec64 timespec64_add_safe(const struct timespec64 lhs,
+ const struct timespec64 rhs)
+{
+ struct timespec64 res;
+
+ set_normalized_timespec64(&res, lhs.tv_sec + rhs.tv_sec,
+ lhs.tv_nsec + rhs.tv_nsec);
+
+ if (unlikely(res.tv_sec < lhs.tv_sec || res.tv_sec < rhs.tv_sec)) {
+ res.tv_sec = TIME64_MAX;
+ res.tv_nsec = 0;
+ }
+
+ return res;
+}
+
+#endif
--
1.9.1
next prev parent reply other threads:[~2016-04-29 16:40 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-04-29 16:39 [PATCH 0/3] Use timespec64 for select like timeouts Deepa Dinamani
2016-04-29 16:39 ` Deepa Dinamani [this message]
2016-05-04 15:54 ` [PATCH 1/3] time: Add missing implementation for timespec64_add_safe() Deepa Dinamani
2016-05-04 18:31 ` John Stultz
2016-04-29 16:39 ` [PATCH 2/3] fs: poll/select/recvmmsg: use timespec64 for timeout events Deepa Dinamani
2016-05-04 19:24 ` [RESEND PATCH " Deepa Dinamani
2016-05-04 20:04 ` John Stultz
2016-05-04 21:08 ` [Y2038] " Arnd Bergmann
2016-05-04 23:51 ` Andrew Morton
2016-05-05 0:01 ` John Stultz
2016-05-06 19:45 ` David Miller
2016-04-29 16:39 ` [PATCH 3/3] time: Remove timespec_add_safe() Deepa Dinamani
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1461947989-21926-2-git-send-email-deepa.kernel@gmail.com \
--to=deepa.kernel@gmail.com \
--cc=arnd@arndb.de \
--cc=john.stultz@linaro.org \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=tglx@linutronix.de \
--cc=y2038@lists.linaro.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox