aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/irq/manage.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2019-05-06 16:45:04 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2019-05-06 16:45:04 -0400
commit2f1835dffa949f560dfa3ed63c0bfc10944b461c (patch)
tree4bf591f7f36c03ae2a8a9306bb92ce29b47eae18 /kernel/irq/manage.c
parentd90dcc1f14555c62a32bc15c86c66d1d5444b5cb (diff)
parent471ba0e686cb13752bc1ff3216c54b69a2d250ea (diff)
Merge branch 'irq-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull irq updates from Ingo Molnar: "The changes in this cycle were: - Remove the irq timings/variance statistics code that tried to predict when the next interrupt would occur, which didn't work out as hoped and is replaced by another mechanism. - This new mechanism is the 'array suffix computation' estimate, which is superior to the previous one as it can detect not just a single periodic pattern, but independent periodic patterns along a log-2 scale of bucketing and exponential moving average. The comments are longer than the code - and it works better at predicting various complex interrupt patterns from real-world devices than the previous estimate. - avoid IRQ-work self-IPIs on the local CPU - fix work-list corruption in irq_set_affinity_notifier()" * 'irq-core-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: irq_work: Do not raise an IPI when queueing work on the local CPU genirq/devres: Use struct_size() in devm_kzalloc() genirq/timings: Add array suffix computation code genirq/timings: Remove variance computation code genirq: Prevent use-after-free and work list corruption
Diffstat (limited to 'kernel/irq/manage.c')
-rw-r--r--kernel/irq/manage.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/kernel/irq/manage.c b/kernel/irq/manage.c
index 1401afa0d58a..53a081392115 100644
--- a/kernel/irq/manage.c
+++ b/kernel/irq/manage.c
@@ -357,8 +357,10 @@ irq_set_affinity_notifier(unsigned int irq, struct irq_affinity_notify *notify)
357 desc->affinity_notify = notify; 357 desc->affinity_notify = notify;
358 raw_spin_unlock_irqrestore(&desc->lock, flags); 358 raw_spin_unlock_irqrestore(&desc->lock, flags);
359 359
360 if (old_notify) 360 if (old_notify) {
361 cancel_work_sync(&old_notify->work);
361 kref_put(&old_notify->kref, old_notify->release); 362 kref_put(&old_notify->kref, old_notify->release);
363 }
362 364
363 return 0; 365 return 0;
364} 366}