diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2019-05-06 16:45:04 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2019-05-06 16:45:04 -0400 |
commit | 2f1835dffa949f560dfa3ed63c0bfc10944b461c (patch) | |
tree | 4bf591f7f36c03ae2a8a9306bb92ce29b47eae18 /kernel/irq/manage.c | |
parent | d90dcc1f14555c62a32bc15c86c66d1d5444b5cb (diff) | |
parent | 471ba0e686cb13752bc1ff3216c54b69a2d250ea (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.c | 4 |
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 | } |