diff options
Diffstat (limited to 'debian/patches-rt/timers-Drop-expiry-lock-after-each-timer-invocation.patch')
-rw-r--r-- | debian/patches-rt/timers-Drop-expiry-lock-after-each-timer-invocation.patch | 50 |
1 files changed, 0 insertions, 50 deletions
diff --git a/debian/patches-rt/timers-Drop-expiry-lock-after-each-timer-invocation.patch b/debian/patches-rt/timers-Drop-expiry-lock-after-each-timer-invocation.patch deleted file mode 100644 index 1a9f6a76f..000000000 --- a/debian/patches-rt/timers-Drop-expiry-lock-after-each-timer-invocation.patch +++ /dev/null @@ -1,50 +0,0 @@ -From: Anna-Maria Gleixner <anna-maria@linutronix.de> -Date: Thu, 10 Jan 2019 13:00:07 +0100 -Subject: [PATCH] timers: Drop expiry lock after each timer invocation -Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/5.2/older/patches-5.2.17-rt9.tar.xz - -The ->expiry_lock lock is held until every timer is expired. So if a -__del_timer_sync() caller blocks on the lock then it has to wait until -every timer callback has completed. - -Therefore drop the lock and acquire it after expiring the timer. To be -able to remove the timer, when it was expired, the running_timer struct -member has to be resetted to NULL as well. This happens after the timer -was expired. It is ok to do this lockless, because the only problem -could be that when a check is done too early, the old expired timer is -stored in there. - -Signed-off-by: Anna-Maria Gleixner <anna-maria@linutronix.de> -[bigeasy: Patch description reworded] -Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> ---- - kernel/time/timer.c | 7 ++++++- - 1 file changed, 6 insertions(+), 1 deletion(-) - ---- a/kernel/time/timer.c -+++ b/kernel/time/timer.c -@@ -1384,10 +1384,16 @@ static void expire_timers(struct timer_b - if (timer->flags & TIMER_IRQSAFE) { - raw_spin_unlock(&base->lock); - call_timer_fn(timer, fn, baseclk); -+ base->running_timer = NULL; -+ spin_unlock(&base->expiry_lock); -+ spin_lock(&base->expiry_lock); - raw_spin_lock(&base->lock); - } else { - raw_spin_unlock_irq(&base->lock); - call_timer_fn(timer, fn, baseclk); -+ base->running_timer = NULL; -+ spin_unlock(&base->expiry_lock); -+ spin_lock(&base->expiry_lock); - raw_spin_lock_irq(&base->lock); - } - } -@@ -1709,7 +1715,6 @@ static inline void __run_timers(struct t - while (levels--) - expire_timers(base, heads + levels); - } -- base->running_timer = NULL; - raw_spin_unlock_irq(&base->lock); - spin_unlock(&base->expiry_lock); - } |