diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2017-12-31 15:30:34 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2017-12-31 15:30:34 -0500 |
commit | cea92e843e40452c08ba313abc39f59efbb4c29c (patch) | |
tree | 1c4352defd3a322e5b6efcafe3598bca698aaf5e /lib/timerqueue.c | |
parent | 8d517bdfb57154b8a11d7f1682ecc0f79abf8e02 (diff) | |
parent | 9f4533cd7334235cd4c9b9fb1b0b8791e2ba01a7 (diff) |
Merge branch 'timers-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull timer fixes from Thomas Gleixner:
"A pile of fixes for long standing issues with the timer wheel and the
NOHZ code:
- Prevent timer base confusion accross the nohz switch, which can
cause unlocked access and data corruption
- Reinitialize the stale base clock on cpu hotplug to prevent subtle
side effects including rollovers on 32bit
- Prevent an interrupt storm when the timer softirq is already
pending caused by tick_nohz_stop_sched_tick()
- Move the timer start tracepoint to a place where it actually makes
sense
- Add documentation to timerqueue functions as they caused confusion
several times now"
* 'timers-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
timerqueue: Document return values of timerqueue_add/del()
timers: Invoke timer_start_debug() where it makes sense
nohz: Prevent a timer interrupt storm in tick_nohz_stop_sched_tick()
timers: Reinitialize per cpu bases on hotplug
timers: Use deferrable base independent of base::nohz_active
Diffstat (limited to 'lib/timerqueue.c')
-rw-r--r-- | lib/timerqueue.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/lib/timerqueue.c b/lib/timerqueue.c index 4a720ed4fdaf..0d54bcbc8170 100644 --- a/lib/timerqueue.c +++ b/lib/timerqueue.c | |||
@@ -33,8 +33,9 @@ | |||
33 | * @head: head of timerqueue | 33 | * @head: head of timerqueue |
34 | * @node: timer node to be added | 34 | * @node: timer node to be added |
35 | * | 35 | * |
36 | * Adds the timer node to the timerqueue, sorted by the | 36 | * Adds the timer node to the timerqueue, sorted by the node's expires |
37 | * node's expires value. | 37 | * value. Returns true if the newly added timer is the first expiring timer in |
38 | * the queue. | ||
38 | */ | 39 | */ |
39 | bool timerqueue_add(struct timerqueue_head *head, struct timerqueue_node *node) | 40 | bool timerqueue_add(struct timerqueue_head *head, struct timerqueue_node *node) |
40 | { | 41 | { |
@@ -70,7 +71,8 @@ EXPORT_SYMBOL_GPL(timerqueue_add); | |||
70 | * @head: head of timerqueue | 71 | * @head: head of timerqueue |
71 | * @node: timer node to be removed | 72 | * @node: timer node to be removed |
72 | * | 73 | * |
73 | * Removes the timer node from the timerqueue. | 74 | * Removes the timer node from the timerqueue. Returns true if the queue is |
75 | * not empty after the remove. | ||
74 | */ | 76 | */ |
75 | bool timerqueue_del(struct timerqueue_head *head, struct timerqueue_node *node) | 77 | bool timerqueue_del(struct timerqueue_head *head, struct timerqueue_node *node) |
76 | { | 78 | { |