History

Merge tag 'fortglx-3.20-time' of https://git.linaro.org/people/john.stultz/linux into timers/core

Pull time updates from John Stultz for 3.20: * ktime division optimization * Expose a few more y2038-safe timekeeping interfaces * RTC core changes to address y2038

Thomas Gleixner committed 11 years ago

Commit fe31fca2 parents 9bc7491 9a4a44510 files · +63 −46Browse files

Showing the changes to drivers (4 of 10 files). Show all

Unified · Split

4 files
  1. drivers/rtc/hctosys.c +5 −13
  2. drivers/rtc/interface.c +10 −12
  3. drivers/rtc/rtc-dev.c +4 −4
  4. drivers/rtc/systohc.c +3 −3
drivers/rtc/hctosys.c+5−13
@@ -26,7 +26,7 @@ static int __init rtc_hctosys(void) · 25 unmodified lines
2626 {
2727 int err = -ENODEV;
2828 struct rtc_time tm;
29− struct timespec tv = {
29+ struct timespec64 tv64 = {
3030 .tv_nsec = NSEC_PER_SEC >> 1,
3131 };
3232 struct rtc_device *rtc = rtc_class_open(CONFIG_RTC_HCTOSYS_DEVICE);
@@ -45,25 +45,17 @@ static int __init rtc_hctosys(void) · 12 unmodified lines
4545
4646 }
4747
48− err = rtc_valid_tm(&tm);
49− if (err) {
50− dev_err(rtc->dev.parent,
51− "hctosys: invalid date/time\n");
52− goto err_invalid;
53− }
54−
55− rtc_tm_to_time(&tm, &tv.tv_sec);
48+ tv64.tv_sec = rtc_tm_to_time64(&tm);
5649
57− err = do_settimeofday(&tv);
50+ err = do_settimeofday64(&tv64);
5851
5952 dev_info(rtc->dev.parent,
6053 "setting system clock to "
61− "%d-%02d-%02d %02d:%02d:%02d UTC (%u)\n",
54+ "%d-%02d-%02d %02d:%02d:%02d UTC (%lld)\n",
6255 tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday,
6356 tm.tm_hour, tm.tm_min, tm.tm_sec,
64− (unsigned int) tv.tv_sec);
57+ (long long) tv64.tv_sec);
6558
66−err_invalid:
6759 err_read:
6860 rtc_class_close(rtc);
6961
drivers/rtc/interface.c+10−12
@@ -73,10 +73,8 @@ int rtc_set_time(struct rtc_device *rtc, struct rtc_time *tm) · 72 unmodified lines
7373 else if (rtc->ops->set_time)
7474 err = rtc->ops->set_time(rtc->dev.parent, tm);
7575 else if (rtc->ops->set_mmss) {
76− unsigned long secs;
77− err = rtc_tm_to_time(tm, &secs);
78− if (err == 0)
79− err = rtc->ops->set_mmss(rtc->dev.parent, secs);
76+ time64_t secs64 = rtc_tm_to_time64(tm);
77+ err = rtc->ops->set_mmss(rtc->dev.parent, secs64);
8078 } else
8179 err = -EINVAL;
8280
@@ -105,7 +103,7 @@ int rtc_set_mmss(struct rtc_device *rtc, unsigned long secs) · 22 unmodified lines
105103
106104 err = rtc->ops->read_time(rtc->dev.parent, &old);
107105 if (err == 0) {
108− rtc_time_to_tm(secs, &new);
106+ rtc_time64_to_tm(secs, &new);
109107
110108 /*
111109 * avoid writing when we're going to change the day of
@@ -157,7 +155,7 @@ int __rtc_read_alarm(struct rtc_device *rtc, struct rtc_wkalrm *alarm) · 45 unmodified lines
157155 int err;
158156 struct rtc_time before, now;
159157 int first_time = 1;
160− unsigned long t_now, t_alm;
158+ time64_t t_now, t_alm;
161159 enum { none, day, month, year } missing = none;
162160 unsigned days;
163161
@@ -258,8 +256,8 @@ int __rtc_read_alarm(struct rtc_device *rtc, struct rtc_wkalrm *alarm) · 94 unmodified lines
258256 }
259257
260258 /* with luck, no rollover is needed */
261− rtc_tm_to_time(&now, &t_now);
262− rtc_tm_to_time(&alarm->time, &t_alm);
259+ t_now = rtc_tm_to_time64(&now);
260+ t_alm = rtc_tm_to_time64(&alarm->time);
263261 if (t_now < t_alm)
264262 goto done;
265263
@@ -273,7 +271,7 @@ int __rtc_read_alarm(struct rtc_device *rtc, struct rtc_wkalrm *alarm) · 7 unmodified lines
273271 case day:
274272 dev_dbg(&rtc->dev, "alarm rollover: %s\n", "day");
275273 t_alm += 24 * 60 * 60;
276− rtc_time_to_tm(t_alm, &alarm->time);
274+ rtc_time64_to_tm(t_alm, &alarm->time);
277275 break;
278276
279277 /* Month rollover ... if it's the 31th, an alarm on the 3rd will
@@ -346,19 +344,19 @@ EXPORT_SYMBOL_GPL(rtc_read_alarm); · 66 unmodified lines
346344 static int __rtc_set_alarm(struct rtc_device *rtc, struct rtc_wkalrm *alarm)
347345 {
348346 struct rtc_time tm;
349− long now, scheduled;
347+ time64_t now, scheduled;
350348 int err;
351349
352350 err = rtc_valid_tm(&alarm->time);
353351 if (err)
354352 return err;
355− rtc_tm_to_time(&alarm->time, &scheduled);
353+ scheduled = rtc_tm_to_time64(&alarm->time);
356354
357355 /* Make sure we're not setting alarms in the past */
358356 err = __rtc_read_time(rtc, &tm);
359357 if (err)
360358 return err;
361− rtc_tm_to_time(&tm, &now);
359+ now = rtc_tm_to_time64(&tm);
362360 if (scheduled <= now)
363361 return -ETIME;
364362 /*
drivers/rtc/rtc-dev.c+4−4
@@ -304,12 +304,12 @@ static long rtc_dev_ioctl(struct file *file, · 303 unmodified lines
304304 * Not supported here.
305305 */
306306 {
307− unsigned long now, then;
307+ time64_t now, then;
308308
309309 err = rtc_read_time(rtc, &tm);
310310 if (err < 0)
311311 return err;
312− rtc_tm_to_time(&tm, &now);
312+ now = rtc_tm_to_time64(&tm);
313313
314314 alarm.time.tm_mday = tm.tm_mday;
315315 alarm.time.tm_mon = tm.tm_mon;
@@ -317,11 +317,11 @@ static long rtc_dev_ioctl(struct file *file, · 1 unmodified line
317317 err = rtc_valid_tm(&alarm.time);
318318 if (err < 0)
319319 return err;
320− rtc_tm_to_time(&alarm.time, &then);
320+ then = rtc_tm_to_time64(&alarm.time);
321321
322322 /* alarm may need to wrap into tomorrow */
323323 if (then < now) {
324− rtc_time_to_tm(now + 24 * 60 * 60, &tm);
324+ rtc_time64_to_tm(now + 24 * 60 * 60, &tm);
325325 alarm.time.tm_mday = tm.tm_mday;
326326 alarm.time.tm_mon = tm.tm_mon;
327327 alarm.time.tm_year = tm.tm_year;
drivers/rtc/systohc.c+3−3
@@ -20,16 +20,16 @@ · 19 unmodified lines
2020 *
2121 * If temporary failure is indicated the caller should try again 'soon'
2222 */
23−int rtc_set_ntp_time(struct timespec now)
23+int rtc_set_ntp_time(struct timespec64 now)
2424 {
2525 struct rtc_device *rtc;
2626 struct rtc_time tm;
2727 int err = -ENODEV;
2828
2929 if (now.tv_nsec < (NSEC_PER_SEC >> 1))
30− rtc_time_to_tm(now.tv_sec, &tm);
30+ rtc_time64_to_tm(now.tv_sec, &tm);
3131 else
32− rtc_time_to_tm(now.tv_sec + 1, &tm);
32+ rtc_time64_to_tm(now.tv_sec + 1, &tm);
3333
3434 rtc = rtc_class_open(CONFIG_RTC_HCTOSYS_DEVICE);
3535 if (rtc) {