projects
/
platform
/
kernel
/
linux-rpi.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
hrtimer: Add bases argument to clock_was_set()
[platform/kernel/linux-rpi.git]
/
kernel
/
time
/
timekeeping.c
diff --git
a/kernel/time/timekeeping.c
b/kernel/time/timekeeping.c
index
8a364aa
..
b348749
100644
(file)
--- a/
kernel/time/timekeeping.c
+++ b/
kernel/time/timekeeping.c
@@
-1323,8
+1323,8
@@
out:
write_seqcount_end(&tk_core.seq);
raw_spin_unlock_irqrestore(&timekeeper_lock, flags);
write_seqcount_end(&tk_core.seq);
raw_spin_unlock_irqrestore(&timekeeper_lock, flags);
- /*
s
ignal hrtimers about time change */
- clock_was_set();
+ /*
S
ignal hrtimers about time change */
+ clock_was_set(
CLOCK_SET_WALL
);
if (!ret)
audit_tk_injoffset(ts_delta);
if (!ret)
audit_tk_injoffset(ts_delta);
@@
-1371,8
+1371,8
@@
error: /* even if we error out, we forwarded the time, so call update */
write_seqcount_end(&tk_core.seq);
raw_spin_unlock_irqrestore(&timekeeper_lock, flags);
write_seqcount_end(&tk_core.seq);
raw_spin_unlock_irqrestore(&timekeeper_lock, flags);
- /*
s
ignal hrtimers about time change */
- clock_was_set();
+ /*
S
ignal hrtimers about time change */
+ clock_was_set(
CLOCK_SET_WALL
);
return ret;
}
return ret;
}
@@
-1746,8
+1746,8
@@
void timekeeping_inject_sleeptime64(const struct timespec64 *delta)
write_seqcount_end(&tk_core.seq);
raw_spin_unlock_irqrestore(&timekeeper_lock, flags);
write_seqcount_end(&tk_core.seq);
raw_spin_unlock_irqrestore(&timekeeper_lock, flags);
- /*
s
ignal hrtimers about time change */
- clock_was_set();
+ /*
S
ignal hrtimers about time change */
+ clock_was_set(
CLOCK_SET_WALL | CLOCK_SET_BOOT
);
}
#endif
}
#endif
@@
-1810,8
+1810,10
@@
void timekeeping_resume(void)
touch_softlockup_watchdog();
touch_softlockup_watchdog();
+ /* Resume the clockevent device(s) and hrtimers */
tick_resume();
tick_resume();
- hrtimers_resume();
+ /* Notify timerfd as resume is equivalent to clock_was_set() */
+ timerfd_resume();
}
int timekeeping_suspend(void)
}
int timekeeping_suspend(void)
@@
-2125,7
+2127,7
@@
static u64 logarithmic_accumulation(struct timekeeper *tk, u64 offset,
* timekeeping_advance - Updates the timekeeper to the current time and
* current NTP tick length
*/
* timekeeping_advance - Updates the timekeeper to the current time and
* current NTP tick length
*/
-static
void
timekeeping_advance(enum timekeeping_adv_mode mode)
+static
bool
timekeeping_advance(enum timekeeping_adv_mode mode)
{
struct timekeeper *real_tk = &tk_core.timekeeper;
struct timekeeper *tk = &shadow_timekeeper;
{
struct timekeeper *real_tk = &tk_core.timekeeper;
struct timekeeper *tk = &shadow_timekeeper;
@@
-2196,9
+2198,8
@@
static void timekeeping_advance(enum timekeeping_adv_mode mode)
write_seqcount_end(&tk_core.seq);
out:
raw_spin_unlock_irqrestore(&timekeeper_lock, flags);
write_seqcount_end(&tk_core.seq);
out:
raw_spin_unlock_irqrestore(&timekeeper_lock, flags);
- if (clock_set)
- /* Have to call _delayed version, since in irq context*/
- clock_was_set_delayed();
+
+ return !!clock_set;
}
/**
}
/**
@@
-2207,7
+2208,8
@@
out:
*/
void update_wall_time(void)
{
*/
void update_wall_time(void)
{
- timekeeping_advance(TK_ADV_TICK);
+ if (timekeeping_advance(TK_ADV_TICK))
+ clock_was_set_delayed();
}
/**
}
/**
@@
-2387,8
+2389,9
@@
int do_adjtimex(struct __kernel_timex *txc)
{
struct timekeeper *tk = &tk_core.timekeeper;
struct audit_ntp_data ad;
{
struct timekeeper *tk = &tk_core.timekeeper;
struct audit_ntp_data ad;
-
unsigned long flags
;
+
bool clock_set = false
;
struct timespec64 ts;
struct timespec64 ts;
+ unsigned long flags;
s32 orig_tai, tai;
int ret;
s32 orig_tai, tai;
int ret;
@@
-2423,6
+2426,7
@@
int do_adjtimex(struct __kernel_timex *txc)
if (tai != orig_tai) {
__timekeeping_set_tai_offset(tk, tai);
timekeeping_update(tk, TK_MIRROR | TK_CLOCK_WAS_SET);
if (tai != orig_tai) {
__timekeeping_set_tai_offset(tk, tai);
timekeeping_update(tk, TK_MIRROR | TK_CLOCK_WAS_SET);
+ clock_set = true;
}
tk_update_leap_state(tk);
}
tk_update_leap_state(tk);
@@
-2433,10
+2437,10
@@
int do_adjtimex(struct __kernel_timex *txc)
/* Update the multiplier immediately if frequency was set directly */
if (txc->modes & (ADJ_FREQUENCY | ADJ_TICK))
/* Update the multiplier immediately if frequency was set directly */
if (txc->modes & (ADJ_FREQUENCY | ADJ_TICK))
- timekeeping_advance(TK_ADV_FREQ);
+
clock_set |=
timekeeping_advance(TK_ADV_FREQ);
- if (
tai != orig_tai
)
- clock_was_set();
+ if (
clock_set
)
+ clock_was_set(
CLOCK_REALTIME
);
ntp_notify_cmos_timer();
ntp_notify_cmos_timer();