diff options
author | Salvatore Bonaccorso <carnil@debian.org> | 2019-12-18 18:06:31 +0100 |
---|---|---|
committer | Salvatore Bonaccorso <carnil@debian.org> | 2019-12-18 22:50:21 +0100 |
commit | 102987a83771aa994821d4d982d06faa64c789e4 (patch) | |
tree | 3e5ab5206886ec297a1a97ce80f504d75468ed2f /debian/patches-rt/timers-Drop-expiry-lock-after-each-timer-invocation.patch | |
parent | 479cb120ecb2b3f2c4d929a7b57860248d6f79bd (diff) | |
download | linux-debian-102987a83771aa994821d4d982d06faa64c789e4.tar.gz |
[rt] Update to 5.4.3-rt1 and re-enable
Adjust for context changes due to backport of
e66b39af00f4 ("workqueue: Fix pwq ref leak in rescuer_thread()") and
def98c84b6cd ("workqueue: Fix spurious sanity check failures in
destroy_workqueue()") in 5.4.4.
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); - } |