summaryrefslogtreecommitdiff
path: root/lib/mpi/mpi-inline.h
diff options
context:
space:
mode:
authorMatt Wagantall <mattw@codeaurora.org>2015-03-26 23:19:04 -0700
committerPrasad Sodagudi <psodagud@codeaurora.org>2017-03-07 21:46:17 -0800
commit6699819715df070d4c20305647d25a820ee0e977 (patch)
treef17337547fa2e08f0dea3407f9bad3ecbd54abe6 /lib/mpi/mpi-inline.h
parent35731dbb9352cd912ffaebd273d203456f37d1da (diff)
irqchip: gic(-v3): Mask PPIs during disable_percpu_irq()
By default, when disable_percpu_irq() is called, the IRQ chip's .irq_mask() function is invoked. This is not the case for the current GIC drivers however, since integration of the following commits: c8e0c91f (arm: gic: Add irq_disable callback fixup) 1270c40f (irqchip: gic: Add arch extension to GIC v3) These changes implement .irq_disable() hooks, the presence of which alters the behavior of disable_percpu_irq(), causing .irq_disable() to be called instead of .irq_mask(). As a result, when disable_percpu_irq() is called, the PPI interrupt is no longer disabled immediately. It will be lazily disabled the next time it fires (if it fires), similar to what's done for all SPI. This lazy-disablement of PPIs can cause problems on systems where CPU hotplug puts cores into a low power state. If a CPU is hotpluged- out and collapsed, a PPI from an active peripheral may fire. Since the PPI is not masked, the CPU will receive the interrupt, waking it from its slumber. At best, this is bad for power reasons. The CPU will wake up and park itself in a loop until someone decides to intentionally hotplug-in the CPU again. At worst, the CPU will wake up when its power requirements (voltage, current) are not being considered, and the system may crash in fun and interesting ways. Revert back to the previous behaviour of masking PPIs immediately upon calling disable_percpu_irq() by adding a call to .irq_mask() from within .irq_disable(). This change only affects PPIs. APIs for raising SGIs contain other protections to prevent them from being sent to offline CPUs unintentionally. SPI are anyways migrated to other CPUs during hotplug and, in the case of GICv3, are explicitly disabled via ICC_GRPEN1_EL1 for hotplug-removed CPUs. This change addresses an issue where level-triggered arch_timer interrupts are seen to wake-up offlined CPUs. Change-Id: Id652c0ffd44c2a662a20a1308b754da672eb2b7d Signed-off-by: Matt Wagantall <mattw@codeaurora.org> Signed-off-by: Prasad Sodagudi <psodagud@codeaurora.org>
Diffstat (limited to 'lib/mpi/mpi-inline.h')
0 files changed, 0 insertions, 0 deletions