diff options
author | Chenhui Zhao <chenhui.zhao@freescale.com> | 2010-11-11 23:50:00 (GMT) |
---|---|---|
committer | Jose Rivera <German.Rivera@freescale.com> | 2014-03-31 18:59:10 (GMT) |
commit | d6c4a975da18a95198dcca0d6c9cd92dc6cbc173 (patch) | |
tree | c3f63bd2834160f4dbf17d8cdb4abea49d93d49f /drivers/net | |
parent | 4333167f3e6f071905e841aa71377b0d14d55f35 (diff) | |
download | linux-fsl-qoriq-d6c4a975da18a95198dcca0d6c9cd92dc6cbc173.tar.xz |
powerpc/mpic: supply a .disable callback
Currently MPIC provides .mask, but not .disable. This means that
effectively disable_irq() soft-disables the interrupt, and you get
a .mask call if an interrupt actually occurs.
I'm not sure if this was intended as a performance benefit (it seems common
to omit .disable on powerpc interrupt controllers, but nowhere else), but it
interacts badly with threaded/workqueue interrupts (including KVM
reflection). In such cases, where the real interrupt handler does a
disable_irq_nosync(), schedules defered handling, and returns, we get two
interrupts for every real interrupt. The second interrupt does nothing
but see that IRQ_DISABLED is set, and decide that it would be a good
idea to actually call .mask.
In the sleep case, disable all irqs of IP blocks using .disable()
when entering sleep.
Change-Id: I8f57e20a87acae115d0a8a006d31ffdedb42c295
Signed-off-by: Scott Wood <scottwood@freescale.com>
Signed-off-by: Chenhui Zhao <chenhui.zhao@freescale.com>
Reviewed-on: http://git.am.freescale.net:8181/10507
Reviewed-by: Yang Li <LeoLi@freescale.com>
Tested-by: Review Code-CDREVIEW <CDREVIEW@freescale.com>
Reviewed-by: Dongsheng Wang <dongsheng.wang@freescale.com>
Reviewed-by: Jose Rivera <German.Rivera@freescale.com>
Diffstat (limited to 'drivers/net')
0 files changed, 0 insertions, 0 deletions