Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1257949
| Path | csiph.com!eternal-september.org!feeder.eternal-september.org!aioe.org!bofh.it!news.nic.it!robomod |
|---|---|
| From | DengChao <chao.deng@linaro.org> |
| Newsgroups | linux.kernel |
| Subject | [PATCH] ntp:Fix second_overflow's input parameter type |
| Date | Wed, 28 Oct 2015 13:40:01 +0100 |
| Message-ID | <qoybf-2Bd-1@gated-at.bofh.it> (permalink) |
| X-Original-To | linux-kernel@vger.kernel.org |
| Dkim-Signature | v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro_org.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id; bh=j9Ij2gn+1MBRjdry5hrGXQ5DNAxW/7we4mBXo7Xe8zY=; b=DPPCrHi55DqtdzGbE4AfarwzguypLzFFHYFMCzOkHhAXSOMCOczBDEX2OM2jB/zoYV dHxGDOo4xacHboAJlXRedXLIQ3+qxxs45HtYbXSAheC3hQ7An2AxSL5Uo7GjMYsHcQ9a +mPi44515XaVkNjSehPCqb/5w4fM6OsIPdWDD/WHZWP/CL6jNjokOzziqAJLFe3K8/xB jysHNOVOcLqSXyBOW0nD7FwEtCb87TliPwLppYDKrA+DiPHIdJkkTFgFxZYBAQ+rfkx0 SGbArnYslmtWD53VsYhDgwpnQXfmQsZs4p3zBQSlQ77viA7UZvtd4zh72MX5PxGV+ljZ 6JSw== |
| X-Google-Dkim-Signature | v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=j9Ij2gn+1MBRjdry5hrGXQ5DNAxW/7we4mBXo7Xe8zY=; b=dwarANwhA8mFTNca/gYpw6gJB2FOgwbOpSgp/skpLZMyoR9rlOHmEXVqEQD3L5qdN1 3hX1PXWmK2SCkwI0HkbMpqlXRoKw0lPKzlDDbdDR/Qz6gdt8ALVYOnh0FgPcD0m/avTL dtVU/Mw2ek5r1K+WqyruWA8AToTnqpOjpVRQ2l0gWxRic7qQn0zOvjPFmAwzVR5x6jrn tCE953mI/lAT38XoHxqIffa6H9yy5k6TMrLRa2CfDXcJfxJK0VbBgFSHieuafuljlg0K ppCtmXfVwz/GrAZflMHX0R27Vpmxs+d3AP7SnxW6Bpjor2Mbtr3ScktqYHhWgGp/y1Pe PmxQ== |
| X-Gm-Message-State | ALoCoQkoOAgTW9uuTvixdI9ZX7dXlnoabDQOUnAjZW1izkkE1plPYVETR/IkiTRkbCPPzLzBapLK |
| X-Received | by 10.66.150.3 with SMTP id ue3mr33463722pab.57.1446035871289; Wed, 28 Oct 2015 05:37:51 -0700 (PDT) |
| X-Mailer | git-send-email 1.9.1 |
| Sender | robomod@news.nic.it |
| List-ID | <linux-kernel.vger.kernel.org> |
| X-Mailing-List | linux-kernel@vger.kernel.org |
| Approved | robomod@news.nic.it |
| Lines | 94 |
| Organization | linux.* mail to news gateway |
| X-Original-Cc | chao.deng@linaro.org |
| X-Original-Date | Wed, 28 Oct 2015 20:37:27 +0800 |
| X-Original-Message-ID | <1446035847-3699-1-git-send-email-chao.deng@linaro.org> |
| X-Original-Sender | linux-kernel-owner@vger.kernel.org |
| Xref | csiph.com linux.kernel:1257949 |
Show key headers only | View raw
The function "second_overflow" uses "unsigned long"
as its input parameter type which will overflow after
year 2106 on 32bit systems.
This patch replaces it with a time64_t type.
Since "next_ntp_leap_sec" is already calculated, we can reuse it
and avoid re-doing the division (which is now moreexpensive
with 64bit types) in the one-per-second TIME_INS/DEL checks.
Signed-off-by: DengChao <chao.deng@linaro.org>
---
kernel/time/ntp.c | 16 +++++++++-------
kernel/time/ntp_internal.h | 2 +-
2 files changed, 10 insertions(+), 8 deletions(-)
diff --git a/kernel/time/ntp.c b/kernel/time/ntp.c
index df68cb8..f4a9e18 100644
--- a/kernel/time/ntp.c
+++ b/kernel/time/ntp.c
@@ -16,6 +16,7 @@
#include <linux/mm.h>
#include <linux/module.h>
#include <linux/rtc.h>
+#include <linux/math64.h>
#include "ntp_internal.h"
@@ -390,10 +391,11 @@ ktime_t ntp_get_next_leap(void)
*
* Also handles leap second processing, and returns leap offset
*/
-int second_overflow(unsigned long secs)
+int second_overflow(time64_t secs)
{
s64 delta;
int leap = 0;
+ s32 rem;
/*
* Leap second processing. If in leap-insert state at the end of the
@@ -404,19 +406,19 @@ int second_overflow(unsigned long secs)
case TIME_OK:
if (time_status & STA_INS) {
time_state = TIME_INS;
- ntp_next_leap_sec = secs + SECS_PER_DAY -
- (secs % SECS_PER_DAY);
+ div_s64_rem(secs, SECS_PER_DAY, &rem);
+ ntp_next_leap_sec = secs + SECS_PER_DAY - rem;
} else if (time_status & STA_DEL) {
time_state = TIME_DEL;
- ntp_next_leap_sec = secs + SECS_PER_DAY -
- ((secs+1) % SECS_PER_DAY);
+ div_s64_rem(secs + 1, SECS_PER_DAY, &rem);
+ ntp_next_leap_sec = secs + SECS_PER_DAY - rem;
}
break;
case TIME_INS:
if (!(time_status & STA_INS)) {
ntp_next_leap_sec = TIME64_MAX;
time_state = TIME_OK;
- } else if (secs % SECS_PER_DAY == 0) {
+ } else if (secs == ntp_next_leap_sec) {
leap = -1;
time_state = TIME_OOP;
printk(KERN_NOTICE
@@ -427,7 +429,7 @@ int second_overflow(unsigned long secs)
if (!(time_status & STA_DEL)) {
ntp_next_leap_sec = TIME64_MAX;
time_state = TIME_OK;
- } else if ((secs + 1) % SECS_PER_DAY == 0) {
+ } else if (secs == ntp_next_leap_sec) {
leap = 1;
ntp_next_leap_sec = TIME64_MAX;
time_state = TIME_WAIT;
diff --git a/kernel/time/ntp_internal.h b/kernel/time/ntp_internal.h
index 6543050..446846b 100644
--- a/kernel/time/ntp_internal.h
+++ b/kernel/time/ntp_internal.h
@@ -6,7 +6,7 @@ extern void ntp_clear(void);
/* Returns how long ticks are at present, in ns / 2^NTP_SCALE_SHIFT. */
extern u64 ntp_tick_length(void);
extern ktime_t ntp_get_next_leap(void);
-extern int second_overflow(unsigned long secs);
+extern int second_overflow(time64_t secs);
extern int ntp_validate_timex(struct timex *);
extern int __do_adjtimex(struct timex *, struct timespec64 *, s32 *);
extern void __hardpps(const struct timespec *, const struct timespec *);
--
1.9.1
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Back to linux.kernel | Previous | Next | Find similar | Unroll thread
[PATCH] ntp:Fix second_overflow's input parameter type DengChao <chao.deng@linaro.org> - 2015-10-28 13:40 +0100
csiph-web